From 5a8519c41fbc77a98e37a6312ac1daccfe7b932f Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Thu, 2 Aug 2018 14:50:43 -0400 Subject: [PATCH 001/173] Basic APM present in monitoring UI --- .../components/apm/cluster_status/index.js | 46 ++++++ .../components/apm/detail_status/index.js | 59 ++++++++ .../public/components/apm/status_icon.js | 23 +++ .../components/cluster/overview/apm_panel.js | 87 ++++++++++++ .../components/cluster/overview/helpers.js | 1 + .../components/cluster/overview/index.js | 3 + .../monitoring/public/directives/all.js | 3 + .../directives/apm/cluster_status/index.js | 25 ++++ .../public/directives/apm/listing/index.js | 125 +++++++++++++++++ .../public/directives/apm/summary/index.js | 25 ++++ .../public/directives/main/index.html | 6 + .../public/directives/main/index.js | 2 + x-pack/plugins/monitoring/public/views/all.js | 3 + .../public/views/apm/instance/index.html | 18 +++ .../public/views/apm/instance/index.js | 70 ++++++++++ .../views/apm/instances/get_page_data.js | 29 ++++ .../public/views/apm/instances/index.html | 18 +++ .../public/views/apm/instances/index.js | 42 ++++++ .../public/views/apm/overview/index.html | 14 ++ .../public/views/apm/overview/index.js | 69 +++++++++ .../monitoring/server/lib/apm/get_apm_info.js | 53 +++++++ .../monitoring/server/lib/apm/get_apms.js | 88 ++++++++++++ .../server/lib/apm/get_apms_for_clusters.js | 132 ++++++++++++++++++ .../monitoring/server/lib/apm/index.js | 7 + .../lib/cluster/get_clusters_from_request.js | 8 ++ .../lib/cluster/get_clusters_summary.js | 2 + .../server/lib/metrics/apm/classes.js | 41 ++++++ .../server/lib/metrics/apm/metrics.js | 20 +++ .../monitoring/server/lib/metrics/index.js | 1 + .../monitoring/server/lib/metrics/metrics.js | 4 +- .../api/v1/apm/_get_apm_cluster_status.js | 14 ++ .../server/routes/api/v1/apm/index.js | 9 ++ .../server/routes/api/v1/apm/instance.js | 61 ++++++++ .../server/routes/api/v1/apm/instances.js | 55 ++++++++ .../routes/api/v1/apm/metric_set_instance.js | 9 ++ .../routes/api/v1/apm/metric_set_overview.js | 9 ++ .../server/routes/api/v1/apm/overview.js | 56 ++++++++ .../monitoring/server/routes/api/v1/ui.js | 5 + 38 files changed, 1241 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js create mode 100644 x-pack/plugins/monitoring/public/components/apm/detail_status/index.js create mode 100644 x-pack/plugins/monitoring/public/components/apm/status_icon.js create mode 100644 x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js create mode 100644 x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js create mode 100644 x-pack/plugins/monitoring/public/directives/apm/listing/index.js create mode 100644 x-pack/plugins/monitoring/public/directives/apm/summary/index.js create mode 100644 x-pack/plugins/monitoring/public/views/apm/instance/index.html create mode 100644 x-pack/plugins/monitoring/public/views/apm/instance/index.js create mode 100644 x-pack/plugins/monitoring/public/views/apm/instances/get_page_data.js create mode 100644 x-pack/plugins/monitoring/public/views/apm/instances/index.html create mode 100644 x-pack/plugins/monitoring/public/views/apm/instances/index.js create mode 100644 x-pack/plugins/monitoring/public/views/apm/overview/index.html create mode 100644 x-pack/plugins/monitoring/public/views/apm/overview/index.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apms.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/index.js create mode 100644 x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js create mode 100644 x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/_get_apm_cluster_status.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/index.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js create mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js diff --git a/x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js b/x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js new file mode 100644 index 00000000000000..422ad6d190deea --- /dev/null +++ b/x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { Fragment } from 'react'; +import { SummaryStatus } from '../../summary_status'; +import { ApmStatusIcon } from '../status_icon'; + +export function ClusterStatus({ stats }) { + const { + count: instances, + requests_total: requests, + } = stats; + + const status = instances === 0 ? 'red' : 'green'; + + const metrics = [ + { + label: 'Instances', + value: instances, + dataTestSubj: 'instances' + }, + { + label: 'Requests', + value: requests, + dataTestSubj: 'requests' + }, + ]; + + const IconComponent = ({ status }) => ( + + Status: + + ); + + return ( + + ); +} diff --git a/x-pack/plugins/monitoring/public/components/apm/detail_status/index.js b/x-pack/plugins/monitoring/public/components/apm/detail_status/index.js new file mode 100644 index 00000000000000..1632b4d49fbce9 --- /dev/null +++ b/x-pack/plugins/monitoring/public/components/apm/detail_status/index.js @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under 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 { SummaryStatus } from '../../summary_status'; +import { ApmStatusIcon } from '../status_icon'; +// import { formatMetric } from '../../../lib/format_number'; + +export function DetailStatus({ stats }) { + const { + host, + // os_memory_free: osFreeMemory, + // version, + // uptime, + // status + } = stats; + + // console.log('stats', stats); + + const metrics = [ + { + value: host, + dataTestSubj: 'host' + }, + // { + // label: 'OS Free Memory', + // value: formatMetric(osFreeMemory, 'byte'), + // dataTestSubj: 'osFreeMemory' + // }, + // { + // label: 'Version', + // value: version, + // dataTestSubj: 'version' + // }, + // { + // label: 'Uptime', + // value: formatMetric(uptime, 'time_since'), + // dataTestSubj: 'uptime' + // } + ]; + + const IconComponent = ({ status }) => ( + + Status: + + ); + + return ( + + ); +} diff --git a/x-pack/plugins/monitoring/public/components/apm/status_icon.js b/x-pack/plugins/monitoring/public/components/apm/status_icon.js new file mode 100644 index 00000000000000..49fe0faed1ad1b --- /dev/null +++ b/x-pack/plugins/monitoring/public/components/apm/status_icon.js @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { StatusIcon } from 'plugins/monitoring/components/status_icon'; + +export function ApmStatusIcon({ status, availability = true }) { + const type = (() => { + if (!availability) { + return StatusIcon.TYPES.GRAY; + } + + const statusKey = status.toUpperCase(); + return StatusIcon.TYPES[statusKey] || StatusIcon.TYPES.YELLOW; + })(); + + return ( + + ); +} diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js new file mode 100644 index 00000000000000..1f5b97a0315e0d --- /dev/null +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js @@ -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 React from 'react'; +// import { formatNumber } from 'plugins/monitoring/lib/format_number'; +import { ClusterItemContainer, HealthStatusIndicator } from './helpers'; + +import { + EuiFlexGrid, + EuiFlexItem, + EuiLink, + EuiTitle, + EuiPanel, + EuiDescriptionList, + EuiDescriptionListTitle, + EuiDescriptionListDescription, + EuiHorizontalRule, +} from '@elastic/eui'; + +export function ApmPanel(props) { + if (!props.count) { + return null; + } + + const status = props.count > 0 ? 'green' : 'red'; + + const statusIndicator = ( + + ); + + const goToKibana = () => props.changeUrl('apm'); + const goToInstances = () => props.changeUrl('apm/instances'); + + return ( + + + + + +

+ + Overview + +

+
+ + + Requests + + { props.requests_total } + + +
+
+ + + +

+ + Instances: { props.count } + +

+
+ + {/* + Connections + + { formatNumber(props.concurrent_connections, 'int_commas') } + + */} +
+
+
+
+ ); +} diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/helpers.js b/x-pack/plugins/monitoring/public/components/cluster/overview/helpers.js index c0e3a6a6b28e4c..28e3a857cf29d1 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/overview/helpers.js +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/helpers.js @@ -53,6 +53,7 @@ export function ClusterItemContainer(props) { kibana: 'logoKibana', logstash: 'logoLogstash', beats: 'logoBeats', + apm: 'logoApm' }; const icon = iconMap[props.url]; diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/index.js b/x-pack/plugins/monitoring/public/components/cluster/overview/index.js index ba166d73e449b1..67549912e53156 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/index.js @@ -12,6 +12,7 @@ import { AlertsPanel } from './alerts_panel'; import { BeatsPanel } from './beats_panel'; import { EuiPage, EuiPageBody } from '@elastic/eui'; +import { ApmPanel } from './apm_panel'; export function Overview(props) { return ( @@ -33,6 +34,8 @@ export function Overview(props) { + + ); diff --git a/x-pack/plugins/monitoring/public/directives/all.js b/x-pack/plugins/monitoring/public/directives/all.js index 98b3a10237ba2c..4ac2fc84b33387 100644 --- a/x-pack/plugins/monitoring/public/directives/all.js +++ b/x-pack/plugins/monitoring/public/directives/all.js @@ -27,3 +27,6 @@ import './kibana/summary'; import './beats/overview'; import './beats/listing'; import './beats/beat'; +import './apm/cluster_status'; +import './apm/listing'; +import './apm/summary'; diff --git a/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js b/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js new file mode 100644 index 00000000000000..59b21372691ede --- /dev/null +++ b/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js @@ -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 React from 'react'; +import { render } from 'react-dom'; +import { uiModules } from 'ui/modules'; +import { ClusterStatus } from 'plugins/monitoring/components/apm/cluster_status'; + +const uiModule = uiModules.get('monitoring/directives', []); +uiModule.directive('monitoringClusterStatusApm', () => { + return { + restrict: 'E', + scope: { + status: '=', + }, + link(scope, $el) { + scope.$watch('status', status => { + render(, $el[0]); + }); + }, + }; +}); diff --git a/x-pack/plugins/monitoring/public/directives/apm/listing/index.js b/x-pack/plugins/monitoring/public/directives/apm/listing/index.js new file mode 100644 index 00000000000000..4e58821ae44ba5 --- /dev/null +++ b/x-pack/plugins/monitoring/public/directives/apm/listing/index.js @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under 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 React from 'react'; +import { render } from 'react-dom'; +import { uiModules } from 'ui/modules'; +import { + KuiTableRowCell, + KuiTableRow +} from '@kbn/ui-framework/components'; +// import { KibanaStatusIcon } from 'plugins/monitoring/components/kibana/status_icon'; +import { MonitoringTable } from 'plugins/monitoring/components/table'; +import { SORT_ASCENDING } from '../../../../common/constants'; +// import { +// formatNumber, +// formatMetric, +// } from '../../../lib/format_number'; +import { + EuiLink, +} from '@elastic/eui'; + +const filterFields = [ 'kibana.name', 'kibana.host', 'kibana.status', 'kibana.transport_address' ]; +const columns = [ + { title: 'Name', sortKey: 'kibana.name', sortOrder: SORT_ASCENDING }, + // { title: 'Status', sortKey: 'kibana.status' }, + // { title: 'Load Average', sortKey: 'os.load.1m' }, + // { title: 'Memory Size', sortKey: 'process.memory.resident_set_size_in_bytes' }, + // { title: 'Requests', sortKey: 'requests.total' }, + // { title: 'Response Times', sortKey: 'response_times.average' } +]; +const instanceRowFactory = (scope, kbnUrl) => { + const goToInstance = uuid => { + scope.$evalAsync(() => { + kbnUrl.changePath(`/apm/instances/${uuid}`); + }); + }; + + return function KibanaRow(props) { + return ( + + +
+ + { props.beat.name } + +
+
{ get(props, 'beat.transport_address') }
+
+ {/* +
+   + { !props.availability ? 'Offline' : capitalize(props.kibana.status) } +
+
*/} + {/* +
+ { formatMetric(get(props, 'os.load["1m"]'), '0.00') } +
+
+ +
+ { formatNumber(props.process.memory.resident_set_size_in_bytes, 'byte') } +
+
+ +
+ { formatNumber(props.requests.total, 'int_commas') } +
+
+ +
+ { props.response_times.average && (formatNumber(props.response_times.average, 'int_commas') + ' ms avg') } +
+
+ { formatNumber(props.response_times.max, 'int_commas') } ms max +
+
*/} +
+ ); + }; +}; + +const uiModule = uiModules.get('monitoring/directives', []); +uiModule.directive('monitoringApmListing', kbnUrl => { + return { + restrict: 'E', + scope: { + instances: '=', + pageIndex: '=', + filterText: '=', + sortKey: '=', + sortOrder: '=', + onNewState: '=', + }, + link(scope, $el) { + + scope.$watch('instances', (instances = []) => { + const apmsTable = ( + + ); + render(apmsTable, $el[0]); + }); + + } + }; +}); diff --git a/x-pack/plugins/monitoring/public/directives/apm/summary/index.js b/x-pack/plugins/monitoring/public/directives/apm/summary/index.js new file mode 100644 index 00000000000000..ee21e76c02d598 --- /dev/null +++ b/x-pack/plugins/monitoring/public/directives/apm/summary/index.js @@ -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 React from 'react'; +import { render } from 'react-dom'; +import { uiModules } from 'ui/modules'; +import { DetailStatus } from 'plugins/monitoring/components/apm/detail_status'; + +const uiModule = uiModules.get('monitoring/directives', []); +uiModule.directive('monitoringApmSummary', () => { + return { + restrict: 'E', + scope: { + apm: '=' + }, + link(scope, $el) { + scope.$watch('apm', apm => { + render(, $el[0]); + }); + } + }; +}); diff --git a/x-pack/plugins/monitoring/public/directives/main/index.html b/x-pack/plugins/monitoring/public/directives/main/index.html index 2804898b85283a..c48775107dd4c0 100644 --- a/x-pack/plugins/monitoring/public/directives/main/index.html +++ b/x-pack/plugins/monitoring/public/directives/main/index.html @@ -60,6 +60,12 @@ {{ monitoringMain.instance }} + + -
{ get(props, 'beat.transport_address') }
+ + +
+ + { props.beat.version } + +
{/*
@@ -87,39 +84,31 @@ const instanceRowFactory = (scope, kbnUrl) => { }; }; -const uiModule = uiModules.get('monitoring/directives', []); -uiModule.directive('monitoringApmListing', kbnUrl => { - return { - restrict: 'E', - scope: { - instances: '=', - pageIndex: '=', - filterText: '=', - sortKey: '=', - sortOrder: '=', - onNewState: '=', - }, - link(scope, $el) { - - scope.$watch('instances', (instances = []) => { - const apmsTable = ( - - ); - render(apmsTable, $el[0]); - }); +export function ApmServerInstances({ apms, goToInstance }) { + const { + pageIndex, + filterText, + sortKey, + sortOrder, + onNewState, + } = apms; - } - }; -}); + return ( +
+ + +
+ ); +} diff --git a/x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js similarity index 58% rename from x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js rename to x-pack/plugins/monitoring/public/components/apm/instances/status.js index d04fbd6d05a280..0ca6ea1d481ac5 100644 --- a/x-pack/plugins/monitoring/public/components/apm/cluster_status/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -7,25 +7,32 @@ import React, { Fragment } from 'react'; import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; +import { formatMetric } from '../../../lib/format_number'; -export function ClusterStatus({ stats }) { +export function Status({ stats }) { const { - count: instances, - requests_total: requests, + beats: { + total + }, + bytesSent, + totalEvents, } = stats; - const status = instances === 0 ? 'red' : 'green'; - const metrics = [ { - label: 'Instances', - value: instances, - dataTestSubj: 'instances' + label: 'Servers', + value: total, + dataTestSubj: 'total' + }, + { + label: 'Bytes Sent', + value: formatMetric(bytesSent, 'bytes'), + dataTestSubj: 'bytesSent' }, { - label: 'Requests', - value: requests, - dataTestSubj: 'requests' + label: 'Total Events', + value: formatMetric(totalEvents), + dataTestSubj: 'totalEvents' }, ]; @@ -38,9 +45,8 @@ export function ClusterStatus({ stats }) { return ( ); } diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js new file mode 100644 index 00000000000000..5bf8189a84b0ef --- /dev/null +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { MonitoringTimeseriesContainer } from '../../chart'; +import { + EuiSpacer, + EuiPage, + EuiFlexGroup, + EuiFlexItem, + EuiPageBody, + EuiPanel +} from '@elastic/eui'; +import { Status } from '../instances/status'; + +export function ApmOverview({ + clusterStatus, + metrics, + ...props +}) { + const seriesToShow = [ + metrics.apm_cpu, + metrics.apm_os_load + ]; + + const charts = seriesToShow.map((data, index) => ( + + + + + + )); + + return ( + + + + + + {charts} + + + + ); +} diff --git a/x-pack/plugins/monitoring/public/components/apm/server/server.js b/x-pack/plugins/monitoring/public/components/apm/server/server.js deleted file mode 100644 index f667a7d3f5a2f6..00000000000000 --- a/x-pack/plugins/monitoring/public/components/apm/server/server.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { MonitoringTimeseriesContainer } from '../../chart'; -import { EuiFlexGrid, EuiFlexItem, EuiSpacer, EuiPage, EuiPageBody } from '@elastic/eui'; - -export function ApmServer({ metrics, ...props }) { - const metricsToShow = [ - metrics.beat_event_rates, - metrics.beat_fail_rates, - metrics.beat_throughput_rates, - metrics.beat_output_errors, - metrics.beat_memory, - metrics.beat_cpu_utilization, - metrics.beat_os_load, - ]; - - return ( - - - - {metricsToShow.map((metric, index) => ( - - - - - ))} - - - - ); -} diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js index 1f5b97a0315e0d..2b828e6d93ad92 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js @@ -5,7 +5,8 @@ */ import React from 'react'; -// import { formatNumber } from 'plugins/monitoring/lib/format_number'; +import { get } from 'lodash'; +import { formatMetric } from 'plugins/monitoring/lib/format_number'; import { ClusterItemContainer, HealthStatusIndicator } from './helpers'; import { @@ -21,7 +22,7 @@ import { } from '@elastic/eui'; export function ApmPanel(props) { - if (!props.count) { + if (!get(props, 'beats.total', 0) > 0) { return null; } @@ -51,10 +52,14 @@ export function ApmPanel(props) { - - Requests - - { props.requests_total } + + Total Events + + {formatMetric(props.totalEvents, '0.[0]a')} + + Bytes Sent + + {formatMetric(props.bytesSent, 'byte')} @@ -65,20 +70,13 @@ export function ApmPanel(props) {

- Instances: { props.count } + APM Servers: {props.beats.total}

- - {/* - Connections - - { formatNumber(props.concurrent_connections, 'int_commas') } - - */} diff --git a/x-pack/plugins/monitoring/public/directives/all.js b/x-pack/plugins/monitoring/public/directives/all.js index d8b48a98179aec..08993329e8363d 100644 --- a/x-pack/plugins/monitoring/public/directives/all.js +++ b/x-pack/plugins/monitoring/public/directives/all.js @@ -27,7 +27,6 @@ import './kibana/summary'; import './beats/overview'; import './beats/listing'; import './beats/beat'; -import './apm/cluster_status'; -import './apm/listing'; -import './apm/summary'; -import './apm/server'; +import './apm/instance'; +import './apm/instances'; +import './apm/overview'; diff --git a/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js b/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js deleted file mode 100644 index 59b21372691ede..00000000000000 --- a/x-pack/plugins/monitoring/public/directives/apm/cluster_status/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { render } from 'react-dom'; -import { uiModules } from 'ui/modules'; -import { ClusterStatus } from 'plugins/monitoring/components/apm/cluster_status'; - -const uiModule = uiModules.get('monitoring/directives', []); -uiModule.directive('monitoringClusterStatusApm', () => { - return { - restrict: 'E', - scope: { - status: '=', - }, - link(scope, $el) { - scope.$watch('status', status => { - render(, $el[0]); - }); - }, - }; -}); diff --git a/x-pack/plugins/monitoring/public/directives/apm/server/index.js b/x-pack/plugins/monitoring/public/directives/apm/instance/index.js similarity index 82% rename from x-pack/plugins/monitoring/public/directives/apm/server/index.js rename to x-pack/plugins/monitoring/public/directives/apm/instance/index.js index 547d25f4a9aad1..23bdee5e79590d 100644 --- a/x-pack/plugins/monitoring/public/directives/apm/server/index.js +++ b/x-pack/plugins/monitoring/public/directives/apm/instance/index.js @@ -8,11 +8,11 @@ import React from 'react'; import moment from 'moment'; import { render } from 'react-dom'; import { uiModules } from 'ui/modules'; -import { ApmServer } from 'plugins/monitoring/components/apm/server'; +import { ApmServerInstance } from 'plugins/monitoring/components/apm/instance'; import { timefilter } from 'ui/timefilter'; const uiModule = uiModules.get('monitoring/directives', []); -uiModule.directive('monitoringApmServer', () => { +uiModule.directive('monitoringApmServerInstance', () => { return { restrict: 'E', scope: { @@ -30,8 +30,8 @@ uiModule.directive('monitoringApmServer', () => { scope.$watch('data', (data = {}) => { render(( - diff --git a/x-pack/plugins/monitoring/public/directives/apm/instances/index.js b/x-pack/plugins/monitoring/public/directives/apm/instances/index.js new file mode 100644 index 00000000000000..02bfa285592a34 --- /dev/null +++ b/x-pack/plugins/monitoring/public/directives/apm/instances/index.js @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { render } from 'react-dom'; +import { uiModules } from 'ui/modules'; +import { ApmServerInstances } from '../../../components/apm/instances'; + +const uiModule = uiModules.get('monitoring/directives', []); +uiModule.directive('monitoringApmInstances', kbnUrl => { + return { + restrict: 'E', + scope: { + apms: '=', + // pageIndex: '=', + // filterText: '=', + // sortKey: '=', + // sortOrder: '=', + // onNewState: '=', + }, + link(scope, $el) { + const goToInstance = uuid => { + scope.$evalAsync(() => { + kbnUrl.changePath(`/apm/instances/${uuid}`); + }); + }; + /* + page-index="apms.pageIndex" + filter-text="apms.filterText" + sort-key="apms.sortKey" + sort-order="apms.sortOrder" + on-new-state="apms.onNewState" + instances="apms.data.apms"*/ + + scope.$watch('apms.data.apms', () => { + const apmsTable = ( + + ); + render(apmsTable, $el[0]); + }); + + } + }; +}); diff --git a/x-pack/plugins/monitoring/public/directives/apm/overview/index.js b/x-pack/plugins/monitoring/public/directives/apm/overview/index.js new file mode 100644 index 00000000000000..606c624c52018d --- /dev/null +++ b/x-pack/plugins/monitoring/public/directives/apm/overview/index.js @@ -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 React from 'react'; +import moment from 'moment'; +import { render } from 'react-dom'; +import { uiModules } from 'ui/modules'; +import { ApmOverview } from 'plugins/monitoring/components/apm/overview'; +import { timefilter } from 'ui/timefilter'; + +const uiModule = uiModules.get('monitoring/directives', []); +uiModule.directive('monitoringApmOverview', () => { + return { + restrict: 'E', + scope: { + data: '=', + }, + link(scope, $el) { + + function onBrush({ xaxis }) { + timefilter.setTime({ + from: moment(xaxis.from), + to: moment(xaxis.to), + mode: 'absolute' + }); + } + + scope.$watch('data', (data = {}) => { + render(( + + ), $el[0]); + }); + + } + }; +}); diff --git a/x-pack/plugins/monitoring/public/directives/apm/summary/index.js b/x-pack/plugins/monitoring/public/directives/apm/summary/index.js deleted file mode 100644 index ee21e76c02d598..00000000000000 --- a/x-pack/plugins/monitoring/public/directives/apm/summary/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { render } from 'react-dom'; -import { uiModules } from 'ui/modules'; -import { DetailStatus } from 'plugins/monitoring/components/apm/detail_status'; - -const uiModule = uiModules.get('monitoring/directives', []); -uiModule.directive('monitoringApmSummary', () => { - return { - restrict: 'E', - scope: { - apm: '=' - }, - link(scope, $el) { - scope.$watch('apm', apm => { - render(, $el[0]); - }); - } - }; -}); diff --git a/x-pack/plugins/monitoring/public/services/breadcrumbs_provider.js b/x-pack/plugins/monitoring/public/services/breadcrumbs_provider.js index 38819dceb878d1..d9e51ce2781763 100644 --- a/x-pack/plugins/monitoring/public/services/breadcrumbs_provider.js +++ b/x-pack/plugins/monitoring/public/services/breadcrumbs_provider.js @@ -81,6 +81,19 @@ function getBeatsBreadcrumbs(mainInstance) { return breadcrumbs; } +// generate Apm breadcrumbs +function getApmBreadcrumbs(mainInstance) { + const breadcrumbs = []; + if (mainInstance.instance) { + breadcrumbs.push(createCrumb('#/apm', 'Apm')); + breadcrumbs.push(createCrumb('#/apm/instances', 'Instances')); + } else { + // don't link to Overview when we're possibly on Overview or its sibling tabs + breadcrumbs.push(createCrumb(null, 'Apm')); + } + return breadcrumbs; +} + export function breadcrumbsProvider() { return function createBreadcrumbs(clusterName, mainInstance) { let breadcrumbs = [ createCrumb('#/home', 'Clusters', 'breadcrumbClusters') ]; @@ -101,6 +114,9 @@ export function breadcrumbsProvider() { if (mainInstance.inBeats) { breadcrumbs = breadcrumbs.concat(getBeatsBreadcrumbs(mainInstance)); } + if (mainInstance.inApm) { + breadcrumbs = breadcrumbs.concat(getApmBreadcrumbs(mainInstance)); + } return breadcrumbs; }; diff --git a/x-pack/plugins/monitoring/public/views/apm/instance/index.html b/x-pack/plugins/monitoring/public/views/apm/instance/index.html index d83908e928f587..b24ecd56f3d9a3 100644 --- a/x-pack/plugins/monitoring/public/views/apm/instance/index.html +++ b/x-pack/plugins/monitoring/public/views/apm/instance/index.html @@ -4,6 +4,5 @@ instance="{{ pageData.apmSummary.name }}" data-test-subj="apmInstancePage" > - - + diff --git a/x-pack/plugins/monitoring/public/views/apm/instances/index.html b/x-pack/plugins/monitoring/public/views/apm/instances/index.html index 964986787d7711..925d2221c3cf56 100644 --- a/x-pack/plugins/monitoring/public/views/apm/instances/index.html +++ b/x-pack/plugins/monitoring/public/views/apm/instances/index.html @@ -3,16 +3,5 @@ name="apms" data-test-subj="apmInstancesPage" > - -
-

Apm Instances

- -
+ diff --git a/x-pack/plugins/monitoring/public/views/apm/overview/index.html b/x-pack/plugins/monitoring/public/views/apm/overview/index.html index b7816cb9f501d4..23f7301ec23c85 100644 --- a/x-pack/plugins/monitoring/public/views/apm/overview/index.html +++ b/x-pack/plugins/monitoring/public/views/apm/overview/index.html @@ -3,12 +3,5 @@ name="overview" data-test-subj="apmOverviewPage" > - -
-
-
- -
-
-
+ diff --git a/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js b/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js new file mode 100644 index 00000000000000..82c322e4c26ba8 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under 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 { capitalize, get } from 'lodash'; + +export const getDiffCalculation = (max, min) => { + // no need to test max >= 0, but min <= 0 which is normal for a derivative after restart + // because we are aggregating/collapsing on ephemeral_ids + if ( + max !== null && min !== null && + max >= 0 && min >= 0 && + max >= min + ) { + return max - min; + } + + return null; +}; + +export const apmAggFilterPath = [ + 'aggregations.total', + 'aggregations.types.buckets.key', + 'aggregations.types.buckets.uuids.buckets.doc_count', + 'aggregations.min_events_total.value', + 'aggregations.max_events_total.value', + 'aggregations.min_bytes_sent_total.value', + 'aggregations.max_bytes_sent_total.value', +]; + +export const apmUuidsAgg = maxBucketSize => ({ + types: { + terms: { + field: 'beats_stats.beat.type', + size: 1000 // 1000 different types of beats possible seems like enough + }, + aggs: { + uuids: { + terms: { + field: 'beats_stats.beat.uuid', + size: maxBucketSize, + } + } + } + }, + total: { + cardinality: { + field: 'beats_stats.beat.uuid', + precision_threshold: 10000 + } + }, + min_events_total: { + min: { + field: 'beats_stats.metrics.libbeat.pipeline.events.total' + } + }, + max_events_total: { + max: { + field: 'beats_stats.metrics.libbeat.pipeline.events.total' + } + }, + min_bytes_sent_total: { + min: { + field: 'beats_stats.metrics.libbeat.output.write.bytes' + } + }, + max_bytes_sent_total: { + max: { + field: 'beats_stats.metrics.libbeat.output.write.bytes' + } + }, +}); + +export const apmAggResponseHandler = response => { + // beat types stat + const buckets = get(response, 'aggregations.types.buckets', []); + const beatTotal = get(response, 'aggregations.total.value', null); + const beatTypes = buckets.reduce((types, typeBucket) => { + return [ + ...types, + { + type: capitalize(typeBucket.key), + count: get(typeBucket, 'uuids.buckets.length'), + } + ]; + }, []); + + const eventsTotalMax = get(response, 'aggregations.max_events_total.value', null); + const eventsTotalMin = get(response, 'aggregations.min_events_total.value', null); + const bytesSentMax = get(response, 'aggregations.max_bytes_sent_total.value', null); + const bytesSentMin = get(response, 'aggregations.min_bytes_sent_total.value', null); + + return { + beatTotal, + beatTypes, + totalEvents: getDiffCalculation(eventsTotalMax, eventsTotalMin), + bytesSent: getDiffCalculation(bytesSentMax, bytesSentMin), + }; +}; diff --git a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js new file mode 100644 index 00000000000000..ceac98b0b0f134 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { defaults } from 'lodash'; +import { BeatsMetric } from '../metrics'; +import { createQuery } from '../create_query'; + +/** + * {@code createQuery} for all Beats instances. + * + * This helps to future proof Beats Monitoring by explicitly excluding APM Server from the Beats monitoring metrics + * so that its stats do not propagate there and the forthcoming APM Server monitoring pages. + * + * @param {Object} options The options to pass to {@code createQuery} + */ +export function createApmQuery(options = { }) { + options = defaults(options, { + filters: [], + metric: BeatsMetric.getMetricFields(), + type: 'beats_stats', + }); + + options.filters.push({ + bool: { + must: { + term: { + 'beats_stats.beat.type': 'apm-server' + } + } + } + }); + + return createQuery(options); +} diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js index 429b5aeaf9a7f5..501f76ff548a2c 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js @@ -4,129 +4,64 @@ * you may not use this file except in compliance with the Elastic License. */ -import Promise from 'bluebird'; -import { get } from 'lodash'; import { checkParam } from '../error_missing_required'; -import { createQuery } from '../create_query.js'; -import { ApmClusterMetric } from '../metrics/apm/classes'; +import { BeatsClusterMetric } from '../metrics'; +import { createApmQuery } from './create_apm_query'; +import { + apmAggFilterPath, + apmUuidsAgg, + apmAggResponseHandler, +} from './_apm_stats'; -/* - * Get high-level info for Kibanas in a set of clusters - * The set contains multiple clusters for cluster listing page - * The set contains single cluster for cluster overview page and cluster status bar +export function handleResponse(clusterUuid, response) { + const { beatTotal, beatTypes, totalEvents, bytesSent } = apmAggResponseHandler(response); - * Timespan for the data is an interval of time based on calculations of an - * interval size using the same calculation as determining bucketSize using - * the timepicker for a chart + // combine stats + const stats = { + totalEvents, + bytesSent, + beats: { + total: beatTotal, + types: beatTypes, + } + }; + + return { + clusterUuid, + stats, + }; +} - * Returns, for each cluster, - * - number of instances - * - combined health - */ export function getApmsForClusters(req, apmIndexPattern, clusters) { - checkParam(apmIndexPattern, 'apmIndexPattern in apm/getApmsForClusters'); + checkParam(apmIndexPattern, 'apmIndexPattern in apm/getApmForClusters'); - const config = req.server.config(); const start = req.payload.timeRange.min; const end = req.payload.timeRange.max; + const config = req.server.config(); + const maxBucketSize = config.get('xpack.monitoring.max_bucket_size'); - return Promise.map(clusters, cluster => { + return Promise.all(clusters.map(async cluster => { const clusterUuid = cluster.cluster_uuid; - const metric = ApmClusterMetric.getMetricFields(); const params = { index: apmIndexPattern, size: 0, ignoreUnavailable: true, + filterPath: apmAggFilterPath, body: { - query: createQuery({ - type: 'beats_stats', + query: createApmQuery({ start, end, clusterUuid, - metric, - filters: [ - { - bool: { - should: [ - { term: { 'beats_stats.beat.type': 'apm-server' } } - ] - } - } - ] + metric: BeatsClusterMetric.getMetricFields() // override default of BeatMetric.getMetricFields }), - aggs: { - apm_uuids: { - terms: { - field: 'beats_stats.beat.uuid', - size: config.get('xpack.monitoring.max_bucket_size') - }, - aggs: { - latest_report: { - terms: { - field: 'beats_stats.timestamp', - size: 1, - order: { - '_key': 'desc' - } - } - }, - requests_total_per: { - sum: { - field: 'beats_stats.metrics.apm-server.server.request.count' - } - } - } - }, - requests_total: { - sum_bucket: { - buckets_path: 'apm_uuids>requests_total_per' - } - }, - max_timestamp: { - max: { - field: 'timestamp' - } - } - } + aggs: apmUuidsAgg(maxBucketSize) } }; - const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - return callWithRequest(req, 'search', params) - .then(result => { - const aggregations = get(result, 'aggregations', {}); - const apmUuids = get(aggregations, 'apm_uuids.buckets', []); - - - // everything is initialized such that it won't impact any rollup - let requestsTotal = 0; - let connections = 0; - let responseTime = 0; - let memorySize = 0; - let memoryLimit = 0; + // console.log('query', JSON.stringify(params.body)); - // if the cluster has apm instances at all - if (apmUuids.length) { - // get instance status by finding the latest status bucket - requestsTotal = get(aggregations, 'requests_total.value'); - connections = get(aggregations, 'concurrent_connections.value'); - responseTime = get(aggregations, 'response_time_max.value'); - memorySize = get(aggregations, 'memory_rss.value'); // resident set size - memoryLimit = get(aggregations, 'memory_heap_size_limit.value'); // max old space - } - - return { - clusterUuid, - stats: { - uuids: get(aggregations, 'apm_uuids.buckets', []).map(({ key }) => key), - requests_total: requestsTotal, - concurrent_connections: connections, - response_time_max: responseTime, - memory_size: memorySize, - memory_limit: memoryLimit, - count: apmUuids.length - } - }; - }); - }); + const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); + const response = await callWithRequest(req, 'search', params); + return handleResponse(clusterUuid, response); + })); } diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js index 8a984fdd8e2c08..5122bcade01df7 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js @@ -5,6 +5,7 @@ */ import { ClusterMetric, Metric } from '../classes'; +import { SMALL_FLOAT } from '../../../../common/formatting'; export class ApmClusterMetric extends ClusterMetric { constructor(opts) { @@ -39,3 +40,38 @@ export class ApmMetric extends Metric { }; } } + +export class ApmCpuUtilizationMetric extends ApmMetric { + constructor(opts) { + super({ + ...opts, + format: SMALL_FLOAT, + metricAgg: 'max', + units: '%', + derivative: true + }); + + /* + * Convert a counter of milliseconds of utilization time into a percentage of the bucket size + */ + this.calculation = ( + { metric_deriv: metricDeriv } = {}, + _key, + _metric, + bucketSizeInSeconds + ) => { + if (metricDeriv) { + const { normalized_value: metricDerivNormalizedValue } = metricDeriv; + const bucketSizeInMillis = bucketSizeInSeconds * 1000; + + if ( + metricDerivNormalizedValue >= 0 && + metricDerivNormalizedValue !== null + ) { + return metricDerivNormalizedValue / bucketSizeInMillis * 100; + } + } + return null; + }; + } +} diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index aeb5c81f295f3e..dacc65858f83a4 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -13,8 +13,46 @@ import { BeatsMetric } from '../beats/classes'; import { LARGE_BYTES, LARGE_FLOAT } from '../../../../common/formatting'; +import { ApmMetric, ApmCpuUtilizationMetric } from './classes'; export const metrics = { + apm_cpu_total: new ApmCpuUtilizationMetric({ + title: 'CPU Utilization', + label: 'Total', + description: + 'Percentage of CPU time spent executing (user+kernel mode) for the APM process', + field: 'beats_stats.metrics.beat.cpu.total.value' + }), + apm_system_os_load_1: new ApmMetric({ + field: 'beats_stats.metrics.system.load.1', + label: '1m', + title: 'System Load', + description: 'Load average over the last 1 minute', + format: LARGE_FLOAT, + metricAgg: 'max', + units: '' + }), + apm_system_os_load_5: new ApmMetric({ + field: 'beats_stats.metrics.system.load.5', + label: '5m', + title: 'System Load', + description: 'Load average over the last 5 minutes', + format: LARGE_FLOAT, + metricAgg: 'max', + units: '' + }), + apm_system_os_load_15: new ApmMetric({ + field: 'beats_stats.metrics.system.load.15', + label: '15m', + title: 'System Load', + description: 'Load average over the last 15 minutes', + format: LARGE_FLOAT, + metricAgg: 'max', + units: '' + }) +}; + +export const metrics2 = { beat_cluster_pipeline_events_total_rate: new BeatsEventsRateClusterMetric({ field: 'beats_stats.metrics.libbeat.pipeline.events.total', title: 'Events Rate', diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js index a5c4b02642b8ec..cf38337dd9b482 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js @@ -6,40 +6,54 @@ export const metricSet = [ { + name: 'apm_cpu', keys: [ - 'beat_pipeline_events_total_rate', - 'beat_output_events_total', - ], - name: 'beat_event_rates' - }, - { - keys: [ - 'beat_pipeline_events_failed_rate', - 'beat_pipeline_events_dropped_rate', - 'beat_output_events_dropped_rate', - 'beat_pipeline_events_retry_rate' - ], - name: 'beat_fail_rates' - }, - { - keys: ['beat_bytes_written', 'beat_output_write_bytes_rate'], - name: 'beat_throughput_rates' - }, - { - keys: ['beat_output_sending_errors', 'beat_output_receiving_errors'], - name: 'beat_output_errors' - }, - { - keys: ['beat_mem_alloc', 'beat_mem_rss', 'beat_mem_gc_next'], - name: 'beat_memory' + 'apm_cpu_total' + ] }, - 'beat_cpu_utilization', { keys: [ - 'beat_system_os_load_1', - 'beat_system_os_load_5', - 'beat_system_os_load_15' + 'apm_system_os_load_1', + 'apm_system_os_load_5', + 'apm_system_os_load_15' ], - name: 'beat_os_load' + name: 'apm_os_load' } + // { + // keys: [ + // 'beat_pipeline_events_total_rate', + // 'beat_output_events_total', + // ], + // name: 'beat_event_rates' + // }, + // { + // keys: [ + // 'beat_pipeline_events_failed_rate', + // 'beat_pipeline_events_dropped_rate', + // 'beat_output_events_dropped_rate', + // 'beat_pipeline_events_retry_rate' + // ], + // name: 'beat_fail_rates' + // }, + // { + // keys: ['beat_bytes_written', 'beat_output_write_bytes_rate'], + // name: 'beat_throughput_rates' + // }, + // { + // keys: ['beat_output_sending_errors', 'beat_output_receiving_errors'], + // name: 'beat_output_errors' + // }, + // { + // keys: ['beat_mem_alloc', 'beat_mem_rss', 'beat_mem_gc_next'], + // name: 'beat_memory' + // }, + // 'beat_cpu_utilization', + // { + // keys: [ + // 'beat_system_os_load_1', + // 'beat_system_os_load_5', + // 'beat_system_os_load_15' + // ], + // name: 'beat_os_load' + // } ]; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 301a21d9ffc348..068e8c7b0d32a8 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -6,35 +6,49 @@ export const metricSet = [ { + name: 'apm_cpu', keys: [ - 'beat_cluster_pipeline_events_total_rate', - 'beat_cluster_output_events_total', - 'beat_cluster_output_events_ack_rate', - 'beat_cluster_pipeline_events_emitted_rate' - ], - name: 'beat_event_rates' - }, - { - keys: [ - 'beat_cluster_pipeline_events_failed_rate', - 'beat_cluster_pipeline_events_dropped_rate', - 'beat_cluster_output_events_dropped_rate', - 'beat_cluster_pipeline_events_retry_rate' - ], - name: 'beat_fail_rates' - }, - { - keys: [ - 'beat_cluster_output_write_bytes_rate', - 'beat_cluster_output_read_bytes_rate' - ], - name: 'beat_throughput_rates' + 'apm_cpu_total' + ] }, { keys: [ - 'beat_cluster_output_sending_errors', - 'beat_cluster_output_receiving_errors' + 'apm_system_os_load_1', + 'apm_system_os_load_5', + 'apm_system_os_load_15' ], - name: 'beat_output_errors' + name: 'apm_os_load' } + // { + // keys: [ + // 'beat_cluster_pipeline_events_total_rate', + // 'beat_cluster_output_events_total', + // 'beat_cluster_output_events_ack_rate', + // 'beat_cluster_pipeline_events_emitted_rate' + // ], + // name: 'beat_event_rates' + // }, + // { + // keys: [ + // 'beat_cluster_pipeline_events_failed_rate', + // 'beat_cluster_pipeline_events_dropped_rate', + // 'beat_cluster_output_events_dropped_rate', + // 'beat_cluster_pipeline_events_retry_rate' + // ], + // name: 'beat_fail_rates' + // }, + // { + // keys: [ + // 'beat_cluster_output_write_bytes_rate', + // 'beat_cluster_output_read_bytes_rate' + // ], + // name: 'beat_throughput_rates' + // }, + // { + // keys: [ + // 'beat_cluster_output_sending_errors', + // 'beat_cluster_output_receiving_errors' + // ], + // name: 'beat_output_errors' + // } ]; From bb99660259baa76c4ee09f29b44f2f1c86977a2b Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Thu, 9 Aug 2018 15:24:43 -0400 Subject: [PATCH 004/173] Add memory metrics --- .../components/apm/instance/instance.js | 1 + .../public/directives/apm/instances/index.js | 12 ------ .../server/lib/metrics/apm/metrics.js | 42 ++++++++++++++++++- .../routes/api/v1/apm/metric_set_instance.js | 11 ++++- 4 files changed, 52 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js index 9c5915c7a977f8..3f6ad032f397a6 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js @@ -13,6 +13,7 @@ export function ApmServerInstance({ summary, metrics, ...props }) { const metricsToShow = [ metrics.apm_cpu, metrics.apm_os_load, + metrics.apm_memory ]; return ( diff --git a/x-pack/plugins/monitoring/public/directives/apm/instances/index.js b/x-pack/plugins/monitoring/public/directives/apm/instances/index.js index 02bfa285592a34..28d3c6a7819765 100644 --- a/x-pack/plugins/monitoring/public/directives/apm/instances/index.js +++ b/x-pack/plugins/monitoring/public/directives/apm/instances/index.js @@ -15,11 +15,6 @@ uiModule.directive('monitoringApmInstances', kbnUrl => { restrict: 'E', scope: { apms: '=', - // pageIndex: '=', - // filterText: '=', - // sortKey: '=', - // sortOrder: '=', - // onNewState: '=', }, link(scope, $el) { const goToInstance = uuid => { @@ -27,13 +22,6 @@ uiModule.directive('monitoringApmInstances', kbnUrl => { kbnUrl.changePath(`/apm/instances/${uuid}`); }); }; - /* - page-index="apms.pageIndex" - filter-text="apms.filterText" - sort-key="apms.sortKey" - sort-order="apms.sortOrder" - on-new-state="apms.onNewState" - instances="apms.data.apms"*/ scope.$watch('apms.data.apms', () => { const apmsTable = ( diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index dacc65858f83a4..3da2200b472a40 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -49,7 +49,47 @@ export const metrics = { format: LARGE_FLOAT, metricAgg: 'max', units: '' - }) + }), + + apm_mem_gc_next: new BeatsMetric({ + field: 'beats_stats.metrics.beat.memstats.gc_next', + label: 'GC Next', + title: 'Memory', + description: + 'Limit of allocated memory at which garbage collection will occur', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_total: new BeatsMetric({ + field: 'beats_stats.metrics.beat.memstats.memory_total', + label: 'Total Memory', + title: 'Memory', + description: + 'Total memory', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_alloc: new BeatsMetric({ + field: 'beats_stats.metrics.beat.memstats.memory_alloc', + label: 'Allocated Memory', + title: 'Memory', + description: + 'Allocated memory', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_rss: new BeatsMetric({ + field: 'beats_stats.metrics.beat.memstats.rss', + label: 'Process Total', + title: 'Memory', + description: 'Resident set size of memory reserved by the APM service from the OS', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), }; export const metrics2 = { diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js index cf38337dd9b482..40b14dce88305e 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js @@ -18,7 +18,16 @@ export const metricSet = [ 'apm_system_os_load_15' ], name: 'apm_os_load' - } + }, + { + name: 'apm_memory', + keys: [ + 'apm_mem_gc_next', + 'apm_mem_total', + 'apm_mem_alloc', + 'apm_mem_rss' + ] + }, // { // keys: [ // 'beat_pipeline_events_total_rate', From c2c8fdb5880f3784f35b749b589cf82e40d1ccce Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 14 Aug 2018 11:44:19 -0400 Subject: [PATCH 005/173] Add events rate per minute --- .../public/components/apm/overview/index.js | 3 +- .../server/lib/metrics/apm/classes.js | 43 ++++++++++++++++++- .../server/lib/metrics/apm/metrics.js | 16 ++++--- .../routes/api/v1/apm/metric_set_overview.js | 17 +++----- 4 files changed, 62 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index 5bf8189a84b0ef..6e85f8931ffad9 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -23,7 +23,8 @@ export function ApmOverview({ }) { const seriesToShow = [ metrics.apm_cpu, - metrics.apm_os_load + metrics.apm_os_load, + metrics.apm_events_rate ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js index 5122bcade01df7..2356f1ad03ebcb 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js @@ -5,7 +5,7 @@ */ import { ClusterMetric, Metric } from '../classes'; -import { SMALL_FLOAT } from '../../../../common/formatting'; +import { SMALL_FLOAT, LARGE_FLOAT } from '../../../../common/formatting'; export class ApmClusterMetric extends ClusterMetric { constructor(opts) { @@ -75,3 +75,44 @@ export class ApmCpuUtilizationMetric extends ApmMetric { }; } } + +export class ApmEventsRateClusterMetric extends ApmClusterMetric { + constructor(opts) { + super({ + ...opts, + derivative: true, + format: LARGE_FLOAT, + metricAgg: 'max', + units: '/m' + }); + + this.aggs = { + beats_uuids: { + terms: { + field: 'beats_stats.beat.uuid', + size: 10000 + }, + aggs: { + event_rate_per_beat: { + max: { + field: this.field + } + } + } + }, + event_rate: { + sum_bucket: { + buckets_path: 'beats_uuids>event_rate_per_beat', + gap_policy: 'skip' + } + }, + metric_deriv: { + derivative: { + buckets_path: 'event_rate', + gap_policy: 'skip', + unit: '1m' + } + } + }; + } +} diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index 3da2200b472a40..8e7a01fc8aa382 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -13,7 +13,7 @@ import { BeatsMetric } from '../beats/classes'; import { LARGE_BYTES, LARGE_FLOAT } from '../../../../common/formatting'; -import { ApmMetric, ApmCpuUtilizationMetric } from './classes'; +import { ApmMetric, ApmCpuUtilizationMetric, ApmEventsRateClusterMetric } from './classes'; export const metrics = { apm_cpu_total: new ApmCpuUtilizationMetric({ @@ -51,7 +51,7 @@ export const metrics = { units: '' }), - apm_mem_gc_next: new BeatsMetric({ + apm_mem_gc_next: new ApmMetric({ field: 'beats_stats.metrics.beat.memstats.gc_next', label: 'GC Next', title: 'Memory', @@ -61,7 +61,7 @@ export const metrics = { metricAgg: 'max', units: 'B' }), - apm_mem_total: new BeatsMetric({ + apm_mem_total: new ApmMetric({ field: 'beats_stats.metrics.beat.memstats.memory_total', label: 'Total Memory', title: 'Memory', @@ -71,7 +71,7 @@ export const metrics = { metricAgg: 'max', units: 'B' }), - apm_mem_alloc: new BeatsMetric({ + apm_mem_alloc: new ApmMetric({ field: 'beats_stats.metrics.beat.memstats.memory_alloc', label: 'Allocated Memory', title: 'Memory', @@ -81,7 +81,7 @@ export const metrics = { metricAgg: 'max', units: 'B' }), - apm_mem_rss: new BeatsMetric({ + apm_mem_rss: new ApmMetric({ field: 'beats_stats.metrics.beat.memstats.rss', label: 'Process Total', title: 'Memory', @@ -90,6 +90,12 @@ export const metrics = { metricAgg: 'max', units: 'B' }), + apm_output_events_total: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.libbeat.output.events.total', + title: 'Events Rate', + label: 'Emitted', + description: 'Events processed by the output (including retries)' + }) }; export const metrics2 = { diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 068e8c7b0d32a8..2240daa1cf681f 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -18,16 +18,13 @@ export const metricSet = [ 'apm_system_os_load_15' ], name: 'apm_os_load' - } - // { - // keys: [ - // 'beat_cluster_pipeline_events_total_rate', - // 'beat_cluster_output_events_total', - // 'beat_cluster_output_events_ack_rate', - // 'beat_cluster_pipeline_events_emitted_rate' - // ], - // name: 'beat_event_rates' - // }, + }, + { + keys: [ + 'apm_output_events_total', + ], + name: 'apm_events_rate' + }, // { // keys: [ // 'beat_cluster_pipeline_events_failed_rate', From ccc04fdde25ac0e2cdcb7097c5a89b86b0bc9990 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Wed, 15 Aug 2018 15:02:45 -0400 Subject: [PATCH 006/173] Adding requests and time since last event --- .../public/components/apm/instances/status.js | 6 +++ .../public/components/apm/overview/index.js | 3 +- .../monitoring/public/lib/format_number.js | 2 + .../server/lib/apm/create_apm_query.js | 20 ++++---- .../server/lib/apm/get_apms_for_clusters.js | 47 ++++++++++++++++++- .../server/lib/metrics/apm/metrics.js | 11 ++++- .../routes/api/v1/apm/metric_set_overview.js | 8 +++- .../server/routes/api/v1/apm/overview.js | 3 +- 8 files changed, 86 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/status.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js index 0ca6ea1d481ac5..e180f9e59c4525 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -16,6 +16,7 @@ export function Status({ stats }) { }, bytesSent, totalEvents, + timeOfLastEvent, } = stats; const metrics = [ @@ -34,6 +35,11 @@ export function Status({ stats }) { value: formatMetric(totalEvents), dataTestSubj: 'totalEvents' }, + { + label: 'Last Event', + value: formatMetric(timeOfLastEvent, 'time_since2'), + dataTestSubj: 'timeOfLastEvent', + } ]; const IconComponent = ({ status }) => ( diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index 6e85f8931ffad9..5b223d4b52f6ab 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -24,7 +24,8 @@ export function ApmOverview({ const seriesToShow = [ metrics.apm_cpu, metrics.apm_os_load, - metrics.apm_events_rate + metrics.apm_output_events_rate, + metrics.apm_requests ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/public/lib/format_number.js b/x-pack/plugins/monitoring/public/lib/format_number.js index 3ef93e9140cbb0..b14ac8b44fab85 100644 --- a/x-pack/plugins/monitoring/public/lib/format_number.js +++ b/x-pack/plugins/monitoring/public/lib/format_number.js @@ -30,6 +30,8 @@ export function formatNumber(num, which) { switch (which) { case 'time_since': return moment(moment() - num).from(moment(), true); + case 'time_since2': + return moment().from(num, true); case 'time': return moment(num).format('H:mm:ss'); case 'int_commas': diff --git a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js index ceac98b0b0f134..a403b75718f8d9 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js +++ b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js @@ -8,6 +8,16 @@ import { defaults } from 'lodash'; import { BeatsMetric } from '../metrics'; import { createQuery } from '../create_query'; +export const apmFilter = { + bool: { + must: { + term: { + 'beats_stats.beat.type': 'apm-server' + } + } + } +}; + /** * {@code createQuery} for all Beats instances. * @@ -23,15 +33,7 @@ export function createApmQuery(options = { }) { type: 'beats_stats', }); - options.filters.push({ - bool: { - must: { - term: { - 'beats_stats.beat.type': 'apm-server' - } - } - } - }); + options.filters.push(apmFilter); return createQuery(options); } diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js index 501f76ff548a2c..48e0cfa425899e 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js @@ -5,6 +5,7 @@ */ import { checkParam } from '../error_missing_required'; +import { get } from 'lodash'; import { BeatsClusterMetric } from '../metrics'; import { createApmQuery } from './create_apm_query'; import { @@ -62,6 +63,50 @@ export function getApmsForClusters(req, apmIndexPattern, clusters) { const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); const response = await callWithRequest(req, 'search', params); - return handleResponse(clusterUuid, response); + const formattedResponse = handleResponse(clusterUuid, response); + + // Fetch additional information + const req2 = { + index: apmIndexPattern, + size: 0, + ignoreUnavailable: true, + // filterPath: apmAggFilterPath, + body: { + query: createApmQuery({ + start, + end, + clusterUuid, + metric: BeatsClusterMetric.getMetricFields() // override default of BeatMetric.getMetricFields + }), + aggs: { + acked_events: { + filter: { + range: { + 'beats_stats.metrics.libbeat.output.events.acked': { + gt: 0, + } + } + }, + aggs: { + max_timestamp: { + max: { + field: 'timestamp' + } + } + } + } + } + } + }; + + const response2 = await callWithRequest(req, 'search', req2); + + return { + ...formattedResponse, + stats: { + ...formattedResponse.stats, + timeOfLastEvent: get(response2, 'aggregations.acked_events.max_timestamp.value') + } + }; })); } diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index 8e7a01fc8aa382..2e6b6951004d2b 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -90,9 +90,18 @@ export const metrics = { metricAgg: 'max', units: 'B' }), + + apm_requests: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.request.count', + title: 'Requests', + label: 'Requested', + description: 'PLZ FILL ME IN' + }), + + apm_output_events_total: new ApmEventsRateClusterMetric({ field: 'beats_stats.metrics.libbeat.output.events.total', - title: 'Events Rate', + title: 'Output Events Rate', label: 'Emitted', description: 'Events processed by the output (including retries)' }) diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 2240daa1cf681f..2b02dc8d987fa3 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -23,8 +23,14 @@ export const metricSet = [ keys: [ 'apm_output_events_total', ], - name: 'apm_events_rate' + name: 'apm_output_events_rate' }, + { + keys: [ + 'apm_requests' + ], + name: 'apm_requests' + } // { // keys: [ // 'beat_cluster_pipeline_events_failed_rate', diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js index 1cb58143e25bbb..511a9eb69f4e4b 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js @@ -10,6 +10,7 @@ import { getApmClusterStatus } from './_get_apm_cluster_status'; import { getMetrics } from '../../../../lib/details/get_metrics'; import { metricSet } from './metric_set_overview'; import { handleError } from '../../../../lib/errors'; +import { apmFilter } from '../../../../lib/apm/create_apm_query'; export function apmOverviewRoute(server) { /** @@ -41,7 +42,7 @@ export function apmOverviewRoute(server) { try { const [ clusterStatus, metrics ] = await Promise.all([ getApmClusterStatus(req, apmIndexPattern, { clusterUuid }), - getMetrics(req, apmIndexPattern, metricSet), + getMetrics(req, apmIndexPattern, metricSet, [apmFilter]), ]); reply({ From 6d8cad296c51fc7441b06c76ed9bdb8981b27151 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Wed, 15 Aug 2018 16:54:56 -0400 Subject: [PATCH 007/173] More metrics for instance page --- .../components/apm/instance/instance.js | 2 + .../public/components/apm/instance/status.js | 6 +++ .../public/components/apm/overview/index.js | 3 +- .../monitoring/server/lib/apm/get_apm_info.js | 54 +++++++++++++++++-- .../server/lib/apm/get_apms_for_clusters.js | 11 ++-- .../server/lib/metrics/apm/metrics.js | 40 +++++++++++++- .../routes/api/v1/apm/metric_set_instance.js | 19 ++++--- .../routes/api/v1/apm/metric_set_overview.js | 4 ++ 8 files changed, 122 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js index 3f6ad032f397a6..e6d93785b1d3cb 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js @@ -13,6 +13,8 @@ export function ApmServerInstance({ summary, metrics, ...props }) { const metricsToShow = [ metrics.apm_cpu, metrics.apm_os_load, + metrics.apm_output_events_rate, + metrics.apm_requests, metrics.apm_memory ]; diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/status.js b/x-pack/plugins/monitoring/public/components/apm/instance/status.js index b257ed864be656..09f27731c7537b 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/status.js @@ -15,6 +15,7 @@ export function Status({ stats }) { output, version, uptime, + timeOfLastEvent } = stats; const metrics = [ @@ -37,6 +38,11 @@ export function Status({ stats }) { label: 'Uptime', value: formatMetric(uptime, 'time_since'), dataTestSubj: 'uptime' + }, + { + label: 'Last Event', + value: formatMetric(timeOfLastEvent, 'time_since2'), + dataTestSubj: 'timeOfLastEvent', } ]; diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index 5b223d4b52f6ab..04fa599c57c478 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -25,7 +25,8 @@ export function ApmOverview({ metrics.apm_cpu, metrics.apm_os_load, metrics.apm_output_events_rate, - metrics.apm_requests + metrics.apm_requests, + metrics.apm_memory ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js b/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js index 9928fba3c7d881..979c31092ff750 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js @@ -40,15 +40,15 @@ export function handleResponse(response, apmUuid) { }; } -export async function getApmInfo(req, beatsIndexPattern, { clusterUuid, apmUuid, start, end }) { - checkParam(beatsIndexPattern, 'beatsIndexPattern in beats/getBeatSummary'); +export async function getApmInfo(req, apmIndexPattern, { clusterUuid, apmUuid, start, end }) { + checkParam(apmIndexPattern, 'apmIndexPattern in beats/getBeatSummary'); const filters = [ { term: { 'beats_stats.beat.uuid': apmUuid } }, { term: { 'beats_stats.beat.type': 'apm-server' } } ]; const params = { - index: beatsIndexPattern, + index: apmIndexPattern, size: 1, ignoreUnavailable: true, filterPath: [ @@ -89,7 +89,51 @@ export async function getApmInfo(req, beatsIndexPattern, { clusterUuid, apmUuid, }; const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - const response = await callWithRequest(req, 'search', params); - return handleResponse(response, apmUuid); + // Fetch additional information + const params2 = { + index: apmIndexPattern, + size: 0, + ignoreUnavailable: true, + // filterPath: apmAggFilterPath, + body: { + query: createQuery({ + start, + end, + clusterUuid, + metric: ApmMetric.getMetricFields(), + filters + }), + aggs: { + acked_events: { + filter: { + range: { + 'beats_stats.metrics.libbeat.output.events.acked': { + gt: 0, + } + } + }, + aggs: { + max_timestamp: { + max: { + field: 'timestamp' + } + } + } + } + } + } + }; + + const [response, response2] = await Promise.all([ + callWithRequest(req, 'search', params), + callWithRequest(req, 'search', params2) + ]); + + const formattedResponse = handleResponse(response, apmUuid); + + return { + ...formattedResponse, + timeOfLastEvent: get(response2, 'aggregations.acked_events.max_timestamp.value') + }; } diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js index 48e0cfa425899e..8054a3c679e0a7 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js @@ -62,11 +62,9 @@ export function getApmsForClusters(req, apmIndexPattern, clusters) { // console.log('query', JSON.stringify(params.body)); const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - const response = await callWithRequest(req, 'search', params); - const formattedResponse = handleResponse(clusterUuid, response); // Fetch additional information - const req2 = { + const params2 = { index: apmIndexPattern, size: 0, ignoreUnavailable: true, @@ -99,7 +97,12 @@ export function getApmsForClusters(req, apmIndexPattern, clusters) { } }; - const response2 = await callWithRequest(req, 'search', req2); + const [response, response2] = await Promise.all([ + callWithRequest(req, 'search', params), + callWithRequest(req, 'search', params2) + ]); + + const formattedResponse = handleResponse(clusterUuid, response); return { ...formattedResponse, diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index 2e6b6951004d2b..56b75bbc64c1c5 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -104,7 +104,45 @@ export const metrics = { title: 'Output Events Rate', label: 'Emitted', description: 'Events processed by the output (including retries)' - }) + }), + + apm_mem_alloc: new ApmMetric({ + field: 'beats_stats.metrics.beat.memstats.memory_alloc', + label: 'Active', + title: 'Memory', + description: 'Private memory in active use by the Beat', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_total: new ApmMetric({ + field: 'beats_stats.metrics.beat.memstats.memory_total', + label: 'Total', + title: 'Memory', + description: 'Private memory in active use by the Beat', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_rss: new ApmMetric({ + field: 'beats_stats.metrics.beat.memstats.rss', + label: 'Process Total', + title: 'Memory', + description: 'Resident set size of memory reserved by the Beat from the OS', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_mem_gc_next: new ApmMetric({ + field: 'beats_stats.metrics.beat.memstats.gc_next', + label: 'GC Next', + title: 'Memory', + description: + 'Limit of allocated memory at which garbage collection will occur', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), }; export const metrics2 = { diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js index 40b14dce88305e..f5389460f2017b 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js @@ -20,14 +20,21 @@ export const metricSet = [ name: 'apm_os_load' }, { - name: 'apm_memory', + keys: ['apm_mem_total', 'apm_mem_alloc', 'apm_mem_rss', 'apm_mem_gc_next'], + name: 'apm_memory' + }, + { keys: [ - 'apm_mem_gc_next', - 'apm_mem_total', - 'apm_mem_alloc', - 'apm_mem_rss' - ] + 'apm_output_events_total', + ], + name: 'apm_output_events_rate' }, + { + keys: [ + 'apm_requests' + ], + name: 'apm_requests' + } // { // keys: [ // 'beat_pipeline_events_total_rate', diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 2b02dc8d987fa3..82b28d0ee5691f 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -19,6 +19,10 @@ export const metricSet = [ ], name: 'apm_os_load' }, + { + keys: ['apm_mem_total', 'apm_mem_alloc', 'apm_mem_rss', 'apm_mem_gc_next'], + name: 'apm_memory' + }, { keys: [ 'apm_output_events_total', From ff037d5c26057f2385d7583c8aae553695de35d0 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Mon, 20 Aug 2018 09:18:32 -0400 Subject: [PATCH 008/173] Avoid using an unnecessary agg --- .../public/components/apm/instance/status.js | 3 +- .../public/components/apm/instances/status.js | 3 +- .../server/lib/apm/get_apms_for_clusters.js | 30 ++++++++----------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/status.js b/x-pack/plugins/monitoring/public/components/apm/instance/status.js index 09f27731c7537b..a5abe4fb47dce9 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/status.js @@ -5,6 +5,7 @@ */ import React, { Fragment } from 'react'; +import moment from 'moment'; import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; import { formatMetric } from '../../../lib/format_number'; @@ -41,7 +42,7 @@ export function Status({ stats }) { }, { label: 'Last Event', - value: formatMetric(timeOfLastEvent, 'time_since2'), + value: formatMetric(+moment(timeOfLastEvent), 'time_since2', 'ago'), dataTestSubj: 'timeOfLastEvent', } ]; diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/status.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js index e180f9e59c4525..3c8ed57a5e6dae 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -5,6 +5,7 @@ */ import React, { Fragment } from 'react'; +import moment from 'moment'; import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; import { formatMetric } from '../../../lib/format_number'; @@ -37,7 +38,7 @@ export function Status({ stats }) { }, { label: 'Last Event', - value: formatMetric(timeOfLastEvent, 'time_since2'), + value: formatMetric(+moment(timeOfLastEvent), 'time_since2', 'ago'), dataTestSubj: 'timeOfLastEvent', } ]; diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js index 8054a3c679e0a7..145f3097e3beda 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js @@ -66,34 +66,30 @@ export function getApmsForClusters(req, apmIndexPattern, clusters) { // Fetch additional information const params2 = { index: apmIndexPattern, - size: 0, + size: 1, ignoreUnavailable: true, - // filterPath: apmAggFilterPath, body: { + _source: ['timestamp'], + sort: [{ + timestamp: { + order: 'desc' + } + }], query: createApmQuery({ start, end, clusterUuid, - metric: BeatsClusterMetric.getMetricFields() // override default of BeatMetric.getMetricFields - }), - aggs: { - acked_events: { - filter: { + metric: BeatsClusterMetric.getMetricFields(), // override default of BeatMetric.getMetricFields + filters: [ + { range: { 'beats_stats.metrics.libbeat.output.events.acked': { gt: 0, } } - }, - aggs: { - max_timestamp: { - max: { - field: 'timestamp' - } - } } - } - } + ], + }), } }; @@ -108,7 +104,7 @@ export function getApmsForClusters(req, apmIndexPattern, clusters) { ...formattedResponse, stats: { ...formattedResponse.stats, - timeOfLastEvent: get(response2, 'aggregations.acked_events.max_timestamp.value') + timeOfLastEvent: get(response2, 'hits.hits[0]._source.timestamp') } }; })); From e9ac23168587a4dab526de1fb909b996cadf4eed Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Mon, 20 Aug 2018 13:11:14 -0400 Subject: [PATCH 009/173] Adding more metrics --- .../public/components/apm/instances/status.js | 2 +- .../public/components/apm/overview/index.js | 6 +- .../server/lib/metrics/apm/metrics.js | 158 +++++++++++++++++- .../routes/api/v1/apm/metric_set_overview.js | 45 +++++ 4 files changed, 208 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/status.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js index 3c8ed57a5e6dae..8d24641b36568d 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -33,7 +33,7 @@ export function Status({ stats }) { }, { label: 'Total Events', - value: formatMetric(totalEvents), + value: formatMetric(totalEvents, '0.[0]a'), dataTestSubj: 'totalEvents' }, { diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index 04fa599c57c478..ca3d10b84235a9 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -26,7 +26,11 @@ export function ApmOverview({ metrics.apm_os_load, metrics.apm_output_events_rate, metrics.apm_requests, - metrics.apm_memory + metrics.apm_responses_valid, + metrics.apm_responses_errors, + metrics.apm_incoming_requests_size, + metrics.apm_memory, + metrics.apm_transformations ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index 56b75bbc64c1c5..efddae07a240ac 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -98,11 +98,167 @@ export const metrics = { description: 'PLZ FILL ME IN' }), + apm_responses_count: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.count', + title: 'Response Count', + label: 'Total', + description: 'PLZ FILL ME IN' + }), + apm_responses_valid_ok: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.valid.ok', + title: 'Ok', + label: 'Ok', + description: 'PLZ FILL ME IN' + }), + apm_responses_valid_accepted: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.valid.accepted', + title: 'Accepted', + label: 'Accepted', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_toolarge: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.toolarge', + title: 'Response Errors', + label: 'Too large', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_validate: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.validate', + title: 'Validate', + label: 'Validate', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_method: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.method', + title: 'Method', + label: 'Method', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_unauthorized: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.unauthorized', + title: 'Unauthorized', + label: 'Unauthorized', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_ratelimit: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.ratelimit', + title: 'Rate limit', + label: 'Rate limit', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_queue: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.queue', + title: 'Queue', + label: 'Queue', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_decode: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.decode', + title: 'Decode', + label: 'Decode', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_forbidden: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.forbidden', + title: 'Forbidden', + label: 'Forbidden', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_concurrency: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.concurrency', + title: 'Concurrency', + label: 'Concurrency', + description: 'PLZ FILL ME IN' + }), + apm_responses_errors_closed: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.server.response.errors.closed', + title: 'Closed', + label: 'Closed', + description: 'PLZ FILL ME IN' + }), + + apm_decoder_deflate_contentlength: new ApmMetric({ + field: 'beats_stats.metrics.apm-server.decoder.deflate.content-length', + label: 'Deflater', + title: 'Incoming Requests Size', + description: 'PLZ FILL ME IN', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_decoder_gzip_contentlength: new ApmMetric({ + field: 'beats_stats.metrics.apm-server.decoder.gzip.content-length', + label: 'Gzip', + title: 'Gzip', + description: 'PLZ FILL ME IN', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + apm_decoder_uncompressed_contentlength: new ApmMetric({ + field: 'beats_stats.metrics.apm-server.decoder.uncompressed.content-length', + label: 'Uncompressed', + title: 'Uncompressed', + description: 'PLZ FILL ME IN', + format: LARGE_BYTES, + metricAgg: 'max', + units: 'B' + }), + + apm_processor_transaction_transformations: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.processor.transaction.transformations', + title: 'Transformations', + label: 'Transaction', + description: 'PLZ FILL ME IN' + }), + apm_processor_span_transformations: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.processor.span.transformations', + title: 'Transformations', + label: 'Span', + description: 'PLZ FILL ME IN' + }), + apm_processor_error_transformations: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.processor.error.transformations', + title: 'Transformations', + label: 'Error', + description: 'PLZ FILL ME IN' + }), + apm_processor_metric_transformations: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.apm-server.processor.metric.transformations', + title: 'Transformations', + label: 'Metric', + description: 'PLZ FILL ME IN' + }), + apm_output_events_total: new ApmEventsRateClusterMetric({ field: 'beats_stats.metrics.libbeat.output.events.total', title: 'Output Events Rate', - label: 'Emitted', + label: 'Total', + description: 'Events processed by the output (including retries)' + }), + apm_output_events_failed: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.libbeat.output.events.failed', + title: 'Output Failed Events Rate', + label: 'Failed', + description: 'Events processed by the output (including retries)' + }), + apm_output_events_dropped: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.libbeat.output.events.dropped', + title: 'Output Dropped Events Rate', + label: 'Dropped', + description: 'Events processed by the output (including retries)' + }), + apm_output_events_active: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.libbeat.output.events.active', + title: 'Output Active Events Rate', + label: 'Active', + description: 'Events processed by the output (including retries)' + }), + apm_output_events_acked: new ApmEventsRateClusterMetric({ + field: 'beats_stats.metrics.libbeat.output.events.acked', + title: 'Output Acked Events Rate', + label: 'Acked', description: 'Events processed by the output (including retries)' }), diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 82b28d0ee5691f..0e191f76defa7d 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -26,14 +26,59 @@ export const metricSet = [ { keys: [ 'apm_output_events_total', + 'apm_output_events_failed', + 'apm_output_events_dropped', + 'apm_output_events_active', + 'apm_output_events_acked' ], name: 'apm_output_events_rate' }, + { + keys: [ + 'apm_responses_count', + 'apm_responses_valid_ok', + 'apm_responses_valid_accepted' + ], + name: 'apm_responses_valid' + }, + { + keys: [ + // 'apm_responses_count', + 'apm_responses_errors_toolarge', + 'apm_responses_errors_validate', + 'apm_responses_errors_method', + 'apm_responses_errors_unauthorized', + 'apm_responses_errors_ratelimit', + 'apm_responses_errors_queue', + 'apm_responses_errors_decode', + 'apm_responses_errors_forbidden', + 'apm_responses_errors_concurrency', + 'apm_responses_errors_closed', + ], + name: 'apm_responses_errors' + }, { keys: [ 'apm_requests' ], name: 'apm_requests' + }, + { + keys: [ + 'apm_decoder_deflate_contentlength', + 'apm_decoder_gzip_contentlength', + 'apm_decoder_uncompressed_contentlength' + ], + name: 'apm_incoming_requests_size' + }, + { + keys: [ + 'apm_processor_transaction_transformations', + 'apm_processor_span_transformations', + 'apm_processor_error_transformations', + 'apm_processor_metric_transformations', + ], + name: 'apm_transformations' } // { // keys: [ From 83d7d81af104165283d0b523851311763f717e22 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Wed, 22 Aug 2018 16:23:19 -0400 Subject: [PATCH 010/173] Show response success/failure in a single graph --- .../public/components/apm/overview/index.js | 7 +- .../server/lib/details/get_series.js | 4 + .../server/lib/metrics/apm/classes.js | 151 ++++++++++++++++++ .../server/lib/metrics/apm/metrics.js | 20 ++- .../routes/api/v1/apm/metric_set_overview.js | 4 + 5 files changed, 182 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index ca3d10b84235a9..4dcc60bff36b0d 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -26,11 +26,12 @@ export function ApmOverview({ metrics.apm_os_load, metrics.apm_output_events_rate, metrics.apm_requests, - metrics.apm_responses_valid, - metrics.apm_responses_errors, + // metrics.apm_responses_valid, + // metrics.apm_responses_errors, metrics.apm_incoming_requests_size, metrics.apm_memory, - metrics.apm_transformations + metrics.apm_transformations, + metrics.apm_responses_success_failure ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/server/lib/details/get_series.js b/x-pack/plugins/monitoring/server/lib/details/get_series.js index 5c74ef47b4dc2a..7c642656cb5853 100644 --- a/x-pack/plugins/monitoring/server/lib/details/get_series.js +++ b/x-pack/plugins/monitoring/server/lib/details/get_series.js @@ -111,6 +111,10 @@ function fetchSeries(req, indexPattern, metric, min, max, bucketSize, filters) { } }; + if (metric.debug) { + console.log('metric.debug', JSON.stringify(params)); + } + const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); return callWithRequest(req, 'search', params); } diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js index 2356f1ad03ebcb..a11776d7d7d445 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js @@ -41,6 +41,157 @@ export class ApmMetric extends Metric { } } +export class ApmSuccessResponseMetric extends ApmMetric { + constructor(opts) { + super({ + ...opts, + format: SMALL_FLOAT, + metricAgg: 'max', + units: '%', + // debug: true, + derivative: true + }); + + const metrics = [ + 'beats_stats.metrics.apm-server.server.response.valid.ok', + 'beats_stats.metrics.apm-server.server.response.valid.accepted', + ]; + + this.aggs = metrics.reduce((accum, metric) => { + const split = metric.split('.'); + const name = split[split.length - 1]; + accum[name] = { + max: { field: metric } + }; + accum[`${name}_deriv`] = { + derivative: { buckets_path: name, gap_policy: 'skip', unit: '1m' } + }; + return accum; + }, {}); + + this.aggs = { + ...this.aggs, + metric_deriv: { + derivative: { + buckets_path: 'metric', + gap_policy: 'skip', + unit: '1m' + } + } + }; + + /* + * Convert a counter of milliseconds of utilization time into a percentage of the bucket size + */ + this.calculation = ( + _bucket = {}, + _key, + _metric, + // bucketSizeInSeconds + ) => { + if (_bucket.metric_deriv) { + const total = _bucket.metric_deriv.normalized_value; + const successes = _bucket.ok_deriv.normalized_value + _bucket.accepted_deriv.normalized_value; + // const bucketSizeInMillis = bucketSizeInSeconds * 1000; + + if ( + total >= 0 && + total !== null + ) { + return successes / total /*/ bucketSizeInMillis*/ * 100; + } + } + return null; + }; + } +} + +export class ApmFailureResponseMetric extends ApmMetric { + constructor(opts) { + super({ + ...opts, + format: SMALL_FLOAT, + metricAgg: 'max', + units: '%', + // debug: true, + derivative: true + }); + + const metrics = [ + 'beats_stats.metrics.apm-server.server.response.errors.toolarge', + 'beats_stats.metrics.apm-server.server.response.errors.validate', + 'beats_stats.metrics.apm-server.server.response.errors.method', + 'beats_stats.metrics.apm-server.server.response.errors.unauthorized', + 'beats_stats.metrics.apm-server.server.response.errors.ratelimit', + 'beats_stats.metrics.apm-server.server.response.errors.queue', + 'beats_stats.metrics.apm-server.server.response.errors.decode', + 'beats_stats.metrics.apm-server.server.response.errors.forbidden', + 'beats_stats.metrics.apm-server.server.response.errors.concurrency', + 'beats_stats.metrics.apm-server.server.response.errors.closed', + ]; + + this.aggs = metrics.reduce((accum, metric) => { + const split = metric.split('.'); + const name = split[split.length - 1]; + accum[name] = { + max: { field: metric } + }; + accum[`${name}_deriv`] = { + derivative: { buckets_path: name, gap_policy: 'skip', unit: '1m' } + }; + return accum; + }, {}); + + this.aggs = { + ...this.aggs, + metric_deriv: { + derivative: { + buckets_path: 'metric', + gap_policy: 'skip', + unit: '1m' + } + } + }; + + /* + * Convert a counter of milliseconds of utilization time into a percentage of the bucket size + */ + this.calculation = ( + _bucket = {}, + _key, + _metric, + // bucketSizeInSeconds + ) => { + // console.log('ApmSuccessFailureMetric.calculation', _bucket); + if (_bucket.metric_deriv) { + const total = _bucket.metric_deriv.normalized_value; + const failures = _bucket.toolarge_deriv.normalized_value + + _bucket.validate_deriv.normalized_value + + _bucket.method_deriv.normalized_value + + _bucket.unauthorized_deriv.normalized_value + + _bucket.ratelimit_deriv.normalized_value + + _bucket.queue_deriv.normalized_value + + _bucket.decode_deriv.normalized_value + + _bucket.forbidden_deriv.normalized_value + + _bucket.concurrency_deriv.normalized_value + + _bucket.closed_deriv.normalized_value; + + // const bucketSizeInMillis = bucketSizeInSeconds * 1000; + + if ( + total >= 0 && + total !== null + ) { + // console.log(`Value=${((okDerivNormalizedValue + acceptedDerivNormalizedValue) / totalDerivNormalizedValue) /*/ bucketSizeInMillis */* 100}`); + return failures / total /*/ bucketSizeInMillis*/ * 100; + } + } + return null; + }; + } +} + + export class ApmCpuUtilizationMetric extends ApmMetric { constructor(opts) { super({ diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index efddae07a240ac..849e70aa1040bb 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -13,7 +13,13 @@ import { BeatsMetric } from '../beats/classes'; import { LARGE_BYTES, LARGE_FLOAT } from '../../../../common/formatting'; -import { ApmMetric, ApmCpuUtilizationMetric, ApmEventsRateClusterMetric } from './classes'; +import { + ApmMetric, + ApmCpuUtilizationMetric, + ApmEventsRateClusterMetric, + ApmSuccessResponseMetric, + ApmFailureResponseMetric +} from './classes'; export const metrics = { apm_cpu_total: new ApmCpuUtilizationMetric({ @@ -104,6 +110,18 @@ export const metrics = { label: 'Total', description: 'PLZ FILL ME IN' }), + apm_responses_success: new ApmSuccessResponseMetric({ + field: 'beats_stats.metrics.apm-server.server.response.count', + title: 'Success', + label: 'Success', + description: 'PLZ FILL ME IN' + }), + apm_responses_failure: new ApmFailureResponseMetric({ + field: 'beats_stats.metrics.apm-server.server.response.count', + title: 'Failure', + label: 'Failure', + description: 'PLZ FILL ME IN' + }), apm_responses_valid_ok: new ApmEventsRateClusterMetric({ field: 'beats_stats.metrics.apm-server.server.response.valid.ok', title: 'Ok', diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 0e191f76defa7d..6e0a350ea6da82 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -33,6 +33,10 @@ export const metricSet = [ ], name: 'apm_output_events_rate' }, + { + keys: ['apm_responses_failure', 'apm_responses_success'], + name: 'apm_responses_success_failure' + }, { keys: [ 'apm_responses_count', From 019703cadc4348e5dda0897c7e5d5f9b1dc9fc98 Mon Sep 17 00:00:00 2001 From: CJ Cenizal Date: Thu, 23 Aug 2018 08:27:22 -0700 Subject: [PATCH 011/173] When an index is deleted, and it's selected in the table, then it's removed from the selection. (#22242) --- .../components/index_table/index_table.js | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/index_management/public/sections/index_list/components/index_table/index_table.js b/x-pack/plugins/index_management/public/sections/index_list/components/index_table/index_table.js index c34ffdacf74dc2..49ba4ef3bedb26 100644 --- a/x-pack/plugins/index_management/public/sections/index_list/components/index_table/index_table.js +++ b/x-pack/plugins/index_management/public/sections/index_list/components/index_table/index_table.js @@ -68,6 +68,24 @@ const HEADERS = { }; export class IndexTableUi extends Component { + static getDerivedStateFromProps(props, state) { + // Deselct any indices which no longer exist, e.g. they've been deleted. + const { selectedIndicesMap } = state; + const indexNames = props.indices.map(index => index.name); + const selectedIndexNames = Object.keys(selectedIndicesMap); + const missingIndexNames = selectedIndexNames.filter(selectedIndexName => { + return !indexNames.includes(selectedIndexName); + }); + + if (missingIndexNames.length) { + const newMap = { ...selectedIndicesMap }; + missingIndexNames.forEach(missingIndexName => delete newMap[missingIndexName]); + return { selectedIndicesMap: newMap }; + } + + return null; + } + constructor(props) { super(props); @@ -82,6 +100,7 @@ export class IndexTableUi extends Component { const newIsSortAscending = sortField === column ? !isSortAscending : true; sortChanged(column, newIsSortAscending); }; + toggleAll = () => { const allSelected = this.areAllItemsSelected(); if (allSelected) { @@ -96,6 +115,7 @@ export class IndexTableUi extends Component { selectedIndicesMap }); }; + toggleItem = name => { this.setState(({ selectedIndicesMap }) => { const newMap = { ...selectedIndicesMap }; @@ -109,6 +129,7 @@ export class IndexTableUi extends Component { }; }); }; + isItemSelected = name => { return !!this.state.selectedIndicesMap[name]; }; @@ -159,6 +180,7 @@ export class IndexTableUi extends Component { } return value; } + buildRowCells(index) { return Object.keys(HEADERS).map(fieldName => { const { name } = index; @@ -174,6 +196,7 @@ export class IndexTableUi extends Component { ); }); } + buildRows() { const { indices = [], detailPanelIndexName } = this.props; return indices.map(index => { @@ -221,7 +244,6 @@ export class IndexTableUi extends Component { }; render() { - const { filterChanged, filter, @@ -336,4 +358,4 @@ export class IndexTableUi extends Component { } } -export const IndexTable = injectI18n(IndexTableUi); \ No newline at end of file +export const IndexTable = injectI18n(IndexTableUi); From cc8222e6a34f7322a4292b13c307902f014d111d Mon Sep 17 00:00:00 2001 From: CJ Cenizal Date: Thu, 23 Aug 2018 08:54:11 -0700 Subject: [PATCH 012/173] Convert usage of notify.error to toastNotifications.addDanger for string messages (#22243) * Update buildHierarchicalData test. --- .../kibana/public/home/load_tutorials.js | 7 +++++-- .../edit_index_pattern/edit_index_pattern.js | 7 +++---- .../status_page/public/lib/load_status.js | 6 +++--- .../__tests__/build_hierarchical_data.js | 13 +++++++++---- .../hierarchical/build_hierarchical_data.js | 13 ++++++------- src/ui/public/scripting_languages/index.js | 6 ++---- x-pack/plugins/graph/public/app.js | 4 ++-- 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/core_plugins/kibana/public/home/load_tutorials.js b/src/core_plugins/kibana/public/home/load_tutorials.js index e74b083c25b642..8894a0e78b8b8d 100644 --- a/src/core_plugins/kibana/public/home/load_tutorials.js +++ b/src/core_plugins/kibana/public/home/load_tutorials.js @@ -19,7 +19,7 @@ import _ from 'lodash'; import chrome from 'ui/chrome'; -import { notify } from 'ui/notify'; +import { toastNotifications } from 'ui/notify'; const baseUrl = chrome.addBasePath('/api/kibana/home/tutorials'); const headers = new Headers(); @@ -44,7 +44,10 @@ async function loadTutorials() { tutorials = await response.json(); tutorialsLoaded = true; } catch(err) { - notify.error(`Unable to load tutorials, ${err}`); + toastNotifications.addDanger({ + title: 'Unable to load tutorials', + text: err.message, + }); } } diff --git a/src/core_plugins/kibana/public/management/sections/indices/edit_index_pattern/edit_index_pattern.js b/src/core_plugins/kibana/public/management/sections/indices/edit_index_pattern/edit_index_pattern.js index dc7b253d1370f3..80b1f9895b622a 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/edit_index_pattern/edit_index_pattern.js +++ b/src/core_plugins/kibana/public/management/sections/indices/edit_index_pattern/edit_index_pattern.js @@ -22,7 +22,7 @@ import './index_header'; import './create_edit_field'; import { KbnUrlProvider } from 'ui/url'; import { IndicesEditSectionsProvider } from './edit_sections'; -import { fatalError } from 'ui/notify'; +import { fatalError, toastNotifications } from 'ui/notify'; import uiRoutes from 'ui/routes'; import { uiModules } from 'ui/modules'; import template from './edit_index_pattern.html'; @@ -181,8 +181,7 @@ uiRoutes uiModules.get('apps/management') .controller('managementIndicesEdit', function ( - $scope, $location, $route, config, indexPatterns, Notifier, Private, AppState, docTitle, confirmModal) { - const notify = new Notifier(); + $scope, $location, $route, config, indexPatterns, Private, AppState, docTitle, confirmModal) { const $state = $scope.state = new AppState(); const { fieldWildcardMatcher } = Private(FieldWildcardProvider); @@ -292,7 +291,7 @@ uiModules.get('apps/management') const errorMessage = i18n.translate('kbn.management.editIndexPattern.notDateErrorMessage', { defaultMessage: 'That field is a {fieldType} not a date.', values: { fieldType: field.type } }); - notify.error(errorMessage); + toastNotifications.addDanger(errorMessage); return; } $scope.indexPattern.timeFieldName = field.name; diff --git a/src/core_plugins/status_page/public/lib/load_status.js b/src/core_plugins/status_page/public/lib/load_status.js index d21fe0c9e9b5a0..9cb1046005ea00 100644 --- a/src/core_plugins/status_page/public/lib/load_status.js +++ b/src/core_plugins/status_page/public/lib/load_status.js @@ -20,7 +20,7 @@ import _ from 'lodash'; import chrome from 'ui/chrome'; -import { notify } from 'ui/notify'; +import { toastNotifications } from 'ui/notify'; import { i18n } from '@kbn/i18n'; // Module-level error returned by notify.error @@ -130,7 +130,7 @@ async function loadStatus(fetchFn = fetchData) { }, ); - errorNotif = notify.error(serverIsDownErrorMessage); + errorNotif = toastNotifications.addDanger(serverIsDownErrorMessage); return e; } @@ -144,7 +144,7 @@ async function loadStatus(fetchFn = fetchData) { }, ); - errorNotif = notify.error(serverStatusCodeErrorMessage); + errorNotif = toastNotifications.addDanger(serverStatusCodeErrorMessage); return; } diff --git a/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js b/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js index 293032e0f6cc7b..f0b5f8f2bb533a 100644 --- a/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js +++ b/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js @@ -23,6 +23,7 @@ import fixtures from 'fixtures/fake_hierarchical_data'; import sinon from 'sinon'; import expect from 'expect.js'; import ngMock from 'ng_mock'; +import { toastNotifications } from 'ui/notify'; import { VisProvider } from '../../../vis'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import { BuildHierarchicalDataProvider } from '../build_hierarchical_data'; @@ -276,6 +277,9 @@ describe('buildHierarchicalData', function () { let results; beforeEach(function () { + // Clear existing toasts. + toastNotifications.list.splice(0); + let id = 1; vis = new Vis(indexPattern, { type: 'pie', @@ -299,10 +303,11 @@ describe('buildHierarchicalData', function () { }); it('should set the hits attribute for the results', function () { - const errCall = Notifier.prototype.error.getCall(0); - expect(errCall).to.be.ok(); - expect(errCall.args[0]).to.contain('not supported'); - + // Ideally, buildHierarchicalData shouldn't be tightly coupled to toastNotifications. Instead, + // it should notify its consumer of this error and the consumer should be responsible for + // notifying the user. This test verifies the side effect of the error until we can remove + // this coupling. + expect(toastNotifications.list).to.have.length(1); expect(results).to.have.property('slices'); expect(results).to.have.property('names'); expect(results.names).to.have.length(2); diff --git a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js index d0b98a7ef01ba9..fc7734a13d8526 100644 --- a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js +++ b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js @@ -18,6 +18,7 @@ */ import _ from 'lodash'; +import { toastNotifications } from 'ui/notify'; import { extractBuckets } from './_extract_buckets'; import { createRawData } from './_create_raw_data'; import { arrayToLinkedList } from './_array_to_linked_list'; @@ -25,15 +26,10 @@ import AggConfigResult from '../../vis/agg_config_result'; import { AggResponseHierarchicalBuildSplitProvider } from './_build_split'; import { HierarchicalTooltipFormatterProvider } from './_hierarchical_tooltip_formatter'; -export function BuildHierarchicalDataProvider(Private, Notifier) { +export function BuildHierarchicalDataProvider(Private) { const buildSplit = Private(AggResponseHierarchicalBuildSplitProvider); const tooltipFormatter = Private(HierarchicalTooltipFormatterProvider); - - const notify = new Notifier({ - location: 'Pie chart response converter' - }); - return function (vis, resp) { // Create a reference to the buckets let buckets = vis.getAggConfig().bySchemaGroup.buckets; @@ -73,7 +69,10 @@ export function BuildHierarchicalDataProvider(Private, Notifier) { const aggData = resp.aggregations ? resp.aggregations[firstAgg.id] : null; if (!firstAgg._next && firstAgg.schema.name === 'split') { - notify.error('Splitting charts without splitting slices is not supported. Pretending that we are just splitting slices.'); + toastNotifications.addDanger({ + title: 'Splitting charts without splitting slices is not supported', + text: 'Pretending that we are just splitting slices.' + }); } // start with splitting slices diff --git a/src/ui/public/scripting_languages/index.js b/src/ui/public/scripting_languages/index.js index f2098c30647855..19fb82e00db5e1 100644 --- a/src/ui/public/scripting_languages/index.js +++ b/src/ui/public/scripting_languages/index.js @@ -18,9 +18,7 @@ */ import chrome from '../chrome'; -import { Notifier } from '../notify'; - -const notify = new Notifier({ location: 'Scripting Language Service' }); +import { toastNotifications } from '../notify'; export function getSupportedScriptingLanguages() { return ['painless']; @@ -35,7 +33,7 @@ export function GetEnabledScriptingLanguagesProvider($http) { return $http.get(chrome.addBasePath('/api/kibana/scripts/languages')) .then((res) => res.data) .catch(() => { - notify.error('Error getting available scripting languages from Elasticsearch'); + toastNotifications.addDanger('Error getting available scripting languages from Elasticsearch'); return []; }); }; diff --git a/x-pack/plugins/graph/public/app.js b/x-pack/plugins/graph/public/app.js index 867279eddde888..577a537af3fef1 100644 --- a/x-pack/plugins/graph/public/app.js +++ b/x-pack/plugins/graph/public/app.js @@ -101,7 +101,7 @@ uiRoutes return savedGraphWorkspaces.get($route.current.params.id) .catch( function () { - notify.error('Missing workspace'); + toastNotifications.addDanger('Missing workspace'); } ); @@ -830,7 +830,7 @@ app.controller('graphuiPlugin', function ($scope, $route, $interval, $http, kbnU } }); if(!savedObjectIndexPattern) { - notify.error('Missing index pattern:' + wsObj.indexPattern); + toastNotifications.addDanger(`'Missing index pattern ${wsObj.indexPattern}`); return; } From 9f8372e8b3542bd68a238e86e87d4a7ca6b324eb Mon Sep 17 00:00:00 2001 From: Brandon Kobel Date: Thu, 23 Aug 2018 14:07:29 -0400 Subject: [PATCH 013/173] Skipping Visualize "data table with index without time filter" (#22323) --- test/functional/apps/visualize/_data_table_nontimeindex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/apps/visualize/_data_table_nontimeindex.js b/test/functional/apps/visualize/_data_table_nontimeindex.js index 45055f2f18843c..5a4b5f82acf545 100644 --- a/test/functional/apps/visualize/_data_table_nontimeindex.js +++ b/test/functional/apps/visualize/_data_table_nontimeindex.js @@ -26,7 +26,7 @@ export default function ({ getService, getPageObjects }) { const renderable = getService('renderable'); const PageObjects = getPageObjects(['common', 'visualize', 'header']); - describe('data table with index without time filter', function indexPatternCreation() { + describe.skip('data table with index without time filter', function indexPatternCreation() { const vizName1 = 'Visualization DataTable without time filter'; before(async function () { From 35abc069e8752327d88b599dc02f60dad59b01a5 Mon Sep 17 00:00:00 2001 From: Rashmi Kulkarni Date: Thu, 23 Aug 2018 11:51:51 -0700 Subject: [PATCH 014/173] added log info for clarity while running the test with additional parameters (#22277) (#22314) --- test/functional/apps/management/_test_huge_fields.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/functional/apps/management/_test_huge_fields.js b/test/functional/apps/management/_test_huge_fields.js index 15ff739899f226..4b137def5b8e83 100644 --- a/test/functional/apps/management/_test_huge_fields.js +++ b/test/functional/apps/management/_test_huge_fields.js @@ -21,6 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); + const log = getService('log'); const PageObjects = getPageObjects(['common', 'home', 'settings']); describe('test large number of fields @skipcloud', function () { @@ -34,6 +35,8 @@ export default function ({ getService, getPageObjects }) { it('test_huge data should have expected number of fields', async function () { const tabCount = await PageObjects.settings.getFieldsTabCount(); + //default : maxPayloadBytes is 1048576 + log.info('if there is a failure, start the server with "node scripts/functional_tests_server -- --server.maxPayloadBytes=1648576"'); expect(tabCount).to.be(EXPECTED_FIELD_COUNT); }); From 60ae2f55ba777e4461d7472a55174a75cf7a24eb Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Thu, 23 Aug 2018 22:31:32 +0200 Subject: [PATCH 015/173] Revamp core environment class to support upcoming core<-->legacy bootstrap inversion. (#21885) --- .../server/config/__tests__/__mocks__/env.ts | 33 +--- .../__tests__/__snapshots__/env.test.ts.snap | 149 ++++++++++++++++ .../config/__tests__/config_service.test.ts | 29 ++-- src/core/server/config/__tests__/env.test.ts | 126 +++++++------- src/core/server/config/config_service.ts | 7 +- src/core/server/config/env.ts | 81 +++++---- .../__snapshots__/http_server.test.ts.snap | 22 +++ .../server/http/__tests__/http_server.test.ts | 107 ++---------- src/core/server/http/http_server.ts | 49 ++---- .../legacy_platform_proxifier.test.ts.snap | 20 ++- .../__tests__/legacy_kbn_server.test.ts | 31 ---- .../legacy_platform_proxifier.test.ts | 159 ++++++------------ src/core/server/legacy_compat/index.ts | 28 ++- .../server/legacy_compat/legacy_kbn_server.ts | 34 ---- .../legacy_platform_proxifier.ts | 74 +++++--- .../{package_json.js => package_json.ts} | 3 +- 16 files changed, 479 insertions(+), 473 deletions(-) create mode 100644 src/core/server/config/__tests__/__snapshots__/env.test.ts.snap create mode 100644 src/core/server/http/__tests__/__snapshots__/http_server.test.ts.snap delete mode 100644 src/core/server/legacy_compat/__tests__/legacy_kbn_server.test.ts delete mode 100644 src/core/server/legacy_compat/legacy_kbn_server.ts rename src/utils/{package_json.js => package_json.ts} (93%) diff --git a/src/core/server/config/__tests__/__mocks__/env.ts b/src/core/server/config/__tests__/__mocks__/env.ts index e86cd9aab77cda..fe33fd32f46489 100644 --- a/src/core/server/config/__tests__/__mocks__/env.ts +++ b/src/core/server/config/__tests__/__mocks__/env.ts @@ -21,33 +21,14 @@ import { EnvOptions } from '../../env'; -interface MockEnvOptions { - config?: string; - kbnServer?: any; - mode?: EnvOptions['mode']['name']; - packageInfo?: Partial; -} - -export function getEnvOptions({ - config, - kbnServer, - mode = 'development', - packageInfo = {}, -}: MockEnvOptions = {}): EnvOptions { +export function getEnvOptions(options: Partial = {}): EnvOptions { return { - config, - kbnServer, - mode: { - dev: mode === 'development', - name: mode, - prod: mode === 'production', - }, - packageInfo: { - branch: 'some-branch', - buildNum: 1, - buildSha: 'some-sha-256', - version: 'some-version', - ...packageInfo, + configs: options.configs || [], + cliArgs: { + dev: true, + ...(options.cliArgs || {}), }, + isDevClusterMaster: + options.isDevClusterMaster !== undefined ? options.isDevClusterMaster : false, }; } diff --git a/src/core/server/config/__tests__/__snapshots__/env.test.ts.snap b/src/core/server/config/__tests__/__snapshots__/env.test.ts.snap new file mode 100644 index 00000000000000..db2917da5406f0 --- /dev/null +++ b/src/core/server/config/__tests__/__snapshots__/env.test.ts.snap @@ -0,0 +1,149 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`correctly creates default environment in dev mode.: env properties 1`] = ` +Env { + "binDir": "/test/cwd/bin", + "cliArgs": Object { + "dev": true, + "someArg": 1, + "someOtherArg": "2", + }, + "configDir": "/test/cwd/config", + "configs": Array [ + "/test/cwd/config/kibana.yml", + ], + "corePluginsDir": "/test/cwd/core_plugins", + "homeDir": "/test/cwd", + "isDevClusterMaster": true, + "legacy": EventEmitter { + "_events": Object {}, + "_eventsCount": 0, + "_maxListeners": undefined, + "domain": null, + }, + "logDir": "/test/cwd/log", + "mode": Object { + "dev": true, + "name": "development", + "prod": false, + }, + "packageInfo": Object { + "branch": "some-branch", + "buildNum": 9007199254740991, + "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "version": "some-version", + }, + "staticFilesDir": "/test/cwd/ui", +} +`; + +exports[`correctly creates default environment in prod distributable mode.: env properties 1`] = ` +Env { + "binDir": "/test/cwd/bin", + "cliArgs": Object { + "dev": false, + "someArg": 1, + "someOtherArg": "2", + }, + "configDir": "/test/cwd/config", + "configs": Array [ + "/some/other/path/some-kibana.yml", + ], + "corePluginsDir": "/test/cwd/core_plugins", + "homeDir": "/test/cwd", + "isDevClusterMaster": false, + "legacy": EventEmitter { + "_events": Object {}, + "_eventsCount": 0, + "_maxListeners": undefined, + "domain": null, + }, + "logDir": "/test/cwd/log", + "mode": Object { + "dev": false, + "name": "production", + "prod": true, + }, + "packageInfo": Object { + "branch": "feature-v1", + "buildNum": 100, + "buildSha": "feature-v1-build-sha", + "version": "v1", + }, + "staticFilesDir": "/test/cwd/ui", +} +`; + +exports[`correctly creates default environment in prod non-distributable mode.: env properties 1`] = ` +Env { + "binDir": "/test/cwd/bin", + "cliArgs": Object { + "dev": false, + "someArg": 1, + "someOtherArg": "2", + }, + "configDir": "/test/cwd/config", + "configs": Array [ + "/some/other/path/some-kibana.yml", + ], + "corePluginsDir": "/test/cwd/core_plugins", + "homeDir": "/test/cwd", + "isDevClusterMaster": false, + "legacy": EventEmitter { + "_events": Object {}, + "_eventsCount": 0, + "_maxListeners": undefined, + "domain": null, + }, + "logDir": "/test/cwd/log", + "mode": Object { + "dev": false, + "name": "production", + "prod": true, + }, + "packageInfo": Object { + "branch": "feature-v1", + "buildNum": 9007199254740991, + "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "version": "v1", + }, + "staticFilesDir": "/test/cwd/ui", +} +`; + +exports[`correctly creates environment with constructor.: env properties 1`] = ` +Env { + "binDir": "/some/home/dir/bin", + "cliArgs": Object { + "dev": false, + "someArg": 1, + "someOtherArg": "2", + }, + "configDir": "/some/home/dir/config", + "configs": Array [ + "/some/other/path/some-kibana.yml", + ], + "corePluginsDir": "/some/home/dir/core_plugins", + "homeDir": "/some/home/dir", + "isDevClusterMaster": false, + "legacy": EventEmitter { + "_events": Object {}, + "_eventsCount": 0, + "_maxListeners": undefined, + "domain": null, + }, + "logDir": "/some/home/dir/log", + "mode": Object { + "dev": false, + "name": "production", + "prod": true, + }, + "packageInfo": Object { + "branch": "feature-v1", + "buildNum": 100, + "buildSha": "feature-v1-build-sha", + "version": "v1", + }, + "staticFilesDir": "/some/home/dir/ui", +} +`; diff --git a/src/core/server/config/__tests__/config_service.test.ts b/src/core/server/config/__tests__/config_service.test.ts index 1cac0d4ef8d0e3..2dbf99587f3349 100644 --- a/src/core/server/config/__tests__/config_service.test.ts +++ b/src/core/server/config/__tests__/config_service.test.ts @@ -18,8 +18,13 @@ */ /* tslint:disable max-classes-per-file */ + import { BehaviorSubject } from 'rxjs'; import { first } from 'rxjs/operators'; + +const mockPackage = new Proxy({ raw: {} as any }, { get: (obj, prop) => obj.raw[prop] }); +jest.mock('../../../../utils/package_json', () => ({ pkg: mockPackage })); + import { schema, Type, TypeOf } from '../schema'; import { ConfigService, ObjectToRawConfigAdapter } from '..'; @@ -161,21 +166,19 @@ test('tracks unhandled paths', async () => { }); test('correctly passes context', async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ foo: {} })); + mockPackage.raw = { + branch: 'feature-v1', + version: 'v1', + build: { + distributable: true, + number: 100, + sha: 'feature-v1-build-sha', + }, + }; - const env = new Env( - '/kibana', - getEnvOptions({ - mode: 'development', - packageInfo: { - branch: 'feature-v1', - buildNum: 100, - buildSha: 'feature-v1-build-sha', - version: 'v1', - }, - }) - ); + const env = new Env('/kibana', getEnvOptions()); + const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ foo: {} })); const configService = new ConfigService(config$, env, logger); const configs = configService.atPath( 'foo', diff --git a/src/core/server/config/__tests__/env.test.ts b/src/core/server/config/__tests__/env.test.ts index 8707bb2f2a2f71..26163c82c84642 100644 --- a/src/core/server/config/__tests__/env.test.ts +++ b/src/core/server/config/__tests__/env.test.ts @@ -29,76 +29,82 @@ jest.mock('path', () => ({ }, })); +const mockPackage = new Proxy({ raw: {} as any }, { get: (obj, prop) => obj.raw[prop] }); +jest.mock('../../../../utils/package_json', () => ({ pkg: mockPackage })); + import { Env } from '../env'; -import { getEnvOptions } from './__mocks__/env'; - -test('correctly creates default environment with empty options.', () => { - const envOptions = getEnvOptions(); - const defaultEnv = Env.createDefault(envOptions); - - expect(defaultEnv.homeDir).toEqual('/test/cwd'); - expect(defaultEnv.configDir).toEqual('/test/cwd/config'); - expect(defaultEnv.corePluginsDir).toEqual('/test/cwd/core_plugins'); - expect(defaultEnv.binDir).toEqual('/test/cwd/bin'); - expect(defaultEnv.logDir).toEqual('/test/cwd/log'); - expect(defaultEnv.staticFilesDir).toEqual('/test/cwd/ui'); - - expect(defaultEnv.getConfigFile()).toEqual('/test/cwd/config/kibana.yml'); - expect(defaultEnv.getLegacyKbnServer()).toBeUndefined(); - expect(defaultEnv.getMode()).toEqual(envOptions.mode); - expect(defaultEnv.getPackageInfo()).toEqual(envOptions.packageInfo); + +test('correctly creates default environment in dev mode.', () => { + mockPackage.raw = { + branch: 'some-branch', + version: 'some-version', + }; + + const defaultEnv = Env.createDefault({ + cliArgs: { dev: true, someArg: 1, someOtherArg: '2' }, + configs: ['/test/cwd/config/kibana.yml'], + isDevClusterMaster: true, + }); + + expect(defaultEnv).toMatchSnapshot('env properties'); }); -test('correctly creates default environment with options overrides.', () => { - const mockEnvOptions = getEnvOptions({ - config: '/some/other/path/some-kibana.yml', - kbnServer: {}, - mode: 'production', - packageInfo: { - branch: 'feature-v1', - buildNum: 100, - buildSha: 'feature-v1-build-sha', - version: 'v1', +test('correctly creates default environment in prod distributable mode.', () => { + mockPackage.raw = { + branch: 'feature-v1', + version: 'v1', + build: { + distributable: true, + number: 100, + sha: 'feature-v1-build-sha', }, + }; + + const defaultEnv = Env.createDefault({ + cliArgs: { dev: false, someArg: 1, someOtherArg: '2' }, + configs: ['/some/other/path/some-kibana.yml'], + isDevClusterMaster: false, }); - const defaultEnv = Env.createDefault(mockEnvOptions); - - expect(defaultEnv.homeDir).toEqual('/test/cwd'); - expect(defaultEnv.configDir).toEqual('/test/cwd/config'); - expect(defaultEnv.corePluginsDir).toEqual('/test/cwd/core_plugins'); - expect(defaultEnv.binDir).toEqual('/test/cwd/bin'); - expect(defaultEnv.logDir).toEqual('/test/cwd/log'); - expect(defaultEnv.staticFilesDir).toEqual('/test/cwd/ui'); - - expect(defaultEnv.getConfigFile()).toEqual(mockEnvOptions.config); - expect(defaultEnv.getLegacyKbnServer()).toBe(mockEnvOptions.kbnServer); - expect(defaultEnv.getMode()).toEqual(mockEnvOptions.mode); - expect(defaultEnv.getPackageInfo()).toEqual(mockEnvOptions.packageInfo); + + expect(defaultEnv).toMatchSnapshot('env properties'); }); -test('correctly creates environment with constructor.', () => { - const mockEnvOptions = getEnvOptions({ - config: '/some/other/path/some-kibana.yml', - mode: 'production', - packageInfo: { - branch: 'feature-v1', - buildNum: 100, - buildSha: 'feature-v1-build-sha', - version: 'v1', +test('correctly creates default environment in prod non-distributable mode.', () => { + mockPackage.raw = { + branch: 'feature-v1', + version: 'v1', + build: { + distributable: false, + number: 100, + sha: 'feature-v1-build-sha', }, + }; + + const defaultEnv = Env.createDefault({ + cliArgs: { dev: false, someArg: 1, someOtherArg: '2' }, + configs: ['/some/other/path/some-kibana.yml'], + isDevClusterMaster: false, }); - const defaultEnv = new Env('/some/home/dir', mockEnvOptions); + expect(defaultEnv).toMatchSnapshot('env properties'); +}); - expect(defaultEnv.homeDir).toEqual('/some/home/dir'); - expect(defaultEnv.configDir).toEqual('/some/home/dir/config'); - expect(defaultEnv.corePluginsDir).toEqual('/some/home/dir/core_plugins'); - expect(defaultEnv.binDir).toEqual('/some/home/dir/bin'); - expect(defaultEnv.logDir).toEqual('/some/home/dir/log'); - expect(defaultEnv.staticFilesDir).toEqual('/some/home/dir/ui'); +test('correctly creates environment with constructor.', () => { + mockPackage.raw = { + branch: 'feature-v1', + version: 'v1', + build: { + distributable: true, + number: 100, + sha: 'feature-v1-build-sha', + }, + }; + + const env = new Env('/some/home/dir', { + cliArgs: { dev: false, someArg: 1, someOtherArg: '2' }, + configs: ['/some/other/path/some-kibana.yml'], + isDevClusterMaster: false, + }); - expect(defaultEnv.getConfigFile()).toEqual(mockEnvOptions.config); - expect(defaultEnv.getLegacyKbnServer()).toBeUndefined(); - expect(defaultEnv.getMode()).toEqual(mockEnvOptions.mode); - expect(defaultEnv.getPackageInfo()).toEqual(mockEnvOptions.packageInfo); + expect(env).toMatchSnapshot('env properties'); }); diff --git a/src/core/server/config/config_service.ts b/src/core/server/config/config_service.ts index a918bb588e94c4..bd839e51cbcf56 100644 --- a/src/core/server/config/config_service.ts +++ b/src/core/server/config/config_service.ts @@ -138,13 +138,12 @@ export class ConfigService { ); } - const environmentMode = this.env.getMode(); const config = ConfigClass.schema.validate( rawConfig, { - dev: environmentMode.dev, - prod: environmentMode.prod, - ...this.env.getPackageInfo(), + dev: this.env.mode.dev, + prod: this.env.mode.prod, + ...this.env.packageInfo, }, namespace ); diff --git a/src/core/server/config/env.ts b/src/core/server/config/env.ts index 87e4b6567120b0..56d6c1ae94a0ca 100644 --- a/src/core/server/config/env.ts +++ b/src/core/server/config/env.ts @@ -17,10 +17,11 @@ * under the License. */ +import { EventEmitter } from 'events'; import { resolve } from 'path'; import process from 'process'; -import { LegacyKbnServer } from '../legacy_compat'; +import { pkg } from '../../../utils/package_json'; interface PackageInfo { version: string; @@ -36,11 +37,9 @@ interface EnvironmentMode { } export interface EnvOptions { - config?: string; - kbnServer?: any; - packageInfo: PackageInfo; - mode: EnvironmentMode; - [key: string]: any; + configs: string[]; + cliArgs: Record; + isDevClusterMaster: boolean; } export class Env { @@ -58,43 +57,63 @@ export class Env { public readonly staticFilesDir: string; /** - * @internal + * Information about Kibana package (version, build number etc.). */ - constructor(readonly homeDir: string, private readonly options: EnvOptions) { - this.configDir = resolve(this.homeDir, 'config'); - this.corePluginsDir = resolve(this.homeDir, 'core_plugins'); - this.binDir = resolve(this.homeDir, 'bin'); - this.logDir = resolve(this.homeDir, 'log'); - this.staticFilesDir = resolve(this.homeDir, 'ui'); - } + public readonly packageInfo: Readonly; - public getConfigFile() { - const defaultConfigFile = this.getDefaultConfigFile(); - return this.options.config === undefined ? defaultConfigFile : this.options.config; - } + /** + * Mode Kibana currently run in (development or production). + */ + public readonly mode: Readonly; /** * @internal */ - public getLegacyKbnServer(): LegacyKbnServer | undefined { - return this.options.kbnServer; - } + public readonly legacy: EventEmitter; /** - * Gets information about Kibana package (version, build number etc.). + * Arguments provided through command line. */ - public getPackageInfo() { - return this.options.packageInfo; - } + public readonly cliArgs: Readonly>; /** - * Gets mode Kibana currently run in (development or production). + * Paths to the configuration files. */ - public getMode() { - return this.options.mode; - } + public readonly configs: ReadonlyArray; + + /** + * Indicates that this Kibana instance is run as development Node Cluster master. + */ + public readonly isDevClusterMaster: boolean; + + /** + * @internal + */ + constructor(readonly homeDir: string, options: EnvOptions) { + this.configDir = resolve(this.homeDir, 'config'); + this.corePluginsDir = resolve(this.homeDir, 'core_plugins'); + this.binDir = resolve(this.homeDir, 'bin'); + this.logDir = resolve(this.homeDir, 'log'); + this.staticFilesDir = resolve(this.homeDir, 'ui'); + + this.cliArgs = Object.freeze(options.cliArgs); + this.configs = Object.freeze(options.configs); + this.isDevClusterMaster = options.isDevClusterMaster; + + this.mode = Object.freeze({ + dev: this.cliArgs.dev, + name: this.cliArgs.dev ? 'development' : 'production', + prod: !this.cliArgs.dev, + }); + + const isKibanaDistributable = pkg.build && pkg.build.distributable === true; + this.packageInfo = Object.freeze({ + branch: pkg.branch, + buildNum: isKibanaDistributable ? pkg.build.number : Number.MAX_SAFE_INTEGER, + buildSha: isKibanaDistributable ? pkg.build.sha : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + version: pkg.version, + }); - private getDefaultConfigFile() { - return resolve(this.configDir, 'kibana.yml'); + this.legacy = new EventEmitter(); } } diff --git a/src/core/server/http/__tests__/__snapshots__/http_server.test.ts.snap b/src/core/server/http/__tests__/__snapshots__/http_server.test.ts.snap new file mode 100644 index 00000000000000..3060d7b4689603 --- /dev/null +++ b/src/core/server/http/__tests__/__snapshots__/http_server.test.ts.snap @@ -0,0 +1,22 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`broadcasts server and connection options to the legacy "channel" 1`] = ` +Object { + "host": "127.0.0.1", + "port": 12345, + "routes": Object { + "cors": undefined, + "payload": Object { + "maxBytes": 1024, + }, + "validate": Object { + "options": Object { + "abortEarly": false, + }, + }, + }, + "state": Object { + "strictHeader": false, + }, +} +`; diff --git a/src/core/server/http/__tests__/http_server.test.ts b/src/core/server/http/__tests__/http_server.test.ts index ed07d8220141bd..7f49d153163a9b 100644 --- a/src/core/server/http/__tests__/http_server.test.ts +++ b/src/core/server/http/__tests__/http_server.test.ts @@ -24,7 +24,6 @@ jest.mock('fs', () => ({ })); import Chance from 'chance'; -import http from 'http'; import supertest from 'supertest'; import { Env } from '../../config'; @@ -36,6 +35,7 @@ import { Router } from '../router'; const chance = new Chance(); +let env: Env; let server: HttpServer; let config: HttpConfig; @@ -51,7 +51,8 @@ beforeEach(() => { ssl: {}, } as HttpConfig; - server = new HttpServer(logger.get(), new Env('/kibana', getEnvOptions())); + env = new Env('/kibana', getEnvOptions()); + server = new HttpServer(logger.get(), env); }); afterEach(async () => { @@ -563,99 +564,21 @@ describe('with defined `redirectHttpFromPort`', () => { }); }); -describe('when run within legacy platform', () => { - let newPlatformProxyListenerMock: any; - beforeEach(() => { - newPlatformProxyListenerMock = { - bind: jest.fn(), - proxy: jest.fn(), - }; - - const kbnServerMock = { - newPlatformProxyListener: newPlatformProxyListenerMock, - }; - - server = new HttpServer( - logger.get(), - new Env('/kibana', getEnvOptions({ kbnServer: kbnServerMock })) - ); - - const router = new Router('/new'); - router.get({ path: '/', validate: false }, async (req, res) => { - return res.ok({ key: 'new-platform' }); - }); - - server.registerRouter(router); - - newPlatformProxyListenerMock.proxy.mockImplementation( - (req: http.IncomingMessage, res: http.ServerResponse) => { - res.writeHead(200, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ key: `legacy-platform:${req.url}` })); - } - ); - }); - - test('binds proxy listener to server.', async () => { - expect(newPlatformProxyListenerMock.bind).not.toHaveBeenCalled(); - - await server.start(config); - - expect(newPlatformProxyListenerMock.bind).toHaveBeenCalledTimes(1); - expect(newPlatformProxyListenerMock.bind).toHaveBeenCalledWith( - expect.any((http as any).Server) - ); - expect(newPlatformProxyListenerMock.bind.mock.calls[0][0]).toBe(getServerListener(server)); - }); - - test('forwards request to legacy platform if new one cannot handle it', async () => { - await server.start(config); - - await supertest(getServerListener(server)) - .get('/legacy') - .expect(200) - .then(res => { - expect(res.body).toEqual({ key: 'legacy-platform:/legacy' }); - expect(newPlatformProxyListenerMock.proxy).toHaveBeenCalledTimes(1); - expect(newPlatformProxyListenerMock.proxy).toHaveBeenCalledWith( - expect.any((http as any).IncomingMessage), - expect.any((http as any).ServerResponse) - ); - }); - }); +test('broadcasts server and connection options to the legacy "channel"', async () => { + const onConnectionListener = jest.fn(); + env.legacy.on('connection', onConnectionListener); - test('forwards request to legacy platform and rewrites base path if needed', async () => { - await server.start({ - ...config, - basePath: '/bar', - rewriteBasePath: true, - }); - - await supertest(getServerListener(server)) - .get('/legacy') - .expect(404); + expect(onConnectionListener).not.toHaveBeenCalled(); - await supertest(getServerListener(server)) - .get('/bar/legacy') - .expect(200) - .then(res => { - expect(res.body).toEqual({ key: 'legacy-platform:/legacy' }); - expect(newPlatformProxyListenerMock.proxy).toHaveBeenCalledTimes(1); - expect(newPlatformProxyListenerMock.proxy).toHaveBeenCalledWith( - expect.any((http as any).IncomingMessage), - expect.any((http as any).ServerResponse) - ); - }); + await server.start({ + ...config, + port: 12345, }); - test('do not forward request to legacy platform if new one can handle it', async () => { - await server.start(config); + expect(onConnectionListener).toHaveBeenCalledTimes(1); - await supertest(getServerListener(server)) - .get('/new/') - .expect(200) - .then(res => { - expect(res.body).toEqual({ key: 'new-platform' }); - expect(newPlatformProxyListenerMock.proxy).not.toHaveBeenCalled(); - }); - }); + const [[{ options, server: rawServer }]] = onConnectionListener.mock.calls; + expect(rawServer).toBeDefined(); + expect(rawServer).toBe((server as any).server); + expect(options).toMatchSnapshot(); }); diff --git a/src/core/server/http/http_server.ts b/src/core/server/http/http_server.ts index ae02018c435456..21cde147b8ea24 100644 --- a/src/core/server/http/http_server.ts +++ b/src/core/server/http/http_server.ts @@ -45,7 +45,10 @@ export class HttpServer { } public async start(config: HttpConfig) { - this.server = createServer(getServerOptions(config)); + this.log.debug('starting http server'); + + const serverOptions = getServerOptions(config); + this.server = createServer(serverOptions); this.setupBasePathRewrite(this.server, config); @@ -59,32 +62,13 @@ export class HttpServer { } } - const legacyKbnServer = this.env.getLegacyKbnServer(); - if (legacyKbnServer !== undefined) { - legacyKbnServer.newPlatformProxyListener.bind(this.server.listener); - - // We register Kibana proxy middleware right before we start server to allow - // all new platform plugins register their routes, so that `legacyKbnServer` - // handles only requests that aren't handled by the new platform. - this.server.route({ - handler: ({ raw: { req, res } }, responseToolkit) => { - legacyKbnServer.newPlatformProxyListener.proxy(req, res); - return responseToolkit.abandon; - }, - method: '*', - options: { - payload: { - output: 'stream', - parse: false, - timeout: false, - // Having such a large value here will allow legacy routes to override - // maximum allowed payload size set in the core http server if needed. - maxBytes: Number.MAX_SAFE_INTEGER, - }, - }, - path: '/{p*}', - }); - } + // Notify legacy compatibility layer about HTTP(S) connection providing server + // instance with connection options so that we can properly bridge core and + // the "legacy" Kibana internally. + this.env.legacy.emit('connection', { + options: serverOptions, + server: this.server, + }); await this.server.start(); @@ -96,12 +80,13 @@ export class HttpServer { } public async stop() { - this.log.info('stopping http server'); - - if (this.server !== undefined) { - await this.server.stop(); - this.server = undefined; + if (this.server === undefined) { + return; } + + this.log.debug('stopping http server'); + await this.server.stop(); + this.server = undefined; } private setupBasePathRewrite(server: Server, config: HttpConfig) { diff --git a/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_proxifier.test.ts.snap b/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_proxifier.test.ts.snap index 41d10685923dfb..eb58ca8cbc5fdb 100644 --- a/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_proxifier.test.ts.snap +++ b/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_proxifier.test.ts.snap @@ -1,3 +1,21 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`correctly unbinds from the previous server. 1`] = `"Unhandled \\"error\\" event. (Error: Some error)"`; +exports[`correctly binds to the server.: proxy route options 1`] = ` +Array [ + Array [ + Object { + "handler": [Function], + "method": "*", + "options": Object { + "payload": Object { + "maxBytes": 9007199254740991, + "output": "stream", + "parse": false, + "timeout": false, + }, + }, + "path": "/{p*}", + }, + ], +] +`; diff --git a/src/core/server/legacy_compat/__tests__/legacy_kbn_server.test.ts b/src/core/server/legacy_compat/__tests__/legacy_kbn_server.test.ts deleted file mode 100644 index 72780e1882023d..00000000000000 --- a/src/core/server/legacy_compat/__tests__/legacy_kbn_server.test.ts +++ /dev/null @@ -1,31 +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 { LegacyKbnServer } from '..'; - -test('correctly returns `newPlatformProxyListener`.', () => { - const rawKbnServer = { - newPlatform: { - proxyListener: {}, - }, - }; - - const legacyKbnServer = new LegacyKbnServer(rawKbnServer); - expect(legacyKbnServer.newPlatformProxyListener).toBe(rawKbnServer.newPlatform.proxyListener); -}); diff --git a/src/core/server/legacy_compat/__tests__/legacy_platform_proxifier.test.ts b/src/core/server/legacy_compat/__tests__/legacy_platform_proxifier.test.ts index a441b81bd171e7..27db835a0ecf3a 100644 --- a/src/core/server/legacy_compat/__tests__/legacy_platform_proxifier.test.ts +++ b/src/core/server/legacy_compat/__tests__/legacy_platform_proxifier.test.ts @@ -17,131 +17,74 @@ * under the License. */ -import { EventEmitter } from 'events'; -import { IncomingMessage, ServerResponse } from 'http'; - -class MockNetServer extends EventEmitter { - public address() { - return { port: 1234, family: 'test-family', address: 'test-address' }; - } - - public getConnections(callback: (error: Error | null, count: number) => void) { - callback(null, 100500); - } -} - -function mockNetServer() { - return new MockNetServer(); -} - -jest.mock('net', () => ({ - createServer: jest.fn(() => mockNetServer()), -})); - -import { createServer } from 'net'; +import { Server as HapiServer } from 'hapi-latest'; +import { Server } from 'net'; import { LegacyPlatformProxifier } from '..'; +import { Env } from '../../config'; +import { getEnvOptions } from '../../config/__tests__/__mocks__/env'; +import { logger } from '../../logging/__mocks__'; +let server: jest.Mocked; +let mockHapiServer: jest.Mocked; let root: any; let proxifier: LegacyPlatformProxifier; beforeEach(() => { + server = { + addListener: jest.fn(), + address: jest + .fn() + .mockReturnValue({ port: 1234, family: 'test-family', address: 'test-address' }), + getConnections: jest.fn(), + } as any; + + mockHapiServer = { listener: server, route: jest.fn() } as any; + root = { - logger: { - get: jest.fn(() => ({ - debug: jest.fn(), - info: jest.fn(), - })), - }, + logger, shutdown: jest.fn(), start: jest.fn(), } as any; - proxifier = new LegacyPlatformProxifier(root); + const env = new Env('/kibana', getEnvOptions()); + proxifier = new LegacyPlatformProxifier(root, env); + env.legacy.emit('connection', { + server: mockHapiServer, + options: { someOption: 'foo', someAnotherOption: 'bar' }, + }); }); test('correctly binds to the server.', () => { - const server = createServer(); - jest.spyOn(server, 'addListener'); - proxifier.bind(server); - - expect(server.addListener).toHaveBeenCalledTimes(4); - for (const eventName of ['listening', 'error', 'clientError', 'connection']) { + expect(mockHapiServer.route.mock.calls).toMatchSnapshot('proxy route options'); + expect(server.addListener).toHaveBeenCalledTimes(6); + for (const eventName of ['clientError', 'close', 'connection', 'error', 'listening', 'upgrade']) { expect(server.addListener).toHaveBeenCalledWith(eventName, expect.any(Function)); } }); -test('correctly binds to the server and redirects its events.', () => { - const server = createServer(); - proxifier.bind(server); - - const eventsAndListeners = new Map( - ['listening', 'error', 'clientError', 'connection'].map(eventName => { - const listener = jest.fn(); - proxifier.addListener(eventName, listener); - - return [eventName, listener] as [string, () => void]; - }) - ); +test('correctly redirects server events.', () => { + for (const eventName of ['clientError', 'close', 'connection', 'error', 'listening', 'upgrade']) { + expect(server.addListener).toHaveBeenCalledWith(eventName, expect.any(Function)); - for (const [eventName, listener] of eventsAndListeners) { - expect(listener).not.toHaveBeenCalled(); + const listener = jest.fn(); + proxifier.addListener(eventName, listener); // Emit several events, to make sure that server is not being listened with `once`. - server.emit(eventName, 1, 2, 3, 4); - server.emit(eventName, 5, 6, 7, 8); + const [, serverListener] = server.addListener.mock.calls.find( + ([serverEventName]) => serverEventName === eventName + )!; + + serverListener(1, 2, 3, 4); + serverListener(5, 6, 7, 8); expect(listener).toHaveBeenCalledTimes(2); expect(listener).toHaveBeenCalledWith(1, 2, 3, 4); expect(listener).toHaveBeenCalledWith(5, 6, 7, 8); - } -}); - -test('correctly unbinds from the previous server.', () => { - const previousServer = createServer(); - proxifier.bind(previousServer); - - const currentServer = createServer(); - proxifier.bind(currentServer); - - const eventsAndListeners = new Map( - ['listening', 'error', 'clientError', 'connection'].map(eventName => { - const listener = jest.fn(); - proxifier.addListener(eventName, listener); - - return [eventName, listener] as [string, () => void]; - }) - ); - - // Any events from the previous server should not be forwarded. - for (const [eventName, listener] of eventsAndListeners) { - // `error` event is a special case in node, if `error` is emitted, but - // there is no listener for it error will be thrown. - if (eventName === 'error') { - expect(() => - previousServer.emit(eventName, new Error('Some error')) - ).toThrowErrorMatchingSnapshot(); - } else { - previousServer.emit(eventName, 1, 2, 3, 4); - } - - expect(listener).not.toHaveBeenCalled(); - } - - // Only events from the last server should be forwarded. - for (const [eventName, listener] of eventsAndListeners) { - expect(listener).not.toHaveBeenCalled(); - - currentServer.emit(eventName, 1, 2, 3, 4); - expect(listener).toHaveBeenCalledTimes(1); - expect(listener).toHaveBeenCalledWith(1, 2, 3, 4); + proxifier.removeListener(eventName, listener); } }); test('returns `address` from the underlying server.', () => { - expect(proxifier.address()).toBeUndefined(); - - proxifier.bind(createServer()); - expect(proxifier.address()).toEqual({ address: 'test-address', family: 'test-family', @@ -168,33 +111,35 @@ test('`close` shuts down the `root`.', async () => { }); test('returns connection count from the underlying server.', () => { + server.getConnections.mockImplementation(callback => callback(null, 0)); const onGetConnectionsComplete = jest.fn(); - proxifier.getConnections(onGetConnectionsComplete); expect(onGetConnectionsComplete).toHaveBeenCalledTimes(1); expect(onGetConnectionsComplete).toHaveBeenCalledWith(null, 0); onGetConnectionsComplete.mockReset(); - proxifier.bind(createServer()); + server.getConnections.mockImplementation(callback => callback(null, 100500)); proxifier.getConnections(onGetConnectionsComplete); expect(onGetConnectionsComplete).toHaveBeenCalledTimes(1); expect(onGetConnectionsComplete).toHaveBeenCalledWith(null, 100500); }); -test('correctly proxies request and response objects.', () => { +test('proxy route abandons request processing and forwards it to the legacy Kibana', async () => { + const mockResponseToolkit = { response: jest.fn(), abandon: Symbol('abandon') }; + const mockRequest = { raw: { req: { a: 1 }, res: { b: 2 } } }; + const onRequest = jest.fn(); proxifier.addListener('request', onRequest); - const request = {} as IncomingMessage; - const response = {} as ServerResponse; - proxifier.proxy(request, response); + const [[{ handler }]] = mockHapiServer.route.mock.calls; + const response = await handler(mockRequest, mockResponseToolkit); - expect(onRequest).toHaveBeenCalledTimes(1); - expect(onRequest).toHaveBeenCalledWith(request, response); + expect(response).toBe(mockResponseToolkit.abandon); + expect(mockResponseToolkit.response).not.toHaveBeenCalled(); - // Check that exactly same objects were passed as event arguments. - expect(onRequest.mock.calls[0][0]).toBe(request); - expect(onRequest.mock.calls[0][1]).toBe(response); + // Make sure request hasn't been passed to the legacy platform. + expect(onRequest).toHaveBeenCalledTimes(1); + expect(onRequest).toHaveBeenCalledWith(mockRequest.raw.req, mockRequest.raw.res); }); diff --git a/src/core/server/legacy_compat/index.ts b/src/core/server/legacy_compat/index.ts index feed0001ee2161..dcc5c31fbb87d9 100644 --- a/src/core/server/legacy_compat/index.ts +++ b/src/core/server/legacy_compat/index.ts @@ -19,24 +19,18 @@ import { BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; + /** @internal */ export { LegacyPlatformProxifier } from './legacy_platform_proxifier'; /** @internal */ export { LegacyConfigToRawConfigAdapter, LegacyConfig } from './legacy_platform_config'; -/** @internal */ -export { LegacyKbnServer } from './legacy_kbn_server'; -import { - LegacyConfig, - LegacyConfigToRawConfigAdapter, - LegacyKbnServer, - LegacyPlatformProxifier, -} from '.'; +import { LegacyConfig, LegacyConfigToRawConfigAdapter, LegacyPlatformProxifier } from '.'; import { Env } from '../config'; import { Root } from '../root'; import { BasePathProxyRoot } from '../root/base_path_proxy_root'; -function initEnvironment(rawKbnServer: any) { +function initEnvironment(rawKbnServer: any, isDevClusterMaster = false) { const config: LegacyConfig = rawKbnServer.config; const legacyConfig$ = new BehaviorSubject(config); @@ -45,12 +39,12 @@ function initEnvironment(rawKbnServer: any) { ); const env = Env.createDefault({ - kbnServer: new LegacyKbnServer(rawKbnServer), - // The defaults for the following parameters are retrieved by the legacy - // platform from the command line or from `package.json` and stored in the - // config, so we can borrow these parameters and avoid double parsing. - mode: config.get('env'), - packageInfo: config.get('pkg'), + // The core doesn't work with configs yet, everything is provided by the + // "legacy" Kibana, so we can have empty array here. + configs: [], + // `dev` is the only CLI argument we currently use. + cliArgs: { dev: config.get('env.dev') }, + isDevClusterMaster, }); return { @@ -71,12 +65,12 @@ export const injectIntoKbnServer = (rawKbnServer: any) => { rawKbnServer.newPlatform = { // Custom HTTP Listener that will be used within legacy platform by HapiJS server. - proxyListener: new LegacyPlatformProxifier(new Root(config$, env)), + proxyListener: new LegacyPlatformProxifier(new Root(config$, env), env), updateConfig, }; }; export const createBasePathProxy = (rawKbnServer: any) => { - const { env, config$ } = initEnvironment(rawKbnServer); + const { env, config$ } = initEnvironment(rawKbnServer, true /*isDevClusterMaster*/); return new BasePathProxyRoot(config$, env); }; diff --git a/src/core/server/legacy_compat/legacy_kbn_server.ts b/src/core/server/legacy_compat/legacy_kbn_server.ts deleted file mode 100644 index 4f4cd53677d3e4..00000000000000 --- a/src/core/server/legacy_compat/legacy_kbn_server.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Represents a wrapper around legacy `kbnServer` instance that exposes only - * a subset of `kbnServer` APIs used by the new platform. - * @internal - */ -export class LegacyKbnServer { - constructor(private readonly rawKbnServer: any) {} - - /** - * Custom HTTP Listener used by HapiJS server in the legacy platform. - */ - get newPlatformProxyListener() { - return this.rawKbnServer.newPlatform.proxyListener; - } -} diff --git a/src/core/server/legacy_compat/legacy_platform_proxifier.ts b/src/core/server/legacy_compat/legacy_platform_proxifier.ts index 8e9198799988a9..8baa156266ef03 100644 --- a/src/core/server/legacy_compat/legacy_platform_proxifier.ts +++ b/src/core/server/legacy_compat/legacy_platform_proxifier.ts @@ -18,16 +18,29 @@ */ import { EventEmitter } from 'events'; -import { IncomingMessage, ServerResponse } from 'http'; import { Server } from 'net'; +import { Server as HapiServer, ServerOptions as HapiServerOptions } from 'hapi-latest'; +import { Env } from '../config'; import { Logger } from '../logging'; import { Root } from '../root'; +interface ConnectionInfo { + server: HapiServer; + options: HapiServerOptions; +} + /** * List of the server events to be forwarded to the legacy platform. */ -const ServerEventsToForward = ['listening', 'error', 'clientError', 'connection']; +const ServerEventsToForward = [ + 'clientError', + 'close', + 'connection', + 'error', + 'listening', + 'upgrade', +]; /** * Represents "proxy" between legacy and current platform. @@ -38,7 +51,7 @@ export class LegacyPlatformProxifier extends EventEmitter { private readonly log: Logger; private server?: Server; - constructor(private readonly root: Root) { + constructor(private readonly root: Root, private readonly env: Env) { super(); this.log = root.logger.get('legacy-platform-proxifier'); @@ -56,6 +69,14 @@ export class LegacyPlatformProxifier extends EventEmitter { ] as [string, (...args: any[]) => void]; }) ); + + // Once core HTTP service is ready it broadcasts the internal server it relies on + // and server options that were used to create that server so that we can properly + // bridge with the "legacy" Kibana. If server isn't run (e.g. if process is managed + // by ClusterManager or optimizer) then this event will never fire. + this.env.legacy.once('connection', (connectionInfo: ConnectionInfo) => + this.onConnection(connectionInfo) + ); } /** @@ -116,31 +137,36 @@ export class LegacyPlatformProxifier extends EventEmitter { } } - /** - * Binds Http/Https server to the LegacyPlatformProxifier. - * @param server Server to bind to. - */ - public bind(server: Server) { - const oldServer = this.server; - this.server = server; + private onConnection({ server }: ConnectionInfo) { + this.server = server.listener; for (const [eventName, eventHandler] of this.eventHandlers) { - if (oldServer !== undefined) { - oldServer.removeListener(eventName, eventHandler); - } - this.server.addListener(eventName, eventHandler); } - } - /** - * Forwards request and response objects to the legacy platform. - * This method is used whenever new platform doesn't know how to handle the request. - * @param request Native Node request object instance. - * @param response Native Node response object instance. - */ - public proxy(request: IncomingMessage, response: ServerResponse) { - this.log.debug(`Request will be handled by proxy ${request.method}:${request.url}.`); - this.emit('request', request, response); + // We register Kibana proxy middleware right before we start server to allow + // all new platform plugins register their routes, so that `legacyProxy` + // handles only requests that aren't handled by the new platform. + server.route({ + path: '/{p*}', + method: '*', + options: { + payload: { + output: 'stream', + parse: false, + timeout: false, + // Having such a large value here will allow legacy routes to override + // maximum allowed payload size set in the core http server if needed. + maxBytes: Number.MAX_SAFE_INTEGER, + }, + }, + handler: async ({ raw: { req, res } }, responseToolkit) => { + this.log.trace(`Request will be handled by proxy ${req.method}:${req.url}.`); + // Forward request and response objects to the legacy platform. This method + // is used whenever new platform doesn't know how to handle the request. + this.emit('request', req, res); + return responseToolkit.abandon; + }, + }); } } diff --git a/src/utils/package_json.js b/src/utils/package_json.ts similarity index 93% rename from src/utils/package_json.js rename to src/utils/package_json.ts index e8130345a6f9da..edacb04c6b1daf 100644 --- a/src/utils/package_json.js +++ b/src/utils/package_json.ts @@ -22,5 +22,6 @@ import { dirname } from 'path'; export const pkg = { __filename: require.resolve('../../package.json'), __dirname: dirname(require.resolve('../../package.json')), - ...require('../../package.json') + // tslint:disable no-var-requires + ...require('../../package.json'), }; From 31ac0d9fa4089eddf0033115550eaa901717427d Mon Sep 17 00:00:00 2001 From: Marco Vettorello Date: Fri, 24 Aug 2018 00:26:41 +0200 Subject: [PATCH 016/173] Skipping vertical bar chart with index without time filter (#22337) --- .../apps/visualize/_vertical_bar_chart_nontimeindex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js b/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js index 14f5b87a67d010..65ab39569612ed 100644 --- a/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js +++ b/test/functional/apps/visualize/_vertical_bar_chart_nontimeindex.js @@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }) { const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'visualize', 'header']); - describe('vertical bar chart with index without time filter', function () { + describe.skip('vertical bar chart with index without time filter', function () { const vizName1 = 'Visualization VerticalBarChart without time filter'; const initBarChart = async () => { From 9b809617b5c5ff57696b20e3b218c7db5b0123ca Mon Sep 17 00:00:00 2001 From: Lee Drengenberg Date: Thu, 23 Aug 2018 18:58:55 -0500 Subject: [PATCH 017/173] Speed up dashboard add panel (#22278) * Rebuild modulePath correctly if on Windows * Change how we find dashboard add panel is loaded * Add and use find.byClassName instead of remote * cleanup a comment --- test/functional/services/dashboard/add_panel.js | 9 +++++---- test/functional/services/find.js | 7 +++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/test/functional/services/dashboard/add_panel.js b/test/functional/services/dashboard/add_panel.js index 4d11f805edf2a0..d6d3ad6dd282f7 100644 --- a/test/functional/services/dashboard/add_panel.js +++ b/test/functional/services/dashboard/add_panel.js @@ -24,6 +24,7 @@ export function DashboardAddPanelProvider({ getService, getPageObjects }) { const testSubjects = getService('testSubjects'); const flyout = getService('flyout'); const PageObjects = getPageObjects(['header', 'common']); + const find = getService('find'); return new class DashboardAddPanel { async clickOpenAddPanel() { @@ -94,8 +95,10 @@ export function DashboardAddPanelProvider({ getService, getPageObjects }) { } async waitForEuiTableLoading() { - const addPanel = await testSubjects.find('dashboardAddPanel'); - await addPanel.waitForDeletedByClassName('euiBasicTable-loading'); + await retry.waitFor('dashboard add panel loading to complete', async () => { + const table = await find.byClassName('euiBasicTable'); + return !((await table.getAttribute('class')).includes('loading')); + }); } async closeAddPanel() { @@ -169,8 +172,6 @@ export function DashboardAddPanelProvider({ getService, getPageObjects }) { async addVisualization(vizName) { log.debug(`DashboardAddPanel.addVisualization(${vizName})`); await this.ensureAddPanelIsShowing(); - // workaround for timing issue with slideout animation - await PageObjects.common.sleep(500); await this.filterEmbeddableNames(`"${vizName.replace('-', ' ')}"`); await testSubjects.click(`addPanel${vizName.split(' ').join('-')}`); await this.closeAddPanel(); diff --git a/test/functional/services/find.js b/test/functional/services/find.js index f6d008cc384801..59029fc61b3aa6 100644 --- a/test/functional/services/find.js +++ b/test/functional/services/find.js @@ -72,6 +72,13 @@ export function FindProvider({ getService }) { }); } + async byClassName(selector, timeout = defaultFindTimeout) { + log.debug(`findByCssSelector ${selector}`); + return await this._ensureElementWithTimeout(timeout, async remote => { + return await remote.findByClassName(selector); + }); + } + async setValue(selector, text) { return await retry.try(async () => { const element = await this.byCssSelector(selector); From f1a4d6c2f816cb64995c42f3b152a40ba61a1ac0 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Thu, 23 Aug 2018 19:04:30 -0700 Subject: [PATCH 018/173] [DOCS] Updates links to role management APIs (#22150) --- .../spec/generated/xpack.security.clear_cached_roles.json | 2 +- .../spec/generated/xpack.security.delete_role.json | 2 +- .../spec/generated/xpack.security.get_role.json | 2 +- .../spec/generated/xpack.security.put_role.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.clear_cached_roles.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.clear_cached_roles.json index de47d676010ffd..47baad3ef989f1 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.clear_cached_roles.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.clear_cached_roles.json @@ -6,6 +6,6 @@ "patterns": [ "_xpack/security/role/{name}/_clear_cache" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-roles.html#security-api-clear-role-cache" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-clear-role-cache.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role.json index be852122685dfb..ad95ac444ef987 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role.json @@ -13,6 +13,6 @@ "patterns": [ "_xpack/security/role/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-roles.html#security-api-delete-role" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-delete-role.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role.json index b37c43af0c0c0c..e4b887e3d9329e 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role.json @@ -7,6 +7,6 @@ "_xpack/security/role/{name}", "_xpack/security/role" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-roles.html#security-api-get-role" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-role.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role.json index 4a0854b56cd13a..6cc3523f8b6471 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role.json @@ -14,6 +14,6 @@ "patterns": [ "_xpack/security/role/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-roles.html#security-api-put-role" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role.html" } } From a1372dc31ded17f268f667b23782e23293290961 Mon Sep 17 00:00:00 2001 From: pavel06081991 Date: Fri, 24 Aug 2018 11:48:00 +0300 Subject: [PATCH 019/173] =?UTF-8?q?translate=20tutorials(osquery=5Flogs,?= =?UTF-8?q?=20php=5Ffpm=5Fmetrics,=20postgresql=5Flogs,=20p=E2=80=A6=20(#2?= =?UTF-8?q?2124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit translate tutorials(osquery_logs, php_fpm_metrics, postgresql_logs, postgresql_metrics, prometheus_metrics, rabbitmq_metrics, redis_logs) --- .../server/tutorials/osquery_logs/index.js | 23 +++++++++--- .../server/tutorials/php_fpm_metrics/index.js | 19 +++++++--- .../server/tutorials/postgresql_logs/index.js | 23 +++++++++--- .../tutorials/postgresql_metrics/index.js | 19 +++++++--- .../tutorials/prometheus_metrics/index.js | 24 ++++++++++--- .../tutorials/rabbitmq_metrics/index.js | 23 +++++++++--- .../server/tutorials/redis_logs/index.js | 35 +++++++++++++------ 7 files changed, 127 insertions(+), 39 deletions(-) diff --git a/src/core_plugins/kibana/server/tutorials/osquery_logs/index.js b/src/core_plugins/kibana/server/tutorials/osquery_logs/index.js index a0e1a84e5722e5..ef18d55c37d549 100644 --- a/src/core_plugins/kibana/server/tutorials/osquery_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/osquery_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,17 +28,29 @@ export function osqueryLogsSpecProvider() { const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS']; return { id: 'osqueryLogs', - name: 'Osquery logs', + name: i18n.translate('kbn.server.tutorials.osqueryLogs.nameTitle', { + defaultMessage: 'Osquery logs', + }), category: TUTORIAL_CATEGORY.SECURITY, - shortDescription: 'Collect the result logs created by osqueryd.', - longDescription: 'The `osquery` Filebeat module collects the JSON result logs collected by `osqueryd`.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-osquery.html).', + shortDescription: i18n.translate('kbn.server.tutorials.osqueryLogs.shortDescription', { + defaultMessage: 'Collect the result logs created by osqueryd.', + }), + longDescription: i18n.translate('kbn.server.tutorials.osqueryLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `osquery` Filebeat module collects the JSON result logs collected by `osqueryd`. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-osquery.html', + }, + }), //euiIconType: 'logoOsquery', artifacts: { dashboards: [ { id: '69f5ae20-eb02-11e7-8f04-51231daa5b05', - linkLabel: 'Osquery logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.osqueryLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'Osquery logs dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/php_fpm_metrics/index.js b/src/core_plugins/kibana/server/tutorials/php_fpm_metrics/index.js index bf0d27740ecc73..a7e54efb76c0a1 100644 --- a/src/core_plugins/kibana/server/tutorials/php_fpm_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/php_fpm_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,12 +25,22 @@ export function phpfpmMetricsSpecProvider() { const moduleName = 'php_fpm'; return { id: 'phpfpmMetrics', - name: 'PHP-FPM metrics', + name: i18n.translate('kbn.server.tutorials.phpFpmMetrics.nameTitle', { + defaultMessage: 'PHP-FPM metrics', + }), category: TUTORIAL_CATEGORY.METRICS, isBeta: true, - shortDescription: 'Fetch internal metrics from PHP-FPM.', - longDescription: 'The `php_fpm` Metricbeat module fetches internal metrics from the PHP-FPM server.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-php_fpm.html).', + shortDescription: i18n.translate('kbn.server.tutorials.phpFpmMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from PHP-FPM.', + }), + longDescription: i18n.translate('kbn.server.tutorials.phpFpmMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `php_fpm` Metricbeat module fetches internal metrics from the PHP-FPM server. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-php_fpm.html', + }, + }), //euiIconType: 'logoPHPFPM', artifacts: { dashboards: [ diff --git a/src/core_plugins/kibana/server/tutorials/postgresql_logs/index.js b/src/core_plugins/kibana/server/tutorials/postgresql_logs/index.js index fa17700fc9b347..0ca4757668452e 100644 --- a/src/core_plugins/kibana/server/tutorials/postgresql_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/postgresql_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,17 +28,29 @@ export function postgresqlLogsSpecProvider() { const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS']; return { id: 'postgresqlLogs', - name: 'PostgreSQL logs', + name: i18n.translate('kbn.server.tutorials.postgresqlLogs.nameTitle', { + defaultMessage: 'PostgreSQL logs', + }), category: TUTORIAL_CATEGORY.LOGGING, - shortDescription: 'Collect and parse error and slow logs created by PostgreSQL.', - longDescription: 'The `postgresql` Filebeat module parses error and slow logs created by PostgreSQL.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-postgresql.html).', + shortDescription: i18n.translate('kbn.server.tutorials.postgresqlLogs.shortDescription', { + defaultMessage: 'Collect and parse error and slow logs created by PostgreSQL.', + }), + longDescription: i18n.translate('kbn.server.tutorials.postgresqlLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `postgresql` Filebeat module parses error and slow logs created by PostgreSQL. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-postgresql.html', + }, + }), //euiIconType: 'logoPostgreSQL', artifacts: { dashboards: [ { id: '158be870-87f4-11e7-ad9c-db80de0bf8d3', - linkLabel: 'PostgreSQL logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.postgresqlLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'PostgreSQL logs dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/postgresql_metrics/index.js b/src/core_plugins/kibana/server/tutorials/postgresql_metrics/index.js index be827e6c4891c8..2060c9e98ef843 100644 --- a/src/core_plugins/kibana/server/tutorials/postgresql_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/postgresql_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,12 +25,22 @@ export function postgresqlMetricsSpecProvider() { const moduleName = 'postgresql'; return { id: 'postgresqlMetrics', - name: 'PostgreSQL metrics', + name: i18n.translate('kbn.server.tutorials.postgresqlMetrics.nameTitle', { + defaultMessage: 'PostgreSQL metrics', + }), category: TUTORIAL_CATEGORY.METRICS, isBeta: true, - shortDescription: 'Fetch internal metrics from PostgreSQL.', - longDescription: 'The `postgresql` Metricbeat module fetches internal metrics from the PostgreSQL server.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-postgresql.html).', + shortDescription: i18n.translate('kbn.server.tutorials.postgresqlMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from PostgreSQL.', + }), + longDescription: i18n.translate('kbn.server.tutorials.postgresqlMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `postgresql` Metricbeat module fetches internal metrics from the PostgreSQL server. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-postgresql.html', + }, + }), //euiIconType: 'logoPostgreSQL', artifacts: { dashboards: [ diff --git a/src/core_plugins/kibana/server/tutorials/prometheus_metrics/index.js b/src/core_plugins/kibana/server/tutorials/prometheus_metrics/index.js index 2da1fa47053b13..b4887ba7a053d7 100644 --- a/src/core_plugins/kibana/server/tutorials/prometheus_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/prometheus_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,15 +25,28 @@ export function prometheusMetricsSpecProvider() { const moduleName = 'prometheus'; return { id: moduleName + 'Metrics', - name: 'Prometheus metrics', + name: i18n.translate('kbn.server.tutorials.prometheusMetrics.nameTitle', { + defaultMessage: 'Prometheus metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch metrics from a Prometheus exporter.', - longDescription: 'The `' + moduleName + '` Metricbeat module fetches metrics from Prometheus endpoint.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-' + moduleName + '.html).', + shortDescription: i18n.translate('kbn.server.tutorials.prometheusMetrics.shortDescription', { + defaultMessage: 'Fetch metrics from a Prometheus exporter.', + }), + longDescription: i18n.translate('kbn.server.tutorials.prometheusMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `{moduleName}` Metricbeat module fetches metrics from Prometheus endpoint. \ +[Learn more]({learnMoreLink}).', + values: { + moduleName, + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-' + moduleName + '.html', + }, + }), artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.prometheusMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/rabbitmq_metrics/index.js b/src/core_plugins/kibana/server/tutorials/rabbitmq_metrics/index.js index 52abb5facda571..fd7874d8dcb8a0 100644 --- a/src/core_plugins/kibana/server/tutorials/rabbitmq_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/rabbitmq_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,18 +25,30 @@ export function rabbitmqMetricsSpecProvider() { const moduleName = 'rabbitmq'; return { id: 'rabbitmqMetrics', - name: 'RabbitMQ metrics', + name: i18n.translate('kbn.server.tutorials.rabbitmqMetrics.nameTitle', { + defaultMessage: 'RabbitMQ metrics', + }), category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from the RabbitMQ server.', - longDescription: 'The `rabbitmq` Metricbeat module fetches internal metrics from the RabbitMQ server.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-rabbitmq.html).', + shortDescription: i18n.translate('kbn.server.tutorials.rabbitmqMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from the RabbitMQ server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.rabbitmqMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `rabbitmq` Metricbeat module fetches internal metrics from the RabbitMQ server. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-rabbitmq.html', + }, + }), //euiIconType: 'logoRabbitMQ', isBeta: true, artifacts: { dashboards: [ { id: 'AV4YobKIge1VCbKU_qVo', - linkLabel: 'RabbitMQ metrics dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.rabbitmqMetrics.artifacts.dashboards.linkLabel', { + defaultMessage: 'RabbitMQ metrics dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/redis_logs/index.js b/src/core_plugins/kibana/server/tutorials/redis_logs/index.js index edd94e28a0e67b..a6a75247143f51 100644 --- a/src/core_plugins/kibana/server/tutorials/redis_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/redis_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,23 +28,35 @@ export function redisLogsSpecProvider() { const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS']; return { id: 'redisLogs', - name: 'Redis logs', + name: i18n.translate('kbn.server.tutorials.redisLogs.nameTitle', { + defaultMessage: 'Redis logs', + }), category: TUTORIAL_CATEGORY.LOGGING, - shortDescription: 'Collect and parse error and slow logs created by Redis.', - longDescription: 'The `redis` Filebeat module parses error and slow logs created by Redis.' + - ' For Redis to write error logs, make sure the `logfile` option, from the' + - ' Redis configuration file, is set to `redis-server.log`.' + - ' The slow logs are read directly from Redis via the `SLOWLOG` command.' + - ' For Redis to record slow logs, make sure the `slowlog-log-slower-than`' + - ' option is set.' + - ' Note that the `slowlog` fileset is experimental.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-redis.html).', + shortDescription: i18n.translate('kbn.server.tutorials.redisLogs.shortDescription', { + defaultMessage: 'Collect and parse error and slow logs created by Redis.', + }), + longDescription: i18n.translate('kbn.server.tutorials.redisLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `redis` Filebeat module parses error and slow logs created by Redis. \ +For Redis to write error logs, make sure the `logfile` option, from the \ +Redis configuration file, is set to `redis-server.log`. \ +The slow logs are read directly from Redis via the `SLOWLOG` command. \ +For Redis to record slow logs, make sure the `slowlog-log-slower-than` \ +option is set. \ +Note that the `slowlog` fileset is experimental. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-redis.html', + }, + }), euiIconType: 'logoRedis', artifacts: { dashboards: [ { id: '7fea2930-478e-11e7-b1f0-cb29bac6bf8b', - linkLabel: 'Redis logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.redisLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'Redis logs dashboard', + }), isOverview: true } ], From a445e2da702536adaaf35884bb532e26cab28e69 Mon Sep 17 00:00:00 2001 From: pavel06081991 Date: Fri, 24 Aug 2018 11:48:47 +0300 Subject: [PATCH 020/173] =?UTF-8?q?translate=20tutorials(kafka=5Flogs,=20k?= =?UTF-8?q?afka=5Fmetrics,=20kibana=5Fmetrics,=20kubern=E2=80=A6=20(#22122?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit translate tutorials(kafka_logs, kafka_metrics, kibana_metrics, kubernetes_metrics, logstash_logs, logstash_metrics, memcached_metrics) --- .../server/tutorials/kafka_logs/index.js | 23 ++++++++++++++---- .../server/tutorials/kafka_metrics/index.js | 23 ++++++++++++++---- .../server/tutorials/kibana_metrics/index.js | 23 ++++++++++++++---- .../tutorials/kubernetes_metrics/index.js | 23 ++++++++++++++---- .../server/tutorials/logstash_logs/index.js | 23 ++++++++++++++---- .../tutorials/logstash_metrics/index.js | 24 +++++++++++++++---- .../tutorials/memcached_metrics/index.js | 23 ++++++++++++++---- 7 files changed, 127 insertions(+), 35 deletions(-) diff --git a/src/core_plugins/kibana/server/tutorials/kafka_logs/index.js b/src/core_plugins/kibana/server/tutorials/kafka_logs/index.js index e69536abecfbfa..3ca03e2e616a67 100644 --- a/src/core_plugins/kibana/server/tutorials/kafka_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/kafka_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,17 +28,29 @@ export function kafkaLogsSpecProvider() { const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS']; return { id: 'kafkaLogs', - name: 'Kafka logs', + name: i18n.translate('kbn.server.tutorials.kafkaLogs.nameTitle', { + defaultMessage: 'Kafka logs', + }), category: TUTORIAL_CATEGORY.LOGGING, - shortDescription: 'Collect and parse logs created by Kafka.', - longDescription: 'The `kafka` Filebeat module parses logs created by Kafka.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-kafka.html).', + shortDescription: i18n.translate('kbn.server.tutorials.kafkaLogs.shortDescription', { + defaultMessage: 'Collect and parse logs created by Kafka.', + }), + longDescription: i18n.translate('kbn.server.tutorials.kafkaLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `kafka` Filebeat module parses logs created by Kafka. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-kafka.html', + }, + }), //euiIconType: 'logoKafka', artifacts: { dashboards: [ { id: '943caca0-87ee-11e7-ad9c-db80de0bf8d3', - linkLabel: 'Kafka logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.kafkaLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'Kafka logs dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/kafka_metrics/index.js b/src/core_plugins/kibana/server/tutorials/kafka_metrics/index.js index c27aa8e58ccfeb..07e059f2eab4b8 100644 --- a/src/core_plugins/kibana/server/tutorials/kafka_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/kafka_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,15 +25,27 @@ export function kafkaMetricsSpecProvider() { const moduleName = 'kafka'; return { id: 'kafkaMetrics', - name: 'Kafka metrics', + name: i18n.translate('kbn.server.tutorials.kafkaMetrics.nameTitle', { + defaultMessage: 'Kafka metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from the Kafka server.', - longDescription: 'The `kafka` Metricbeat module fetches internal metrics from Kafka.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-kafka.html).', + shortDescription: i18n.translate('kbn.server.tutorials.kafkaMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from the Kafka server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.kafkaMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `kafka` Metricbeat module fetches internal metrics from Kafka. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-kafka.html', + }, + }), artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.kafkaMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/kibana_metrics/index.js b/src/core_plugins/kibana/server/tutorials/kibana_metrics/index.js index a2f44d7d0cd5f0..8dd3adff2beb78 100644 --- a/src/core_plugins/kibana/server/tutorials/kibana_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/kibana_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,16 +25,28 @@ export function kibanaMetricsSpecProvider() { const moduleName = 'kibana'; return { id: 'kibanaMetrics', - name: 'Kibana metrics', + name: i18n.translate('kbn.server.tutorials.kibanaMetrics.nameTitle', { + defaultMessage: 'Kibana metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from Kibana.', - longDescription: 'The `kibana` Metricbeat module fetches internal metrics from Kibana.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-kibana.html).', + shortDescription: i18n.translate('kbn.server.tutorials.kibanaMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from Kibana.', + }), + longDescription: i18n.translate('kbn.server.tutorials.kibanaMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `kibana` Metricbeat module fetches internal metrics from Kibana. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-kibana.html', + }, + }), euiIconType: 'logoKibana', artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.kibanaMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/kubernetes_metrics/index.js b/src/core_plugins/kibana/server/tutorials/kubernetes_metrics/index.js index e4ab0d7fc24da2..0bbcc56943be59 100644 --- a/src/core_plugins/kibana/server/tutorials/kubernetes_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/kubernetes_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,17 +25,29 @@ export function kubernetesMetricsSpecProvider() { const moduleName = 'kubernetes'; return { id: 'kubernetesMetrics', - name: 'Kubernetes metrics', + name: i18n.translate('kbn.server.tutorials.kubernetesMetrics.nameTitle', { + defaultMessage: 'Kubernetes metrics', + }), category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch metrics from your Kubernetes installation.', - longDescription: 'The `kubernetes` Metricbeat module fetches metrics from the Kubernetes APIs.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-kubernetes.html).', + shortDescription: i18n.translate('kbn.server.tutorials.kubernetesMetrics.shortDescription', { + defaultMessage: 'Fetch metrics from your Kubernetes installation.', + }), + longDescription: i18n.translate('kbn.server.tutorials.kubernetesMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `kubernetes` Metricbeat module fetches metrics from the Kubernetes APIs. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-kubernetes.html', + }, + }), euiIconType: 'logoKubernetes', artifacts: { dashboards: [ { id: 'AV4RGUqo5NkDleZmzKuZ', - linkLabel: 'Kubernetes metrics dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.kubernetesMetrics.artifacts.dashboards.linkLabel', { + defaultMessage: 'Kubernetes metrics dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/logstash_logs/index.js b/src/core_plugins/kibana/server/tutorials/logstash_logs/index.js index 8d3458d575f8d5..222f48def2e19d 100644 --- a/src/core_plugins/kibana/server/tutorials/logstash_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/logstash_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,17 +28,29 @@ export function logstashLogsSpecProvider() { const platforms = ['OSX', 'DEB', 'RPM', 'WINDOWS']; return { id: 'logstashLogs', - name: 'Logstash logs', + name: i18n.translate('kbn.server.tutorials.logstashLogs.nameTitle', { + defaultMessage: 'Logstash logs', + }), category: TUTORIAL_CATEGORY.LOGGING, - shortDescription: 'Collect and parse debug and slow logs created by Logstash itself.', - longDescription: 'The `logstash` Filebeat module parses debug and slow logs created by Logstash itself.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-logstash.html).', + shortDescription: i18n.translate('kbn.server.tutorials.logstashLogs.shortDescription', { + defaultMessage: 'Collect and parse debug and slow logs created by Logstash itself.', + }), + longDescription: i18n.translate('kbn.server.tutorials.logstashLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `logstash` Filebeat module parses debug and slow logs created by Logstash itself. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-logstash.html', + }, + }), euiIconType: 'logoLogstash', artifacts: { dashboards: [ { id: 'Filebeat-Logstash-Log-Dashboard', - linkLabel: 'Logstash logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.logstashLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'Logstash logs dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/logstash_metrics/index.js b/src/core_plugins/kibana/server/tutorials/logstash_metrics/index.js index 90196d24ae9d05..b5da3edce5e4a8 100644 --- a/src/core_plugins/kibana/server/tutorials/logstash_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/logstash_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,16 +25,29 @@ export function logstashMetricsSpecProvider() { const moduleName = 'logstash'; return { id: moduleName + 'Metrics', - name: 'Logstash metrics', + name: i18n.translate('kbn.server.tutorials.logstashMetrics.nameTitle', { + defaultMessage: 'Logstash metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch interal metrics from a Logstash server.', - longDescription: 'The `' + moduleName + '` Metricbeat module fetches internal metrics from a Logstash server.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-' + moduleName + '.html).', + shortDescription: i18n.translate('kbn.server.tutorials.logstashMetrics.shortDescription', { + defaultMessage: 'Fetch interal metrics from a Logstash server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.logstashMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `{moduleName}` Metricbeat module fetches internal metrics from a Logstash server. \ +[Learn more]({learnMoreLink}).', + values: { + moduleName, + learnMoreLink: `{config.docs.beats.metricbeat}/metricbeat-module-${moduleName}.html`, + }, + }), euiIconType: 'logoLogstash', artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.logstashMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/memcached_metrics/index.js b/src/core_plugins/kibana/server/tutorials/memcached_metrics/index.js index 54937ca25891f6..b090e4511b60cf 100644 --- a/src/core_plugins/kibana/server/tutorials/memcached_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/memcached_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,15 +25,27 @@ export function memcachedMetricsSpecProvider() { const moduleName = 'memcached'; return { id: 'memcachedMetrics', - name: 'Memcached metrics', + name: i18n.translate('kbn.server.tutorials.memcachedMetrics.nameTitle', { + defaultMessage: 'Memcached metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from the Memcached server.', - longDescription: 'The `memcached` Metricbeat module fetches internal metrics from Memcached.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-memcached.html).', + shortDescription: i18n.translate('kbn.server.tutorials.memcachedMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from the Memcached server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.memcachedMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `memcached` Metricbeat module fetches internal metrics from Memcached. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-memcached.html', + }, + }), artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.memcachedMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], From 74d8dbda75265d49b944d7f52c88c641a8f37484 Mon Sep 17 00:00:00 2001 From: pavel06081991 Date: Fri, 24 Aug 2018 11:49:34 +0300 Subject: [PATCH 021/173] =?UTF-8?q?translate=20tutorials(elasticsearch=5Fm?= =?UTF-8?q?etrics,=20etcd=5Fmetrics,=20golang=5Fmetri=E2=80=A6=20(#22121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit translate tutorials(elasticsearch_metrics, etcd_metrics, golang_metrics, haprozy_metrics, iis_logs) --- .../tutorials/elasticsearch_metrics/index.js | 23 ++++++++++++++---- .../server/tutorials/etcd_metrics/index.js | 23 ++++++++++++++---- .../server/tutorials/golang_metrics/index.js | 24 +++++++++++++++---- .../server/tutorials/haproxy_metrics/index.js | 23 ++++++++++++++---- .../kibana/server/tutorials/iis_logs/index.js | 23 ++++++++++++++---- 5 files changed, 91 insertions(+), 25 deletions(-) diff --git a/src/core_plugins/kibana/server/tutorials/elasticsearch_metrics/index.js b/src/core_plugins/kibana/server/tutorials/elasticsearch_metrics/index.js index ef592a0a3839e6..8c5c63e1bcf4ae 100644 --- a/src/core_plugins/kibana/server/tutorials/elasticsearch_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/elasticsearch_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,16 +25,28 @@ export function elasticsearchMetricsSpecProvider() { const moduleName = 'elasticsearch'; return { id: 'elasticsearchMetrics', - name: 'Elasticsearch metrics', + name: i18n.translate('kbn.server.tutorials.elasticsearchMetrics.nameTitle', { + defaultMessage: 'Elasticsearch metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from Elasticsearch.', - longDescription: 'The `elasticsearch` Metricbeat module fetches internal metrics from Elasticsearch.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-elasticsearch.html).', + shortDescription: i18n.translate('kbn.server.tutorials.elasticsearchMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from Elasticsearch.', + }), + longDescription: i18n.translate('kbn.server.tutorials.elasticsearchMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `elasticsearch` Metricbeat module fetches internal metrics from Elasticsearch. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-elasticsearch.html', + }, + }), euiIconType: 'logoElasticsearch', artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.elasticsearchMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/etcd_metrics/index.js b/src/core_plugins/kibana/server/tutorials/etcd_metrics/index.js index de6505d1ee1b23..6e43d697dfd44d 100644 --- a/src/core_plugins/kibana/server/tutorials/etcd_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/etcd_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,15 +25,27 @@ export function etcdMetricsSpecProvider() { const moduleName = 'etcd'; return { id: 'etcdMetrics', - name: 'Etcd metrics', + name: i18n.translate('kbn.server.tutorials.etcdMetrics.nameTitle', { + defaultMessage: 'Etcd metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from the Etcd server.', - longDescription: 'The `etcd` Metricbeat module fetches internal metrics from Etcd.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-etcd.html).', + shortDescription: i18n.translate('kbn.server.tutorials.etcdMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from the Etcd server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.etcdMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `etcd` Metricbeat module fetches internal metrics from Etcd. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-etcd.html', + }, + }), artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.etcdMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/golang_metrics/index.js b/src/core_plugins/kibana/server/tutorials/golang_metrics/index.js index e81b246c5074e8..a7a71dc870515e 100644 --- a/src/core_plugins/kibana/server/tutorials/golang_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/golang_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,17 +25,30 @@ export function golangMetricsSpecProvider() { const moduleName = 'golang'; return { id: moduleName + 'Metrics', - name: 'Golang metrics', + name: i18n.translate('kbn.server.tutorials.golangMetrics.nameTitle', { + defaultMessage: 'Golang metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from a Golang app.', - longDescription: 'The `' + moduleName + '` Metricbeat module fetches internal metrics from a Golang app.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-' + moduleName + '.html).', + shortDescription: i18n.translate('kbn.server.tutorials.golangMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from a Golang app.', + }), + longDescription: i18n.translate('kbn.server.tutorials.golangMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `{moduleName}` Metricbeat module fetches internal metrics from a Golang app. \ +[Learn more]({learnMoreLink}).', + values: { + moduleName, + learnMoreLink: `{config.docs.beats.metricbeat}/metricbeat-module-${moduleName}.html`, + }, + }), artifacts: { dashboards: [ { id: 'f2dc7320-f519-11e6-a3c9-9d1f7c42b045', - linkLabel: 'Golang metrics dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.golangMetrics.artifacts.dashboards.linkLabel', { + defaultMessage: 'Golang metrics dashboard', + }), isOverview: true } ], diff --git a/src/core_plugins/kibana/server/tutorials/haproxy_metrics/index.js b/src/core_plugins/kibana/server/tutorials/haproxy_metrics/index.js index 704f7da17a4fe8..5c1befca7c5515 100644 --- a/src/core_plugins/kibana/server/tutorials/haproxy_metrics/index.js +++ b/src/core_plugins/kibana/server/tutorials/haproxy_metrics/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/metricbeat_instructions'; @@ -24,15 +25,27 @@ export function haproxyMetricsSpecProvider() { const moduleName = 'haproxy'; return { id: 'haproxyMetrics', - name: 'HAProxy metrics', + name: i18n.translate('kbn.server.tutorials.haproxyMetrics.nameTitle', { + defaultMessage: 'HAProxy metrics', + }), isBeta: true, category: TUTORIAL_CATEGORY.METRICS, - shortDescription: 'Fetch internal metrics from the HAProxy server.', - longDescription: 'The `haproxy` Metricbeat module fetches internal metrics from HAProxy.' + - ' [Learn more]({config.docs.beats.metricbeat}/metricbeat-module-haproxy.html).', + shortDescription: i18n.translate('kbn.server.tutorials.haproxyMetrics.shortDescription', { + defaultMessage: 'Fetch internal metrics from the HAProxy server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.haproxyMetrics.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `haproxy` Metricbeat module fetches internal metrics from HAProxy. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.metricbeat}/metricbeat-module-haproxy.html', + }, + }), artifacts: { application: { - label: 'Discover', + label: i18n.translate('kbn.server.tutorials.haproxyMetrics.artifacts.application.label', { + defaultMessage: 'Discover', + }), path: '/app/kibana#/discover' }, dashboards: [], diff --git a/src/core_plugins/kibana/server/tutorials/iis_logs/index.js b/src/core_plugins/kibana/server/tutorials/iis_logs/index.js index 9cb12280566a9e..77bf5121fd90a7 100644 --- a/src/core_plugins/kibana/server/tutorials/iis_logs/index.js +++ b/src/core_plugins/kibana/server/tutorials/iis_logs/index.js @@ -17,6 +17,7 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions, cloudInstructions, onPremCloudInstructions } from '../../../common/tutorials/filebeat_instructions'; @@ -27,17 +28,29 @@ export function iisLogsSpecProvider() { const platforms = ['WINDOWS']; return { id: 'iisLogs', - name: 'IIS logs', + name: i18n.translate('kbn.server.tutorials.iisLogs.nameTitle', { + defaultMessage: 'IIS logs', + }), category: TUTORIAL_CATEGORY.LOGGING, - shortDescription: 'Collect and parse access and error logs created by the IIS HTTP server.', - longDescription: 'The `iis` Filebeat module parses access and error logs created by the IIS HTTP server.' + - ' [Learn more]({config.docs.beats.filebeat}/filebeat-module-iis.html).', + shortDescription: i18n.translate('kbn.server.tutorials.iisLogs.shortDescription', { + defaultMessage: 'Collect and parse access and error logs created by the IIS HTTP server.', + }), + longDescription: i18n.translate('kbn.server.tutorials.iisLogs.longDescription', { + // eslint-disable-next-line no-multi-str + defaultMessage: 'The `iis` Filebeat module parses access and error logs created by the IIS HTTP server. \ +[Learn more]({learnMoreLink}).', + values: { + learnMoreLink: '{config.docs.beats.filebeat}/filebeat-module-iis.html', + }, + }), //euiIconType: 'logoIIS', artifacts: { dashboards: [ { id: '4278ad30-fe16-11e7-a3b0-d13028918f9f', - linkLabel: 'IIS logs dashboard', + linkLabel: i18n.translate('kbn.server.tutorials.iisLogs.artifacts.dashboards.linkLabel', { + defaultMessage: 'IIS logs dashboard', + }), isOverview: true } ], From 1cf1fb7ca0a65239388e5c60e9bd53f630c2683e Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Fri, 24 Aug 2018 07:43:01 -0400 Subject: [PATCH 022/173] Bump EUI to 3.7.0 (#22287) Upgrades EUI from 3.6.1 => 3.7.0 --- package.json | 2 +- .../__snapshots__/indices_list.test.js.snap | 25 +++++++++++++++++++ .../inspector_panel.test.js.snap | 1 + x-pack/package.json | 2 +- .../condition_expression.test.js.snap | 4 +++ .../scope_expression.test.js.snap | 3 +++ .../add_item_popover.test.js.snap | 3 +++ .../edit_description_popover.test.js.snap | 3 +++ .../filter_list_usage_popover.test.js.snap | 3 +++ x-pack/yarn.lock | 6 ++--- yarn.lock | 6 ++--- 11 files changed, 50 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d1451ba2553fe9..4226f06b3599ba 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "url": "https://github.com/elastic/kibana.git" }, "dependencies": { - "@elastic/eui": "3.6.1", + "@elastic/eui": "3.7.0", "@elastic/filesaver": "1.1.2", "@elastic/numeral": "2.3.2", "@elastic/ui-ace": "0.2.3", diff --git a/src/core_plugins/kibana/public/management/sections/indices/create_index_pattern_wizard/components/step_index_pattern/components/indices_list/__tests__/__snapshots__/indices_list.test.js.snap b/src/core_plugins/kibana/public/management/sections/indices/create_index_pattern_wizard/components/step_index_pattern/components/indices_list/__tests__/__snapshots__/indices_list.test.js.snap index 943303f0bfdb2b..bdacb3b6c4734c 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/create_index_pattern_wizard/components/step_index_pattern/components/indices_list/__tests__/__snapshots__/indices_list.test.js.snap +++ b/src/core_plugins/kibana/public/management/sections/indices/create_index_pattern_wizard/components/step_index_pattern/components/indices_list/__tests__/__snapshots__/indices_list.test.js.snap @@ -67,6 +67,7 @@ exports[`IndicesList should change pages 1`] = ` } closePopover={[Function]} + hasArrow={true} id="customizablePagination" isOpen={false} ownFocus={false} @@ -79,6 +80,7 @@ exports[`IndicesList should change pages 1`] = ` Array [ @@ -86,6 +88,7 @@ exports[`IndicesList should change pages 1`] = ` , @@ -93,6 +96,7 @@ exports[`IndicesList should change pages 1`] = ` , @@ -100,6 +104,7 @@ exports[`IndicesList should change pages 1`] = ` , @@ -171,6 +176,7 @@ exports[`IndicesList should change per page 1`] = ` } closePopover={[Function]} + hasArrow={true} id="customizablePagination" isOpen={false} ownFocus={false} @@ -183,6 +189,7 @@ exports[`IndicesList should change per page 1`] = ` Array [ @@ -190,6 +197,7 @@ exports[`IndicesList should change per page 1`] = ` , @@ -197,6 +205,7 @@ exports[`IndicesList should change per page 1`] = ` , @@ -204,6 +213,7 @@ exports[`IndicesList should change per page 1`] = ` , @@ -300,6 +310,7 @@ exports[`IndicesList should highlight the query in the matches 1`] = ` } closePopover={[Function]} + hasArrow={true} id="customizablePagination" isOpen={false} ownFocus={false} @@ -312,6 +323,7 @@ exports[`IndicesList should highlight the query in the matches 1`] = ` Array [ @@ -319,6 +331,7 @@ exports[`IndicesList should highlight the query in the matches 1`] = ` , @@ -326,6 +339,7 @@ exports[`IndicesList should highlight the query in the matches 1`] = ` , @@ -333,6 +347,7 @@ exports[`IndicesList should highlight the query in the matches 1`] = ` , @@ -414,6 +429,7 @@ exports[`IndicesList should render normally 1`] = ` } closePopover={[Function]} + hasArrow={true} id="customizablePagination" isOpen={false} ownFocus={false} @@ -426,6 +442,7 @@ exports[`IndicesList should render normally 1`] = ` Array [ @@ -433,6 +450,7 @@ exports[`IndicesList should render normally 1`] = ` , @@ -440,6 +458,7 @@ exports[`IndicesList should render normally 1`] = ` , @@ -447,6 +466,7 @@ exports[`IndicesList should render normally 1`] = ` , @@ -608,6 +628,7 @@ exports[`IndicesList updating props should render all new indices 1`] = ` } closePopover={[Function]} + hasArrow={true} id="customizablePagination" isOpen={false} ownFocus={false} @@ -620,6 +641,7 @@ exports[`IndicesList updating props should render all new indices 1`] = ` Array [ @@ -627,6 +649,7 @@ exports[`IndicesList updating props should render all new indices 1`] = ` , @@ -634,6 +657,7 @@ exports[`IndicesList updating props should render all new indices 1`] = ` , @@ -641,6 +665,7 @@ exports[`IndicesList updating props should render all new indices 1`] = ` , diff --git a/src/ui/public/inspector/ui/__snapshots__/inspector_panel.test.js.snap b/src/ui/public/inspector/ui/__snapshots__/inspector_panel.test.js.snap index 8fff7e5caf3b8a..c0174670aa09cb 100644 --- a/src/ui/public/inspector/ui/__snapshots__/inspector_panel.test.js.snap +++ b/src/ui/public/inspector/ui/__snapshots__/inspector_panel.test.js.snap @@ -125,6 +125,7 @@ exports[`InspectorPanel should render as expected 1`] = ` } closePopover={[Function]} + hasArrow={true} id="inspectorViewChooser" isOpen={false} ownFocus={true} diff --git a/x-pack/package.json b/x-pack/package.json index c9ebc165708ee8..edb4d4c5313fdf 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -79,7 +79,7 @@ "yargs": "4.7.1" }, "dependencies": { - "@elastic/eui": "3.6.1", + "@elastic/eui": "3.7.0", "@elastic/node-crypto": "0.1.2", "@elastic/node-phantom-simple": "2.2.4", "@elastic/numeral": "2.3.2", diff --git a/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/condition_expression.test.js.snap b/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/condition_expression.test.js.snap index 1f69cc7657c1d9..640f5fbf5e5d88 100644 --- a/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/condition_expression.test.js.snap +++ b/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/condition_expression.test.js.snap @@ -25,6 +25,7 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied /> } closePopover={[Function]} + hasArrow={true} id="appliesToPopover" isOpen={false} ownFocus={true} @@ -91,6 +92,7 @@ exports[`ConditionExpression renders with appliesTo, operator and value supplied /> } closePopover={[Function]} + hasArrow={true} id="operatorValuePopover" isOpen={false} ownFocus={true} @@ -223,6 +225,7 @@ exports[`ConditionExpression renders with only value supplied 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="appliesToPopover" isOpen={false} ownFocus={true} @@ -288,6 +291,7 @@ exports[`ConditionExpression renders with only value supplied 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="operatorValuePopover" isOpen={false} ownFocus={true} diff --git a/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/scope_expression.test.js.snap b/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/scope_expression.test.js.snap index dcbec7d00959be..10cf78eb68d1b6 100644 --- a/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/scope_expression.test.js.snap +++ b/x-pack/plugins/ml/public/components/rule_editor/__snapshots__/scope_expression.test.js.snap @@ -90,6 +90,7 @@ exports[`ScopeExpression renders when enabled set to false 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="operatorValuePopover" isOpen={false} ownFocus={true} @@ -244,6 +245,7 @@ exports[`ScopeExpression renders when filter ID and type supplied 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="operatorValuePopover" isOpen={false} ownFocus={true} @@ -398,6 +400,7 @@ exports[`ScopeExpression renders when no filter ID or type supplied 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="operatorValuePopover" isOpen={false} ownFocus={true} diff --git a/x-pack/plugins/ml/public/settings/filter_lists/components/add_item_popover/__snapshots__/add_item_popover.test.js.snap b/x-pack/plugins/ml/public/settings/filter_lists/components/add_item_popover/__snapshots__/add_item_popover.test.js.snap index fc98b2e69df753..f2b45cd4d0cbd4 100644 --- a/x-pack/plugins/ml/public/settings/filter_lists/components/add_item_popover/__snapshots__/add_item_popover.test.js.snap +++ b/x-pack/plugins/ml/public/settings/filter_lists/components/add_item_popover/__snapshots__/add_item_popover.test.js.snap @@ -18,6 +18,7 @@ exports[`AddItemPopover calls addItems with multiple items on clicking Add butto } closePopover={[Function]} + hasArrow={true} id="add_item_popover" isOpen={false} ownFocus={true} @@ -95,6 +96,7 @@ exports[`AddItemPopover opens the popover onButtonClick 1`] = ` } closePopover={[Function]} + hasArrow={true} id="add_item_popover" isOpen={true} ownFocus={true} @@ -172,6 +174,7 @@ exports[`AddItemPopover renders the popover 1`] = ` } closePopover={[Function]} + hasArrow={true} id="add_item_popover" isOpen={false} ownFocus={true} diff --git a/x-pack/plugins/ml/public/settings/filter_lists/components/edit_description_popover/__snapshots__/edit_description_popover.test.js.snap b/x-pack/plugins/ml/public/settings/filter_lists/components/edit_description_popover/__snapshots__/edit_description_popover.test.js.snap index e59216401033bf..401b5a9337032d 100644 --- a/x-pack/plugins/ml/public/settings/filter_lists/components/edit_description_popover/__snapshots__/edit_description_popover.test.js.snap +++ b/x-pack/plugins/ml/public/settings/filter_lists/components/edit_description_popover/__snapshots__/edit_description_popover.test.js.snap @@ -15,6 +15,7 @@ exports[`FilterListUsagePopover opens the popover onButtonClick 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="filter_list_description_popover" isOpen={true} ownFocus={true} @@ -64,6 +65,7 @@ exports[`FilterListUsagePopover renders the popover with a description 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="filter_list_description_popover" isOpen={false} ownFocus={true} @@ -113,6 +115,7 @@ exports[`FilterListUsagePopover renders the popover with no description 1`] = ` /> } closePopover={[Function]} + hasArrow={true} id="filter_list_description_popover" isOpen={false} ownFocus={true} diff --git a/x-pack/plugins/ml/public/settings/filter_lists/components/filter_list_usage_popover/__snapshots__/filter_list_usage_popover.test.js.snap b/x-pack/plugins/ml/public/settings/filter_lists/components/filter_list_usage_popover/__snapshots__/filter_list_usage_popover.test.js.snap index d66c33bf095e96..a954fc65a4039f 100644 --- a/x-pack/plugins/ml/public/settings/filter_lists/components/filter_list_usage_popover/__snapshots__/filter_list_usage_popover.test.js.snap +++ b/x-pack/plugins/ml/public/settings/filter_lists/components/filter_list_usage_popover/__snapshots__/filter_list_usage_popover.test.js.snap @@ -16,6 +16,7 @@ exports[`FilterListUsagePopover opens the popover onButtonClick 1`] = ` } closePopover={[Function]} + hasArrow={true} id="detector_filter_list_usage" isOpen={true} ownFocus={true} @@ -59,6 +60,7 @@ exports[`FilterListUsagePopover renders the popover for 1 job 1`] = ` } closePopover={[Function]} + hasArrow={true} id="job_filter_list_usage" isOpen={false} ownFocus={true} @@ -92,6 +94,7 @@ exports[`FilterListUsagePopover renders the popover for 2 detectors 1`] = ` } closePopover={[Function]} + hasArrow={true} id="detector_filter_list_usage" isOpen={false} ownFocus={true} diff --git a/x-pack/yarn.lock b/x-pack/yarn.lock index 1c859041251d4f..f98f7fd87ee1be 100644 --- a/x-pack/yarn.lock +++ b/x-pack/yarn.lock @@ -10,9 +10,9 @@ esutils "^2.0.2" js-tokens "^3.0.0" -"@elastic/eui@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-3.6.1.tgz#59a719d4cd98a1efd0341e13b70b50119aabe2f5" +"@elastic/eui@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-3.7.0.tgz#276d2a8e724778d15192b3847247d3731c7ff738" dependencies: classnames "^2.2.5" core-js "^2.5.1" diff --git a/yarn.lock b/yarn.lock index 40e7ee89fd8427..e9a2db54979a69 100644 --- a/yarn.lock +++ b/yarn.lock @@ -81,9 +81,9 @@ version "0.0.0" uid "" -"@elastic/eui@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-3.6.1.tgz#59a719d4cd98a1efd0341e13b70b50119aabe2f5" +"@elastic/eui@3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-3.7.0.tgz#276d2a8e724778d15192b3847247d3731c7ff738" dependencies: classnames "^2.2.5" core-js "^2.5.1" From 0ff0832281f6625d3ddb4c6cf7812ad6606d5031 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Fri, 24 Aug 2018 08:34:10 -0700 Subject: [PATCH 023/173] [DOCS] Updates links to user management APIs (#22161) --- docs/security/securing-kibana.asciidoc | 5 +++-- .../spec/generated/xpack.security.delete_user.json | 2 +- .../spec/generated/xpack.security.disable_user.json | 2 +- .../spec/generated/xpack.security.enable_user.json | 2 +- .../spec/generated/xpack.security.get_user.json | 2 +- .../spec/generated/xpack.security.put_user.json | 2 +- .../spec/overrides/xpack.security.put_user.json | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/security/securing-kibana.asciidoc b/docs/security/securing-kibana.asciidoc index e3673a67537880..412d2f5bcf6eb8 100644 --- a/docs/security/securing-kibana.asciidoc +++ b/docs/security/securing-kibana.asciidoc @@ -85,8 +85,9 @@ You can manage privileges on the *Management / Security / Roles* page in {kib}. If you're using the native realm with Basic Authentication, you can assign roles using the *Management / Security / Users* page in {kib} or the -{ref}/security-api.html#security-user-apis[user management APIs]. For example, the following -creates a user named `jacknich` and assigns it the `kibana_user` role: +{ref}/security-api.html#security-user-apis[user management APIs]. For example, +the following creates a user named `jacknich` and assigns it the `kibana_user` +role: [source,js] -------------------------------------------------------------------------------- diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_user.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_user.json index 6f7ce3da1d8e67..732721143503e1 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_user.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_user.json @@ -13,6 +13,6 @@ "patterns": [ "_xpack/security/user/{username}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-delete-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-delete-user.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.disable_user.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.disable_user.json index 1799b8b34c02a3..b9151cf3685a10 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.disable_user.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.disable_user.json @@ -14,6 +14,6 @@ "patterns": [ "_xpack/security/user/{username}/_disable" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-disable-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-disable-user.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.enable_user.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.enable_user.json index 44d9cf47857c6e..12d1b3c7cf0bbb 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.enable_user.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.enable_user.json @@ -14,6 +14,6 @@ "patterns": [ "_xpack/security/user/{username}/_enable" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-enable-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-enable-user.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_user.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_user.json index 77ad4667f66644..d42d1afbb91c9e 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_user.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_user.json @@ -7,6 +7,6 @@ "_xpack/security/user/{username}", "_xpack/security/user" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-get-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-user.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_user.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_user.json index 0b0b8244bed96d..19a13b37c7d91d 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_user.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_user.json @@ -14,6 +14,6 @@ "patterns": [ "_xpack/security/user/{username}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-put-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-user.html" } } diff --git a/x-pack/plugins/console_extensions/spec/overrides/xpack.security.put_user.json b/x-pack/plugins/console_extensions/spec/overrides/xpack.security.put_user.json index ed6b37643564c7..6aff00817e4943 100644 --- a/x-pack/plugins/console_extensions/spec/overrides/xpack.security.put_user.json +++ b/x-pack/plugins/console_extensions/spec/overrides/xpack.security.put_user.json @@ -6,6 +6,6 @@ "fullname": "", "roles": [] }, - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-users.html#security-api-put-user" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-user.html" } } From 9df95726ef260191f2cfe9ae1c0bfaa96aaef47a Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Fri, 24 Aug 2018 08:54:18 -0700 Subject: [PATCH 024/173] [DOCS] Updates links to token APIs (#22155) --- .../spec/generated/xpack.security.get_token.json | 2 +- .../spec/generated/xpack.security.invalidate_token.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_token.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_token.json index ca13d79832ec12..208d6e31346b72 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_token.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_token.json @@ -6,6 +6,6 @@ "patterns": [ "_xpack/security/oauth2/token" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-tokens.html#security-api-get-token" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-token.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.invalidate_token.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.invalidate_token.json index 70434690fbda3b..e9ffac7bd5f920 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.invalidate_token.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.invalidate_token.json @@ -6,6 +6,6 @@ "patterns": [ "_xpack/security/oauth2/token" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-tokens.html#security-api-invalidate-token" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-invalidate-token.html" } } From bfd35234df4637482b271fab6f944f8d04f015a3 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Fri, 24 Aug 2018 09:06:23 -0700 Subject: [PATCH 025/173] [DOCS] Updates links to role mapping APIs (#22167) --- .../spec/generated/xpack.security.delete_role_mapping.json | 2 +- .../spec/generated/xpack.security.get_role_mapping.json | 2 +- .../spec/generated/xpack.security.put_role_mapping.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role_mapping.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role_mapping.json index 5aa3a84333f631..0734c784b80f88 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role_mapping.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.delete_role_mapping.json @@ -13,6 +13,6 @@ "patterns": [ "_xpack/security/role_mapping/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-role-mapping.html#security-api-delete-role-mapping" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-delete-role-mapping.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role_mapping.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role_mapping.json index 60e51262fa38c5..45c935277c865d 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role_mapping.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.get_role_mapping.json @@ -7,6 +7,6 @@ "_xpack/security/role_mapping/{name}", "_xpack/security/role_mapping" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-role-mapping.html#security-api-get-role-mapping" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-role-mapping.html" } } diff --git a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role_mapping.json b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role_mapping.json index 6ce2034998ba50..7a426c420fffd7 100644 --- a/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role_mapping.json +++ b/x-pack/plugins/console_extensions/spec/generated/xpack.security.put_role_mapping.json @@ -14,6 +14,6 @@ "patterns": [ "_xpack/security/role_mapping/{name}" ], - "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-role-mapping.html#security-api-put-role-mapping" + "documentation": "https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role-mapping.html" } } From ec87f4743e19175eacc48bb17cbc4d39015258c8 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Fri, 24 Aug 2018 09:44:25 -0700 Subject: [PATCH 026/173] let _claimPendingJobs have a valid job when updating leads to version conflict (#21980) * let _claimPendingJobs have a valid job when updating leads to version conflict * change _claimJob to reject the promise instead of resolve to true/false * add _claimPendingJobs tests * fix tests --- .../server/lib/esqueue/__tests__/worker.js | 71 ++++++++++++++++--- .../reporting/server/lib/esqueue/worker.js | 68 ++++++++++-------- 2 files changed, 100 insertions(+), 39 deletions(-) diff --git a/x-pack/plugins/reporting/server/lib/esqueue/__tests__/worker.js b/x-pack/plugins/reporting/server/lib/esqueue/__tests__/worker.js index 188bdf92ed651d..57698e81ff4370 100644 --- a/x-pack/plugins/reporting/server/lib/esqueue/__tests__/worker.js +++ b/x-pack/plugins/reporting/server/lib/esqueue/__tests__/worker.js @@ -7,7 +7,7 @@ import expect from 'expect.js'; import sinon from 'sinon'; import moment from 'moment'; -import { noop, random, get, find } from 'lodash'; +import { noop, random, get, find, identity } from 'lodash'; import { ClientMock } from './fixtures/elasticsearch'; import { QueueMock } from './fixtures/queue'; import { Worker } from '../worker'; @@ -494,25 +494,57 @@ describe('Worker class', function () { expect(msg).to.equal(false); }); - it('should return true on version errors', function () { + it('should reject the promise on version errors', function () { mockQueue.client.update.restore(); sinon.stub(mockQueue.client, 'update').returns(Promise.reject({ statusCode: 409 })); return worker._claimJob(job) - .then((res) => expect(res).to.equal(true)); + .catch(err => { + expect(err).to.eql({ statusCode: 409 }); + }); }); - it('should return false on other errors', function () { + it('should reject the promise on other errors', function () { mockQueue.client.update.restore(); sinon.stub(mockQueue.client, 'update').returns(Promise.reject({ statusCode: 401 })); return worker._claimJob(job) - .then((res) => expect(res).to.equal(false)); + .catch(err => { + expect(err).to.eql({ statusCode: 401 }); + }); }); + }); + + describe('find a pending job to claim', function () { + const getMockJobs = (status = 'pending') => ([{ + _index: 'myIndex', + _type: 'test', + _id: 12345, + _version: 3, + found: true, + _source: { + jobtype: 'jobtype', + created_by: false, + payload: { id: 'sample-job-1', now: 'Mon Apr 25 2016 14:13:04 GMT-0700 (MST)' }, + priority: 10, + timeout: 10000, + created_at: '2016-04-25T21:13:04.738Z', + attempts: 0, + max_attempts: 3, + status + }, + }]); - it('should emit on other errors', function (done) { + beforeEach(function () { + worker = new Worker(mockQueue, 'test', noop, defaultWorkerOptions); + }); + + afterEach(() => { mockQueue.client.update.restore(); + }); + + it('should emit for errors from claiming job', function (done) { sinon.stub(mockQueue.client, 'update').returns(Promise.reject({ statusCode: 401 })); - worker.on(constants.EVENT_WORKER_JOB_CLAIM_ERROR, function (err) { + worker.once(constants.EVENT_WORKER_JOB_CLAIM_ERROR, function (err) { try { expect(err).to.have.property('error'); expect(err).to.have.property('job'); @@ -523,7 +555,30 @@ describe('Worker class', function () { done(e); } }); - worker._claimJob(job); + + worker._claimPendingJobs(getMockJobs()); + }); + + it('should reject the promise if an error claiming the job', function () { + sinon.stub(mockQueue.client, 'update').returns(Promise.reject({ statusCode: 409 })); + return worker._claimPendingJobs(getMockJobs()) + .catch(err => { + expect(err).to.eql({ statusCode: 409 }); + }); + }); + + it('should get the pending job', function () { + sinon.stub(mockQueue.client, 'update').returns(Promise.resolve({ test: 'cool' })); + sinon.stub(worker, '_performJob').callsFake(identity); + return worker._claimPendingJobs(getMockJobs()) + .then(claimedJob => { + expect(claimedJob._index).to.be('myIndex'); + expect(claimedJob._type).to.be('test'); + expect(claimedJob._source.jobtype).to.be('jobtype'); + expect(claimedJob._source.status).to.be('processing'); + expect(claimedJob.test).to.be('cool'); + worker._performJob.restore(); + }); }); }); diff --git a/x-pack/plugins/reporting/server/lib/esqueue/worker.js b/x-pack/plugins/reporting/server/lib/esqueue/worker.js index 20d487c9128c75..02f9c054c2e3bd 100644 --- a/x-pack/plugins/reporting/server/lib/esqueue/worker.js +++ b/x-pack/plugins/reporting/server/lib/esqueue/worker.js @@ -22,6 +22,22 @@ function formatJobObject(job) { }; } +function getLogger(opts, id, logLevel) { + return (msg, err) => { + const logger = opts.logger || function () {}; + + const message = `${id} - ${msg}`; + const tags = ['worker', logLevel]; + + if (err) { + logger(`${message}: ${err.stack ? err.stack : err }`, tags); + return; + } + + logger(message, tags); + }; +} + export class Worker extends events.EventEmitter { constructor(queue, type, workerFn, opts) { if (typeof type !== 'string') throw new Error('type must be a string'); @@ -40,19 +56,8 @@ export class Worker extends events.EventEmitter { this.checkSize = opts.size || 10; this.doctype = opts.doctype || constants.DEFAULT_SETTING_DOCTYPE; - this.debug = (msg, err) => { - const logger = opts.logger || function () {}; - - const message = `${this.id} - ${msg}`; - const tags = ['worker', 'debug']; - - if (err) { - logger(`${message}: ${err.stack ? err.stack : err }`, tags); - return; - } - - logger(message, tags); - }; + this.debug = getLogger(opts, this.id, 'debug'); + this.warn = getLogger(opts, this.id, 'warn'); this._running = true; this.debug(`Created worker for job type ${this.jobtype}`); @@ -134,17 +139,11 @@ export class Worker extends events.EventEmitter { ...doc }; return updatedJob; - }) - .catch((err) => { - if (err.statusCode === 409) return true; - this.debug(`_claimJob failed on job ${job._id}`, err); - this.emit(constants.EVENT_WORKER_JOB_CLAIM_ERROR, this._formatErrorParams(err, job)); - return false; }); } _failJob(job, output = false) { - this.debug(`Failing job ${job._id}`); + this.warn(`Failing job ${job._id}`); const completedTime = moment().toISOString(); const docOutput = this._formatOutput(output); @@ -170,7 +169,7 @@ export class Worker extends events.EventEmitter { .then(() => true) .catch((err) => { if (err.statusCode === 409) return true; - this.debug(`_failJob failed to update job ${job._id}`, err); + this.warn(`_failJob failed to update job ${job._id}`, err); this.emit(constants.EVENT_WORKER_FAIL_UPDATE_ERROR, this._formatErrorParams(err, job)); return false; }); @@ -215,7 +214,7 @@ export class Worker extends events.EventEmitter { if (isResolved) return; cancellationToken.cancel(); - this.debug(`Timeout processing job ${job._id}`); + this.warn(`Timeout processing job ${job._id}`); reject(new WorkerTimeoutError(`Worker timed out, timeout = ${job._source.timeout}`, { timeout: job._source.timeout, jobId: job._id, @@ -253,7 +252,7 @@ export class Worker extends events.EventEmitter { }) .catch((err) => { if (err.statusCode === 409) return false; - this.debug(`Failure saving job output ${job._id}`, err); + this.warn(`Failure saving job output ${job._id}`, err); this.emit(constants.EVENT_WORKER_JOB_UPDATE_ERROR, this._formatErrorParams(err, job)); }); }, (jobErr) => { @@ -265,7 +264,7 @@ export class Worker extends events.EventEmitter { // job execution failed if (jobErr.name === 'WorkerTimeoutError') { - this.debug(`Timeout on job ${job._id}`); + this.warn(`Timeout on job ${job._id}`); this.emit(constants.EVENT_WORKER_JOB_TIMEOUT, this._formatErrorParams(jobErr, job)); return; @@ -278,7 +277,7 @@ export class Worker extends events.EventEmitter { } } - this.debug(`Failure occurred on job ${job._id}`, jobErr); + this.warn(`Failure occurred on job ${job._id}`, jobErr); this.emit(constants.EVENT_WORKER_JOB_EXECUTION_ERROR, this._formatErrorParams(jobErr, job)); return this._failJob(job, (jobErr.toString) ? jobErr.toString() : false); }); @@ -316,23 +315,30 @@ export class Worker extends events.EventEmitter { return this._claimJob(job) .then((claimResult) => { - if (claimResult !== false) { - claimed = true; - return claimResult; + claimed = true; + return claimResult; + }) + .catch((err) => { + if (err.statusCode === 409) { + this.warn(`_claimPendingJobs encountered a version conflict on updating pending job ${job._id}`, err); + return; // continue reducing and looking for a different job to claim } + this.emit(constants.EVENT_WORKER_JOB_CLAIM_ERROR, this._formatErrorParams(err, job)); + return Promise.reject(err); }); }); }, Promise.resolve()) .then((claimedJob) => { if (!claimedJob) { - this.debug(`All ${jobs.length} jobs already claimed`); + this.debug(`Found no claimable jobs out of ${jobs.length} total`); return; } this.debug(`Claimed job ${claimedJob._id}`); return this._performJob(claimedJob); }) .catch((err) => { - this.debug('Error claiming jobs', err); + this.warn('Error claiming jobs', err); + return Promise.reject(err); }); } @@ -384,7 +390,7 @@ export class Worker extends events.EventEmitter { // ignore missing indices errors if (err && err.status === 404) return []; - this.debug('job querying failed', err); + this.warn('job querying failed', err); this.emit(constants.EVENT_WORKER_JOB_SEARCH_ERROR, this._formatErrorParams(err)); throw err; }); From e701a3f07b8c3e0672f5b7a9c65b430654ccb42f Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Fri, 24 Aug 2018 13:06:14 -0400 Subject: [PATCH 027/173] Removes ui-framework/TableInfo component, uses div instead (#22310) --- .../apm/public/components/shared/PropertiesTable/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/apm/public/components/shared/PropertiesTable/index.js b/x-pack/plugins/apm/public/components/shared/PropertiesTable/index.js index 49112653217860..329b9e4941f734 100644 --- a/x-pack/plugins/apm/public/components/shared/PropertiesTable/index.js +++ b/x-pack/plugins/apm/public/components/shared/PropertiesTable/index.js @@ -6,7 +6,6 @@ import React from 'react'; import styled from 'styled-components'; -import { KuiTableInfo } from '@kbn/ui-framework/components'; import _ from 'lodash'; import STATIC_PROPS from './staticProperties.json'; import { @@ -58,10 +57,12 @@ const Cell = styled.td` } `; -const TableInfo = styled(KuiTableInfo)` +const TableInfo = styled.div` padding: ${px(unit)} 0 0; text-align: center; font-size: ${fontSize}; + color: ${colors.gray2}; + line-height: 1.5; `; const EmptyValue = styled.span` From 1b76134cdf472f887b34f6af070be71856a79475 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Sat, 25 Aug 2018 09:01:47 -0400 Subject: [PATCH 028/173] Introduce component registry for advanced ui settings screen (#22315) * introduce component registry for advanced ui settings screen --- .../advanced_settings.test.js.snap | 20 +---- .../sections/settings/advanced_settings.js | 19 ++-- .../component_registry.test.js.snap | 5 ++ .../settings/components/component_registry.js | 73 +++++++++++++++ .../components/component_registry.test.js | 89 +++++++++++++++++++ .../components/default_component_registry.js | 27 ++++++ .../default_component_registry.test.js | 43 +++++++++ .../__snapshots__/page_title.test.js.snap | 13 +++ .../settings/components/page_title/index.js | 20 +++++ .../components/page_title/page_title.js | 31 +++++++ .../components/page_title/page_title.test.js | 28 ++++++ src/ui/public/management/index.js | 2 + 12 files changed, 344 insertions(+), 26 deletions(-) create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/__snapshots__/component_registry.test.js.snap create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/component_registry.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/component_registry.test.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.test.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/page_title/__snapshots__/page_title.test.js.snap create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/page_title/index.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.js create mode 100644 src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.test.js diff --git a/src/core_plugins/kibana/public/management/sections/settings/__snapshots__/advanced_settings.test.js.snap b/src/core_plugins/kibana/public/management/sections/settings/__snapshots__/advanced_settings.test.js.snap index c72d3e2f64c58b..f219c199b1d870 100644 --- a/src/core_plugins/kibana/public/management/sections/settings/__snapshots__/advanced_settings.test.js.snap +++ b/src/core_plugins/kibana/public/management/sections/settings/__snapshots__/advanced_settings.test.js.snap @@ -17,15 +17,7 @@ exports[`AdvancedSettings should render normally 1`] = ` component="div" grow={true} > - -

- Settings -

-
+ - -

- Settings -

-
+
{ - if(a === DEFAULT_CATEGORY) return -1; - if(b === DEFAULT_CATEGORY) return 1; - if(a > b) return 1; + if (a === DEFAULT_CATEGORY) return -1; + if (b === DEFAULT_CATEGORY) return 1; + if (a > b) return 1; return a === b ? 0 : -1; }); @@ -133,13 +136,13 @@ export class AdvancedSettings extends Component { render() { const { filteredSettings, query } = this.state; + const PageTitle = getSettingsComponent(PAGE_TITLE_COMPONENT); + return (
- -

Settings

-
+
- +
{ + it('should allow a component to be registered', () => { + const component = {}; + expect(tryRegisterSettingsComponent('tryTest1', component)).toEqual(true); + }); + + it('should return false if the component is already registered, and not allow an override', () => { + const component = {}; + expect(tryRegisterSettingsComponent('tryTest2', component)).toEqual(true); + + const updatedComponent = { updated: 'yay' }; + expect(tryRegisterSettingsComponent('tryTest2', updatedComponent)).toEqual(false); + expect(getSettingsComponent('tryTest2')).toBe(component); + }); +}); + +describe('registerSettingsComponent', () => { + it('should allow a component to be registered', () => { + const component = {}; + registerSettingsComponent('test', component); + }); + + it('should disallow registering a component with a duplicate id', () => { + const component = {}; + registerSettingsComponent('test2', component); + expect(() => registerSettingsComponent('test2', 'some other component')).toThrowErrorMatchingSnapshot(); + }); + + it('should allow a component to be overriden', () => { + const component = {}; + registerSettingsComponent('test3', component); + + const anotherComponent = { 'anotherComponent': 'ok' }; + registerSettingsComponent('test3', anotherComponent, true); + + expect(getSettingsComponent('test3')).toBe(anotherComponent); + }); + + it('should set a displayName for the component if one does not exist', () => { + const component = {}; + registerSettingsComponent('display_name_component', component); + + expect(component.displayName).toEqual('display_name_component'); + }); + + it('should not set a displayName for the component if one already exists', () => { + const component = { + displayName: '' + }; + + registerSettingsComponent('another_display_name_component', component); + + expect(component.displayName).toEqual(''); + }); +}); + +describe('getSettingsComponent', () => { + it('should allow a component to be retrieved', () => { + const component = {}; + registerSettingsComponent('test4', component); + expect(getSettingsComponent('test4')).toBe(component); + }); + + it('should throw an error when requesting a component that does not exist', () => { + expect(() => getSettingsComponent('does not exist')).toThrowErrorMatchingSnapshot(); + }); +}); \ No newline at end of file diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.js b/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.js new file mode 100644 index 00000000000000..b88fb11d63bbcf --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.js @@ -0,0 +1,27 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { tryRegisterSettingsComponent } from './component_registry'; +import { PageTitle } from './page_title'; + +export const PAGE_TITLE_COMPONENT = 'advanced_settings_page_title'; + +export function registerDefaultComponents() { + tryRegisterSettingsComponent(PAGE_TITLE_COMPONENT, PageTitle); +} \ No newline at end of file diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.test.js b/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.test.js new file mode 100644 index 00000000000000..2c5b3c9b466137 --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/default_component_registry.test.js @@ -0,0 +1,43 @@ +/* + * 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 { registerDefaultComponents, PAGE_TITLE_COMPONENT } from './default_component_registry'; +import { getSettingsComponent, registerSettingsComponent } from './component_registry'; +import { PageTitle } from './page_title'; + +describe('default_component_registry', () => { + it('should register default components with the registry', () => { + registerDefaultComponents(); + expect(getSettingsComponent(PAGE_TITLE_COMPONENT)).toEqual(PageTitle); + }); + + it('should be able to call "registerDefaultComponents" several times without throwing', () => { + registerDefaultComponents(); + registerDefaultComponents(); + registerDefaultComponents(); + }); + + it('should not override components if they are already registered', () => { + const newComponent = {}; + registerSettingsComponent(PAGE_TITLE_COMPONENT, newComponent, true); + registerDefaultComponents(); + + expect(getSettingsComponent(PAGE_TITLE_COMPONENT)).toEqual(newComponent); + }); +}); \ No newline at end of file diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/page_title/__snapshots__/page_title.test.js.snap b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/__snapshots__/page_title.test.js.snap new file mode 100644 index 00000000000000..f93bd34d9312e3 --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/__snapshots__/page_title.test.js.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`PageTitle should render normally 1`] = ` + +

+ Settings +

+
+`; diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/page_title/index.js b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/index.js new file mode 100644 index 00000000000000..f5553eb971ac34 --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/index.js @@ -0,0 +1,20 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { PageTitle } from './page_title'; \ No newline at end of file diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.js b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.js new file mode 100644 index 00000000000000..d76cb6bc52856a --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.js @@ -0,0 +1,31 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { + EuiText +} from '@elastic/eui'; + +export const PageTitle = () => { + return ( + +

Settings

+
+ ); +}; \ No newline at end of file diff --git a/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.test.js b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.test.js new file mode 100644 index 00000000000000..0b3edd71764bb2 --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/settings/components/page_title/page_title.test.js @@ -0,0 +1,28 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import React from 'react'; +import { shallow } from 'enzyme'; + +import { PageTitle } from './page_title'; + +describe('PageTitle', () => { + it('should render normally', () => { + expect(shallow()).toMatchSnapshot(); + }); +}); \ No newline at end of file diff --git a/src/ui/public/management/index.js b/src/ui/public/management/index.js index 56793da6832b8e..616600f1ac1dec 100644 --- a/src/ui/public/management/index.js +++ b/src/ui/public/management/index.js @@ -19,6 +19,8 @@ import { ManagementSection } from './section'; +export { registerSettingsComponent } from '../../../core_plugins/kibana/public/management/sections/settings/components/component_registry'; + export const management = new ManagementSection('management', { display: 'Management' }); From f9c902f6bad2a4e2c13ec4efb5dda78c19442e9d Mon Sep 17 00:00:00 2001 From: Tyler Smalley Date: Sun, 26 Aug 2018 14:34:08 -0700 Subject: [PATCH 029/173] [build] Include X-Pack plugins and use aliases (#22325) Signed-off-by: Tyler Smalley --- .../kibana/public/discover/_index.scss | 2 +- src/core_plugins/kibana/public/index.scss | 2 +- src/core_plugins/status_page/public/index.scss | 2 +- src/dev/build/tasks/transpile_scss_task.js | 4 +++- src/server/sass/build.js | 4 ++++ src/server/sass/build.test.js | 16 ++++++++-------- src/ui/public/styles/_styling_constants.scss | 10 +++++----- x-pack/plugins/dashboard_mode/public/index.scss | 4 ++-- x-pack/plugins/monitoring/public/index.scss | 2 +- 9 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/core_plugins/kibana/public/discover/_index.scss b/src/core_plugins/kibana/public/discover/_index.scss index b45ab8781566d6..e42c4e90938292 100644 --- a/src/core_plugins/kibana/public/discover/_index.scss +++ b/src/core_plugins/kibana/public/discover/_index.scss @@ -1,7 +1,7 @@ @import 'components/fetch_error/index'; @import 'directives/index'; -@import '../../../../ui/public/styles/local_search'; +@import 'ui/public/styles/local_search'; @import 'hacks'; diff --git a/src/core_plugins/kibana/public/index.scss b/src/core_plugins/kibana/public/index.scss index 202284ae28355a..713bc1323d7ecc 100644 --- a/src/core_plugins/kibana/public/index.scss +++ b/src/core_plugins/kibana/public/index.scss @@ -1,4 +1,4 @@ -@import '../../../../src/ui/public/styles/styling_constants'; +@import 'ui/public/styles/styling_constants'; // Discover styles @import './discover/index'; diff --git a/src/core_plugins/status_page/public/index.scss b/src/core_plugins/status_page/public/index.scss index bef40abe1a8cfc..8bab6ef41e1589 100644 --- a/src/core_plugins/status_page/public/index.scss +++ b/src/core_plugins/status_page/public/index.scss @@ -1,4 +1,4 @@ -@import '../../../ui/public/styles/styling_constants'; +@import 'ui/public/styles/styling_constants'; // SASSTODO: Remove when K7 applies background color to body .stsPage { diff --git a/src/dev/build/tasks/transpile_scss_task.js b/src/dev/build/tasks/transpile_scss_task.js index 69621797ea2526..04a5ed03bd6394 100644 --- a/src/dev/build/tasks/transpile_scss_task.js +++ b/src/dev/build/tasks/transpile_scss_task.js @@ -26,7 +26,9 @@ export const TranspileScssTask = { async run(config, log, build) { const scanDirs = [ build.resolvePath('src/core_plugins') ]; - const { spec$ } = findPluginSpecs({ plugins: { scanDirs, paths: [] } }); + const paths = [ build.resolvePath('node_modules/x-pack') ]; + + const { spec$ } = findPluginSpecs({ plugins: { scanDirs, paths } }); const enabledPlugins = await spec$.pipe(toArray()).toPromise(); try { diff --git a/src/server/sass/build.js b/src/server/sass/build.js index 6aebd9cbb34e5f..fee7891bac0f9c 100644 --- a/src/server/sass/build.js +++ b/src/server/sass/build.js @@ -66,6 +66,10 @@ export class Build { outFile, sourceMap: true, sourceMapEmbed: true, + includePaths: [ + path.resolve(__dirname, '../..'), + path.resolve(__dirname, '../../../node_modules') + ] }); diff --git a/src/server/sass/build.test.js b/src/server/sass/build.test.js index 7e5f55576df8b5..fbc3ede3a355d0 100644 --- a/src/server/sass/build.test.js +++ b/src/server/sass/build.test.js @@ -17,6 +17,7 @@ * under the License. */ +import path from 'path'; import sass from 'node-sass'; import { Build } from './build'; @@ -27,7 +28,7 @@ describe('SASS builder', () => { it('generates a glob', () => { const builder = new Build('/foo/style.sass'); - expect(builder.getGlob()).toEqual('/foo/**/*.s{a,c}ss'); + expect(builder.getGlob()).toEqual(path.join('/foo', '**', '*.s{a,c}ss')); }); it('builds SASS', () => { @@ -35,16 +36,15 @@ describe('SASS builder', () => { const builder = new Build('/foo/style.sass'); builder.build(); - expect(sass.render.mock.calls[0][0]).toEqual({ - file: '/foo/style.sass', - outFile: '/foo/style.css', - sourceMap: true, - sourceMapEmbed: true - }); + const sassCall = sass.render.mock.calls[0][0]; + expect(sassCall.file).toEqual('/foo/style.sass'); + expect(sassCall.outFile).toEqual(path.join('/foo', 'style.css')); + expect(sassCall.sourceMap).toBe(true); + expect(sassCall.sourceMapEmbed).toBe(true); }); it('has an output file with a different extension', () => { const builder = new Build('/foo/style.sass'); - expect(builder.outputPath()).toEqual('/foo/style.css'); + expect(builder.outputPath()).toEqual(path.join('/foo', 'style.css')); }); }); \ No newline at end of file diff --git a/src/ui/public/styles/_styling_constants.scss b/src/ui/public/styles/_styling_constants.scss index 066890e9a1c17d..af595341fde327 100644 --- a/src/ui/public/styles/_styling_constants.scss +++ b/src/ui/public/styles/_styling_constants.scss @@ -1,9 +1,9 @@ // EUI global scope -@import '../../../../node_modules/@elastic/eui/src/themes/k6/k6_globals'; -@import '../../../../node_modules/@elastic/eui/src/themes/k6/k6_colors_light'; -@import '../../../../node_modules/@elastic/eui/src/global_styling/functions/index'; -@import '../../../../node_modules/@elastic/eui/src/global_styling/variables/index'; -@import '../../../../node_modules/@elastic/eui/src/global_styling/mixins/index'; +@import '@elastic/eui/src/themes/k6/k6_globals'; +@import '@elastic/eui/src/themes/k6/k6_colors_light'; +@import '@elastic/eui/src/global_styling/functions/index'; +@import '@elastic/eui/src/global_styling/variables/index'; +@import '@elastic/eui/src/global_styling/mixins/index'; // EUI TODO: Add this @mixin kibanaCircleLogo() { diff --git a/x-pack/plugins/dashboard_mode/public/index.scss b/x-pack/plugins/dashboard_mode/public/index.scss index d7b2f63f86e27f..940cb113b679f4 100644 --- a/x-pack/plugins/dashboard_mode/public/index.scss +++ b/x-pack/plugins/dashboard_mode/public/index.scss @@ -1,3 +1,3 @@ -@import '../../../../src/ui/public/styles/styling_constants'; +@import 'ui/public/styles/styling_constants'; -@import '../../../../src/core_plugins/kibana/public/dashboard/index'; +@import 'core_plugins/kibana/public/dashboard/index'; diff --git a/x-pack/plugins/monitoring/public/index.scss b/x-pack/plugins/monitoring/public/index.scss index 1bec333e15b4ce..67974b71cd72ff 100644 --- a/x-pack/plugins/monitoring/public/index.scss +++ b/x-pack/plugins/monitoring/public/index.scss @@ -1,5 +1,5 @@ // Import the EUI global scope so we can use EUI constants -@import '../../../../src/ui/public/styles/_styling_constants'; +@import 'ui/public/styles/_styling_constants'; // Temporary hacks @import 'hacks'; From 02a56b39b10db48b89966b64c1014c16644d9421 Mon Sep 17 00:00:00 2001 From: Aaron Zhao Date: Mon, 27 Aug 2018 01:49:15 -0500 Subject: [PATCH 030/173] doc: add calendar vis plugin link to docs (#22366) --- docs/plugins/known-plugins.asciidoc | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/plugins/known-plugins.asciidoc b/docs/plugins/known-plugins.asciidoc index 179644060d5e31..9b05f58fd06bcc 100644 --- a/docs/plugins/known-plugins.asciidoc +++ b/docs/plugins/known-plugins.asciidoc @@ -28,6 +28,7 @@ This list of plugins is not guaranteed to work on your version of Kibana. Instea * https://github.com/JuanCarniglia/area3d_vis[3D Graph] (JuanCarniglia) * https://github.com/TrumanDu/bmap[Bmap](TrumanDu) - integrated echarts for map visualization * https://github.com/mstoyano/kbn_c3js_vis[C3JS Visualizations] (mstoyano) +* https://github.com/aaronoah/kibana_calendar_vis[Calendar Visualization] (aaronoah) * https://github.com/elo7/cohort[Cohort analysis] (elo7) * https://github.com/DeanF/health_metric_vis[Colored Metric Visualization] (deanf) * https://github.com/JuanCarniglia/dendrogram_vis[Dendrogram] (JuanCarniglia) From cd4d53f18979172b2ed140e15323a708f00292ea Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Mon, 27 Aug 2018 12:40:14 +0200 Subject: [PATCH 031/173] fixing flaky vsualize data_table_nontimeindex test (#22288) --- .../public/vis/editors/default/agg_group.html | 2 +- .../public/vis/editors/default/sidebar.html | 4 +-- .../apps/getting_started/_shakespeare.js | 3 +- test/functional/apps/visualize/_data_table.js | 2 +- .../visualize/_data_table_nontimeindex.js | 5 +-- .../functional/apps/visualize/_gauge_chart.js | 3 +- test/functional/apps/visualize/_inspector.js | 2 +- .../apps/visualize/_point_series_options.js | 2 +- test/functional/apps/visualize/_tag_cloud.js | 2 -- .../functional/page_objects/visualize_page.js | 32 +++++++++++-------- 10 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/ui/public/vis/editors/default/agg_group.html b/src/ui/public/vis/editors/default/agg_group.html index dfa04e4de9dc55..965390fd86091f 100644 --- a/src/ui/public/vis/editors/default/agg_group.html +++ b/src/ui/public/vis/editors/default/agg_group.html @@ -10,6 +10,6 @@
- +
diff --git a/src/ui/public/vis/editors/default/sidebar.html b/src/ui/public/vis/editors/default/sidebar.html index 6b04bb29819762..511a21ca0aa91d 100644 --- a/src/ui/public/vis/editors/default/sidebar.html +++ b/src/ui/public/vis/editors/default/sidebar.html @@ -139,10 +139,10 @@
- + - +
diff --git a/test/functional/apps/getting_started/_shakespeare.js b/test/functional/apps/getting_started/_shakespeare.js index 6a16d98e3815c5..d421aa66167254 100644 --- a/test/functional/apps/getting_started/_shakespeare.js +++ b/test/functional/apps/getting_started/_shakespeare.js @@ -107,7 +107,6 @@ export default function ({ getService, getPageObjects }) { */ it('should configure Terms aggregation on play_name', async function () { await PageObjects.visualize.clickBucket('X-Axis'); - await PageObjects.common.sleep(1000); log.debug('Aggregation = Terms'); await PageObjects.visualize.selectAggregation('Terms'); aggIndex = aggIndex + 1; @@ -139,7 +138,7 @@ export default function ({ getService, getPageObjects }) { */ it('should configure Max aggregation metric on speech_number', async function () { await PageObjects.visualize.clickAddMetric(); - await PageObjects.visualize.clickBucket('Y-Axis'); + await PageObjects.visualize.clickBucket('Y-Axis', 'metric'); log.debug('Aggregation = Max'); await PageObjects.visualize.selectYAxisAggregation('Max', 'speech_number', 'Max Speaking Parts', aggIndex); await PageObjects.visualize.clickGo(); diff --git a/test/functional/apps/visualize/_data_table.js b/test/functional/apps/visualize/_data_table.js index bf6c4e541a762a..0941b02244de8e 100644 --- a/test/functional/apps/visualize/_data_table.js +++ b/test/functional/apps/visualize/_data_table.js @@ -110,7 +110,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.clickNewSearch(); await PageObjects.header.setAbsoluteRange(fromTime, toTime); await PageObjects.visualize.clickAddMetric(); - await PageObjects.visualize.clickBucket('Metric'); + await PageObjects.visualize.clickBucket('Metric', 'metric'); await PageObjects.visualize.selectAggregation('Average Bucket', 'metrics'); await PageObjects.visualize.selectAggregation('Terms', 'metrics', 'buckets'); await PageObjects.visualize.selectField('geo.src', 'metrics', 'buckets'); diff --git a/test/functional/apps/visualize/_data_table_nontimeindex.js b/test/functional/apps/visualize/_data_table_nontimeindex.js index 5a4b5f82acf545..557003f18a1cfd 100644 --- a/test/functional/apps/visualize/_data_table_nontimeindex.js +++ b/test/functional/apps/visualize/_data_table_nontimeindex.js @@ -37,7 +37,6 @@ export default function ({ getService, getPageObjects }) { log.debug('clickNewSearch'); await PageObjects.visualize.clickNewSearch(PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED); log.debug('Bucket = Split Rows'); - await PageObjects.common.sleep(500); await PageObjects.visualize.clickBucket('Split Rows'); log.debug('Aggregation = Histogram'); await PageObjects.visualize.selectAggregation('Histogram'); @@ -105,7 +104,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.clickDataTable(); await PageObjects.visualize.clickNewSearch(PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED); await PageObjects.visualize.clickAddMetric(); - await PageObjects.visualize.clickBucket('Metric'); + await PageObjects.visualize.clickBucket('Metric', 'metric'); await PageObjects.visualize.selectAggregation('Average Bucket', 'metrics'); await PageObjects.visualize.selectAggregation('Terms', 'metrics', 'buckets'); await PageObjects.visualize.selectField('geo.src', 'metrics', 'buckets'); @@ -119,7 +118,6 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.navigateToNewVisualization(); await PageObjects.visualize.clickDataTable(); await PageObjects.visualize.clickNewSearch(PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED); - await PageObjects.common.sleep(500); await PageObjects.visualize.clickBucket('Split Rows'); await PageObjects.visualize.selectAggregation('Date Histogram'); await PageObjects.visualize.selectField('@timestamp'); @@ -139,7 +137,6 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.navigateToNewVisualization(); await PageObjects.visualize.clickDataTable(); await PageObjects.visualize.clickNewSearch(PageObjects.visualize.index.LOGSTASH_NON_TIME_BASED); - await PageObjects.common.sleep(500); await PageObjects.visualize.clickBucket('Split Rows'); await PageObjects.visualize.selectAggregation('Date Histogram'); await PageObjects.visualize.selectField('@timestamp'); diff --git a/test/functional/apps/visualize/_gauge_chart.js b/test/functional/apps/visualize/_gauge_chart.js index da54b826976dc9..f0aeb8fbdb4a4d 100644 --- a/test/functional/apps/visualize/_gauge_chart.js +++ b/test/functional/apps/visualize/_gauge_chart.js @@ -76,12 +76,11 @@ export default function ({ getService, getPageObjects }) { const expectedTexts = [ '2,904\nwin 8: Count', '0B\nwin 8: Min bytes' ]; await PageObjects.visualize.clickMetricEditor(); - await PageObjects.visualize.clickBucket('Split Group'); await PageObjects.visualize.selectAggregation('Terms'); await PageObjects.visualize.selectField('machine.os.raw'); await PageObjects.visualize.setSize('1'); await PageObjects.visualize.clickAddMetric(); - await PageObjects.visualize.clickBucket('Metric'); + await PageObjects.visualize.clickBucket('Metric', 'metric'); await PageObjects.visualize.selectAggregation('Min', 'metrics'); await PageObjects.visualize.selectField('bytes', 'metrics'); await PageObjects.visualize.clickGo(); diff --git a/test/functional/apps/visualize/_inspector.js b/test/functional/apps/visualize/_inspector.js index 3c816eafaf6ec8..7ddf7d817471d1 100644 --- a/test/functional/apps/visualize/_inspector.js +++ b/test/functional/apps/visualize/_inspector.js @@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }) { log.debug('Add Average Metric on machine.ram field'); await PageObjects.visualize.clickAddMetric(); - await PageObjects.visualize.clickBucket('Y-Axis'); + await PageObjects.visualize.clickBucket('Y-Axis', 'metric'); await PageObjects.visualize.selectAggregation('Average', 'metrics'); await PageObjects.visualize.selectField('machine.ram', 'metrics'); await PageObjects.visualize.clickGo(); diff --git a/test/functional/apps/visualize/_point_series_options.js b/test/functional/apps/visualize/_point_series_options.js index dd19531a4d6df3..91e9e4e05a2bf1 100644 --- a/test/functional/apps/visualize/_point_series_options.js +++ b/test/functional/apps/visualize/_point_series_options.js @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }) { log.debug('Add Metric'); await PageObjects.visualize.clickAddMetric(); log.debug('Metric = Value Axis'); - await PageObjects.visualize.clickBucket('Y-Axis'); + await PageObjects.visualize.clickBucket('Y-Axis', 'metric'); log.debug('Aggregation = Average'); await PageObjects.visualize.selectAggregation('Average', 'metrics'); log.debug('Field = memory'); diff --git a/test/functional/apps/visualize/_tag_cloud.js b/test/functional/apps/visualize/_tag_cloud.js index 6fcdfa1c13d799..3d559066b0a006 100644 --- a/test/functional/apps/visualize/_tag_cloud.js +++ b/test/functional/apps/visualize/_tag_cloud.js @@ -41,10 +41,8 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.clickNewSearch(); log.debug('Set absolute time range from \"' + fromTime + '\" to \"' + toTime + '\"'); await PageObjects.header.setAbsoluteRange(fromTime, toTime); - await PageObjects.common.sleep(1000); log.debug('select Tags'); await PageObjects.visualize.clickBucket('Tags'); - await PageObjects.common.sleep(1000); log.debug('Click aggregation Terms'); await PageObjects.visualize.selectAggregation('Terms'); log.debug('Click field machine.ram'); diff --git a/test/functional/page_objects/visualize_page.js b/test/functional/page_objects/visualize_page.js index 0e571efcc070fc..a1103eb1762fcf 100644 --- a/test/functional/page_objects/visualize_page.js +++ b/test/functional/page_objects/visualize_page.js @@ -392,20 +392,26 @@ export function VisualizePageProvider({ getService, getPageObjects }) { } // clickBucket(bucketType) 'X-Axis', 'Split Area', 'Split Chart' - async clickBucket(bucketName) { - const chartTypes = await retry.try( - async () => await find.allByCssSelector('li.list-group-item.list-group-menu-item')); - log.debug('found bucket types ' + chartTypes.length); - - async function getChartType(chart) { - const chartString = await chart.getVisibleText(); - if (chartString === bucketName) { - await chart.click(); - await PageObjects.common.sleep(500); + async clickBucket(bucketName, type = 'bucket') { + const testSubject = type === 'bucket' ? 'bucketsAggGroup' : 'metricsAggGroup'; + await retry.try(async () => { + const chartTypes = await retry.try( + async () => await find.allByCssSelector(`[data-test-subj="${testSubject}"] .list-group-menu-item`)); + log.debug('found bucket types ' + chartTypes.length); + + async function getChartType(chart) { + const chartString = await chart.getVisibleText(); + if (chartString === bucketName) { + await chart.click(); + return true; + } } - } - const getChartTypesPromises = chartTypes.map(getChartType); - await Promise.all(getChartTypesPromises); + const getChartTypesPromises = chartTypes.map(getChartType); + const clickResult = await Promise.all(getChartTypesPromises); + if (!clickResult.some(result => result === true)) { + throw new Error(`bucket ${bucketName} not found`); + } + }); } async selectAggregation(myString, groupName = 'buckets', childAggregationType = null) { From 2e68bc186b333d198cfcf5182ba1cd1658ae6a78 Mon Sep 17 00:00:00 2001 From: Jason Rhodes Date: Mon, 27 Aug 2018 07:54:22 -0400 Subject: [PATCH 032/173] Uses polished (lib) to generate rgba values from existing hex color vars (#22272) * Adds and uses new rgba generation method for generating rgba colors from hex variables * Removes old comments and duplicate imports * Adds tests for rgba method and some jsdocs, and prettier fixes * Removed custom rgba in favor of polished.rgba --- .../components/shared/KueryBar/Typeahead/Suggestions.js | 4 +++- x-pack/plugins/apm/public/components/shared/Modal.js | 5 +++-- x-pack/plugins/apm/public/store/selectors/chartSelectors.js | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/apm/public/components/shared/KueryBar/Typeahead/Suggestions.js b/x-pack/plugins/apm/public/components/shared/KueryBar/Typeahead/Suggestions.js index 8df5168471336e..7060be264b7bdb 100644 --- a/x-pack/plugins/apm/public/components/shared/KueryBar/Typeahead/Suggestions.js +++ b/x-pack/plugins/apm/public/components/shared/KueryBar/Typeahead/Suggestions.js @@ -10,12 +10,14 @@ import styled from 'styled-components'; import { isEmpty } from 'lodash'; import Suggestion from './Suggestion'; import { units, colors, px, unit } from '../../../../style/variables'; +import { rgba } from 'polished'; const List = styled.ul` width: 100%; border: 1px solid ${colors.gray4}; border-radius: ${px(units.quarter)}; - box-shadow: 0px ${px(units.quarter)} ${px(units.double)} rgba(0, 0, 0, 0.1); + box-shadow: 0px ${px(units.quarter)} ${px(units.double)} + ${rgba(colors.black, 0.1)}; position: absolute; background: #fff; z-index: 10; diff --git a/x-pack/plugins/apm/public/components/shared/Modal.js b/x-pack/plugins/apm/public/components/shared/Modal.js index f588b015e856a5..07e8d9ada99613 100644 --- a/x-pack/plugins/apm/public/components/shared/Modal.js +++ b/x-pack/plugins/apm/public/components/shared/Modal.js @@ -9,7 +9,8 @@ import Portal from 'react-portal'; import PropTypes from 'prop-types'; import styled from 'styled-components'; import { Close } from './Icons'; -import { fontSizes, units } from '../../style/variables'; +import { fontSizes, units, colors } from '../../style/variables'; +import { rgba } from 'polished'; const Header = styled.div` display: flex; @@ -36,7 +37,7 @@ const ModalFixed = styled.div` const ModalOverlay = styled(ModalFixed)` z-index: 10; - background: rgba(45, 45, 45, 0.8); + background: ${rgba(colors.gray2, 0.8)}; height: 100%; `; diff --git a/x-pack/plugins/apm/public/store/selectors/chartSelectors.js b/x-pack/plugins/apm/public/store/selectors/chartSelectors.js index ef5d918476a0f0..cc898d6b667799 100644 --- a/x-pack/plugins/apm/public/store/selectors/chartSelectors.js +++ b/x-pack/plugins/apm/public/store/selectors/chartSelectors.js @@ -12,6 +12,7 @@ import { asDecimal, tpmUnit } from '../../utils/formatters'; +import { rgba } from 'polished'; export const getEmptySerie = memoize( (start = Date.now() - 3600000, end = Date.now()) => { @@ -91,7 +92,7 @@ export function getResponseTimeSeries(chartsData) { ), type: 'area', color: 'none', - areaColor: 'rgba(49, 133, 252, 0.1)' // apmBlue + areaColor: rgba(colors.apmBlue, 0.1) }); series.splice(1, 0, { @@ -105,7 +106,7 @@ export function getResponseTimeSeries(chartsData) { ), type: 'areaMaxHeight', color: 'none', - areaColor: 'rgba(146, 0, 0, 0.1)' // apmRed + areaColor: rgba(colors.apmRed, 0.1) }); } From 4653c7f4341ce773519d134d426b07be5f22592a Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Mon, 27 Aug 2018 10:16:21 -0400 Subject: [PATCH 033/173] [Telemetry] Add beats architecture stats to telemetry (#21227) * Add beats architecture stats to telemetry * Update tests * PR feedback * Use values instead of keys --- .../fixtures/beats_stats_results.json | 20 +++++++++++++ .../monitoring/__tests__/get_beats_stats.js | 19 ++++++++++++ .../telemetry/monitoring/get_beats_stats.js | 30 +++++++++++++++++-- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/fixtures/beats_stats_results.json b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/fixtures/beats_stats_results.json index 108369dcba72a1..be6e4352514fe8 100644 --- a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/fixtures/beats_stats_results.json +++ b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/fixtures/beats_stats_results.json @@ -34,6 +34,26 @@ } } }, + { + "_source": { + "type": "beats_state", + "cluster_uuid": "W7hppdX7R229Oy3KQbZrTw", + "beats_state": { + "state": { + "host": { + "name": "Elastic-MBP.local", + "architecture": "x86_64", + "os": { + "platform": "darwin", + "version": "10.13.6", + "family": "darwin", + "build": "17G65" + } + } + } + } + } + }, { "_source": { "type": "beats_stats", diff --git a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/get_beats_stats.js b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/get_beats_stats.js index cbd9da52b44909..3cde267a1536bc 100644 --- a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/get_beats_stats.js +++ b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/__tests__/get_beats_stats.js @@ -14,6 +14,7 @@ const getBaseOptions = () => ({ clusterHostSets: {}, clusterInputSets: {}, clusterModuleSets: {}, + clusterArchitectureMaps: {} }); describe('Get Beats Stats', () => { @@ -111,6 +112,10 @@ describe('Get Beats Stats', () => { count: 0, names: [], }, + architecture: { + count: 0, + architectures: [] + } }, }); }); @@ -140,6 +145,16 @@ describe('Get Beats Stats', () => { count: 1, names: [ 'firehose' ], }, + architecture: { + count: 1, + architectures: [ + { + architecture: 'x86_64', + count: 1, + name: 'darwin' + } + ] + } }, FlV4ckTxQ0a78hmBkzzc9A: { count: 405, @@ -165,6 +180,10 @@ describe('Get Beats Stats', () => { count: 0, names: [], }, + architecture: { + count: 0, + architectures: [] + } }, }); }); diff --git a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/get_beats_stats.js b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/get_beats_stats.js index 9b4b9733ee9538..ff0ddadac40f11 100644 --- a/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/get_beats_stats.js +++ b/x-pack/plugins/xpack_main/server/lib/telemetry/monitoring/get_beats_stats.js @@ -26,6 +26,10 @@ const getBaseStats = () => ({ count: 0, names: [] }, + architecture: { + count: 0, + architectures: [] + } }); @@ -37,7 +41,7 @@ const getBaseStats = () => ({ * @param {Object} clusterHostSets - the object keyed by cluster UUIDs to count the unique hosts * @param {Object} clusterModuleSets - the object keyed by cluster UUIDs to count the unique modules */ -export function processResults(results = [], { clusters, clusterHostSets, clusterInputSets, clusterModuleSets }) { +export function processResults(results = [], { clusters, clusterHostSets, clusterInputSets, clusterModuleSets, clusterArchitectureMaps }) { const currHits = get(results, 'hits.hits', []); currHits.forEach(hit => { const clusterUuid = get(hit, '_source.cluster_uuid'); @@ -46,6 +50,7 @@ export function processResults(results = [], { clusters, clusterHostSets, cluste clusterHostSets[clusterUuid] = new Set(); clusterInputSets[clusterUuid] = new Set(); clusterModuleSets[clusterUuid] = new Set(); + clusterArchitectureMaps[clusterUuid] = new Map(); } const processBeatsStatsResults = () => { @@ -97,6 +102,25 @@ export function processResults(results = [], { clusters, clusterHostSets, cluste clusters[clusterUuid].module.names = Array.from(moduleSet); clusters[clusterUuid].module.count += stateModule.count; } + + const stateHost = get(hit, '_source.beats_state.state.host'); + if (stateHost !== undefined) { + const hostMap = clusterArchitectureMaps[clusterUuid]; + const hostKey = `${stateHost.architecture}/${stateHost.os.platform}`; + let os = hostMap.get(hostKey); + + if (!os) { // undefined if new + os = { name: stateHost.os.platform, architecture: stateHost.architecture, count: 0 }; + hostMap.set(hostKey, os); + } + + // total per os/arch + os.count += 1; + + // overall total (which should be the same number as the sum of all os.count values) + clusters[clusterUuid].architecture.count += 1; + clusters[clusterUuid].architecture.architectures = Array.from(hostMap.values()); + } }; if (get(hit, '_source.type') === 'beats_stats') { @@ -136,6 +160,7 @@ async function fetchBeatsByType(server, callCluster, clusterUuids, start, end, { 'hits.hits._source.beats_stats.metrics.libbeat.output.type', 'hits.hits._source.beats_state.state.input', 'hits.hits._source.beats_state.state.module', + 'hits.hits._source.beats_state.state.host', ], body: { query: createQuery({ @@ -194,7 +219,8 @@ export async function getBeatsStats(server, callCluster, clusterUuids, start, en clusters: {}, // the result object to be built up clusterHostSets: {}, // passed to processResults for tracking state in the results generation clusterInputSets: {}, // passed to processResults for tracking state in the results generation - clusterModuleSets: {} // passed to processResults for tracking state in the results generation + clusterModuleSets: {}, // passed to processResults for tracking state in the results generation + clusterArchitectureMaps: {} // passed to processResults for tracking state in the results generation }; await Promise.all([ From 336be3298af4487f52785098a63a75f6e7f488e7 Mon Sep 17 00:00:00 2001 From: Lee Drengenberg Date: Mon, 27 Aug 2018 10:38:47 -0500 Subject: [PATCH 034/173] Fix "visualize app linked saved searched should allow adding filters while having a linked saved search" (#22380) * Rebuild modulePath correctly if on Windows * Adding 1 second sleep to fix flaky test * Wait to find a gear in the visualization after clicking Edit * Revert "Wait to find a gear in the visualization after clicking Edit" This reverts commit 8dac3fbd630207d436be2744922f248fe21caaac. * use waitForRenderComplete and change that to 1s timeout * Add retry.waitFor * use waitFor and return === result * Revert to files from another PR * Remove a debug console.log --- .../apps/visualize/_linked_saved_searches.js | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/test/functional/apps/visualize/_linked_saved_searches.js b/test/functional/apps/visualize/_linked_saved_searches.js index 3e0a49a2f96348..634de7e99dc127 100644 --- a/test/functional/apps/visualize/_linked_saved_searches.js +++ b/test/functional/apps/visualize/_linked_saved_searches.js @@ -21,6 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const filterBar = getService('filterBar'); + const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'discover', 'visualize', 'header']); describe('visualize app', function describeIndexTests() { @@ -46,28 +47,36 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.clickSavedSearch(savedSearchName); await PageObjects.header.setAbsoluteRange(fromTime, toTime); await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.visualize.getTableVisData(); - expect(data.trim()).to.be('9,109'); + await retry.waitFor('wait for count to equal 9,109', async () => { + const data = await PageObjects.visualize.getTableVisData(); + return data.trim() === '9,109'; + }); }); it('should respect the time filter when linked to a saved search', async () => { await PageObjects.header.setAbsoluteRange('2015-09-19 06:31:44.000', '2015-09-21 10:00:00.000'); await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.visualize.getTableVisData(); - expect(data.trim()).to.be('3,950'); + await retry.waitFor('wait for count to equal 3,950', async () => { + const data = await PageObjects.visualize.getTableVisData(); + return data.trim() === '3,950'; + }); }); it('should allow adding filters while having a linked saved search', async () => { await filterBar.addFilter('bytes', 'is between', '100', '3000'); await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.visualize.getTableVisData(); - expect(data.trim()).to.be('707'); + await retry.waitFor('wait for count to equal 707', async () => { + const data = await PageObjects.visualize.getTableVisData(); + return data.trim() === '707'; + }); }); it('should allow unlinking from a linked search', async () => { await PageObjects.visualize.clickUnlinkSavedSearch(); - const data = await PageObjects.visualize.getTableVisData(); - expect(data.trim()).to.be('707'); + await retry.waitFor('wait for count to equal 707', async () => { + const data = await PageObjects.visualize.getTableVisData(); + return data.trim() === '707'; + }); // The filter on the saved search should now be in the editor expect(await filterBar.hasFilter('extension.raw', 'jpg')).to.be(true); @@ -75,15 +84,19 @@ export default function ({ getService, getPageObjects }) { // the visualization should not be linked anymore with the saved search. await filterBar.toggleFilterEnabled('extension.raw'); await PageObjects.header.waitUntilLoadingHasFinished(); - const unfilteredData = await PageObjects.visualize.getTableVisData(); - expect(unfilteredData.trim()).to.be('1,293'); + await retry.waitFor('wait for count to equal 1,293', async () => { + const unfilteredData = await PageObjects.visualize.getTableVisData(); + return unfilteredData.trim() === '1,293'; + }); }); it('should not break when saving after unlinking', async () => { await PageObjects.visualize.saveVisualization('Unlinked before saved'); await PageObjects.header.waitUntilLoadingHasFinished(); - const data = await PageObjects.visualize.getTableVisData(); - expect(data.trim()).to.be('1,293'); + await retry.waitFor('wait for count to equal 1,293', async () => { + const data = await PageObjects.visualize.getTableVisData(); + return data.trim() === '1,293'; + }); }); }); }); From 8ccd45603c28690748f38be81e45be96013cb10a Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 27 Aug 2018 11:51:36 -0600 Subject: [PATCH 035/173] Refactor Sample Data Home section which also fixes flaky sample data functional test (#21655) * add retry to sample data unstall test * fix flaky sample data test * remove retry around expect * simplify solution * remove onRequestComplete and just track status in state * move all state into new SampleDataSetCards * track processing status in seperate object than sampleDataSets * display toast notifications from SampleDataSetCards component * remove checks for toast notifications, just causing flakyness * only load sample data set status on initial component load * set processing to false when there is an install failure --- .../home/components/sample_data_set_card.js | 80 ++----- .../home/components/sample_data_set_cards.js | 211 ++++++++++++++++++ .../home/components/tutorial_directory.js | 106 +++------ .../kibana/public/home/sample_data_sets.js | 81 +------ src/server/sample_data/routes/uninstall.js | 2 +- test/functional/apps/home/_sample_data.js | 10 - test/functional/page_objects/home_page.js | 12 + 7 files changed, 291 insertions(+), 211 deletions(-) create mode 100644 src/core_plugins/kibana/public/home/components/sample_data_set_cards.js diff --git a/src/core_plugins/kibana/public/home/components/sample_data_set_card.js b/src/core_plugins/kibana/public/home/components/sample_data_set_card.js index 4e8554e7324f86..a19eaf1c5dd8a8 100644 --- a/src/core_plugins/kibana/public/home/components/sample_data_set_card.js +++ b/src/core_plugins/kibana/public/home/components/sample_data_set_card.js @@ -28,70 +28,40 @@ import { EuiToolTip, } from '@elastic/eui'; -import { - installSampleDataSet, - uninstallSampleDataSet -} from '../sample_data_sets'; +export const INSTALLED_STATUS = 'installed'; +export const UNINSTALLED_STATUS = 'not_installed'; export class SampleDataSetCard extends React.Component { - constructor(props) { - super(props); - - this.state = { - isProcessingRequest: false, - }; - } - - startRequest = async () => { - const { - getConfig, - setConfig, - id, - name, - onRequestComplete, - defaultIndex, - clearIndexPatternsCache, - } = this.props; - - this.setState({ - isProcessingRequest: true, - }); - - if (this.isInstalled()) { - await uninstallSampleDataSet(id, name, defaultIndex, getConfig, setConfig, clearIndexPatternsCache); - } else { - await installSampleDataSet(id, name, defaultIndex, getConfig, setConfig, clearIndexPatternsCache); - } - - onRequestComplete(); - - this.setState({ - isProcessingRequest: false, - }); - } - isInstalled = () => { - if (this.props.status === 'installed') { + if (this.props.status === INSTALLED_STATUS) { return true; } return false; } + install = () => { + this.props.onInstall(this.props.id); + } + + uninstall = () => { + this.props.onUninstall(this.props.id); + } + renderBtn = () => { switch (this.props.status) { - case 'installed': + case INSTALLED_STATUS: return ( - {this.state.isProcessingRequest ? 'Removing' : 'Remove'} + {this.props.isProcessing ? 'Removing' : 'Remove'} @@ -105,16 +75,16 @@ export class SampleDataSetCard extends React.Component { ); - case 'not_installed': + case UNINSTALLED_STATUS: return ( - {this.state.isProcessingRequest ? 'Adding' : 'Add'} + {this.props.isProcessing ? 'Adding' : 'Add'} @@ -163,15 +133,13 @@ SampleDataSetCard.propTypes = { name: PropTypes.string.isRequired, launchUrl: PropTypes.string.isRequired, status: PropTypes.oneOf([ - 'installed', - 'not_installed', + INSTALLED_STATUS, + UNINSTALLED_STATUS, 'unknown', ]).isRequired, + isProcessing: PropTypes.bool.isRequired, statusMsg: PropTypes.string, - onRequestComplete: PropTypes.func.isRequired, - getConfig: PropTypes.func.isRequired, - setConfig: PropTypes.func.isRequired, - clearIndexPatternsCache: PropTypes.func.isRequired, - defaultIndex: PropTypes.string.isRequired, previewUrl: PropTypes.string.isRequired, + onInstall: PropTypes.func.isRequired, + onUninstall: PropTypes.func.isRequired, }; diff --git a/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js b/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js new file mode 100644 index 00000000000000..4f50af96778764 --- /dev/null +++ b/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js @@ -0,0 +1,211 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import _ from 'lodash'; +import React from 'react'; +import PropTypes from 'prop-types'; +import { + EuiFlexGrid, + EuiFlexItem, +} from '@elastic/eui'; + +import { + SampleDataSetCard, + INSTALLED_STATUS, + UNINSTALLED_STATUS, +} from './sample_data_set_card'; + +import { toastNotifications } from 'ui/notify'; + +import { + listSampleDataSets, + installSampleDataSet, + uninstallSampleDataSet +} from '../sample_data_sets'; + +export class SampleDataSetCards extends React.Component { + + constructor(props) { + super(props); + + this.state = { + sampleDataSets: [], + processingStatus: {}, + }; + } + + componentWillUnmount() { + this._isMounted = false; + } + + async componentDidMount() { + this._isMounted = true; + + this.loadSampleDataSets(); + } + + loadSampleDataSets = async () => { + let sampleDataSets; + try { + sampleDataSets = await listSampleDataSets(); + } catch (fetchError) { + toastNotifications.addDanger({ + title: `Unable to load sample data sets list`, + text: `${fetchError.message}`, + }); + sampleDataSets = []; + } + + if (!this._isMounted) { + return; + } + + this.setState({ + sampleDataSets: sampleDataSets + .sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }), + processingStatus: {}, + }); + } + + install = async (id) => { + const { + getConfig, + setConfig, + clearIndexPatternsCache, + } = this.props; + + const targetSampleDataSet = this.state.sampleDataSets.find((sampleDataSet) => { + return sampleDataSet.id === id; + }); + + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: true } + })); + + try { + await installSampleDataSet(id, targetSampleDataSet.defaultIndex, getConfig, setConfig, clearIndexPatternsCache); + } catch (fetchError) { + if (this._isMounted) { + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: false } + })); + } + toastNotifications.addDanger({ + title: `Unable to install sample data set: ${targetSampleDataSet.name}`, + text: `${fetchError.message}`, + }); + return; + } + + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: false }, + sampleDataSets: prevState.sampleDataSets.map(sampleDataSet => { + if (sampleDataSet.id === id) { + sampleDataSet.status = INSTALLED_STATUS; + } + return sampleDataSet; + }), + })); + toastNotifications.addSuccess({ + title: `${targetSampleDataSet.name} installed`, + ['data-test-subj']: 'sampleDataSetInstallToast' + }); + } + + uninstall = async (id) => { + const { + getConfig, + setConfig, + clearIndexPatternsCache, + } = this.props; + + const targetSampleDataSet = this.state.sampleDataSets.find((sampleDataSet) => { + return sampleDataSet.id === id; + }); + + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: true } + })); + + try { + await uninstallSampleDataSet(id, targetSampleDataSet.defaultIndex, getConfig, setConfig, clearIndexPatternsCache); + } catch (fetchError) { + if (this._isMounted) { + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: false } + })); + } + toastNotifications.addDanger({ + title: `Unable to uninstall sample data set: ${targetSampleDataSet.name}`, + text: `${fetchError.message}`, + }); + return; + } + + this.setState((prevState) => ({ + processingStatus: { ...prevState.processingStatus, [id]: false }, + sampleDataSets: prevState.sampleDataSets.map(sampleDataSet => { + if (sampleDataSet.id === id) { + sampleDataSet.status = UNINSTALLED_STATUS; + } + return sampleDataSet; + }), + })); + toastNotifications.addSuccess({ + title: `${targetSampleDataSet.name} uninstalled`, + ['data-test-subj']: 'sampleDataSetUninstallToast' + }); + } + + render() { + return ( + + { + this.state.sampleDataSets.map(sampleDataSet => { + return ( + + + + ); + }) + } + + ); + } +} + +SampleDataSetCards.propTypes = { + getConfig: PropTypes.func.isRequired, + setConfig: PropTypes.func.isRequired, + clearIndexPatternsCache: PropTypes.func.isRequired, + addBasePath: PropTypes.func.isRequired, +}; diff --git a/src/core_plugins/kibana/public/home/components/tutorial_directory.js b/src/core_plugins/kibana/public/home/components/tutorial_directory.js index 77ca6e379d710a..d1835e5546c43b 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial_directory.js +++ b/src/core_plugins/kibana/public/home/components/tutorial_directory.js @@ -21,7 +21,7 @@ import _ from 'lodash'; import React from 'react'; import PropTypes from 'prop-types'; import { Synopsis } from './synopsis'; -import { SampleDataSetCard } from './sample_data_set_card'; +import { SampleDataSetCards } from './sample_data_set_cards'; import { EuiPage, @@ -36,7 +36,6 @@ import { import { getTutorials } from '../load_tutorials'; -import { listSampleDataSets } from '../sample_data_sets'; const ALL_TAB_ID = 'all'; const SAMPLE_DATA_TAB_ID = 'sampleData'; @@ -70,7 +69,6 @@ export class TutorialDirectory extends React.Component { this.state = { selectedTabId: openTab, tutorialCards: [], - sampleDataSets: [], }; } @@ -81,8 +79,6 @@ export class TutorialDirectory extends React.Component { async componentDidMount() { this._isMounted = true; - this.loadSampleDataSets(); - const tutorialConfigs = await getTutorials(); if (!this._isMounted) { @@ -126,20 +122,6 @@ export class TutorialDirectory extends React.Component { }); } - loadSampleDataSets = async () => { - const sampleDataSets = await listSampleDataSets(); - - if (!this._isMounted) { - return; - } - - this.setState({ - sampleDataSets: sampleDataSets.sort((a, b) => { - return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); - }), - }); - } - onSelectedTabChanged = id => { this.setState({ selectedTabId: id, @@ -158,57 +140,43 @@ export class TutorialDirectory extends React.Component { )); } - renderTab = () => { + renderTabContent = () => { if (this.state.selectedTabId === SAMPLE_DATA_TAB_ID) { - return this.renderSampleDataSetsTab(); - } - - return this.renderTutorialsTab(); - } - - renderTutorialsTab = () => { - return this.state.tutorialCards - .filter((tutorial) => { - return this.state.selectedTabId === ALL_TAB_ID || this.state.selectedTabId === tutorial.category; - }) - .map((tutorial) => { - return ( - - - - ); - }); - }; - - renderSampleDataSetsTab = () => { - return this.state.sampleDataSets.map(sampleDataSet => { return ( - - - + ); - }); + } + + return ( + + { + this.state.tutorialCards + .filter((tutorial) => { + return this.state.selectedTabId === ALL_TAB_ID || this.state.selectedTabId === tutorial.category; + }) + .map((tutorial) => { + return ( + + + + ); + }) + } + + ); } render() { @@ -230,9 +198,7 @@ export class TutorialDirectory extends React.Component { {this.renderTabs()} - - { this.renderTab() } - + {this.renderTabContent()} diff --git a/src/core_plugins/kibana/public/home/sample_data_sets.js b/src/core_plugins/kibana/public/home/sample_data_sets.js index 363986623bbb90..84823e1c01fca8 100644 --- a/src/core_plugins/kibana/public/home/sample_data_sets.js +++ b/src/core_plugins/kibana/public/home/sample_data_sets.js @@ -17,57 +17,16 @@ * under the License. */ -import chrome from 'ui/chrome'; -import { toastNotifications } from 'ui/notify'; +import { kfetch } from 'ui/kfetch'; -const sampleDataUrl = chrome.addBasePath('/api/sample_data'); -const headers = new Headers({ - Accept: 'application/json', - 'Content-Type': 'application/json', - 'kbn-xsrf': 'kibana', -}); +const sampleDataUrl = '/api/sample_data'; export async function listSampleDataSets() { - try { - const response = await fetch(sampleDataUrl, { - method: 'get', - credentials: 'include', - headers: headers, - }); - - if (response.status >= 300) { - throw new Error(`Request failed with status code: ${response.status}`); - } - - return await response.json(); - } catch (err) { - toastNotifications.addDanger({ - title: `Unable to load sample data sets list`, - text: `${err.message}`, - }); - return []; - } + return await kfetch({ method: 'GET', pathname: sampleDataUrl }); } -export async function installSampleDataSet(id, name, defaultIndex, getConfig, setConfig, clearIndexPatternsCache) { - try { - const response = await fetch(`${sampleDataUrl}/${id}`, { - method: 'post', - credentials: 'include', - headers: headers, - }); - - if (response.status >= 300) { - const body = await response.text(); - throw new Error(`Request failed with status code: ${response.status}, message: ${body}`); - } - } catch (err) { - toastNotifications.addDanger({ - title: `Unable to install sample data set: ${name}`, - text: `${err.message}`, - }); - return; - } +export async function installSampleDataSet(id, defaultIndex, getConfig, setConfig, clearIndexPatternsCache) { + await kfetch({ method: 'POST', pathname: `${sampleDataUrl}/${id}` }); const existingDefaultIndex = await getConfig('defaultIndex'); if (existingDefaultIndex === null) { @@ -75,31 +34,10 @@ export async function installSampleDataSet(id, name, defaultIndex, getConfig, se } clearIndexPatternsCache(); - - toastNotifications.addSuccess({ - title: `${name} installed`, - ['data-test-subj']: 'sampleDataSetInstallToast' - }); } -export async function uninstallSampleDataSet(id, name, defaultIndex, getConfig, setConfig, clearIndexPatternsCache) { - try { - const response = await fetch(`${sampleDataUrl}/${id}`, { - method: 'delete', - credentials: 'include', - headers: headers, - }); - if (response.status >= 300) { - const body = await response.text(); - throw new Error(`Request failed with status code: ${response.status}, message: ${body}`); - } - } catch (err) { - toastNotifications.addDanger({ - title: `Unable to uninstall sample data set`, - text: `${err.message}`, - }); - return; - } +export async function uninstallSampleDataSet(id, defaultIndex, getConfig, setConfig, clearIndexPatternsCache) { + await kfetch({ method: 'DELETE', pathname: `${sampleDataUrl}/${id}` }); const existingDefaultIndex = await getConfig('defaultIndex'); if (existingDefaultIndex && existingDefaultIndex === defaultIndex) { @@ -107,9 +45,4 @@ export async function uninstallSampleDataSet(id, name, defaultIndex, getConfig, } clearIndexPatternsCache(); - - toastNotifications.addSuccess({ - title: `${name} uninstalled`, - ['data-test-subj']: 'sampleDataSetUninstallToast' - }); } diff --git a/src/server/sample_data/routes/uninstall.js b/src/server/sample_data/routes/uninstall.js index d28b04dad61c2e..98b03dad060108 100644 --- a/src/server/sample_data/routes/uninstall.js +++ b/src/server/sample_data/routes/uninstall.js @@ -63,7 +63,7 @@ export const createUninstallRoute = () => ({ } } - reply(); + reply({}); } } }); diff --git a/test/functional/apps/home/_sample_data.js b/test/functional/apps/home/_sample_data.js index 48cc3cf5099360..ea8174e279ab65 100644 --- a/test/functional/apps/home/_sample_data.js +++ b/test/functional/apps/home/_sample_data.js @@ -41,11 +41,6 @@ export default function ({ getService, getPageObjects }) { it('should install sample data set', async ()=> { await PageObjects.home.addSampleDataSet('flights'); - await retry.try(async () => { - const successToastExists = await PageObjects.home.doesSampleDataSetSuccessfulInstallToastExist(); - expect(successToastExists).to.be(true); - }); - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(true); }); @@ -98,11 +93,6 @@ export default function ({ getService, getPageObjects }) { describe('uninstall', () => { it('should uninstall sample data set', async ()=> { await PageObjects.home.removeSampleDataSet('flights'); - await retry.try(async () => { - const successToastExists = await PageObjects.home.doesSampleDataSetSuccessfulUninstallToastExist(); - expect(successToastExists).to.be(true); - }); - const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(false); }); diff --git a/test/functional/page_objects/home_page.js b/test/functional/page_objects/home_page.js index 77205e7bc33230..78dae43bf06844 100644 --- a/test/functional/page_objects/home_page.js +++ b/test/functional/page_objects/home_page.js @@ -53,10 +53,22 @@ export function HomePageProvider({ getService }) { async addSampleDataSet(id) { await testSubjects.click(`addSampleDataSet${id}`); + await this._waitForSampleDataLoadingAction(id); } async removeSampleDataSet(id) { await testSubjects.click(`removeSampleDataSet${id}`); + await this._waitForSampleDataLoadingAction(id); + } + + // loading action is either uninstall and install + async _waitForSampleDataLoadingAction(id) { + const sampleDataCard = await testSubjects.find(`sampleDataSetCard${id}`); + await retry.try(async () => { + // waitForDeletedByClassName needs to be inside retry because it will timeout at least once + // before action is complete + await sampleDataCard.waitForDeletedByClassName('euiLoadingSpinner'); + }); } async launchSampleDataSet(id) { From 0cca4858adf7d0259c087428756d9aebec052f00 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Mon, 27 Aug 2018 14:04:36 -0400 Subject: [PATCH 036/173] Add more to the instance view --- .../components/apm/instance/instance.js | 7 +- .../components/apm/instances/instances.js | 14 ++- .../monitoring/server/lib/apm/get_apms.js | 30 +++---- .../server/lib/metrics/apm/metrics.js | 2 +- .../routes/api/v1/apm/metric_set_instance.js | 86 +++++++++++-------- .../routes/api/v1/apm/metric_set_overview.js | 23 ----- 6 files changed, 80 insertions(+), 82 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js index e6d93785b1d3cb..241c784496aa79 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js @@ -15,7 +15,12 @@ export function ApmServerInstance({ summary, metrics, ...props }) { metrics.apm_os_load, metrics.apm_output_events_rate, metrics.apm_requests, - metrics.apm_memory + // metrics.apm_responses_valid, + // metrics.apm_responses_errors, + metrics.apm_incoming_requests_size, + metrics.apm_memory, + metrics.apm_transformations, + metrics.apm_responses_success_failure ]; return ( diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js index 4c80f5c9bcf350..7c00bcfcdaa819 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js @@ -11,7 +11,7 @@ import { KuiTableRowCell, KuiTableRow } from '@kbn/ui-framework/components'; -import { SORT_ASCENDING } from '../../../../common/constants'; +import { SORT_ASCENDING, SORT_DESCENDING } from '../../../../common/constants'; import { EuiLink } from '@elastic/eui'; import { Status } from './status'; @@ -20,7 +20,7 @@ const filterFields = [ 'beat.name', 'beat.version' ]; const columns = [ { title: 'Name', sortKey: 'beat.name', sortOrder: SORT_ASCENDING }, { title: 'Version', sortKey: 'beat.version', sortOrder: SORT_ASCENDING }, - // { title: 'Status', sortKey: 'kibana.status' }, + { title: 'Error Count', sortKey: 'errorCount', sortOrder: SORT_DESCENDING }, // { title: 'Load Average', sortKey: 'os.load.1m' }, // { title: 'Memory Size', sortKey: 'process.memory.resident_set_size_in_bytes' }, // { title: 'Requests', sortKey: 'requests.total' }, @@ -50,6 +50,16 @@ const instanceRowFactory = (goToInstance) => {
+ +
+ + { props.errorCount } + +
+
{/*
  diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms.js index 08b11f87c3a81c..8ea0223d4f50b2 100644 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms.js +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms.js @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { get } from 'lodash'; +import { get, sum } from 'lodash'; import moment from 'moment'; import { checkParam } from '../error_missing_required'; import { createQuery } from '../create_query'; @@ -12,8 +12,8 @@ import { calculateAvailability } from '../calculate_availability'; import { ApmMetric } from '../metrics'; /* - * Get detailed info for Kibanas in the cluster - * for Kibana listing page + * Get detailed info for APMs in the cluster + * for APM listing page * For each instance: * - name * - status @@ -56,20 +56,11 @@ export function getApms(req, apmIndexPattern, { clusterUuid }) { sort: [ { timestamp: { order: 'desc' } } ], - // _source: [ - // 'timestamp', - // 'kibana_stats.process.memory.resident_set_size_in_bytes', - // 'kibana_stats.os.load.1m', - // 'kibana_stats.response_times.average', - // 'kibana_stats.response_times.max', - // 'kibana_stats.requests.total', - // 'kibana_stats.kibana.transport_address', - // 'kibana_stats.kibana.name', - // 'kibana_stats.kibana.host', - // 'kibana_stats.kibana.uuid', - // 'kibana_stats.kibana.status', - // 'kibana_stats.concurrent_connections' - // ] + _source: [ + 'timestamp', + 'beats_stats.beat.*', + 'beats_stats.metrics.apm-server.server.response.errors.*', + ] } }; @@ -79,8 +70,11 @@ export function getApms(req, apmIndexPattern, { clusterUuid }) { const instances = get(resp, 'hits.hits', []); return instances.map(hit => { + const beatStats = get(hit, '_source.beats_stats'); + const errorCount = sum(Object.values(get(beatStats, 'metrics.apm-server.server.response.errors'))); return { - ...get(hit, '_source.beats_stats'), + ...beatStats, + errorCount, availability: calculateAvailability(get(hit, '_source.timestamp')) }; }); diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index 849e70aa1040bb..b6497cf18fa1c7 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -118,7 +118,7 @@ export const metrics = { }), apm_responses_failure: new ApmFailureResponseMetric({ field: 'beats_stats.metrics.apm-server.server.response.count', - title: 'Failure', + title: 'Success Rate', label: 'Failure', description: 'PLZ FILL ME IN' }), diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js index f5389460f2017b..923ac8c60e2232 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js @@ -26,50 +26,62 @@ export const metricSet = [ { keys: [ 'apm_output_events_total', + 'apm_output_events_failed', + 'apm_output_events_dropped', + 'apm_output_events_active', + 'apm_output_events_acked' ], name: 'apm_output_events_rate' }, + { + keys: ['apm_responses_failure', 'apm_responses_success'], + name: 'apm_responses_success_failure' + }, + { + keys: [ + 'apm_responses_count', + 'apm_responses_valid_ok', + 'apm_responses_valid_accepted' + ], + name: 'apm_responses_valid' + }, + { + keys: [ + // 'apm_responses_count', + 'apm_responses_errors_toolarge', + 'apm_responses_errors_validate', + 'apm_responses_errors_method', + 'apm_responses_errors_unauthorized', + 'apm_responses_errors_ratelimit', + 'apm_responses_errors_queue', + 'apm_responses_errors_decode', + 'apm_responses_errors_forbidden', + 'apm_responses_errors_concurrency', + 'apm_responses_errors_closed', + ], + name: 'apm_responses_errors' + }, { keys: [ 'apm_requests' ], name: 'apm_requests' + }, + { + keys: [ + 'apm_decoder_deflate_contentlength', + 'apm_decoder_gzip_contentlength', + 'apm_decoder_uncompressed_contentlength' + ], + name: 'apm_incoming_requests_size' + }, + { + keys: [ + 'apm_processor_transaction_transformations', + 'apm_processor_span_transformations', + 'apm_processor_error_transformations', + 'apm_processor_metric_transformations', + ], + name: 'apm_transformations' } - // { - // keys: [ - // 'beat_pipeline_events_total_rate', - // 'beat_output_events_total', - // ], - // name: 'beat_event_rates' - // }, - // { - // keys: [ - // 'beat_pipeline_events_failed_rate', - // 'beat_pipeline_events_dropped_rate', - // 'beat_output_events_dropped_rate', - // 'beat_pipeline_events_retry_rate' - // ], - // name: 'beat_fail_rates' - // }, - // { - // keys: ['beat_bytes_written', 'beat_output_write_bytes_rate'], - // name: 'beat_throughput_rates' - // }, - // { - // keys: ['beat_output_sending_errors', 'beat_output_receiving_errors'], - // name: 'beat_output_errors' - // }, - // { - // keys: ['beat_mem_alloc', 'beat_mem_rss', 'beat_mem_gc_next'], - // name: 'beat_memory' - // }, - // 'beat_cpu_utilization', - // { - // keys: [ - // 'beat_system_os_load_1', - // 'beat_system_os_load_5', - // 'beat_system_os_load_15' - // ], - // name: 'beat_os_load' - // } ]; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 6e0a350ea6da82..923ac8c60e2232 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -84,27 +84,4 @@ export const metricSet = [ ], name: 'apm_transformations' } - // { - // keys: [ - // 'beat_cluster_pipeline_events_failed_rate', - // 'beat_cluster_pipeline_events_dropped_rate', - // 'beat_cluster_output_events_dropped_rate', - // 'beat_cluster_pipeline_events_retry_rate' - // ], - // name: 'beat_fail_rates' - // }, - // { - // keys: [ - // 'beat_cluster_output_write_bytes_rate', - // 'beat_cluster_output_read_bytes_rate' - // ], - // name: 'beat_throughput_rates' - // }, - // { - // keys: [ - // 'beat_cluster_output_sending_errors', - // 'beat_cluster_output_receiving_errors' - // ], - // name: 'beat_output_errors' - // } ]; From caa953070fa12e8d0c12359d0b3839e2bb47022e Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Mon, 27 Aug 2018 16:33:20 -0400 Subject: [PATCH 037/173] Remove all specific APM code --- .../components/apm/instance/instance.js | 12 +- .../public/components/apm/instance/status.js | 26 - .../components/apm/instances/instances.js | 59 +- .../public/components/apm/instances/status.js | 29 +- .../public/components/apm/overview/index.js | 11 - .../monitoring/server/lib/apm/_apm_stats.js | 101 ---- .../server/lib/apm/create_apm_query.js | 39 -- .../monitoring/server/lib/apm/get_apm_info.js | 139 ----- .../monitoring/server/lib/apm/get_apms.js | 82 --- .../server/lib/apm/get_apms_for_clusters.js | 111 ---- .../monitoring/server/lib/apm/index.js | 7 - .../lib/cluster/get_clusters_from_request.js | 8 - .../server/lib/metrics/apm/metrics.js | 548 ------------------ .../api/v1/apm/_get_apm_cluster_status.js | 14 - .../server/routes/api/v1/apm/instance.js | 26 +- .../server/routes/api/v1/apm/instances.js | 23 +- .../routes/api/v1/apm/metric_set_instance.js | 80 +-- .../routes/api/v1/apm/metric_set_overview.js | 79 --- .../server/routes/api/v1/apm/overview.js | 25 +- 19 files changed, 7 insertions(+), 1412 deletions(-) delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apms.js delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js delete mode 100644 x-pack/plugins/monitoring/server/lib/apm/index.js delete mode 100644 x-pack/plugins/monitoring/server/routes/api/v1/apm/_get_apm_cluster_status.js diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js index 241c784496aa79..e75f273a24568b 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/instance.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/instance.js @@ -9,18 +9,8 @@ import { MonitoringTimeseriesContainer } from '../../chart'; import { EuiFlexGrid, EuiFlexItem, EuiSpacer, EuiPage, EuiPageBody } from '@elastic/eui'; import { Status } from './status'; -export function ApmServerInstance({ summary, metrics, ...props }) { +export function ApmServerInstance({ summary, ...props }) { const metricsToShow = [ - metrics.apm_cpu, - metrics.apm_os_load, - metrics.apm_output_events_rate, - metrics.apm_requests, - // metrics.apm_responses_valid, - // metrics.apm_responses_errors, - metrics.apm_incoming_requests_size, - metrics.apm_memory, - metrics.apm_transformations, - metrics.apm_responses_success_failure ]; return ( diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/status.js b/x-pack/plugins/monitoring/public/components/apm/instance/status.js index a5abe4fb47dce9..6ade4569b3f168 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/status.js @@ -5,18 +5,12 @@ */ import React, { Fragment } from 'react'; -import moment from 'moment'; import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; -import { formatMetric } from '../../../lib/format_number'; export function Status({ stats }) { const { name, - output, - version, - uptime, - timeOfLastEvent } = stats; const metrics = [ @@ -25,26 +19,6 @@ export function Status({ stats }) { value: name, dataTestSubj: 'name' }, - { - label: 'Output', - value: output, - dataTestSubj: 'output' - }, - { - label: 'Version', - value: version, - dataTestSubj: 'version' - }, - { - label: 'Uptime', - value: formatMetric(uptime, 'time_since'), - dataTestSubj: 'uptime' - }, - { - label: 'Last Event', - value: formatMetric(+moment(timeOfLastEvent), 'time_since2', 'ago'), - dataTestSubj: 'timeOfLastEvent', - } ]; const IconComponent = ({ status }) => ( diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js index 7c00bcfcdaa819..429f99c76be675 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js @@ -11,20 +11,12 @@ import { KuiTableRowCell, KuiTableRow } from '@kbn/ui-framework/components'; -import { SORT_ASCENDING, SORT_DESCENDING } from '../../../../common/constants'; import { EuiLink } from '@elastic/eui'; import { Status } from './status'; -const filterFields = [ 'beat.name', 'beat.version' ]; +const filterFields = [ 'beat.name' ]; const columns = [ - { title: 'Name', sortKey: 'beat.name', sortOrder: SORT_ASCENDING }, - { title: 'Version', sortKey: 'beat.version', sortOrder: SORT_ASCENDING }, - { title: 'Error Count', sortKey: 'errorCount', sortOrder: SORT_DESCENDING }, - // { title: 'Load Average', sortKey: 'os.load.1m' }, - // { title: 'Memory Size', sortKey: 'process.memory.resident_set_size_in_bytes' }, - // { title: 'Requests', sortKey: 'requests.total' }, - // { title: 'Response Times', sortKey: 'response_times.average' } ]; const instanceRowFactory = (goToInstance) => { return function KibanaRow(props) { @@ -40,55 +32,6 @@ const instanceRowFactory = (goToInstance) => {
- -
- - { props.beat.version } - -
-
- -
- - { props.errorCount } - -
-
- {/* -
-   - { !props.availability ? 'Offline' : capitalize(props.kibana.status) } -
-
*/} - {/* -
- { formatMetric(get(props, 'os.load["1m"]'), '0.00') } -
-
- -
- { formatNumber(props.process.memory.resident_set_size_in_bytes, 'byte') } -
-
- -
- { formatNumber(props.requests.total, 'int_commas') } -
-
- -
- { props.response_times.average && (formatNumber(props.response_times.average, 'int_commas') + ' ms avg') } -
-
- { formatNumber(props.response_times.max, 'int_commas') } ms max -
-
*/} ); }; diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/status.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js index 8d24641b36568d..8c2a58d2effcb6 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -5,42 +5,15 @@ */ import React, { Fragment } from 'react'; -import moment from 'moment'; import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; -import { formatMetric } from '../../../lib/format_number'; export function Status({ stats }) { const { - beats: { - total - }, - bytesSent, - totalEvents, - timeOfLastEvent, } = stats; const metrics = [ - { - label: 'Servers', - value: total, - dataTestSubj: 'total' - }, - { - label: 'Bytes Sent', - value: formatMetric(bytesSent, 'bytes'), - dataTestSubj: 'bytesSent' - }, - { - label: 'Total Events', - value: formatMetric(totalEvents, '0.[0]a'), - dataTestSubj: 'totalEvents' - }, - { - label: 'Last Event', - value: formatMetric(+moment(timeOfLastEvent), 'time_since2', 'ago'), - dataTestSubj: 'timeOfLastEvent', - } + ]; const IconComponent = ({ status }) => ( diff --git a/x-pack/plugins/monitoring/public/components/apm/overview/index.js b/x-pack/plugins/monitoring/public/components/apm/overview/index.js index 4dcc60bff36b0d..020768e22df081 100644 --- a/x-pack/plugins/monitoring/public/components/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/components/apm/overview/index.js @@ -18,20 +18,9 @@ import { Status } from '../instances/status'; export function ApmOverview({ clusterStatus, - metrics, ...props }) { const seriesToShow = [ - metrics.apm_cpu, - metrics.apm_os_load, - metrics.apm_output_events_rate, - metrics.apm_requests, - // metrics.apm_responses_valid, - // metrics.apm_responses_errors, - metrics.apm_incoming_requests_size, - metrics.apm_memory, - metrics.apm_transformations, - metrics.apm_responses_success_failure ]; const charts = seriesToShow.map((data, index) => ( diff --git a/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js b/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js deleted file mode 100644 index 82c322e4c26ba8..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js +++ /dev/null @@ -1,101 +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 { capitalize, get } from 'lodash'; - -export const getDiffCalculation = (max, min) => { - // no need to test max >= 0, but min <= 0 which is normal for a derivative after restart - // because we are aggregating/collapsing on ephemeral_ids - if ( - max !== null && min !== null && - max >= 0 && min >= 0 && - max >= min - ) { - return max - min; - } - - return null; -}; - -export const apmAggFilterPath = [ - 'aggregations.total', - 'aggregations.types.buckets.key', - 'aggregations.types.buckets.uuids.buckets.doc_count', - 'aggregations.min_events_total.value', - 'aggregations.max_events_total.value', - 'aggregations.min_bytes_sent_total.value', - 'aggregations.max_bytes_sent_total.value', -]; - -export const apmUuidsAgg = maxBucketSize => ({ - types: { - terms: { - field: 'beats_stats.beat.type', - size: 1000 // 1000 different types of beats possible seems like enough - }, - aggs: { - uuids: { - terms: { - field: 'beats_stats.beat.uuid', - size: maxBucketSize, - } - } - } - }, - total: { - cardinality: { - field: 'beats_stats.beat.uuid', - precision_threshold: 10000 - } - }, - min_events_total: { - min: { - field: 'beats_stats.metrics.libbeat.pipeline.events.total' - } - }, - max_events_total: { - max: { - field: 'beats_stats.metrics.libbeat.pipeline.events.total' - } - }, - min_bytes_sent_total: { - min: { - field: 'beats_stats.metrics.libbeat.output.write.bytes' - } - }, - max_bytes_sent_total: { - max: { - field: 'beats_stats.metrics.libbeat.output.write.bytes' - } - }, -}); - -export const apmAggResponseHandler = response => { - // beat types stat - const buckets = get(response, 'aggregations.types.buckets', []); - const beatTotal = get(response, 'aggregations.total.value', null); - const beatTypes = buckets.reduce((types, typeBucket) => { - return [ - ...types, - { - type: capitalize(typeBucket.key), - count: get(typeBucket, 'uuids.buckets.length'), - } - ]; - }, []); - - const eventsTotalMax = get(response, 'aggregations.max_events_total.value', null); - const eventsTotalMin = get(response, 'aggregations.min_events_total.value', null); - const bytesSentMax = get(response, 'aggregations.max_bytes_sent_total.value', null); - const bytesSentMin = get(response, 'aggregations.min_bytes_sent_total.value', null); - - return { - beatTotal, - beatTypes, - totalEvents: getDiffCalculation(eventsTotalMax, eventsTotalMin), - bytesSent: getDiffCalculation(bytesSentMax, bytesSentMin), - }; -}; diff --git a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js deleted file mode 100644 index a403b75718f8d9..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js +++ /dev/null @@ -1,39 +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 { defaults } from 'lodash'; -import { BeatsMetric } from '../metrics'; -import { createQuery } from '../create_query'; - -export const apmFilter = { - bool: { - must: { - term: { - 'beats_stats.beat.type': 'apm-server' - } - } - } -}; - -/** - * {@code createQuery} for all Beats instances. - * - * This helps to future proof Beats Monitoring by explicitly excluding APM Server from the Beats monitoring metrics - * so that its stats do not propagate there and the forthcoming APM Server monitoring pages. - * - * @param {Object} options The options to pass to {@code createQuery} - */ -export function createApmQuery(options = { }) { - options = defaults(options, { - filters: [], - metric: BeatsMetric.getMetricFields(), - type: 'beats_stats', - }); - - options.filters.push(apmFilter); - - return createQuery(options); -} diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js b/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js deleted file mode 100644 index 979c31092ff750..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apm_info.js +++ /dev/null @@ -1,139 +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, capitalize } from 'lodash'; -import { checkParam } from '../error_missing_required'; -import { createQuery } from '../create_query'; -import { getDiffCalculation } from '../beats/_beats_stats'; -import { ApmMetric } from '../metrics'; - -export function handleResponse(response, apmUuid) { - const firstStats = get(response, 'hits.hits[0].inner_hits.first_hit.hits.hits[0]._source.beats_stats'); - const stats = get(response, 'hits.hits[0]._source.beats_stats'); - - const eventsTotalFirst = get(firstStats, 'metrics.libbeat.pipeline.events.total', null); - const eventsEmittedFirst = get(firstStats, 'metrics.libbeat.pipeline.events.published', null); - const eventsDroppedFirst = get(firstStats, 'metrics.libbeat.pipeline.events.dropped', null); - const bytesWrittenFirst = get(firstStats, 'metrics.libbeat.output.write.bytes', null); - - const eventsTotalLast = get(stats, 'metrics.libbeat.pipeline.events.total', null); - const eventsEmittedLast = get(stats, 'metrics.libbeat.pipeline.events.published', null); - const eventsDroppedLast = get(stats, 'metrics.libbeat.pipeline.events.dropped', null); - const bytesWrittenLast = get(stats, 'metrics.libbeat.output.write.bytes', null); - - return { - uuid: apmUuid, - transportAddress: get(stats, 'beat.host', null), - version: get(stats, 'beat.version', null), - name: get(stats, 'beat.name', null), - type: capitalize(get(stats, 'beat.type')) || null, - output: capitalize(get(stats, 'metrics.libbeat.output.type')) || null, - configReloads: get(stats, 'metrics.libbeat.config.reloads', null), - uptime: get(stats, 'metrics.beat.info.uptime.ms', null), - eventsTotal: getDiffCalculation(eventsTotalLast, eventsTotalFirst), - eventsEmitted: getDiffCalculation(eventsEmittedLast, eventsEmittedFirst), - eventsDropped: getDiffCalculation(eventsDroppedLast, eventsDroppedFirst), - bytesWritten: getDiffCalculation(bytesWrittenLast, bytesWrittenFirst), - }; -} - -export async function getApmInfo(req, apmIndexPattern, { clusterUuid, apmUuid, start, end }) { - checkParam(apmIndexPattern, 'apmIndexPattern in beats/getBeatSummary'); - - const filters = [ - { term: { 'beats_stats.beat.uuid': apmUuid } }, - { term: { 'beats_stats.beat.type': 'apm-server' } } - ]; - const params = { - index: apmIndexPattern, - size: 1, - ignoreUnavailable: true, - filterPath: [ - 'hits.hits._source.beats_stats.beat.host', - 'hits.hits._source.beats_stats.beat.version', - 'hits.hits._source.beats_stats.beat.name', - 'hits.hits._source.beats_stats.beat.type', - 'hits.hits._source.beats_stats.metrics.libbeat.output.type', - 'hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.published', - 'hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.total', - 'hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.dropped', - 'hits.hits._source.beats_stats.metrics.libbeat.output.write.bytes', - 'hits.hits._source.beats_stats.metrics.libbeat.config.reloads', - 'hits.hits._source.beats_stats.metrics.beat.info.uptime.ms', - 'hits.hits.inner_hits.first_hit.hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.published', - 'hits.hits.inner_hits.first_hit.hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.total', - 'hits.hits.inner_hits.first_hit.hits.hits._source.beats_stats.metrics.libbeat.pipeline.events.dropped', - 'hits.hits.inner_hits.first_hit.hits.hits._source.beats_stats.metrics.libbeat.output.write.bytes', - ], - body: { - sort: { timestamp: { order: 'desc' } }, - query: createQuery({ - start, - end, - clusterUuid, - metric: ApmMetric.getMetricFields(), - filters - }), - collapse: { - field: 'beats_stats.metrics.beat.info.ephemeral_id', // collapse on ephemeral_id to handle restart - inner_hits: { - name: 'first_hit', - size: 1, - sort: { 'beats_stats.timestamp': 'asc' } - } - } - } - }; - - const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - - // Fetch additional information - const params2 = { - index: apmIndexPattern, - size: 0, - ignoreUnavailable: true, - // filterPath: apmAggFilterPath, - body: { - query: createQuery({ - start, - end, - clusterUuid, - metric: ApmMetric.getMetricFields(), - filters - }), - aggs: { - acked_events: { - filter: { - range: { - 'beats_stats.metrics.libbeat.output.events.acked': { - gt: 0, - } - } - }, - aggs: { - max_timestamp: { - max: { - field: 'timestamp' - } - } - } - } - } - } - }; - - const [response, response2] = await Promise.all([ - callWithRequest(req, 'search', params), - callWithRequest(req, 'search', params2) - ]); - - const formattedResponse = handleResponse(response, apmUuid); - - return { - ...formattedResponse, - timeOfLastEvent: get(response2, 'aggregations.acked_events.max_timestamp.value') - }; -} diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms.js deleted file mode 100644 index 8ea0223d4f50b2..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms.js +++ /dev/null @@ -1,82 +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, sum } from 'lodash'; -import moment from 'moment'; -import { checkParam } from '../error_missing_required'; -import { createQuery } from '../create_query'; -import { calculateAvailability } from '../calculate_availability'; -import { ApmMetric } from '../metrics'; - -/* - * Get detailed info for APMs in the cluster - * for APM listing page - * For each instance: - * - name - * - status - * - memory - * - os load average - * - requests - * - response times - */ -export function getApms(req, apmIndexPattern, { clusterUuid }) { - checkParam(apmIndexPattern, 'apmIndexPattern in getApms'); - - const config = req.server.config(); - const start = moment.utc(req.payload.timeRange.min).valueOf(); - const end = moment.utc(req.payload.timeRange.max).valueOf(); - - const params = { - index: apmIndexPattern, - size: config.get('xpack.monitoring.max_bucket_size'), - ignoreUnavailable: true, - body: { - query: createQuery({ - type: 'beats_stats', - start, - end, - clusterUuid, - metric: ApmMetric.getMetricFields(), - filters: [ - { - bool: { - should: [ - { term: { 'beats_stats.beat.type': 'apm-server' } } - ] - } - } - ] - }), - collapse: { - field: 'beats_stats.beat.uuid' - }, - sort: [ - { timestamp: { order: 'desc' } } - ], - _source: [ - 'timestamp', - 'beats_stats.beat.*', - 'beats_stats.metrics.apm-server.server.response.errors.*', - ] - } - }; - - const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - return callWithRequest(req, 'search', params) - .then(resp => { - const instances = get(resp, 'hits.hits', []); - - return instances.map(hit => { - const beatStats = get(hit, '_source.beats_stats'); - const errorCount = sum(Object.values(get(beatStats, 'metrics.apm-server.server.response.errors'))); - return { - ...beatStats, - errorCount, - availability: calculateAvailability(get(hit, '_source.timestamp')) - }; - }); - }); -} diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js deleted file mode 100644 index 145f3097e3beda..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js +++ /dev/null @@ -1,111 +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 { checkParam } from '../error_missing_required'; -import { get } from 'lodash'; -import { BeatsClusterMetric } from '../metrics'; -import { createApmQuery } from './create_apm_query'; -import { - apmAggFilterPath, - apmUuidsAgg, - apmAggResponseHandler, -} from './_apm_stats'; - -export function handleResponse(clusterUuid, response) { - const { beatTotal, beatTypes, totalEvents, bytesSent } = apmAggResponseHandler(response); - - // combine stats - const stats = { - totalEvents, - bytesSent, - beats: { - total: beatTotal, - types: beatTypes, - } - }; - - return { - clusterUuid, - stats, - }; -} - -export function getApmsForClusters(req, apmIndexPattern, clusters) { - checkParam(apmIndexPattern, 'apmIndexPattern in apm/getApmForClusters'); - - const start = req.payload.timeRange.min; - const end = req.payload.timeRange.max; - const config = req.server.config(); - const maxBucketSize = config.get('xpack.monitoring.max_bucket_size'); - - return Promise.all(clusters.map(async cluster => { - const clusterUuid = cluster.cluster_uuid; - const params = { - index: apmIndexPattern, - size: 0, - ignoreUnavailable: true, - filterPath: apmAggFilterPath, - body: { - query: createApmQuery({ - start, - end, - clusterUuid, - metric: BeatsClusterMetric.getMetricFields() // override default of BeatMetric.getMetricFields - }), - aggs: apmUuidsAgg(maxBucketSize) - } - }; - - // console.log('query', JSON.stringify(params.body)); - - const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - - // Fetch additional information - const params2 = { - index: apmIndexPattern, - size: 1, - ignoreUnavailable: true, - body: { - _source: ['timestamp'], - sort: [{ - timestamp: { - order: 'desc' - } - }], - query: createApmQuery({ - start, - end, - clusterUuid, - metric: BeatsClusterMetric.getMetricFields(), // override default of BeatMetric.getMetricFields - filters: [ - { - range: { - 'beats_stats.metrics.libbeat.output.events.acked': { - gt: 0, - } - } - } - ], - }), - } - }; - - const [response, response2] = await Promise.all([ - callWithRequest(req, 'search', params), - callWithRequest(req, 'search', params2) - ]); - - const formattedResponse = handleResponse(clusterUuid, response); - - return { - ...formattedResponse, - stats: { - ...formattedResponse.stats, - timeOfLastEvent: get(response2, 'hits.hits[0]._source.timestamp') - } - }; - })); -} diff --git a/x-pack/plugins/monitoring/server/lib/apm/index.js b/x-pack/plugins/monitoring/server/lib/apm/index.js deleted file mode 100644 index 39746f7c1f9603..00000000000000 --- a/x-pack/plugins/monitoring/server/lib/apm/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { getApmsForClusters } from './get_apms_for_clusters'; 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 0f16109d784fdc..427cd5af19ab11 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 @@ -13,7 +13,6 @@ import { getKibanasForClusters } from '../kibana'; import { getLogstashForClusters } from '../logstash'; import { getPipelines } from '../logstash/get_pipelines'; import { getBeatsForClusters } from '../beats'; -import { getApmsForClusters } from '../apm'; import { alertsClustersAggregation } from '../../cluster_alerts/alerts_clusters_aggregation'; import { alertsClusterSearch } from '../../cluster_alerts/alerts_cluster_search'; import { checkLicense as checkLicenseForAlerts } from '../../cluster_alerts/check_license'; @@ -107,13 +106,6 @@ export async function getClustersFromRequest(req, indexPatterns, { clusterUuid, set(clusters[clusterIndex], 'beats', beats.stats); }); - // add beats data - const apmByCluster = await getApmsForClusters(req, beatsIndexPattern, clusters); - apmByCluster.forEach(apm => { - const clusterIndex = findIndex(clusters, { cluster_uuid: apm.clusterUuid }); - set(clusters[clusterIndex], 'apm', apm.stats); - }); - const config = req.server.config(); const kibanaUuid = config.get('server.uuid'); return getClustersSummary(clusters, kibanaUuid); diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js index b6497cf18fa1c7..fbe311849a2070 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/metrics.js @@ -4,554 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -import { - BeatsCpuUtilizationMetric, - BeatsEventsRateClusterMetric, - BeatsEventsRateMetric, - BeatsByteRateMetric, - BeatsByteRateClusterMetric, - BeatsMetric -} from '../beats/classes'; -import { LARGE_BYTES, LARGE_FLOAT } from '../../../../common/formatting'; -import { - ApmMetric, - ApmCpuUtilizationMetric, - ApmEventsRateClusterMetric, - ApmSuccessResponseMetric, - ApmFailureResponseMetric -} from './classes'; - export const metrics = { - apm_cpu_total: new ApmCpuUtilizationMetric({ - title: 'CPU Utilization', - label: 'Total', - description: - 'Percentage of CPU time spent executing (user+kernel mode) for the APM process', - field: 'beats_stats.metrics.beat.cpu.total.value' - }), - apm_system_os_load_1: new ApmMetric({ - field: 'beats_stats.metrics.system.load.1', - label: '1m', - title: 'System Load', - description: 'Load average over the last 1 minute', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }), - apm_system_os_load_5: new ApmMetric({ - field: 'beats_stats.metrics.system.load.5', - label: '5m', - title: 'System Load', - description: 'Load average over the last 5 minutes', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }), - apm_system_os_load_15: new ApmMetric({ - field: 'beats_stats.metrics.system.load.15', - label: '15m', - title: 'System Load', - description: 'Load average over the last 15 minutes', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }), - - apm_mem_gc_next: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.gc_next', - label: 'GC Next', - title: 'Memory', - description: - 'Limit of allocated memory at which garbage collection will occur', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_total: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.memory_total', - label: 'Total Memory', - title: 'Memory', - description: - 'Total memory', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_alloc: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.memory_alloc', - label: 'Allocated Memory', - title: 'Memory', - description: - 'Allocated memory', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_rss: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.rss', - label: 'Process Total', - title: 'Memory', - description: 'Resident set size of memory reserved by the APM service from the OS', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - - apm_requests: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.request.count', - title: 'Requests', - label: 'Requested', - description: 'PLZ FILL ME IN' - }), - - apm_responses_count: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.count', - title: 'Response Count', - label: 'Total', - description: 'PLZ FILL ME IN' - }), - apm_responses_success: new ApmSuccessResponseMetric({ - field: 'beats_stats.metrics.apm-server.server.response.count', - title: 'Success', - label: 'Success', - description: 'PLZ FILL ME IN' - }), - apm_responses_failure: new ApmFailureResponseMetric({ - field: 'beats_stats.metrics.apm-server.server.response.count', - title: 'Success Rate', - label: 'Failure', - description: 'PLZ FILL ME IN' - }), - apm_responses_valid_ok: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.valid.ok', - title: 'Ok', - label: 'Ok', - description: 'PLZ FILL ME IN' - }), - apm_responses_valid_accepted: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.valid.accepted', - title: 'Accepted', - label: 'Accepted', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_toolarge: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.toolarge', - title: 'Response Errors', - label: 'Too large', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_validate: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.validate', - title: 'Validate', - label: 'Validate', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_method: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.method', - title: 'Method', - label: 'Method', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_unauthorized: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.unauthorized', - title: 'Unauthorized', - label: 'Unauthorized', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_ratelimit: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.ratelimit', - title: 'Rate limit', - label: 'Rate limit', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_queue: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.queue', - title: 'Queue', - label: 'Queue', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_decode: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.decode', - title: 'Decode', - label: 'Decode', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_forbidden: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.forbidden', - title: 'Forbidden', - label: 'Forbidden', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_concurrency: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.concurrency', - title: 'Concurrency', - label: 'Concurrency', - description: 'PLZ FILL ME IN' - }), - apm_responses_errors_closed: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.server.response.errors.closed', - title: 'Closed', - label: 'Closed', - description: 'PLZ FILL ME IN' - }), - - apm_decoder_deflate_contentlength: new ApmMetric({ - field: 'beats_stats.metrics.apm-server.decoder.deflate.content-length', - label: 'Deflater', - title: 'Incoming Requests Size', - description: 'PLZ FILL ME IN', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_decoder_gzip_contentlength: new ApmMetric({ - field: 'beats_stats.metrics.apm-server.decoder.gzip.content-length', - label: 'Gzip', - title: 'Gzip', - description: 'PLZ FILL ME IN', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_decoder_uncompressed_contentlength: new ApmMetric({ - field: 'beats_stats.metrics.apm-server.decoder.uncompressed.content-length', - label: 'Uncompressed', - title: 'Uncompressed', - description: 'PLZ FILL ME IN', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - - apm_processor_transaction_transformations: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.processor.transaction.transformations', - title: 'Transformations', - label: 'Transaction', - description: 'PLZ FILL ME IN' - }), - apm_processor_span_transformations: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.processor.span.transformations', - title: 'Transformations', - label: 'Span', - description: 'PLZ FILL ME IN' - }), - apm_processor_error_transformations: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.processor.error.transformations', - title: 'Transformations', - label: 'Error', - description: 'PLZ FILL ME IN' - }), - apm_processor_metric_transformations: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.apm-server.processor.metric.transformations', - title: 'Transformations', - label: 'Metric', - description: 'PLZ FILL ME IN' - }), - - - apm_output_events_total: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.total', - title: 'Output Events Rate', - label: 'Total', - description: 'Events processed by the output (including retries)' - }), - apm_output_events_failed: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.failed', - title: 'Output Failed Events Rate', - label: 'Failed', - description: 'Events processed by the output (including retries)' - }), - apm_output_events_dropped: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.dropped', - title: 'Output Dropped Events Rate', - label: 'Dropped', - description: 'Events processed by the output (including retries)' - }), - apm_output_events_active: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.active', - title: 'Output Active Events Rate', - label: 'Active', - description: 'Events processed by the output (including retries)' - }), - apm_output_events_acked: new ApmEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.acked', - title: 'Output Acked Events Rate', - label: 'Acked', - description: 'Events processed by the output (including retries)' - }), - - apm_mem_alloc: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.memory_alloc', - label: 'Active', - title: 'Memory', - description: 'Private memory in active use by the Beat', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_total: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.memory_total', - label: 'Total', - title: 'Memory', - description: 'Private memory in active use by the Beat', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_rss: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.rss', - label: 'Process Total', - title: 'Memory', - description: 'Resident set size of memory reserved by the Beat from the OS', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - apm_mem_gc_next: new ApmMetric({ - field: 'beats_stats.metrics.beat.memstats.gc_next', - label: 'GC Next', - title: 'Memory', - description: - 'Limit of allocated memory at which garbage collection will occur', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), -}; - -export const metrics2 = { - beat_cluster_pipeline_events_total_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.total', - title: 'Events Rate', - label: 'Total', - description: 'All events newly created in the publishing pipeline' - }), - beat_cluster_output_events_total: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.total', - title: 'Events Rate', - label: 'Emitted', - description: 'Events processed by the output (including retries)' - }), - beat_cluster_output_events_ack_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.acked', - title: 'Events Rate', - label: 'Acknowledged', - description: - 'Events acknowledged by the output (includes events dropped by the output)' - }), - beat_cluster_pipeline_events_emitted_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.published', - title: 'Events Rate', - label: 'Queued', - description: 'Events added to the event pipeline queue' - }), - - beat_cluster_output_write_bytes_rate: new BeatsByteRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.write.bytes', - title: 'Throughput', - label: 'Bytes Sent', - description: - 'Bytes written to the output (consists of size of network headers and compressed payload)' - }), - beat_cluster_output_read_bytes_rate: new BeatsByteRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.read.bytes', - title: 'Throughput', - label: 'Bytes Received', - description: 'Bytes read in response from the output' - }), - - beat_cluster_pipeline_events_failed_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.failed', - title: 'Fail Rates', - label: 'Failed in Pipeline', - description: - 'Failures that happened before event was added to the publishing pipeline (output was disabled or publisher client closed)' - }), - beat_cluster_pipeline_events_dropped_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.dropped', - title: 'Fail Rates', - label: 'Dropped in Pipeline', - description: - 'Events that have been dropped after N retries (N = max_retries setting)' - }), - beat_cluster_output_events_dropped_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.events.dropped', - title: 'Fail Rates', - label: 'Dropped in Output', - description: - '(Fatal drop) Events dropped by the output as being "invalid." The output ' + - 'still acknowledges the event for the Beat to remove it from the queue.' - }), - beat_cluster_pipeline_events_retry_rate: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.retry', - title: 'Fail Rates', - label: 'Retry in Pipeline', - description: - 'Events in the pipeline that are trying again to be sent to the output' - }), - - beat_cluster_output_sending_errors: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.write.errors', - title: 'Output Errors', - label: 'Sending', - description: 'Errors in writing the response from the output' - }), - beat_cluster_output_receiving_errors: new BeatsEventsRateClusterMetric({ - field: 'beats_stats.metrics.libbeat.output.read.errors', - title: 'Output Errors', - label: 'Receiving', - description: 'Errors in reading the response from the output' - }), - - /* - * Beat Detail - */ - - beat_pipeline_events_total_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.total', - title: 'Events Rate', - label: 'New', - description: 'New events sent to the publishing pipeline' - }), - beat_output_events_total: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.output.events.total', - title: 'Events Rate', - label: 'Emitted', - description: 'Events processed by the output (including retries)' - }), - beat_output_events_ack_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.output.events.acked', - title: 'Events Rate', - label: 'Acknowledged', - description: - 'Events acknowledged by the output (includes events dropped by the output)' - }), - beat_pipeline_events_emitted_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.published', - title: 'Events Rate', - label: 'Queued', - description: 'Events added to the event pipeline queue' - }), - - beat_pipeline_events_failed_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.failed', - title: 'Fail Rates', - label: 'Failed in Pipeline', - description: - 'Failures that happened before event was added to the publishing pipeline (output was disabled or publisher client closed)' - }), - beat_pipeline_events_dropped_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.dropped', - title: 'Fail Rates', - label: 'Dropped in Pipeline', - description: - 'Events that have been dropped after N retries (N = max_retries setting)' - }), - beat_output_events_dropped_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.output.events.dropped', - title: 'Fail Rates', - label: 'Dropped in Output', - description: - '(Fatal drop) Events dropped by the output as being "invalid." The output ' + - 'still acknowledges the event for the Beat to remove it from the queue.' - }), - beat_pipeline_events_retry_rate: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.pipeline.events.retry', - title: 'Fail Rates', - label: 'Retry in Pipeline', - description: - 'Events in the pipeline that are trying again to be sent to the output' - }), - - beat_bytes_written: new BeatsByteRateMetric({ - field: 'beats_stats.metrics.libbeat.output.write.bytes', - title: 'Throughput', - label: 'Bytes Sent', - description: - 'Bytes written to the output (consists of size of network headers and compressed payload)' - }), - beat_output_write_bytes_rate: new BeatsByteRateMetric({ - field: 'beats_stats.metrics.libbeat.output.read.bytes', - title: 'Throughput', - label: 'Bytes Received', - description: 'Bytes read in response from the output' - }), - - beat_output_sending_errors: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.output.write.errors', - title: 'Output Errors', - label: 'Sending', - description: 'Errors in writing the response from the output' - }), - beat_output_receiving_errors: new BeatsEventsRateMetric({ - field: 'beats_stats.metrics.libbeat.output.read.errors', - title: 'Output Errors', - label: 'Receiving', - description: 'Errors in reading the response from the output' - }), - - beat_mem_alloc: new BeatsMetric({ - field: 'beats_stats.metrics.beat.memstats.memory_alloc', - label: 'Active', - title: 'Memory', - description: 'Private memory in active use by the Beat', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - beat_mem_rss: new BeatsMetric({ - field: 'beats_stats.metrics.beat.memstats.rss', - label: 'Process Total', - title: 'Memory', - description: 'Resident set size of memory reserved by the Beat from the OS', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - beat_mem_gc_next: new BeatsMetric({ - field: 'beats_stats.metrics.beat.memstats.gc_next', - label: 'GC Next', - title: 'Memory', - description: - 'Limit of allocated memory at which garbage collection will occur', - format: LARGE_BYTES, - metricAgg: 'max', - units: 'B' - }), - - beat_cpu_utilization: new BeatsCpuUtilizationMetric({ - title: 'CPU Utilization', - label: 'Total', - description: - 'Percentage of CPU time spent executing (user+kernel mode) for the Beat process', - field: 'beats_stats.metrics.beat.cpu.total.value' - }), - beat_system_os_load_1: new BeatsMetric({ - field: 'beats_stats.metrics.system.load.1', - label: '1m', - title: 'System Load', - description: 'Load average over the last 1 minute', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }), - beat_system_os_load_5: new BeatsMetric({ - field: 'beats_stats.metrics.system.load.5', - label: '5m', - title: 'System Load', - description: 'Load average over the last 5 minutes', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }), - beat_system_os_load_15: new BeatsMetric({ - field: 'beats_stats.metrics.system.load.15', - label: '15m', - title: 'System Load', - description: 'Load average over the last 15 minutes', - format: LARGE_FLOAT, - metricAgg: 'max', - units: '' - }) }; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/_get_apm_cluster_status.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/_get_apm_cluster_status.js deleted file mode 100644 index f63a989252b0f7..00000000000000 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/_get_apm_cluster_status.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { get } from 'lodash'; -import { getApmsForClusters } from '../../../../lib/apm/get_apms_for_clusters'; - -export const getApmClusterStatus = (req, apmIndexPattern, { clusterUuid }) => { - const clusters = [{ cluster_uuid: clusterUuid }]; - return getApmsForClusters(req, apmIndexPattern, clusters) - .then(apms => get(apms, '[0].stats')); -}; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js index 661c32d8d9a426..a2fb799d22c732 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js @@ -5,11 +5,6 @@ */ import Joi from 'joi'; -import { getApmInfo } from '../../../../lib/apm/get_apm_info'; -import { handleError } from '../../../../lib/errors'; -import { getMetrics } from '../../../../lib/details/get_metrics'; -import { prefixIndexPattern } from '../../../../lib/ccs_utils'; -import { metricSet } from './metric_set_instance'; /** * Kibana instance: This will fetch all data required to display a Kibana @@ -36,26 +31,7 @@ export function apmInstanceRoute(server) { }) } }, - async handler(req, reply) { - const config = server.config(); - const ccs = req.payload.ccs; - const clusterUuid = req.params.clusterUuid; - const apmUuid = req.params.apmUuid; - const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); - - try { - const [ metrics, apmSummary ] = await Promise.all([ - getMetrics(req, apmIndexPattern, metricSet), - getApmInfo(req, apmIndexPattern, { clusterUuid, apmUuid }), - ]); - - reply({ - metrics, - apmSummary, - }); - } catch (err) { - reply(handleError(err, req)); - } + async handler() { } }); } diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js index 70fa83e3d785e7..f2f5a38dfa995f 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js @@ -5,10 +5,6 @@ */ import Joi from 'joi'; -import { prefixIndexPattern } from '../../../../lib/ccs_utils'; -import { getApmClusterStatus } from './_get_apm_cluster_status'; -import { getApms } from '../../../../lib/apm/get_apms'; -import { handleError } from '../../../../lib/errors'; export function apmInstancesRoute(server) { /** @@ -31,25 +27,8 @@ export function apmInstancesRoute(server) { }) } }, - async handler(req, reply) { - const config = server.config(); - const ccs = req.payload.ccs; - const clusterUuid = req.params.clusterUuid; - const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + async handler() { - try { - const [ clusterStatus, apms ] = await Promise.all([ - getApmClusterStatus(req, apmIndexPattern, { clusterUuid }), - getApms(req, apmIndexPattern, { clusterUuid }), - ]); - - reply({ - clusterStatus, - apms, - }); - } catch(err) { - reply(handleError(err, req)); - } } }); } diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js index 923ac8c60e2232..6a1eb9bdb1338b 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_instance.js @@ -5,83 +5,5 @@ */ export const metricSet = [ - { - name: 'apm_cpu', - keys: [ - 'apm_cpu_total' - ] - }, - { - keys: [ - 'apm_system_os_load_1', - 'apm_system_os_load_5', - 'apm_system_os_load_15' - ], - name: 'apm_os_load' - }, - { - keys: ['apm_mem_total', 'apm_mem_alloc', 'apm_mem_rss', 'apm_mem_gc_next'], - name: 'apm_memory' - }, - { - keys: [ - 'apm_output_events_total', - 'apm_output_events_failed', - 'apm_output_events_dropped', - 'apm_output_events_active', - 'apm_output_events_acked' - ], - name: 'apm_output_events_rate' - }, - { - keys: ['apm_responses_failure', 'apm_responses_success'], - name: 'apm_responses_success_failure' - }, - { - keys: [ - 'apm_responses_count', - 'apm_responses_valid_ok', - 'apm_responses_valid_accepted' - ], - name: 'apm_responses_valid' - }, - { - keys: [ - // 'apm_responses_count', - 'apm_responses_errors_toolarge', - 'apm_responses_errors_validate', - 'apm_responses_errors_method', - 'apm_responses_errors_unauthorized', - 'apm_responses_errors_ratelimit', - 'apm_responses_errors_queue', - 'apm_responses_errors_decode', - 'apm_responses_errors_forbidden', - 'apm_responses_errors_concurrency', - 'apm_responses_errors_closed', - ], - name: 'apm_responses_errors' - }, - { - keys: [ - 'apm_requests' - ], - name: 'apm_requests' - }, - { - keys: [ - 'apm_decoder_deflate_contentlength', - 'apm_decoder_gzip_contentlength', - 'apm_decoder_uncompressed_contentlength' - ], - name: 'apm_incoming_requests_size' - }, - { - keys: [ - 'apm_processor_transaction_transformations', - 'apm_processor_span_transformations', - 'apm_processor_error_transformations', - 'apm_processor_metric_transformations', - ], - name: 'apm_transformations' - } + ]; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js index 923ac8c60e2232..d2980157566f63 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/metric_set_overview.js @@ -5,83 +5,4 @@ */ export const metricSet = [ - { - name: 'apm_cpu', - keys: [ - 'apm_cpu_total' - ] - }, - { - keys: [ - 'apm_system_os_load_1', - 'apm_system_os_load_5', - 'apm_system_os_load_15' - ], - name: 'apm_os_load' - }, - { - keys: ['apm_mem_total', 'apm_mem_alloc', 'apm_mem_rss', 'apm_mem_gc_next'], - name: 'apm_memory' - }, - { - keys: [ - 'apm_output_events_total', - 'apm_output_events_failed', - 'apm_output_events_dropped', - 'apm_output_events_active', - 'apm_output_events_acked' - ], - name: 'apm_output_events_rate' - }, - { - keys: ['apm_responses_failure', 'apm_responses_success'], - name: 'apm_responses_success_failure' - }, - { - keys: [ - 'apm_responses_count', - 'apm_responses_valid_ok', - 'apm_responses_valid_accepted' - ], - name: 'apm_responses_valid' - }, - { - keys: [ - // 'apm_responses_count', - 'apm_responses_errors_toolarge', - 'apm_responses_errors_validate', - 'apm_responses_errors_method', - 'apm_responses_errors_unauthorized', - 'apm_responses_errors_ratelimit', - 'apm_responses_errors_queue', - 'apm_responses_errors_decode', - 'apm_responses_errors_forbidden', - 'apm_responses_errors_concurrency', - 'apm_responses_errors_closed', - ], - name: 'apm_responses_errors' - }, - { - keys: [ - 'apm_requests' - ], - name: 'apm_requests' - }, - { - keys: [ - 'apm_decoder_deflate_contentlength', - 'apm_decoder_gzip_contentlength', - 'apm_decoder_uncompressed_contentlength' - ], - name: 'apm_incoming_requests_size' - }, - { - keys: [ - 'apm_processor_transaction_transformations', - 'apm_processor_span_transformations', - 'apm_processor_error_transformations', - 'apm_processor_metric_transformations', - ], - name: 'apm_transformations' - } ]; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js index 511a9eb69f4e4b..cde130f6e5bce1 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js @@ -5,12 +5,6 @@ */ import Joi from 'joi'; -import { prefixIndexPattern } from '../../../../lib/ccs_utils'; -import { getApmClusterStatus } from './_get_apm_cluster_status'; -import { getMetrics } from '../../../../lib/details/get_metrics'; -import { metricSet } from './metric_set_overview'; -import { handleError } from '../../../../lib/errors'; -import { apmFilter } from '../../../../lib/apm/create_apm_query'; export function apmOverviewRoute(server) { /** @@ -33,25 +27,8 @@ export function apmOverviewRoute(server) { }) } }, - async handler(req, reply) { - const config = server.config(); - const ccs = req.payload.ccs; - const clusterUuid = req.params.clusterUuid; - const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + async handler() { - try { - const [ clusterStatus, metrics ] = await Promise.all([ - getApmClusterStatus(req, apmIndexPattern, { clusterUuid }), - getMetrics(req, apmIndexPattern, metricSet, [apmFilter]), - ]); - - reply({ - clusterStatus, - metrics, - }); - } catch(err) { - reply(handleError(err, req)); - } } }); } From 73d59091a8880e37c23981092124ff6c37171fcf Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Mon, 27 Aug 2018 16:16:35 -0700 Subject: [PATCH 038/173] Saved Objects Client handle RequestEntityTooLarge error from Elasticsearch (#22430) * Saved Objects Client handle RequestEntityTooLarge error from Elasticsearch * remove console log --- .../saved_objects/service/lib/decorate_es_error.js | 6 ++++++ .../service/lib/decorate_es_error.test.js | 8 ++++++++ src/server/saved_objects/service/lib/errors.js | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/server/saved_objects/service/lib/decorate_es_error.js b/src/server/saved_objects/service/lib/decorate_es_error.js index 66d34d95dc1099..0f6190fcca465a 100644 --- a/src/server/saved_objects/service/lib/decorate_es_error.js +++ b/src/server/saved_objects/service/lib/decorate_es_error.js @@ -28,6 +28,7 @@ const { Conflict, 401: NotAuthorized, 403: Forbidden, + 413: RequestEntityTooLarge, NotFound, BadRequest } = elasticsearch.errors; @@ -36,6 +37,7 @@ import { decorateBadRequestError, decorateNotAuthorizedError, decorateForbiddenError, + decorateRequestEntityTooLargeError, createGenericNotFoundError, decorateConflictError, decorateEsUnavailableError, @@ -69,6 +71,10 @@ export function decorateEsError(error) { return decorateForbiddenError(error, reason); } + if (error instanceof RequestEntityTooLarge) { + return decorateRequestEntityTooLargeError(error, reason); + } + if (error instanceof NotFound) { return createGenericNotFoundError(); } diff --git a/src/server/saved_objects/service/lib/decorate_es_error.test.js b/src/server/saved_objects/service/lib/decorate_es_error.test.js index 07e284d0a894a3..8d070e17132027 100644 --- a/src/server/saved_objects/service/lib/decorate_es_error.test.js +++ b/src/server/saved_objects/service/lib/decorate_es_error.test.js @@ -25,6 +25,7 @@ import { isConflictError, isNotAuthorizedError, isForbiddenError, + isRequestEntityTooLargeError, isNotFoundError, isBadRequestError, } from './errors'; @@ -84,6 +85,13 @@ describe('savedObjectsClient/decorateEsError', () => { expect(isForbiddenError(error)).toBe(true); }); + it('makes es.RequestEntityTooLarge a SavedObjectsClient/RequestEntityTooLarge error', () => { + const error = new esErrors.RequestEntityTooLarge(); + expect(isRequestEntityTooLargeError(error)).toBe(false); + expect(decorateEsError(error)).toBe(error); + expect(isRequestEntityTooLargeError(error)).toBe(true); + }); + it('discards es.NotFound errors and returns a generic NotFound error', () => { const error = new esErrors.NotFound(); expect(isNotFoundError(error)).toBe(false); diff --git a/src/server/saved_objects/service/lib/errors.js b/src/server/saved_objects/service/lib/errors.js index dba2f61419a667..d0a4d6ecec796d 100644 --- a/src/server/saved_objects/service/lib/errors.js +++ b/src/server/saved_objects/service/lib/errors.js @@ -71,6 +71,16 @@ export function isForbiddenError(error) { } +// 413 - Request Entity Too Large +const CODE_REQUEST_ENTITY_TOO_LARGE = 'SavedObjectsClient/requestEntityTooLarge'; +export function decorateRequestEntityTooLargeError(error, reason) { + return decorate(error, CODE_REQUEST_ENTITY_TOO_LARGE, 413, reason); +} +export function isRequestEntityTooLargeError(error) { + return error && error[code] === CODE_REQUEST_ENTITY_TOO_LARGE; +} + + // 404 - Not Found const CODE_NOT_FOUND = 'SavedObjectsClient/notFound'; export function createGenericNotFoundError(type = null, id = null) { From c7d451c9a2e49b79d9a54770d1246df7ed5df418 Mon Sep 17 00:00:00 2001 From: Spencer Date: Mon, 27 Aug 2018 17:26:30 -0700 Subject: [PATCH 039/173] [ftr] capture test output and only log on failure (#21903) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is an attempt to write a log capture integration for the functional test runner that will collect all log output written during a test, prevent it from being written to stdout to lower the amount of work Jenkins master has to do and include the entire log output for each test in the junit report. I'm slightly concerned about the amount of memory we'll be using to store a copy of the logs for each test, but streaming the XML report isn’t easy and there doesn’t seem to be a library out there to help. If we decide it’s torally necessary we might be able to figure it out. --- package.json | 1 + packages/kbn-dev-utils/src/index.js | 2 +- .../__tests__/junit_report_generation.js | 6 +- src/dev/mocha/junit_report_generation.js | 26 +++++++- src/dev/mocha/log_cache.js | 62 +++++++++++++++++++ .../fixtures/failure_hooks/config.js | 3 + .../lib/config/schema.js | 4 ++ .../lib/mocha/reporter/reporter.js | 55 +++++++++++++--- yarn.lock | 4 ++ 9 files changed, 152 insertions(+), 11 deletions(-) create mode 100644 src/dev/mocha/log_cache.js diff --git a/package.json b/package.json index 4226f06b3599ba..a34bf062fea0d9 100644 --- a/package.json +++ b/package.json @@ -315,6 +315,7 @@ "postcss": "^7.0.2", "prettier": "^1.14.0", "proxyquire": "1.7.11", + "regenerate": "^1.4.0", "simple-git": "1.37.0", "sinon": "^5.0.7", "strip-ansi": "^3.0.1", diff --git a/packages/kbn-dev-utils/src/index.js b/packages/kbn-dev-utils/src/index.js index c8c3d28aa357af..4e2d1b62a92f71 100644 --- a/packages/kbn-dev-utils/src/index.js +++ b/packages/kbn-dev-utils/src/index.js @@ -18,4 +18,4 @@ */ export { withProcRunner } from './proc_runner'; -export { ToolingLog, pickLevelFromFlags } from './tooling_log'; +export { ToolingLog, ToolingLogTextWriter, pickLevelFromFlags } from './tooling_log'; diff --git a/src/dev/mocha/__tests__/junit_report_generation.js b/src/dev/mocha/__tests__/junit_report_generation.js index 5d1c56f31c5998..7142a14b662e5e 100644 --- a/src/dev/mocha/__tests__/junit_report_generation.js +++ b/src/dev/mocha/__tests__/junit_report_generation.js @@ -93,7 +93,8 @@ describe('dev/mocha/junit report generation', () => { classname: sharedClassname, name: 'SUITE works', time: testPass.$.time, - } + }, + 'system-out': testPass['system-out'] }); expect(testFail.$.time).to.match(DURATION_REGEX); @@ -104,6 +105,7 @@ describe('dev/mocha/junit report generation', () => { name: 'SUITE fails', time: testFail.$.time, }, + 'system-out': testFail['system-out'], failure: [ testFail.failure[0] ] @@ -118,6 +120,7 @@ describe('dev/mocha/junit report generation', () => { name: 'SUITE SUB_SUITE "before each" hook: fail hook for "never runs"', time: beforeEachFail.$.time, }, + 'system-out': testFail['system-out'], failure: [ beforeEachFail.failure[0] ] @@ -128,6 +131,7 @@ describe('dev/mocha/junit report generation', () => { classname: sharedClassname, name: 'SUITE SUB_SUITE never runs', }, + 'system-out': testFail['system-out'], skipped: [''] }); }); diff --git a/src/dev/mocha/junit_report_generation.js b/src/dev/mocha/junit_report_generation.js index 5572d4287a241f..f3bc741f8f2b22 100644 --- a/src/dev/mocha/junit_report_generation.js +++ b/src/dev/mocha/junit_report_generation.js @@ -23,6 +23,27 @@ import { inspect } from 'util'; import mkdirp from 'mkdirp'; import xmlBuilder from 'xmlbuilder'; +import stripAnsi from 'strip-ansi'; +import regenerate from 'regenerate'; + +import { getSnapshotOfRunnableLogs } from './log_cache'; + +// create a regular expression using regenerate() that selects any character that is explicitly allowed by https://www.w3.org/TR/xml/#NT-Char +const validXmlCharsRE = new RegExp( + `(?:${ + regenerate() + .add(0x9, 0xA, 0xD) + .addRange(0x20, 0xD7FF) + .addRange(0xE000, 0xFFFD) + .addRange(0x10000, 0x10FFFF) + .toString() + })*`, + 'g' +); + +function escapeCdata(string) { + return stripAnsi(string).match(validXmlCharsRE).join(''); +} export function setupJUnitReportGeneration(runner, options = {}) { const { @@ -120,9 +141,12 @@ export function setupJUnitReportGeneration(runner, options = {}) { [...results, ...skippedResults].forEach(result => { const el = addTestcaseEl(result.node); + el.ele('system-out').dat( + escapeCdata(getSnapshotOfRunnableLogs(result.node) || '') + ); if (result.failed) { - el.ele('failure').dat(inspect(result.error)); + el.ele('failure').dat(escapeCdata(inspect(result.error))); return; } diff --git a/src/dev/mocha/log_cache.js b/src/dev/mocha/log_cache.js new file mode 100644 index 00000000000000..e879beffbd0c05 --- /dev/null +++ b/src/dev/mocha/log_cache.js @@ -0,0 +1,62 @@ +/* + * 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. + */ + +const cachedSuiteLogs = new WeakMap(); +const cachesRunnableLogs = new WeakMap(); + +/** + * Add a chunk of log output to the cached + * output for a suite + * @param {Mocha.Suite} suite + * @param {string} chunk + */ +export function recordLog(suite, chunk) { + const cache = cachedSuiteLogs.get(suite) || ''; + cachedSuiteLogs.set(suite, cache + chunk); +} + +/** + * Recursively walk up from a runnable to collect + * the cached log for its suite and all its parents + * @param {Mocha.Suite} suite + */ +function getCurrentCachedSuiteLogs(suite) { + const history = suite.parent ? getCurrentCachedSuiteLogs(suite.parent) : ''; + const ownLogs = cachedSuiteLogs.get(suite) || ''; + return history + ownLogs; +} + +/** + * Snapshot the logs from this runnable's suite at this point, + * as the suite logs will get updated to include output from + * subsequent runnables + * @param {Mocha.Runnable} runnable + */ +export function snapshotLogsForRunnable(runnable) { + cachesRunnableLogs.set(runnable, getCurrentCachedSuiteLogs(runnable.parent)); +} + +/** + * Get the suite logs as they were when the logs for this runnable + * were snapshotted + * @param {Mocha.Runnable} runnable + */ +export function getSnapshotOfRunnableLogs(runnable) { + return cachesRunnableLogs.get(runnable); +} diff --git a/src/functional_test_runner/__tests__/fixtures/failure_hooks/config.js b/src/functional_test_runner/__tests__/fixtures/failure_hooks/config.js index 6acfb728161a40..3ff674c89682d9 100644 --- a/src/functional_test_runner/__tests__/fixtures/failure_hooks/config.js +++ b/src/functional_test_runner/__tests__/fixtures/failure_hooks/config.js @@ -42,6 +42,9 @@ export default function () { log.info('testHookFailureAfterDelay %s %s', err.message, test.fullTitle()); }); } + }, + mochaReporter: { + captureLogOutput: false } }; } diff --git a/src/functional_test_runner/lib/config/schema.js b/src/functional_test_runner/lib/config/schema.js index ec0aeaf2b5b768..faf7de7fea9403 100644 --- a/src/functional_test_runner/lib/config/schema.js +++ b/src/functional_test_runner/lib/config/schema.js @@ -96,6 +96,10 @@ export const schema = Joi.object().keys({ rootDirectory: Joi.string(), }).default(), + mochaReporter: Joi.object().keys({ + captureLogOutput: Joi.boolean().default(!!process.env.CI), + }).default(), + users: Joi.object().pattern( ID_PATTERN, Joi.object().keys({ diff --git a/src/functional_test_runner/lib/mocha/reporter/reporter.js b/src/functional_test_runner/lib/mocha/reporter/reporter.js index 96061a4b384658..39c69f914e43f0 100644 --- a/src/functional_test_runner/lib/mocha/reporter/reporter.js +++ b/src/functional_test_runner/lib/mocha/reporter/reporter.js @@ -20,16 +20,19 @@ import { format } from 'util'; import Mocha from 'mocha'; +import { ToolingLogTextWriter } from '@kbn/dev-utils'; import { setupJUnitReportGeneration } from '../../../../dev'; import * as colors from './colors'; import * as symbols from './symbols'; import { ms } from './ms'; import { writeEpilogue } from './write_epilogue'; +import { recordLog, snapshotLogsForRunnable } from '../../../../dev/mocha/log_cache'; export function MochaReporterProvider({ getService }) { const log = getService('log'); const config = getService('config'); + let originalLogWriters; return class MochaReporter extends Mocha.reporters.Base { constructor(runner, options) { @@ -55,11 +58,40 @@ export function MochaReporterProvider({ getService }) { } onStart = () => { + if (config.get('mochaReporter.captureLogOutput')) { + log.warning('debug logs are being captured, only error logs will be written to the console'); + originalLogWriters = log.getWriters(); + log.setWriters([ + new ToolingLogTextWriter({ + level: 'error', + writeTo: process.stdout + }), + new ToolingLogTextWriter({ + level: 'debug', + writeTo: { + write: (chunk) => { + // if the current runnable is a beforeEach hook then + // `runner.suite` is set to the suite that defined the + // hook, rather than the suite executing, so instead we + // grab the suite from the test, but that's only available + // when we are doing something test specific, so for global + // hooks we fallback to `runner.suite` + const currentSuite = this.runner.test + ? this.runner.test.parent + : this.runner.suite; + + recordLog(currentSuite, chunk); + } + } + }) + ]); + } + log.write(''); } onHookStart = hook => { - log.write('-> ' + colors.suite(hook.title)); + log.write(`-> ${colors.suite(hook.title)}`); log.indent(2); } @@ -76,7 +108,7 @@ export function MochaReporterProvider({ getService }) { } onSuiteEnd = () => { - if (log.indent(-2) === '') { + if (log.indent(-2) === 0) { log.write(); } } @@ -86,7 +118,8 @@ export function MochaReporterProvider({ getService }) { log.indent(2); } - onTestEnd = () => { + onTestEnd = (test) => { + snapshotLogsForRunnable(test); log.indent(-2); } @@ -96,7 +129,6 @@ export function MochaReporterProvider({ getService }) { } onPass = test => { - let time = ''; if (test.speed !== 'fast') { time = colors.speed(test.speed, ` (${ms(test.duration)})`); @@ -106,7 +138,7 @@ export function MochaReporterProvider({ getService }) { log.write(`- ${pass} ${time}`); } - onFail = test => { + onFail = runnable => { // NOTE: this is super gross // // - I started by trying to extract the Base.list() logic from mocha @@ -118,14 +150,13 @@ export function MochaReporterProvider({ getService }) { const realLog = console.log; console.log = (...args) => output += `${format(...args)}\n`; try { - Mocha.reporters.Base.list([test]); + Mocha.reporters.Base.list([runnable]); } finally { console.log = realLog; } log.write( - `- ${symbols.err} ` + - colors.fail(`fail: "${test.fullTitle()}"`) + + `- ${colors.fail(`${symbols.err} fail: "${runnable.fullTitle()}"`)}` + '\n' + output .split('\n') @@ -136,9 +167,17 @@ export function MochaReporterProvider({ getService }) { .map(line => ` ${line}`) .join('\n') ); + + // failed hooks trigger the `onFail(runnable)` callback, so we snapshot the logs for + // them here. Tests will re-capture the snapshot in `onTestEnd()` + snapshotLogsForRunnable(runnable); } onEnd = () => { + if (originalLogWriters) { + log.setWriters(originalLogWriters); + } + writeEpilogue(log, this.stats); } }; diff --git a/yarn.lock b/yarn.lock index e9a2db54979a69..df005a261d848e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11346,6 +11346,10 @@ regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" From 27006549403224288b5ae878a3cfc6e445dd94b5 Mon Sep 17 00:00:00 2001 From: Spencer Date: Mon, 27 Aug 2018 17:32:53 -0700 Subject: [PATCH 040/173] [dev-utils/withProcRunner] fix test that swallows promise rejection (#22342) * [dev-utils/withProcRunner] fix tests that can silently fail * test async/sync withProcRunner functions --- .../src/proc_runner/__tests__/proc.sh | 3 - .../proc_runner/__tests__/with_proc_runner.js | 42 ---------- .../src/proc_runner/with_proc_runner.test.js | 79 +++++++++++++++++++ 3 files changed, 79 insertions(+), 45 deletions(-) delete mode 100755 packages/kbn-dev-utils/src/proc_runner/__tests__/proc.sh delete mode 100644 packages/kbn-dev-utils/src/proc_runner/__tests__/with_proc_runner.js create mode 100644 packages/kbn-dev-utils/src/proc_runner/with_proc_runner.test.js diff --git a/packages/kbn-dev-utils/src/proc_runner/__tests__/proc.sh b/packages/kbn-dev-utils/src/proc_runner/__tests__/proc.sh deleted file mode 100755 index 5c038cd76807d1..00000000000000 --- a/packages/kbn-dev-utils/src/proc_runner/__tests__/proc.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /usr/bin/node - -console.log(process.argv.join(' ')); diff --git a/packages/kbn-dev-utils/src/proc_runner/__tests__/with_proc_runner.js b/packages/kbn-dev-utils/src/proc_runner/__tests__/with_proc_runner.js deleted file mode 100644 index 80029b8d93f295..00000000000000 --- a/packages/kbn-dev-utils/src/proc_runner/__tests__/with_proc_runner.js +++ /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 { ToolingLog } from '../../tooling_log'; -import { withProcRunner } from '../with_proc_runner'; - -describe('proc runner', () => { - function runProc({ thing = '', procs }) { - return new Promise(resolve => { - setTimeout(() => { - procs.run('proc', { - cmd: './proc', - args: ['these', 'are', 'words'], - }); - resolve(thing); - }, 500); - }); - } - - it('passes procs to a function', async () => { - await withProcRunner(new ToolingLog(), async procs => { - await runProc({ procs }); - await procs.stop('proc'); - }); - }); -}); diff --git a/packages/kbn-dev-utils/src/proc_runner/with_proc_runner.test.js b/packages/kbn-dev-utils/src/proc_runner/with_proc_runner.test.js new file mode 100644 index 00000000000000..4d0329de7c32ad --- /dev/null +++ b/packages/kbn-dev-utils/src/proc_runner/with_proc_runner.test.js @@ -0,0 +1,79 @@ +/* + * 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 { ToolingLog } from '../tooling_log'; +import { withProcRunner } from './with_proc_runner'; +import { ProcRunner } from './proc_runner'; + +it('passes proc runner to a function', async () => { + await withProcRunner(new ToolingLog(), proc => { + expect(proc).toBeInstanceOf(ProcRunner); + }); +}); + +it('calls procRunner.teardown() if function returns synchronously', async () => { + let teardownSpy; + await withProcRunner(new ToolingLog(), proc => { + teardownSpy = jest.spyOn(proc, 'teardown'); + }); + + expect(teardownSpy).toHaveBeenCalled(); +}); + +it('calls procRunner.teardown() if function throw synchronous error, and rejects with the error', async () => { + const error = new Error('foo'); + let teardownSpy; + + await expect( + withProcRunner(new ToolingLog(), proc => { + teardownSpy = jest.spyOn(proc, 'teardown'); + throw error; + }) + ).rejects.toThrowError(error); + + expect(teardownSpy).toHaveBeenCalled(); +}); + +it('waits for promise to resolve before tearing down proc', async () => { + let teardownSpy; + + await withProcRunner(new ToolingLog(), async proc => { + await new Promise(resolve => setTimeout(resolve, 500)); + teardownSpy = jest.spyOn(proc, 'teardown'); + }); + + expect(teardownSpy).not.toBe(undefined); + expect(teardownSpy).toHaveBeenCalled(); +}); + +it('waits for promise to reject before tearing down proc and rejecting with the error', async () => { + const error = new Error('foo'); + let teardownSpy; + + await expect( + withProcRunner(new ToolingLog(), async proc => { + await new Promise(resolve => setTimeout(resolve, 500)); + teardownSpy = jest.spyOn(proc, 'teardown'); + throw error; + }) + ).rejects.toThrowError(error); + + expect(teardownSpy).not.toBe(undefined); + expect(teardownSpy).toHaveBeenCalled(); +}); From 8cb473e315cb5f1b7314d8ae039ef9cc25364353 Mon Sep 17 00:00:00 2001 From: Leanid Shutau Date: Tue, 28 Aug 2018 12:25:38 +0300 Subject: [PATCH 041/173] Wrap consts in kibana tutorials (#22181) * Wrap consts in kibana tutorials * Fix onPrem instructions * Fix rails instructions * Use arrow functions and implicit return Co-authored-by: LeanidShutau --- .../common/tutorials/filebeat_instructions.js | 276 ++++++++-------- .../common/tutorials/logstash_instructions.js | 28 +- .../tutorials/metricbeat_instructions.js | 299 +++++++++--------- .../tutorials/onprem_cloud_instructions.js | 37 ++- .../tutorials/apm/apm_client_instructions.js | 48 +-- .../tutorials/apm/apm_server_instructions.js | 99 +++--- .../server/tutorials/apm/elastic_cloud.js | 109 +++---- .../kibana/server/tutorials/apm/index.js | 19 +- .../kibana/server/tutorials/apm/on_prem.js | 72 ++--- .../tutorials/netflow/common_instructions.js | 234 +++++++------- .../server/tutorials/netflow/elastic_cloud.js | 59 ++-- .../kibana/server/tutorials/netflow/index.js | 15 +- .../server/tutorials/netflow/on_prem.js | 59 ++-- .../netflow/on_prem_elastic_cloud.js | 73 +++-- 14 files changed, 721 insertions(+), 706 deletions(-) diff --git a/src/core_plugins/kibana/common/tutorials/filebeat_instructions.js b/src/core_plugins/kibana/common/tutorials/filebeat_instructions.js index 6ba8f0ec697cf2..692074d2ce897b 100644 --- a/src/core_plugins/kibana/common/tutorials/filebeat_instructions.js +++ b/src/core_plugins/kibana/common/tutorials/filebeat_instructions.js @@ -18,98 +18,97 @@ */ import { INSTRUCTION_VARIANT } from './instruction_variant'; -import { - TRYCLOUD_OPTION1, - TRYCLOUD_OPTION2 -} from './onprem_cloud_instructions'; +import { createTrycloudOption1, createTrycloudOption2 } from './onprem_cloud_instructions'; -export const FILEBEAT_INSTRUCTIONS = { +export const createFilebeatInstructions = () => ({ INSTALL: { OSX: { title: 'Download and install Filebeat', - textPre: 'First time using Filebeat? See the [Getting Started Guide]' + - '({config.docs.beats.filebeat}/filebeat-getting-started.html).', + textPre: + 'First time using Filebeat? See the [Getting Started Guide]' + + '({config.docs.beats.filebeat}/filebeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-{config.kibana.version}-darwin-x86_64.tar.gz', 'tar xzvf filebeat-{config.kibana.version}-darwin-x86_64.tar.gz', 'cd filebeat-{config.kibana.version}-darwin-x86_64/', - ] + ], }, DEB: { title: 'Download and install Filebeat', - textPre: 'First time using Filebeat? See the [Getting Started Guide]' + - '({config.docs.beats.filebeat}/filebeat-getting-started.html).', + textPre: + 'First time using Filebeat? See the [Getting Started Guide]' + + '({config.docs.beats.filebeat}/filebeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-{config.kibana.version}-amd64.deb', - 'sudo dpkg -i filebeat-{config.kibana.version}-amd64.deb' + 'sudo dpkg -i filebeat-{config.kibana.version}-amd64.deb', ], - textPost: 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/filebeat).' + textPost: + 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/filebeat).', }, RPM: { title: 'Download and install Filebeat', - textPre: 'First time using Filebeat? See the [Getting Started Guide]' + - '({config.docs.beats.filebeat}/filebeat-getting-started.html).', + textPre: + 'First time using Filebeat? See the [Getting Started Guide]' + + '({config.docs.beats.filebeat}/filebeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-{config.kibana.version}-x86_64.rpm', - 'sudo rpm -vi filebeat-{config.kibana.version}-x86_64.rpm' + 'sudo rpm -vi filebeat-{config.kibana.version}-x86_64.rpm', ], - textPost: 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/filebeat).' + textPost: + 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/filebeat).', }, WINDOWS: { title: 'Download and install Filebeat', - textPre: 'First time using Filebeat? See the [Getting Started Guide]' + - '({config.docs.beats.filebeat}/filebeat-getting-started.html).\n' + - '1. Download the Filebeat Windows zip file from the [Download](https://www.elastic.co/downloads/beats/filebeat) page.\n' + - '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + - '3. Rename the `filebeat-{config.kibana.version}-windows` directory to `Filebeat`.\n' + - '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + - ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + - '5. From the PowerShell prompt, run the following commands to install Filebeat as a Windows service.', + textPre: + 'First time using Filebeat? See the [Getting Started Guide]' + + '({config.docs.beats.filebeat}/filebeat-getting-started.html).\n' + + '1. Download the Filebeat Windows zip file from the [Download](https://www.elastic.co/downloads/beats/filebeat) page.\n' + + '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + + '3. Rename the `filebeat-{config.kibana.version}-windows` directory to `Filebeat`.\n' + + '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + + ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + + '5. From the PowerShell prompt, run the following commands to install Filebeat as a Windows service.', commands: [ 'PS > cd C:\\Program Files\\Filebeat', - 'PS C:\\Program Files\\Filebeat> .\\install-service-filebeat.ps1' + 'PS C:\\Program Files\\Filebeat> .\\install-service-filebeat.ps1', ], - textPost: 'Modify the settings under `output.elasticsearch` in the ' + - '`C:\\Program Files\\Filebeat\\filebeat.yml` file to point to your Elasticsearch installation.' - } + textPost: + 'Modify the settings under `output.elasticsearch` in the ' + + '`C:\\Program Files\\Filebeat\\filebeat.yml` file to point to your Elasticsearch installation.', + }, }, START: { OSX: { title: 'Start Filebeat', - textPre: 'The `setup` command loads the Kibana dashboards.' + - ' If the dashboards are already set up, omit this command.', - commands: [ - './filebeat setup', - './filebeat -e', - ] + textPre: + 'The `setup` command loads the Kibana dashboards.' + + ' If the dashboards are already set up, omit this command.', + commands: ['./filebeat setup', './filebeat -e'], }, DEB: { title: 'Start Filebeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', - commands: [ - 'sudo filebeat setup', - 'sudo service filebeat start', - ] + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', + commands: ['sudo filebeat setup', 'sudo service filebeat start'], }, RPM: { title: 'Start Filebeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', - commands: [ - 'sudo filebeat setup', - 'sudo service filebeat start', - ], + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', + commands: ['sudo filebeat setup', 'sudo service filebeat start'], }, WINDOWS: { title: 'Start Filebeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', commands: [ 'PS C:\\Program Files\\Filebeat> filebeat.exe setup', 'PS C:\\Program Files\\Filebeat> Start-Service filebeat', - ] - } + ], + }, }, CONFIG: { OSX: { @@ -121,10 +120,11 @@ export const FILEBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, DEB: { title: 'Edit the configuration', @@ -135,10 +135,11 @@ export const FILEBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, RPM: { title: 'Edit the configuration', @@ -149,120 +150,106 @@ export const FILEBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, WINDOWS: { title: 'Edit the configuration', - textPre: 'Modify `C:\\Program Files\\Filebeat\\filebeat.yml` to set the connection information:', + textPre: + 'Modify `C:\\Program Files\\Filebeat\\filebeat.yml` to set the connection information:', commands: [ 'output.elasticsearch:', ' hosts: [""]', ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' - } + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', + }, }, PLUGINS: { GEOIP_AND_UA: { title: 'Install Elasticsearch GeoIP and user agent plugins', - textPre: 'This module requires two Elasticsearch plugins that are not ' + - 'installed by default.\n\nFrom the Elasticsearch installation folder, run:', + textPre: + 'This module requires two Elasticsearch plugins that are not ' + + 'installed by default.\n\nFrom the Elasticsearch installation folder, run:', commands: [ 'bin/elasticsearch-plugin install ingest-geoip', - 'bin/elasticsearch-plugin install ingest-user-agent' - ] + 'bin/elasticsearch-plugin install ingest-user-agent', + ], }, GEOIP: { title: 'Install Elasticsearch GeoIP plugin', - textPre: 'This module requires an Elasticsearch plugin that is not ' + - 'installed by default.\n\nFrom the Elasticsearch installation folder, run:', - commands: [ - 'bin/elasticsearch-plugin install ingest-geoip' - ] - } - } -}; + textPre: + 'This module requires an Elasticsearch plugin that is not ' + + 'installed by default.\n\nFrom the Elasticsearch installation folder, run:', + commands: ['bin/elasticsearch-plugin install ingest-geoip'], + }, + }, +}); -export const FILEBEAT_CLOUD_INSTRUCTIONS = { +export const createFilebeatCloudInstructions = () => ({ CONFIG: { OSX: { title: 'Edit the configuration', textPre: 'Modify `filebeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, DEB: { title: 'Edit the configuration', - textPre: 'Modify `/etc/filebeat/filebeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + textPre: + 'Modify `/etc/filebeat/filebeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, RPM: { title: 'Edit the configuration', - textPre: 'Modify `/etc/filebeat/filebeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + textPre: + 'Modify `/etc/filebeat/filebeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, WINDOWS: { title: 'Edit the configuration', - textPre: 'Modify `C:\\Program Files\\Filebeat\\filebeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' - } - } -}; + textPre: + 'Modify `C:\\Program Files\\Filebeat\\filebeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', + }, + }, +}); export function filebeatEnableInstructions(moduleName) { return { OSX: { title: 'Enable and configure the ' + moduleName + ' module', textPre: 'From the installation directory, run:', - commands: [ - './filebeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.' + commands: ['./filebeat modules enable ' + moduleName], + textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.', }, DEB: { title: 'Enable and configure the ' + moduleName + ' module', - commands: [ - 'sudo filebeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `/etc/filebeat/modules.d/' + moduleName + '.yml` file.' + commands: ['sudo filebeat modules enable ' + moduleName], + textPost: 'Modify the settings in the `/etc/filebeat/modules.d/' + moduleName + '.yml` file.', }, RPM: { title: 'Enable and configure the ' + moduleName + ' module', - commands: [ - 'sudo filebeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `/etc/filebeat/modules.d/' + moduleName + '.yml` file.' + commands: ['sudo filebeat modules enable ' + moduleName], + textPost: 'Modify the settings in the `/etc/filebeat/modules.d/' + moduleName + '.yml` file.', }, WINDOWS: { title: 'Enable and configure the ' + moduleName + ' module', textPre: 'From the `C:\\Program Files\\Filebeat` folder, run:', - commands: [ - 'PS C:\\Program Files\\Filebeat> filebeat.exe modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.' - } + commands: ['PS C:\\Program Files\\Filebeat> filebeat.exe modules enable ' + moduleName], + textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.', + }, }; } @@ -279,16 +266,18 @@ export function filebeatStatusCheck(moduleName) { bool: { filter: { term: { - 'fileset.module': moduleName - } - } - } - } - } + 'fileset.module': moduleName, + }, + }, + }, + }, + }, }; } export function onPremInstructions(moduleName, platforms, geoipRequired, uaRequired) { + const FILEBEAT_INSTRUCTIONS = createFilebeatInstructions(); + const variants = []; for (let i = 0; i < platforms.length; i++) { const platform = platforms[i]; @@ -304,7 +293,7 @@ export function onPremInstructions(moduleName, platforms, geoipRequired, uaRequi instructions.push(FILEBEAT_INSTRUCTIONS.START[platform]); variants.push({ id: INSTRUCTION_VARIANT[platform], - instructions: instructions + instructions: instructions, }); } return { @@ -312,13 +301,17 @@ export function onPremInstructions(moduleName, platforms, geoipRequired, uaRequi { title: 'Getting Started', instructionVariants: variants, - statusCheck: filebeatStatusCheck(moduleName) - } - ] + statusCheck: filebeatStatusCheck(moduleName), + }, + ], }; } export function onPremCloudInstructions(moduleName, platforms) { + const FILEBEAT_INSTRUCTIONS = createFilebeatInstructions(); + const TRYCLOUD_OPTION1 = createTrycloudOption1(); + const TRYCLOUD_OPTION2 = createTrycloudOption2(); + const variants = []; for (let i = 0; i < platforms.length; i++) { const platform = platforms[i]; @@ -330,8 +323,8 @@ export function onPremCloudInstructions(moduleName, platforms) { FILEBEAT_INSTRUCTIONS.INSTALL[platform], FILEBEAT_INSTRUCTIONS.CONFIG[platform], filebeatEnableInstructions(moduleName)[platform], - FILEBEAT_INSTRUCTIONS.START[platform] - ] + FILEBEAT_INSTRUCTIONS.START[platform], + ], }); } @@ -340,13 +333,16 @@ export function onPremCloudInstructions(moduleName, platforms) { { title: 'Getting Started', instructionVariants: variants, - statusCheck: filebeatStatusCheck(moduleName) - } - ] + statusCheck: filebeatStatusCheck(moduleName), + }, + ], }; } export function cloudInstructions(moduleName, platforms) { + const FILEBEAT_INSTRUCTIONS = createFilebeatInstructions(); + const FILEBEAT_CLOUD_INSTRUCTIONS = createFilebeatCloudInstructions(); + const variants = []; for (let i = 0; i < platforms.length; i++) { const platform = platforms[i]; @@ -356,8 +352,8 @@ export function cloudInstructions(moduleName, platforms) { FILEBEAT_INSTRUCTIONS.INSTALL[platform], FILEBEAT_CLOUD_INSTRUCTIONS.CONFIG[platform], filebeatEnableInstructions(moduleName)[platform], - FILEBEAT_INSTRUCTIONS.START[platform] - ] + FILEBEAT_INSTRUCTIONS.START[platform], + ], }); } @@ -366,8 +362,8 @@ export function cloudInstructions(moduleName, platforms) { { title: 'Getting Started', instructionVariants: variants, - statusCheck: filebeatStatusCheck(moduleName) - } - ] + statusCheck: filebeatStatusCheck(moduleName), + }, + ], }; } diff --git a/src/core_plugins/kibana/common/tutorials/logstash_instructions.js b/src/core_plugins/kibana/common/tutorials/logstash_instructions.js index c231fda0a6152c..4c52314236d101 100644 --- a/src/core_plugins/kibana/common/tutorials/logstash_instructions.js +++ b/src/core_plugins/kibana/common/tutorials/logstash_instructions.js @@ -17,35 +17,39 @@ * under the License. */ -export const LOGSTASH_INSTRUCTIONS = { +export const createLogstashInstructions = () => ({ INSTALL: { OSX: [ { title: 'Download and install the Java Runtime Environment', - textPre: 'Follow the installation instructions [here](https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jre.html).' + textPre: + 'Follow the installation instructions [here](https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jre.html).', }, { title: 'Download and install Logstash', - textPre: 'First time using Logstash? See the ' + + textPre: + 'First time using Logstash? See the ' + '[Getting Started Guide]({config.docs.base_url}guide/en/logstash/current/getting-started-with-logstash.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-{config.kibana.version}.tar.gz', - 'tar xzvf logstash-{config.kibana.version}.tar.gz' - ] - } + 'tar xzvf logstash-{config.kibana.version}.tar.gz', + ], + }, ], WINDOWS: [ { title: 'Download and install the Java Runtime Environment', - textPre: 'Follow the installation instructions [here](https://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_jre_install.html).' + textPre: + 'Follow the installation instructions [here](https://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_jre_install.html).', }, { title: 'Download and install Logstash', - textPre: 'First time using Logstash? See the ' + + textPre: + 'First time using Logstash? See the ' + '[Getting Started Guide]({config.docs.base_url}guide/en/logstash/current/getting-started-with-logstash.html).\n' + ' 1. [Download](https://artifacts.elastic.co/downloads/logstash/logstash-{config.kibana.version}.zip) the Logstash Windows zip file.\n' + - ' 2. Extract the contents of the zip file.' - } + ' 2. Extract the contents of the zip file.', + }, ], - } -}; + }, +}); diff --git a/src/core_plugins/kibana/common/tutorials/metricbeat_instructions.js b/src/core_plugins/kibana/common/tutorials/metricbeat_instructions.js index 13a9aabb5a60b9..8e1b9b95bcb477 100644 --- a/src/core_plugins/kibana/common/tutorials/metricbeat_instructions.js +++ b/src/core_plugins/kibana/common/tutorials/metricbeat_instructions.js @@ -18,95 +18,97 @@ */ import { INSTRUCTION_VARIANT } from './instruction_variant'; -import { TRYCLOUD_OPTION1, TRYCLOUD_OPTION2 } from './onprem_cloud_instructions'; +import { createTrycloudOption1, createTrycloudOption2 } from './onprem_cloud_instructions'; -export const METRICBEAT_INSTRUCTIONS = { +export const createMetricbeatInstructions = () => ({ INSTALL: { OSX: { title: 'Download and install Metricbeat', - textPre: 'First time using Metricbeat? See the [Getting Started Guide]' + - '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', + textPre: + 'First time using Metricbeat? See the [Getting Started Guide]' + + '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-{config.kibana.version}-darwin-x86_64.tar.gz', 'tar xzvf metricbeat-{config.kibana.version}-darwin-x86_64.tar.gz', 'cd metricbeat-{config.kibana.version}-darwin-x86_64/', - ] + ], }, DEB: { title: 'Download and install Metricbeat', - textPre: 'First time using Metricbeat? See the [Getting Started Guide]' + - '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', + textPre: + 'First time using Metricbeat? See the [Getting Started Guide]' + + '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-{config.kibana.version}-amd64.deb', - 'sudo dpkg -i metricbeat-{config.kibana.version}-amd64.deb' + 'sudo dpkg -i metricbeat-{config.kibana.version}-amd64.deb', ], - textPost: 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/metricbeat).' + textPost: + 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/metricbeat).', }, RPM: { title: 'Download and install Metricbeat', - textPre: 'First time using Metricbeat? See the [Getting Started Guide]' + - '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', + textPre: + 'First time using Metricbeat? See the [Getting Started Guide]' + + '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).', commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-{config.kibana.version}-x86_64.rpm', - 'sudo rpm -vi metricbeat-{config.kibana.version}-x86_64.rpm' + 'sudo rpm -vi metricbeat-{config.kibana.version}-x86_64.rpm', ], - textPost: 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/metricbeat).' + textPost: + 'Looking for the 32-bit packages? See the [Download page](https://www.elastic.co/downloads/beats/metricbeat).', }, WINDOWS: { title: 'Download and install Metricbeat', - textPre: 'First time using Metricbeat? See the [Getting Started Guide]' + - '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).\n' + - '1. Download the Metricbeat Windows zip file from the [Download](https://www.elastic.co/downloads/beats/metricbeat) page.\n' + - '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + - '3. Rename the `metricbeat-{config.kibana.version}-windows` directory to `Metricbeat`.\n' + - '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + - ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + - '5. From the PowerShell prompt, run the following commands to install Metricbeat as a Windows service.', + textPre: + 'First time using Metricbeat? See the [Getting Started Guide]' + + '({config.docs.beats.metricbeat}/metricbeat-getting-started.html).\n' + + '1. Download the Metricbeat Windows zip file from the [Download](https://www.elastic.co/downloads/beats/metricbeat) page.\n' + + '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + + '3. Rename the `metricbeat-{config.kibana.version}-windows` directory to `Metricbeat`.\n' + + '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + + ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + + '5. From the PowerShell prompt, run the following commands to install Metricbeat as a Windows service.', commands: [ 'PS > cd C:\\Program Files\\Metricbeat', - 'PS C:\\Program Files\\Metricbeat> .\\install-service-metricbeat.ps1' + 'PS C:\\Program Files\\Metricbeat> .\\install-service-metricbeat.ps1', ], - textPost: 'Modify the settings under `output.elasticsearch` in the ' + - '`C:\\Program Files\\Metricbeat\\metricbeat.yml` file to point to your Elasticsearch installation.' - } + textPost: + 'Modify the settings under `output.elasticsearch` in the ' + + '`C:\\Program Files\\Metricbeat\\metricbeat.yml` file to point to your Elasticsearch installation.', + }, }, START: { OSX: { title: 'Start Metricbeat', - textPre: 'The `setup` command loads the Kibana dashboards.' + - ' If the dashboards are already set up, omit this command.', - commands: [ - './metricbeat setup', - './metricbeat -e', - ] + textPre: + 'The `setup` command loads the Kibana dashboards.' + + ' If the dashboards are already set up, omit this command.', + commands: ['./metricbeat setup', './metricbeat -e'], }, DEB: { title: 'Start Metricbeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', - commands: [ - 'sudo metricbeat setup', - 'sudo service metricbeat start', - ] + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', + commands: ['sudo metricbeat setup', 'sudo service metricbeat start'], }, RPM: { title: 'Start Metricbeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', - commands: [ - 'sudo metricbeat setup', - 'sudo service metricbeat start', - ], + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', + commands: ['sudo metricbeat setup', 'sudo service metricbeat start'], }, WINDOWS: { title: 'Start Metricbeat', - textPre: 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + - 'omit this command.', + textPre: + 'The `setup` command loads the Kibana dashboards. If the dashboards are already set up, ' + + 'omit this command.', commands: [ 'PS C:\\Program Files\\Metricbeat> metricbeat.exe setup', 'PS C:\\Program Files\\Metricbeat> Start-Service metricbeat', - ] - } + ], + }, }, CONFIG: { OSX: { @@ -118,10 +120,11 @@ export const METRICBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, DEB: { title: 'Edit the configuration', @@ -132,10 +135,11 @@ export const METRICBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, RPM: { title: 'Edit the configuration', @@ -146,101 +150,89 @@ export const METRICBEAT_INSTRUCTIONS = { ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', }, WINDOWS: { title: 'Edit the configuration', - textPre: 'Modify `C:\\Program Files\\Metricbeat\\metricbeat.yml` to set the connection information:', + textPre: + 'Modify `C:\\Program Files\\Metricbeat\\metricbeat.yml` to set the connection information:', commands: [ 'output.elasticsearch:', ' hosts: [""]', ' username: "elastic"', ' password: ""', 'setup.kibana:', - ' host: ""' + ' host: ""', ], - textPost: 'Where `` is the password of the `elastic` user, ' + - '`` is the URL of Elasticsearch, and `` is the URL of Kibana.' - } - } -}; + textPost: + 'Where `` is the password of the `elastic` user, ' + + '`` is the URL of Elasticsearch, and `` is the URL of Kibana.', + }, + }, +}); -export const METRICBEAT_CLOUD_INSTRUCTIONS = { +export const createMetricbeatCloudInstructions = () => ({ CONFIG: { OSX: { title: 'Edit the configuration', textPre: 'Modify `metricbeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, DEB: { title: 'Edit the configuration', - textPre: 'Modify `/etc/metricbeat/metricbeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + textPre: + 'Modify `/etc/metricbeat/metricbeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, RPM: { title: 'Edit the configuration', - textPre: 'Modify `/etc/metricbeat/metricbeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' + textPre: + 'Modify `/etc/metricbeat/metricbeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', }, WINDOWS: { title: 'Edit the configuration', - textPre: 'Modify `C:\\Program Files\\Filebeat\\metricbeat.yml` to set the connection information for Elastic Cloud:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"' - ], - textPost: 'Where `` is the password of the `elastic` user.' - } - } -}; + textPre: + 'Modify `C:\\Program Files\\Filebeat\\metricbeat.yml` to set the connection information for Elastic Cloud:', + commands: ['cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"'], + textPost: 'Where `` is the password of the `elastic` user.', + }, + }, +}); export function metricbeatEnableInstructions(moduleName) { return { OSX: { title: 'Enable and configure the ' + moduleName + ' module', textPre: 'From the installation directory, run:', - commands: [ - './metricbeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.' + commands: ['./metricbeat modules enable ' + moduleName], + textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.', }, DEB: { title: 'Enable and configure the ' + moduleName + ' module', - commands: [ - 'sudo metricbeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `/etc/metricbeat/modules.d/' + moduleName + '.yml` file.' + commands: ['sudo metricbeat modules enable ' + moduleName], + textPost: + 'Modify the settings in the `/etc/metricbeat/modules.d/' + moduleName + '.yml` file.', }, RPM: { title: 'Enable and configure the ' + moduleName + ' module', - commands: [ - 'sudo metricbeat modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `/etc/metricbeat/modules.d/' + moduleName + '.yml` file.' + commands: ['sudo metricbeat modules enable ' + moduleName], + textPost: + 'Modify the settings in the `/etc/metricbeat/modules.d/' + moduleName + '.yml` file.', }, WINDOWS: { title: 'Enable and configure the ' + moduleName + ' module', textPre: 'From the `C:\\Program Files\\Metricbeat` folder, run:', - commands: [ - 'PS C:\\Program Files\\Metricbeat> metricbeat.exe modules enable ' + moduleName, - ], - textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.' - } + commands: ['PS C:\\Program Files\\Metricbeat> metricbeat.exe modules enable ' + moduleName], + textPost: 'Modify the settings in the `modules.d/' + moduleName + '.yml` file.', + }, }; } @@ -257,16 +249,18 @@ export function metricbeatStatusCheck(moduleName) { bool: { filter: { term: { - 'metricset.module': moduleName - } - } - } - } - } + 'metricset.module': moduleName, + }, + }, + }, + }, + }, }; } export function onPremInstructions(moduleName) { + const METRICBEAT_INSTRUCTIONS = createMetricbeatInstructions(); + return { instructionSets: [ { @@ -278,8 +272,8 @@ export function onPremInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.OSX, METRICBEAT_INSTRUCTIONS.CONFIG.OSX, metricbeatEnableInstructions(moduleName).OSX, - METRICBEAT_INSTRUCTIONS.START.OSX - ] + METRICBEAT_INSTRUCTIONS.START.OSX, + ], }, { id: INSTRUCTION_VARIANT.DEB, @@ -287,8 +281,8 @@ export function onPremInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.DEB, METRICBEAT_INSTRUCTIONS.CONFIG.DEB, metricbeatEnableInstructions(moduleName).DEB, - METRICBEAT_INSTRUCTIONS.START.DEB - ] + METRICBEAT_INSTRUCTIONS.START.DEB, + ], }, { id: INSTRUCTION_VARIANT.RPM, @@ -296,8 +290,8 @@ export function onPremInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.RPM, METRICBEAT_INSTRUCTIONS.CONFIG.RPM, metricbeatEnableInstructions(moduleName).RPM, - METRICBEAT_INSTRUCTIONS.START.RPM - ] + METRICBEAT_INSTRUCTIONS.START.RPM, + ], }, { id: INSTRUCTION_VARIANT.WINDOWS, @@ -305,17 +299,21 @@ export function onPremInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.WINDOWS, METRICBEAT_INSTRUCTIONS.CONFIG.WINDOWS, metricbeatEnableInstructions(moduleName).WINDOWS, - METRICBEAT_INSTRUCTIONS.START.WINDOWS - ] - } + METRICBEAT_INSTRUCTIONS.START.WINDOWS, + ], + }, ], - statusCheck: metricbeatStatusCheck(moduleName) - } - ] + statusCheck: metricbeatStatusCheck(moduleName), + }, + ], }; } export function onPremCloudInstructions(moduleName) { + const TRYCLOUD_OPTION1 = createTrycloudOption1(); + const TRYCLOUD_OPTION2 = createTrycloudOption2(); + const METRICBEAT_INSTRUCTIONS = createMetricbeatInstructions(); + return { instructionSets: [ { @@ -329,8 +327,8 @@ export function onPremCloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.OSX, METRICBEAT_INSTRUCTIONS.CONFIG.OSX, metricbeatEnableInstructions(moduleName).OSX, - METRICBEAT_INSTRUCTIONS.START.OSX - ] + METRICBEAT_INSTRUCTIONS.START.OSX, + ], }, { id: INSTRUCTION_VARIANT.DEB, @@ -340,8 +338,8 @@ export function onPremCloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.DEB, METRICBEAT_INSTRUCTIONS.CONFIG.DEB, metricbeatEnableInstructions(moduleName).DEB, - METRICBEAT_INSTRUCTIONS.START.DEB - ] + METRICBEAT_INSTRUCTIONS.START.DEB, + ], }, { id: INSTRUCTION_VARIANT.RPM, @@ -351,8 +349,8 @@ export function onPremCloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.RPM, METRICBEAT_INSTRUCTIONS.CONFIG.RPM, metricbeatEnableInstructions(moduleName).RPM, - METRICBEAT_INSTRUCTIONS.START.RPM - ] + METRICBEAT_INSTRUCTIONS.START.RPM, + ], }, { id: INSTRUCTION_VARIANT.WINDOWS, @@ -362,17 +360,20 @@ export function onPremCloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.WINDOWS, METRICBEAT_INSTRUCTIONS.CONFIG.WINDOWS, metricbeatEnableInstructions(moduleName).WINDOWS, - METRICBEAT_INSTRUCTIONS.START.WINDOWS - ] - } + METRICBEAT_INSTRUCTIONS.START.WINDOWS, + ], + }, ], - statusCheck: metricbeatStatusCheck(moduleName) - } - ] + statusCheck: metricbeatStatusCheck(moduleName), + }, + ], }; } export function cloudInstructions(moduleName) { + const METRICBEAT_INSTRUCTIONS = createMetricbeatInstructions(); + const METRICBEAT_CLOUD_INSTRUCTIONS = createMetricbeatCloudInstructions(); + return { instructionSets: [ { @@ -384,8 +385,8 @@ export function cloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.OSX, METRICBEAT_CLOUD_INSTRUCTIONS.CONFIG.OSX, metricbeatEnableInstructions(moduleName).OSX, - METRICBEAT_INSTRUCTIONS.START.OSX - ] + METRICBEAT_INSTRUCTIONS.START.OSX, + ], }, { id: INSTRUCTION_VARIANT.DEB, @@ -393,8 +394,8 @@ export function cloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.DEB, METRICBEAT_CLOUD_INSTRUCTIONS.CONFIG.DEB, metricbeatEnableInstructions(moduleName).DEB, - METRICBEAT_INSTRUCTIONS.START.DEB - ] + METRICBEAT_INSTRUCTIONS.START.DEB, + ], }, { id: INSTRUCTION_VARIANT.RPM, @@ -402,8 +403,8 @@ export function cloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.RPM, METRICBEAT_CLOUD_INSTRUCTIONS.CONFIG.RPM, metricbeatEnableInstructions(moduleName).RPM, - METRICBEAT_INSTRUCTIONS.START.RPM - ] + METRICBEAT_INSTRUCTIONS.START.RPM, + ], }, { id: INSTRUCTION_VARIANT.WINDOWS, @@ -411,12 +412,12 @@ export function cloudInstructions(moduleName) { METRICBEAT_INSTRUCTIONS.INSTALL.WINDOWS, METRICBEAT_CLOUD_INSTRUCTIONS.CONFIG.WINDOWS, metricbeatEnableInstructions(moduleName).WINDOWS, - METRICBEAT_INSTRUCTIONS.START.WINDOWS - ] - } + METRICBEAT_INSTRUCTIONS.START.WINDOWS, + ], + }, ], - statusCheck: metricbeatStatusCheck(moduleName) - } - ] + statusCheck: metricbeatStatusCheck(moduleName), + }, + ], }; } diff --git a/src/core_plugins/kibana/common/tutorials/onprem_cloud_instructions.js b/src/core_plugins/kibana/common/tutorials/onprem_cloud_instructions.js index 9b0326a1b647a2..eec1848c06a931 100644 --- a/src/core_plugins/kibana/common/tutorials/onprem_cloud_instructions.js +++ b/src/core_plugins/kibana/common/tutorials/onprem_cloud_instructions.js @@ -17,25 +17,24 @@ * under the License. */ -export const TRYCLOUD_OPTION1 = { +export const createTrycloudOption1 = () => ({ title: 'Option 1: Try module in Elastic Cloud', - textPre: 'Go to [Elastic Cloud](https://www.elastic.co/cloud/as-a-service/signup?blade=kib). Register if you ' + - 'do not already have an account. Free 14-day trial available.\n\n' + + textPre: + 'Go to [Elastic Cloud](https://www.elastic.co/cloud/as-a-service/signup?blade=kib). Register if you ' + + 'do not already have an account. Free 14-day trial available.\n\n' + + 'Log into the Elastic Cloud console\n\n' + + 'To create a cluster, in Elastic Cloud console:\n' + + ' 1. Select **Create Deployment** and specify the **Deployment Name**\n' + + ' 2. Modify the other deployment options as needed (or not, the defaults are great to get started)\n' + + ' 3. Click **Create Deployment**\n' + + ' 4. Wait until deployment creation completes\n' + + ' 5. Go to the new Cloud Kibana instance and follow the Kibana Home instructions', +}); - 'Log into the Elastic Cloud console\n\n' + - - 'To create a cluster, in Elastic Cloud console:\n' + - ' 1. Select **Create Deployment** and specify the **Deployment Name**\n' + - ' 2. Modify the other deployment options as needed (or not, the defaults are great to get started)\n' + - ' 3. Click **Create Deployment**\n' + - ' 4. Wait until deployment creation completes\n' + - ' 5. Go to the new Cloud Kibana instance and follow the Kibana Home instructions' - -}; - -export const TRYCLOUD_OPTION2 = { +export const createTrycloudOption2 = () => ({ title: 'Option 2: Connect local Kibana to a Cloud instance', - textPre: 'If you are running this Kibana instance against a hosted Elasticsearch instance,' + - ' proceed with manual setup.\n\n' + - 'Save the **Elasticsearch** endpoint as `` and the cluster **Password** as `` for your records' -}; + textPre: + 'If you are running this Kibana instance against a hosted Elasticsearch instance,' + + ' proceed with manual setup.\n\n' + + 'Save the **Elasticsearch** endpoint as `` and the cluster **Password** as `` for your records', +}); diff --git a/src/core_plugins/kibana/server/tutorials/apm/apm_client_instructions.js b/src/core_plugins/kibana/server/tutorials/apm/apm_client_instructions.js index 21276a4dd25ab6..49c4b999af18eb 100644 --- a/src/core_plugins/kibana/server/tutorials/apm/apm_client_instructions.js +++ b/src/core_plugins/kibana/server/tutorials/apm/apm_client_instructions.js @@ -19,11 +19,10 @@ /* eslint-disable max-len */ -export const NODE_CLIENT_INSTRUCTIONS = [ +export const createNodeClientInstructions = () => [ { title: 'Install the APM agent', - textPre: - 'Install the APM agent for Node.js as a dependency to your application.', + textPre: 'Install the APM agent for Node.js as a dependency to your application.', commands: ['npm install elastic-apm-node --save'], }, { @@ -47,7 +46,7 @@ var apm = require('elastic-apm-node').start({curlyOpen} }, ]; -export const DJANGO_CLIENT_INSTRUCTIONS = [ +export const createDjangoClientInstructions = () => [ { title: 'Install the APM agent', textPre: 'Install the APM agent for Python as a dependency.', @@ -87,7 +86,7 @@ MIDDLEWARE = ( }, ]; -export const FLASK_CLIENT_INSTRUCTIONS = [ +export const createFlaskClientInstructions = () => [ { title: 'Install the APM agent', textPre: 'Install the APM agent for Python as a dependency.', @@ -124,7 +123,7 @@ apm = ElasticAPM(app)`.split('\n'), }, ]; -export const RAILS_CLIENT_INSTRUCTIONS = [ +export const createRailsClientInstructions = () => [ { title: 'Install the APM agent', textPre: 'Add the agent to your Gemfile.', @@ -151,7 +150,7 @@ export const RAILS_CLIENT_INSTRUCTIONS = [ }, ]; -export const RACK_CLIENT_INSTRUCTIONS = [ +export const createRackClientInstructions = () => [ { title: 'Install the APM agent', textPre: 'Add the agent to your Gemfile.', @@ -199,7 +198,7 @@ export const RACK_CLIENT_INSTRUCTIONS = [ }, ]; -export const JS_CLIENT_INSTRUCTIONS = [ +export const createJsClientInstructions = () => [ { title: 'Enable Real User Monitoring support in the APM server', textPre: @@ -207,8 +206,7 @@ export const JS_CLIENT_INSTRUCTIONS = [ }, { title: 'Install the APM agent', - textPre: - 'Install the APM agent for JavaScript as a dependency to your application:', + textPre: 'Install the APM agent for JavaScript as a dependency to your application:', commands: [`npm install elastic-apm-js-base --save`], }, { @@ -232,7 +230,7 @@ var apm = initApm({curlyOpen} }, ]; -export const GO_CLIENT_INSTRUCTIONS = [ +export const createGoClientInstructions = () => [ { title: 'Install the APM agent', textPre: 'Install the APM agent packages for Go.', @@ -286,27 +284,29 @@ func main() {curlyOpen} }, ]; -export const JAVA_CLIENT_INSTRUCTIONS = [ +export const createJavaClientInstructions = () => [ { title: 'Download the APM agent', - textPre: 'Download the agent jar from [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Ca%3Aelastic-apm-agent). ' + - 'Do **not** add the agent as a dependency to your application.' + textPre: + 'Download the agent jar from [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Ca%3Aelastic-apm-agent). ' + + 'Do **not** add the agent as a dependency to your application.', }, { title: 'Start your application with the javaagent flag', - textPre: 'Add the `-javaagent` flag and configure the agent with system properties.\n' + - '\n' + - ' * Set required service name (allowed characters: a-z, A-Z, 0-9, -, _, and space)\n' + - ' * Set custom APM Server URL (default: http://localhost:8200)\n' + - ' * Set the base package of your application', + textPre: + 'Add the `-javaagent` flag and configure the agent with system properties.\n' + + '\n' + + ' * Set required service name (allowed characters: a-z, A-Z, 0-9, -, _, and space)\n' + + ' * Set custom APM Server URL (default: http://localhost:8200)\n' + + ' * Set the base package of your application', commands: `java -javaagent:/path/to/elastic-apm-agent-.jar \\ -Delastic.apm.service_name=my-application \\ - -Delastic.apm.server_url=http://localhost:8200 \\ - -Delastic.apm.application_packages=org.example \\ + -Delastic.apm.server_url=http://localhost:8200 \\ + -Delastic.apm.application_packages=org.example \\ -jar my-application.jar`.split('\n'), textPost: - 'See the [documentation]' + - '({config.docs.base_url}guide/en/apm/agent/java/current/index.html) for configuration options and advanced usage.\n\n' + - '**Warning: The Java agent is currently in Beta and not meant for production use.**', + 'See the [documentation]' + + '({config.docs.base_url}guide/en/apm/agent/java/current/index.html) for configuration options and advanced usage.\n\n' + + '**Warning: The Java agent is currently in Beta and not meant for production use.**', }, ]; diff --git a/src/core_plugins/kibana/server/tutorials/apm/apm_server_instructions.js b/src/core_plugins/kibana/server/tutorials/apm/apm_server_instructions.js index a85b6709713d0f..59d4d5fe75c1b8 100644 --- a/src/core_plugins/kibana/server/tutorials/apm/apm_server_instructions.js +++ b/src/core_plugins/kibana/server/tutorials/apm/apm_server_instructions.js @@ -17,7 +17,7 @@ * under the License. */ -export const EDIT_CONFIG = { +export const createEditConfig = () => ({ title: 'Edit the configuration', textPre: `If you're using an X-Pack secured version of Elastic Stack, you must specify` + @@ -28,73 +28,80 @@ export const EDIT_CONFIG = { ' username: ', ' password: ', ], -}; +}); -const START_SERVER = { +const createStartServer = () => ({ title: 'Start APM Server', - textPre: - 'The server processes and stores application performance metrics in Elasticsearch.', -}; + textPre: 'The server processes and stores application performance metrics in Elasticsearch.', +}); + +export function createStartServerUnix() { + const START_SERVER = createStartServer(); -export const START_SERVER_UNIX = { - title: START_SERVER.title, - textPre: START_SERVER.textPre, - commands: ['./apm-server -e'], -}; + return { + title: START_SERVER.title, + textPre: START_SERVER.textPre, + commands: ['./apm-server -e'], + }; +} -const DOWNLOAD_SERVER_TITLE = 'Download and unpack APM Server'; +const createDownloadServerTitle = () => 'Download and unpack APM Server'; -export const DOWNLOAD_SERVER_OSX = { - title: DOWNLOAD_SERVER_TITLE, +export const createDownloadServerOsx = () => ({ + title: createDownloadServerTitle(), commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-{config.kibana.version}-darwin-x86_64.tar.gz', 'tar xzvf apm-server-{config.kibana.version}-darwin-x86_64.tar.gz', 'cd apm-server-{config.kibana.version}-darwin-x86_64/', ], -}; +}); -export const DOWNLOAD_SERVER_DEB = { - title: DOWNLOAD_SERVER_TITLE, +export const createDownloadServerDeb = () => ({ + title: createDownloadServerTitle(), commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-{config.kibana.version}-amd64.deb', 'sudo dpkg -i apm-server-{config.kibana.version}-amd64.deb', ], textPost: 'Looking for the 32-bit packages? See the [Download page]({config.docs.base_url}downloads/apm/apm-server).', -}; +}); -export const DOWNLOAD_SERVER_RPM = { - title: DOWNLOAD_SERVER_TITLE, +export const createDownloadServerRpm = () => ({ + title: createDownloadServerTitle(), commands: [ 'curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-{config.kibana.version}-x86_64.rpm', 'sudo rpm -vi apm-server-{config.kibana.version}-x86_64.rpm', ], textPost: 'Looking for the 32-bit packages? See the [Download page]({config.docs.base_url}downloads/apm/apm-server).', -}; +}); -export const WINDOWS_SERVER_INSTRUCTIONS = [ - { - title: DOWNLOAD_SERVER_TITLE, - textPre: - '1. Download the APM Server Windows zip file from the [Download page](https://www.elastic.co/downloads/apm/apm-server).\n' + - '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + - '3. Rename the `apm-server-{config.kibana.version}-windows` directory to `APM-Server`.\n' + - '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + - ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + - '5. From the PowerShell prompt, run the following commands to install APM Server as a Windows service:', - commands: [ - `PS > cd 'C:\\Program Files\\APM-Server'`, - `PS C:\\Program Files\\APM-Server> .\\install-service-apm-server.ps1`, - ], - textPost: - 'Note: If script execution is disabled on your system, you need to set the execution policy for the current session' + - ' to allow the script to run. For example: `PowerShell.exe -ExecutionPolicy UnRestricted -File .\\install-service-apm-server.ps1`.', - }, - EDIT_CONFIG, - { - title: START_SERVER.title, - textPre: START_SERVER.textPre, - commands: ['apm-server.exe -e'], - }, -]; +export function createWindowsServerInstructions() { + const START_SERVER = createStartServer(); + + return [ + { + title: createDownloadServerTitle(), + textPre: + '1. Download the APM Server Windows zip file from the [Download page](https://www.elastic.co/downloads/apm/apm-server).\n' + + '2. Extract the contents of the zip file into `C:\\Program Files`.\n' + + '3. Rename the `apm-server-{config.kibana.version}-windows` directory to `APM-Server`.\n' + + '4. Open a PowerShell prompt as an Administrator (right-click the PowerShell icon and select' + + ' **Run As Administrator**). If you are running Windows XP, you might need to download and install PowerShell.\n' + + '5. From the PowerShell prompt, run the following commands to install APM Server as a Windows service:', + commands: [ + `PS > cd 'C:\\Program Files\\APM-Server'`, + `PS C:\\Program Files\\APM-Server> .\\install-service-apm-server.ps1`, + ], + textPost: + 'Note: If script execution is disabled on your system, you need to set the execution policy for the current session' + + ' to allow the script to run. For example: `PowerShell.exe -ExecutionPolicy UnRestricted -File .\\install-service-apm-server.ps1`.', + }, + createEditConfig(), + { + title: START_SERVER.title, + textPre: START_SERVER.textPre, + commands: ['apm-server.exe -e'], + }, + ]; +} diff --git a/src/core_plugins/kibana/server/tutorials/apm/elastic_cloud.js b/src/core_plugins/kibana/server/tutorials/apm/elastic_cloud.js index a7bf9fa012fd6c..4bce847b082e72 100644 --- a/src/core_plugins/kibana/server/tutorials/apm/elastic_cloud.js +++ b/src/core_plugins/kibana/server/tutorials/apm/elastic_cloud.js @@ -20,61 +20,64 @@ import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; import { - NODE_CLIENT_INSTRUCTIONS, - DJANGO_CLIENT_INSTRUCTIONS, - FLASK_CLIENT_INSTRUCTIONS, - RAILS_CLIENT_INSTRUCTIONS, - RACK_CLIENT_INSTRUCTIONS, - JS_CLIENT_INSTRUCTIONS, - GO_CLIENT_INSTRUCTIONS, - JAVA_CLIENT_INSTRUCTIONS, + createNodeClientInstructions, + createDjangoClientInstructions, + createFlaskClientInstructions, + createRailsClientInstructions, + createRackClientInstructions, + createJsClientInstructions, + createGoClientInstructions, + createJavaClientInstructions, } from './apm_client_instructions'; -const SERVER_URL_INSTRUCTION = { +const createServerUrlInstruction = () => ({ title: 'APM Server endpoint', - textPre: - `Retrieve the APM Server URL from the Deployments section on the Elastic Cloud dashboard. + textPre: `Retrieve the APM Server URL from the Deployments section on the Elastic Cloud dashboard. You will also need the APM Server secret token, which was generated on deployment.`, -}; +}); -export const ELASTIC_CLOUD_INSTRUCTIONS = { - instructionSets: [ - { - title: 'APM Agents', - instructionVariants: [ - { - id: INSTRUCTION_VARIANT.NODE, - instructions: [SERVER_URL_INSTRUCTION, ...NODE_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.DJANGO, - instructions: [SERVER_URL_INSTRUCTION, ...DJANGO_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.FLASK, - instructions: [SERVER_URL_INSTRUCTION, ...FLASK_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.RAILS, - instructions: [SERVER_URL_INSTRUCTION, ...RAILS_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.RACK, - instructions: [SERVER_URL_INSTRUCTION, ...RACK_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.JS, - instructions: [SERVER_URL_INSTRUCTION, ...JS_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.GO, - instructions: [SERVER_URL_INSTRUCTION, ...GO_CLIENT_INSTRUCTIONS], - }, - { - id: INSTRUCTION_VARIANT.JAVA, - instructions: [SERVER_URL_INSTRUCTION, ...JAVA_CLIENT_INSTRUCTIONS], - }, - ], - }, - ], -}; +export function createElasticCloudInstructions() { + const SERVER_URL_INSTRUCTION = createServerUrlInstruction(); + + return { + instructionSets: [ + { + title: 'APM Agents', + instructionVariants: [ + { + id: INSTRUCTION_VARIANT.NODE, + instructions: [SERVER_URL_INSTRUCTION, ...createNodeClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.DJANGO, + instructions: [SERVER_URL_INSTRUCTION, ...createDjangoClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.FLASK, + instructions: [SERVER_URL_INSTRUCTION, ...createFlaskClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.RAILS, + instructions: [SERVER_URL_INSTRUCTION, ...createRailsClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.RACK, + instructions: [SERVER_URL_INSTRUCTION, ...createRackClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.JS, + instructions: [SERVER_URL_INSTRUCTION, ...createJsClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.GO, + instructions: [SERVER_URL_INSTRUCTION, ...createGoClientInstructions()], + }, + { + id: INSTRUCTION_VARIANT.JAVA, + instructions: [SERVER_URL_INSTRUCTION, ...createJavaClientInstructions()], + }, + ], + }, + ], + }; +} diff --git a/src/core_plugins/kibana/server/tutorials/apm/index.js b/src/core_plugins/kibana/server/tutorials/apm/index.js index 107b1ad8d1da8d..fb92e9acb9609a 100644 --- a/src/core_plugins/kibana/server/tutorials/apm/index.js +++ b/src/core_plugins/kibana/server/tutorials/apm/index.js @@ -19,7 +19,7 @@ import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { onPremInstructions } from './on_prem'; -import { ELASTIC_CLOUD_INSTRUCTIONS } from './elastic_cloud'; +import { createElasticCloudInstructions } from './elastic_cloud'; import { getSavedObjects } from './saved_objects/get_saved_objects'; const apmIntro = 'Collect in-depth performance metrics and errors from inside your applications.'; @@ -42,14 +42,15 @@ export function apmSpecProvider(server) { { id: '8d3ed660-7828-11e7-8c47-65b845b5cfb3', linkLabel: 'APM dashboard', - isOverview: true - } - ] + isOverview: true, + }, + ], }; + if (isEnabled(config)) { artifacts.application = { path: '/app/apm', - label: 'Launch APM' + label: 'Launch APM', }; } @@ -58,17 +59,19 @@ export function apmSpecProvider(server) { name: 'APM', category: TUTORIAL_CATEGORY.OTHER, shortDescription: apmIntro, - longDescription: 'Application Performance Monitoring (APM) collects in-depth' + + longDescription: + 'Application Performance Monitoring (APM) collects in-depth' + ' performance metrics and errors from inside your application.' + ' It allows you to monitor the performance of thousands of applications in real time.' + ' [Learn more]({config.docs.base_url}guide/en/apm/get-started/{config.docs.version}/index.html).', euiIconType: 'apmApp', artifacts: artifacts, onPrem: onPremInstructions(apmIndexPattern), - elasticCloud: ELASTIC_CLOUD_INSTRUCTIONS, + elasticCloud: createElasticCloudInstructions(), previewImagePath: '/plugins/kibana/home/tutorial_resources/apm/apm.png', savedObjects: getSavedObjects(apmIndexPattern), - savedObjectsInstallMsg: 'Load index pattern, visualizations, and pre-defined dashboards.' + + savedObjectsInstallMsg: + 'Load index pattern, visualizations, and pre-defined dashboards.' + ' An index pattern is required for some features in the APM UI.', }; } diff --git a/src/core_plugins/kibana/server/tutorials/apm/on_prem.js b/src/core_plugins/kibana/server/tutorials/apm/on_prem.js index 3fcca371fbe0ed..b1a3938592e732 100644 --- a/src/core_plugins/kibana/server/tutorials/apm/on_prem.js +++ b/src/core_plugins/kibana/server/tutorials/apm/on_prem.js @@ -19,25 +19,27 @@ import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; import { - WINDOWS_SERVER_INSTRUCTIONS, - EDIT_CONFIG, - START_SERVER_UNIX, - DOWNLOAD_SERVER_RPM, - DOWNLOAD_SERVER_DEB, - DOWNLOAD_SERVER_OSX, + createWindowsServerInstructions, + createEditConfig, + createStartServerUnix, + createDownloadServerRpm, + createDownloadServerDeb, + createDownloadServerOsx, } from './apm_server_instructions'; import { - NODE_CLIENT_INSTRUCTIONS, - DJANGO_CLIENT_INSTRUCTIONS, - FLASK_CLIENT_INSTRUCTIONS, - RAILS_CLIENT_INSTRUCTIONS, - RACK_CLIENT_INSTRUCTIONS, - JS_CLIENT_INSTRUCTIONS, - GO_CLIENT_INSTRUCTIONS, - JAVA_CLIENT_INSTRUCTIONS, + createNodeClientInstructions, + createDjangoClientInstructions, + createFlaskClientInstructions, + createRailsClientInstructions, + createRackClientInstructions, + createJsClientInstructions, + createGoClientInstructions, + createJavaClientInstructions, } from './apm_client_instructions'; export function onPremInstructions(apmIndexPattern) { + const EDIT_CONFIG = createEditConfig(); + const START_SERVER_UNIX = createStartServerUnix(); return { instructionSets: [ @@ -46,37 +48,24 @@ export function onPremInstructions(apmIndexPattern) { instructionVariants: [ { id: INSTRUCTION_VARIANT.OSX, - instructions: [ - DOWNLOAD_SERVER_OSX, - EDIT_CONFIG, - START_SERVER_UNIX, - ], + instructions: [createDownloadServerOsx(), EDIT_CONFIG, START_SERVER_UNIX], }, { id: INSTRUCTION_VARIANT.DEB, - instructions: [ - DOWNLOAD_SERVER_DEB, - EDIT_CONFIG, - START_SERVER_UNIX, - ], + instructions: [createDownloadServerDeb(), EDIT_CONFIG, START_SERVER_UNIX], }, { id: INSTRUCTION_VARIANT.RPM, - instructions: [ - DOWNLOAD_SERVER_RPM, - EDIT_CONFIG, - START_SERVER_UNIX, - ], + instructions: [createDownloadServerRpm(), EDIT_CONFIG, START_SERVER_UNIX], }, { id: INSTRUCTION_VARIANT.WINDOWS, - instructions: WINDOWS_SERVER_INSTRUCTIONS, + instructions: createWindowsServerInstructions(), }, ], statusCheck: { title: 'APM Server status', - text: - 'Make sure APM Server is running before you start implementing the APM agents.', + text: 'Make sure APM Server is running before you start implementing the APM agents.', btnLabel: 'Check APM Server status', success: 'You have correctly setup APM-Server', error: 'APM-Server has still not connected to Elasticsearch', @@ -99,41 +88,40 @@ export function onPremInstructions(apmIndexPattern) { instructionVariants: [ { id: INSTRUCTION_VARIANT.NODE, - instructions: NODE_CLIENT_INSTRUCTIONS, + instructions: createNodeClientInstructions(), }, { id: INSTRUCTION_VARIANT.DJANGO, - instructions: DJANGO_CLIENT_INSTRUCTIONS, + instructions: createDjangoClientInstructions(), }, { id: INSTRUCTION_VARIANT.FLASK, - instructions: FLASK_CLIENT_INSTRUCTIONS, + instructions: createFlaskClientInstructions(), }, { id: INSTRUCTION_VARIANT.RAILS, - instructions: RAILS_CLIENT_INSTRUCTIONS, + instructions: createRailsClientInstructions(), }, { id: INSTRUCTION_VARIANT.RACK, - instructions: RACK_CLIENT_INSTRUCTIONS, + instructions: createRackClientInstructions(), }, { id: INSTRUCTION_VARIANT.JS, - instructions: JS_CLIENT_INSTRUCTIONS, + instructions: createJsClientInstructions(), }, { id: INSTRUCTION_VARIANT.GO, - instructions: GO_CLIENT_INSTRUCTIONS, + instructions: createGoClientInstructions(), }, { id: INSTRUCTION_VARIANT.JAVA, - instructions: JAVA_CLIENT_INSTRUCTIONS, + instructions: createJavaClientInstructions(), }, ], statusCheck: { title: 'Agent status', - text: - 'Make sure your application is running and the agents are sending data.', + text: 'Make sure your application is running and the agents are sending data.', btnLabel: 'Check agent status', success: 'Data successfully received from one or more agents', error: `No data has been received from agents yet`, diff --git a/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js b/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js index 2a7364c0529729..eaf554d6b21895 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js @@ -17,129 +17,125 @@ * under the License. */ -export const COMMON_NETFLOW_INSTRUCTIONS = { - CONFIG: { - ON_PREM: { - OSX: [ - { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', - commands: [ - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data.' - - } - ], - WINDOWS: [ - { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', - commands: [ - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data.' - } - ] +export function createCommonNetflowInstructions() { + return { + CONFIG: { + ON_PREM: { + OSX: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + commands: ['modules:', ' - name: netflow', ' var.input.udp.port: '], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data.', + }, + ], + WINDOWS: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + commands: ['modules:', ' - name: netflow', ' var.input.udp.port: '], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data.', + }, + ], + }, + ON_PREM_ELASTIC_CLOUD: { + OSX: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + commands: [ + 'modules:', + ' - name: netflow', + ' var.input.udp.port: ', + ' var.elasticsearch.hosts: [ "" ]', + ' var.elasticsearch.username: elastic', + ' var.elasticsearch.password: ', + ], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data, ' + + '`` is the URL of Elasticsearch running on Elastic Cloud, and ' + + '`` is the password of the `elastic` user.', + }, + ], + WINDOWS: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + commands: [ + 'modules:', + ' - name: netflow', + ' var.input.udp.port: ', + ' var.elasticsearch.hosts: [ "" ]', + ' var.elasticsearch.username: elastic', + ' var.elasticsearch.password: ', + ], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data, ' + + '`` is the URL of Elasticsearch running on Elastic Cloud, and ' + + '`` is the password of the `elastic` user.', + }, + ], + }, + ELASTIC_CLOUD: { + OSX: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + commands: [ + 'cloud.id: "{config.cloud.id}"', + 'cloud.auth: "elastic:"', + ' ', + 'modules:', + ' - name: netflow', + ' var.input.udp.port: ', + ], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data and ' + + '`` is the password of the `elastic` user.', + }, + ], + WINDOWS: [ + { + title: 'Edit the configuration', + textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + commands: [ + 'cloud.id: "{config.cloud.id}"', + 'cloud.auth: "elastic:"', + ' ', + 'modules:', + ' - name: netflow', + ' var.input.udp.port: ', + ], + textPost: + 'Where `` is the UDP port on which Logstash will receive Netflow data and ' + + '`` is the password of the `elastic` user.', + }, + ], + }, }, - ON_PREM_ELASTIC_CLOUD: { + SETUP: { OSX: [ { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', - commands: [ - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ' var.elasticsearch.hosts: [ "" ]', - ' var.elasticsearch.username: elastic', - ' var.elasticsearch.password: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data, ' - + '`` is the URL of Elasticsearch running on Elastic Cloud, and ' - + '`` is the password of the `elastic` user.' - } + title: 'Run the Netflow module', + textPre: 'Run:', + commands: ['./bin/logstash --modules netflow --setup'], + textPost: + 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + + ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + }, ], WINDOWS: [ { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', - commands: [ - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ' var.elasticsearch.hosts: [ "" ]', - ' var.elasticsearch.username: elastic', - ' var.elasticsearch.password: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data, ' - + '`` is the URL of Elasticsearch running on Elastic Cloud, and ' - + '`` is the password of the `elastic` user.' - - } - ] - }, - ELASTIC_CLOUD: { - OSX: [ - { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"', - ' ', - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data and ' - + '`` is the password of the `elastic` user.' - } + title: 'Run the Netflow module', + textPre: 'Run:', + commands: ['bin\\logstash --modules netflow --setup'], + textPost: + 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + + ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + }, ], - WINDOWS: [ - { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', - commands: [ - 'cloud.id: "{config.cloud.id}"', - 'cloud.auth: "elastic:"', - ' ', - 'modules:', - ' - name: netflow', - ' var.input.udp.port: ', - ], - textPost: 'Where `` is the UDP port on which Logstash will receive Netflow data and ' - + '`` is the password of the `elastic` user.' - } - ] - } - }, - SETUP: { - OSX: [ - { - title: 'Run the Netflow module', - textPre: 'Run:', - commands: [ - './bin/logstash --modules netflow --setup', - ], - textPost: 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + - ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.' - } - ], - WINDOWS: [ - { - title: 'Run the Netflow module', - textPre: 'Run:', - commands: [ - 'bin\\logstash --modules netflow --setup', - ], - textPost: 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + - ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.' - } - ] - } -}; + }, + }; +} diff --git a/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js b/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js index 21e396bb9db280..ddb3afc0488fdb 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js @@ -18,32 +18,37 @@ */ import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; -import { LOGSTASH_INSTRUCTIONS } from '../../../common/tutorials/logstash_instructions'; -import { COMMON_NETFLOW_INSTRUCTIONS } from './common_instructions'; +import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; +import { createCommonNetflowInstructions } from './common_instructions'; // TODO: compare with onPremElasticCloud and onPrem scenarios and extract out common bits -export const ELASTIC_CLOUD_INSTRUCTIONS = { - instructionSets: [ - { - title: 'Getting Started', - instructionVariants: [ - { - id: INSTRUCTION_VARIANT.OSX, - instructions: [ - ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ELASTIC_CLOUD.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX - ] - }, - { - id: INSTRUCTION_VARIANT.WINDOWS, - instructions: [ - ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ELASTIC_CLOUD.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS - ] - } - ] - } - ] -}; +export function createElasticCloudInstructions() { + const COMMON_NETFLOW_INSTRUCTIONS = createCommonNetflowInstructions(); + const LOGSTASH_INSTRUCTIONS = createLogstashInstructions(); + + return { + instructionSets: [ + { + title: 'Getting Started', + instructionVariants: [ + { + id: INSTRUCTION_VARIANT.OSX, + instructions: [ + ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ELASTIC_CLOUD.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX, + ], + }, + { + id: INSTRUCTION_VARIANT.WINDOWS, + instructions: [ + ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ELASTIC_CLOUD.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS, + ], + }, + ], + }, + ], + }; +} diff --git a/src/core_plugins/kibana/server/tutorials/netflow/index.js b/src/core_plugins/kibana/server/tutorials/netflow/index.js index e634282acc5650..9617fe033b630f 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/index.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/index.js @@ -18,9 +18,9 @@ */ import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; -import { ON_PREM_INSTRUCTIONS } from './on_prem'; -import { ELASTIC_CLOUD_INSTRUCTIONS } from './elastic_cloud'; -import { ON_PREM_ELASTIC_CLOUD_INSTRUCTIONS } from './on_prem_elastic_cloud'; +import { createOnPremInstructions } from './on_prem'; +import { createElasticCloudInstructions } from './elastic_cloud'; +import { createOnPremElasticCloudInstructions } from './on_prem_elastic_cloud'; export function netflowSpecProvider() { return { @@ -28,14 +28,15 @@ export function netflowSpecProvider() { name: 'Netflow', category: TUTORIAL_CATEGORY.SECURITY, shortDescription: 'Collect Netflow records sent by a Netflow exporter.', - longDescription: 'The Logstash Netflow module collects and parses network flow data, ' + + longDescription: + 'The Logstash Netflow module collects and parses network flow data, ' + ' indexes the events into Elasticsearch, and installs a suite of Kibana dashboards.' + ' This module support Netflow Version 5 and 9.' + ' [Learn more]({config.docs.logstash}/netflow-module.html).', completionTimeMinutes: 10, //previewImagePath: 'kibana-apache.png', TODO - onPrem: ON_PREM_INSTRUCTIONS, - elasticCloud: ELASTIC_CLOUD_INSTRUCTIONS, - onPremElasticCloud: ON_PREM_ELASTIC_CLOUD_INSTRUCTIONS + onPrem: createOnPremInstructions(), + elasticCloud: createElasticCloudInstructions(), + onPremElasticCloud: createOnPremElasticCloudInstructions(), }; } diff --git a/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js b/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js index 5b0ecbbaac2c70..6fb41ee0eb9d36 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js @@ -18,32 +18,37 @@ */ import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; -import { LOGSTASH_INSTRUCTIONS } from '../../../common/tutorials/logstash_instructions'; -import { COMMON_NETFLOW_INSTRUCTIONS } from './common_instructions'; +import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; +import { createCommonNetflowInstructions } from './common_instructions'; // TODO: compare with onPremElasticCloud and elasticCloud scenarios and extract out common bits -export const ON_PREM_INSTRUCTIONS = { - instructionSets: [ - { - title: 'Getting Started', - instructionVariants: [ - { - id: INSTRUCTION_VARIANT.OSX, - instructions: [ - ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX - ] - }, - { - id: INSTRUCTION_VARIANT.WINDOWS, - instructions: [ - ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS - ] - } - ] - } - ] -}; +export function createOnPremInstructions() { + const COMMON_NETFLOW_INSTRUCTIONS = createCommonNetflowInstructions(); + const LOGSTASH_INSTRUCTIONS = createLogstashInstructions(); + + return { + instructionSets: [ + { + title: 'Getting Started', + instructionVariants: [ + { + id: INSTRUCTION_VARIANT.OSX, + instructions: [ + ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX, + ], + }, + { + id: INSTRUCTION_VARIANT.WINDOWS, + instructions: [ + ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS, + ], + }, + ], + }, + ], + }; +} diff --git a/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js b/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js index 0e5cb74064f804..87f647882518f5 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js @@ -18,40 +18,47 @@ */ import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; -import { LOGSTASH_INSTRUCTIONS } from '../../../common/tutorials/logstash_instructions'; +import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; import { - TRYCLOUD_OPTION1, - TRYCLOUD_OPTION2 + createTrycloudOption1, + createTrycloudOption2, } from '../../../common/tutorials/onprem_cloud_instructions'; -import { COMMON_NETFLOW_INSTRUCTIONS } from './common_instructions'; +import { createCommonNetflowInstructions } from './common_instructions'; // TODO: compare with onPrem and elasticCloud scenarios and extract out common bits -export const ON_PREM_ELASTIC_CLOUD_INSTRUCTIONS = { - instructionSets: [ - { - title: 'Getting Started', - instructionVariants: [ - { - id: INSTRUCTION_VARIANT.OSX, - instructions: [ - TRYCLOUD_OPTION1, - TRYCLOUD_OPTION2, - ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM_ELASTIC_CLOUD.OSX, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX - ] - }, - { - id: INSTRUCTION_VARIANT.WINDOWS, - instructions: [ - TRYCLOUD_OPTION1, - TRYCLOUD_OPTION2, - ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM_ELASTIC_CLOUD.WINDOWS, - ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS - ] - } - ] - } - ] -}; +export function createOnPremElasticCloudInstructions() { + const COMMON_NETFLOW_INSTRUCTIONS = createCommonNetflowInstructions(); + const TRYCLOUD_OPTION1 = createTrycloudOption1(); + const TRYCLOUD_OPTION2 = createTrycloudOption2(); + const LOGSTASH_INSTRUCTIONS = createLogstashInstructions(); + + return { + instructionSets: [ + { + title: 'Getting Started', + instructionVariants: [ + { + id: INSTRUCTION_VARIANT.OSX, + instructions: [ + TRYCLOUD_OPTION1, + TRYCLOUD_OPTION2, + ...LOGSTASH_INSTRUCTIONS.INSTALL.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM_ELASTIC_CLOUD.OSX, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.OSX, + ], + }, + { + id: INSTRUCTION_VARIANT.WINDOWS, + instructions: [ + TRYCLOUD_OPTION1, + TRYCLOUD_OPTION2, + ...LOGSTASH_INSTRUCTIONS.INSTALL.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.CONFIG.ON_PREM_ELASTIC_CLOUD.WINDOWS, + ...COMMON_NETFLOW_INSTRUCTIONS.SETUP.WINDOWS, + ], + }, + ], + }, + ], + }; +} From 22d3bcf334412950f7fe5110c20febd485d652f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Tue, 28 Aug 2018 13:33:08 +0200 Subject: [PATCH 042/173] [docs] Import APM dashboards in 6.4+ (#22439) --- docs/apm/getting-started.asciidoc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/apm/getting-started.asciidoc b/docs/apm/getting-started.asciidoc index 2df3d5efa5f760..684c420c1e5f55 100644 --- a/docs/apm/getting-started.asciidoc +++ b/docs/apm/getting-started.asciidoc @@ -16,12 +16,7 @@ configuration is required. If you also use Elastic Stack for logging and server-level metrics, you can optionally import the APM dashboards that come with the APM Server. You can use these APM-specific visualizations to correlate APM data with other data sources. -To get the dashboards, run the following command on the APM server: - -[source,shell] ----------------------------------------------------------- -./apm-server setup ----------------------------------------------------------- +To get the dashboards, click the "Load Kibana objects" button at the bottom of the Getting Started guides for APM in Kibana. For more setup information, see {apm-get-started-ref}/index.html[Getting Started with APM]. From 6034cc7a6323653857f15bb27b8de9bbf192a6e7 Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Tue, 28 Aug 2018 14:17:55 +0200 Subject: [PATCH 043/173] Make `core` responsible for reading and merging of config files. Simplify legacy config adapter. (#21956) --- .../invalid_en_var_ref_config.yml | 1 - src/cli/serve/__fixtures__/one.yml | 2 - src/cli/serve/__fixtures__/two.yml | 2 - .../reload_logging_config.test.js | 4 +- src/cli/serve/read_yaml_config.js | 63 ------- src/cli/serve/read_yaml_config.test.js | 98 ---------- src/cli/serve/serve.js | 6 +- .../__fixtures__/en_var_ref_config.yml | 0 .../config/__tests__/__fixtures__/one.yml | 7 + .../config/__tests__/__fixtures__/two.yml | 7 + .../__snapshots__/read_config.test.ts.snap | 73 +++++++ .../config/__tests__/apply_argv.test.ts | 10 +- .../config/__tests__/config_service.test.ts | 32 ++-- .../__tests__/raw_config_service.test.ts | 76 +++++--- .../config/__tests__/read_config.test.ts | 65 +++++-- .../config/{raw_config.ts => config.ts} | 13 +- src/core/server/config/config_service.ts | 41 ++-- src/core/server/config/index.ts | 13 +- ...adapter.ts => object_to_config_adapter.ts} | 21 ++- src/core/server/config/raw_config_service.ts | 50 ++--- src/core/server/config/read_config.ts | 38 +++- src/core/server/http/https_redirect_server.ts | 18 +- src/core/server/index.ts | 6 +- .../__mocks__/legacy_config_mock.ts | 45 ----- .../legacy_platform_config.test.ts.snap | 74 -------- .../__tests__/legacy_platform_config.test.ts | 170 ----------------- ...gacy_object_to_config_adapter.test.ts.snap | 102 ++++++++++ .../legacy_object_to_config_adapter.test.ts | 178 ++++++++++++++++++ .../config/legacy_object_to_config_adapter.ts | 83 ++++++++ src/core/server/legacy_compat/index.ts | 18 +- .../legacy_compat/legacy_platform_config.ts | 147 --------------- src/core/server/root/__tests__/index.test.ts | 4 +- src/core/server/root/index.ts | 26 ++- src/server/config/schema.js | 4 - 34 files changed, 711 insertions(+), 786 deletions(-) delete mode 100644 src/cli/serve/__fixtures__/invalid_en_var_ref_config.yml delete mode 100644 src/cli/serve/__fixtures__/one.yml delete mode 100644 src/cli/serve/__fixtures__/two.yml delete mode 100644 src/cli/serve/read_yaml_config.js delete mode 100644 src/cli/serve/read_yaml_config.test.js rename src/{cli/serve => core/server/config/__tests__}/__fixtures__/en_var_ref_config.yml (100%) create mode 100644 src/core/server/config/__tests__/__fixtures__/one.yml create mode 100644 src/core/server/config/__tests__/__fixtures__/two.yml create mode 100644 src/core/server/config/__tests__/__snapshots__/read_config.test.ts.snap rename src/core/server/config/{raw_config.ts => config.ts} (80%) rename src/core/server/config/{object_to_raw_config_adapter.ts => object_to_config_adapter.ts} (75%) delete mode 100644 src/core/server/legacy_compat/__mocks__/legacy_config_mock.ts delete mode 100644 src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_config.test.ts.snap delete mode 100644 src/core/server/legacy_compat/__tests__/legacy_platform_config.test.ts create mode 100644 src/core/server/legacy_compat/config/__tests__/__snapshots__/legacy_object_to_config_adapter.test.ts.snap create mode 100644 src/core/server/legacy_compat/config/__tests__/legacy_object_to_config_adapter.test.ts create mode 100644 src/core/server/legacy_compat/config/legacy_object_to_config_adapter.ts delete mode 100644 src/core/server/legacy_compat/legacy_platform_config.ts diff --git a/src/cli/serve/__fixtures__/invalid_en_var_ref_config.yml b/src/cli/serve/__fixtures__/invalid_en_var_ref_config.yml deleted file mode 100644 index 23458124e5f0e3..00000000000000 --- a/src/cli/serve/__fixtures__/invalid_en_var_ref_config.yml +++ /dev/null @@ -1 +0,0 @@ -foo: "${KBN_NON_EXISTENT_ENV_VAR}" diff --git a/src/cli/serve/__fixtures__/one.yml b/src/cli/serve/__fixtures__/one.yml deleted file mode 100644 index e577d50638d5f9..00000000000000 --- a/src/cli/serve/__fixtures__/one.yml +++ /dev/null @@ -1,2 +0,0 @@ -foo: 1 -bar: true diff --git a/src/cli/serve/__fixtures__/two.yml b/src/cli/serve/__fixtures__/two.yml deleted file mode 100644 index aef807fcaebe97..00000000000000 --- a/src/cli/serve/__fixtures__/two.yml +++ /dev/null @@ -1,2 +0,0 @@ -foo: 2 -baz: bonkers diff --git a/src/cli/serve/integration_tests/reload_logging_config.test.js b/src/cli/serve/integration_tests/reload_logging_config.test.js index 100fccceadbac7..61e590f2b51d51 100644 --- a/src/cli/serve/integration_tests/reload_logging_config.test.js +++ b/src/cli/serve/integration_tests/reload_logging_config.test.js @@ -23,7 +23,7 @@ import { relative, resolve } from 'path'; import { safeDump } from 'js-yaml'; import es from 'event-stream'; import stripAnsi from 'strip-ansi'; -import { readYamlConfig } from '../read_yaml_config'; +import { getConfigFromFiles } from '../../../core/server/config'; const testConfigFile = follow('__fixtures__/reload_logging_config/kibana.test.yml'); const kibanaPath = follow('../../../../scripts/kibana.js'); @@ -33,7 +33,7 @@ function follow(file) { } function setLoggingJson(enabled) { - const conf = readYamlConfig(testConfigFile); + const conf = getConfigFromFiles([testConfigFile]); conf.logging = conf.logging || {}; conf.logging.json = enabled; diff --git a/src/cli/serve/read_yaml_config.js b/src/cli/serve/read_yaml_config.js deleted file mode 100644 index f2ad397abf7c39..00000000000000 --- a/src/cli/serve/read_yaml_config.js +++ /dev/null @@ -1,63 +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 { isArray, isPlainObject, forOwn, set, transform, isString } from 'lodash'; -import { readFileSync as read } from 'fs'; -import { safeLoad } from 'js-yaml'; - -function replaceEnvVarRefs(val) { - return val.replace(/\$\{(\w+)\}/g, (match, envVarName) => { - if (process.env[envVarName] !== undefined) { - return process.env[envVarName]; - } else { - throw new Error(`Unknown environment variable referenced in config : ${envVarName}`); - } - }); -} - -export function merge(sources) { - return transform(sources, (merged, source) => { - forOwn(source, function apply(val, key) { - if (isPlainObject(val)) { - forOwn(val, function (subVal, subKey) { - apply(subVal, key + '.' + subKey); - }); - return; - } - - if (isArray(val)) { - set(merged, key, []); - val.forEach((subVal, i) => apply(subVal, key + '.' + i)); - return; - } - - if (isString(val)) { - val = replaceEnvVarRefs(val); - } - - set(merged, key, val); - }); - }, {}); -} - -export function readYamlConfig(paths) { - const files = [].concat(paths || []); - const yamls = files.map(path => safeLoad(read(path, 'utf8'))); - return merge(yamls); -} diff --git a/src/cli/serve/read_yaml_config.test.js b/src/cli/serve/read_yaml_config.test.js deleted file mode 100644 index 09898a25c45b00..00000000000000 --- a/src/cli/serve/read_yaml_config.test.js +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { relative, resolve } from 'path'; -import { readYamlConfig } from './read_yaml_config'; - -function fixture(name) { - return resolve(__dirname, '__fixtures__', name); -} - -describe('cli/serve/read_yaml_config', function () { - it('reads a single config file', function () { - const config = readYamlConfig(fixture('one.yml')); - - expect(config).toEqual({ - foo: 1, - bar: true, - }); - }); - - it('reads and merged multiple config file', function () { - const config = readYamlConfig([ - fixture('one.yml'), - fixture('two.yml') - ]); - - expect(config).toEqual({ - foo: 2, - bar: true, - baz: 'bonkers' - }); - }); - - it('should inject an environment variable value when setting a value with ${ENV_VAR}', function () { - process.env.KBN_ENV_VAR1 = 'val1'; - process.env.KBN_ENV_VAR2 = 'val2'; - const config = readYamlConfig([ fixture('en_var_ref_config.yml') ]); - - expect(config).toEqual({ - foo: 1, - bar: 'pre-val1-mid-val2-post', - elasticsearch: { - requestHeadersWhitelist: ['val1', 'val2'] - } - }); - }); - - it('should thow an exception when referenced environment variable in a config value does not exist', function () { - expect(function () { - readYamlConfig([ fixture('invalid_en_var_ref_config.yml') ]); - }).toThrow(); - }); - - describe('different cwd()', function () { - const originalCwd = process.cwd(); - const tempCwd = resolve(__dirname); - - beforeAll(() => process.chdir(tempCwd)); - afterAll(() => process.chdir(originalCwd)); - - it('resolves relative files based on the cwd', function () { - const relativePath = relative(tempCwd, fixture('one.yml')); - const config = readYamlConfig(relativePath); - expect(config).toEqual({ - foo: 1, - bar: true, - }); - }); - - it('fails to load relative paths, not found because of the cwd', function () { - expect(function () { - const relativePath = relative( - resolve(__dirname, '../../'), - fixture('one.yml') - ); - - readYamlConfig(relativePath); - }).toThrowError(/ENOENT/); - }); - }); - -}); diff --git a/src/cli/serve/serve.js b/src/cli/serve/serve.js index ecb0ae3a53dc55..08495566d845ed 100644 --- a/src/cli/serve/serve.js +++ b/src/cli/serve/serve.js @@ -25,7 +25,7 @@ import { resolve } from 'path'; import { fromRoot } from '../../utils'; import { getConfig } from '../../server/path'; import { Config } from '../../server/config/config'; -import { readYamlConfig } from './read_yaml_config'; +import { getConfigFromFiles } from '../../core/server/config'; import { readKeystore } from './read_keystore'; import { transformDeprecations } from '../../server/config/transform_deprecations'; @@ -80,7 +80,7 @@ const pluginDirCollector = pathCollector(); const pluginPathCollector = pathCollector(); function readServerSettings(opts, extraCliOptions) { - const settings = readYamlConfig(opts.config); + const settings = getConfigFromFiles([].concat(opts.config || [])); const set = _.partial(_.set, settings); const get = _.partial(_.get, settings); const has = _.partial(_.has, settings); @@ -256,7 +256,7 @@ export default function (program) { // If new platform config subscription is active, let's notify it with the updated config. if (kbnServer.newPlatform) { - kbnServer.newPlatform.updateConfig(config); + kbnServer.newPlatform.updateConfig(config.get()); } }); diff --git a/src/cli/serve/__fixtures__/en_var_ref_config.yml b/src/core/server/config/__tests__/__fixtures__/en_var_ref_config.yml similarity index 100% rename from src/cli/serve/__fixtures__/en_var_ref_config.yml rename to src/core/server/config/__tests__/__fixtures__/en_var_ref_config.yml diff --git a/src/core/server/config/__tests__/__fixtures__/one.yml b/src/core/server/config/__tests__/__fixtures__/one.yml new file mode 100644 index 00000000000000..1dbe11095b19ae --- /dev/null +++ b/src/core/server/config/__tests__/__fixtures__/one.yml @@ -0,0 +1,7 @@ +foo: 1 +bar: true +xyz: ['1', '2'] +abc: + def: test + qwe: 1 +pom.bom: 3 diff --git a/src/core/server/config/__tests__/__fixtures__/two.yml b/src/core/server/config/__tests__/__fixtures__/two.yml new file mode 100644 index 00000000000000..2fd2963e5668cb --- /dev/null +++ b/src/core/server/config/__tests__/__fixtures__/two.yml @@ -0,0 +1,7 @@ +foo: 2 +baz: bonkers +xyz: ['3', '4'] +abc: + ghi: test2 + qwe: 2 +pom.mob: 4 diff --git a/src/core/server/config/__tests__/__snapshots__/read_config.test.ts.snap b/src/core/server/config/__tests__/__snapshots__/read_config.test.ts.snap new file mode 100644 index 00000000000000..c83e902d8d098f --- /dev/null +++ b/src/core/server/config/__tests__/__snapshots__/read_config.test.ts.snap @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`different cwd() resolves relative files based on the cwd 1`] = ` +Object { + "abc": Object { + "def": "test", + "qwe": 1, + }, + "bar": true, + "foo": 1, + "pom": Object { + "bom": 3, + }, + "xyz": Array [ + "1", + "2", + ], +} +`; + +exports[`reads and merges multiple yaml files from file system and parses to json 1`] = ` +Object { + "abc": Object { + "def": "test", + "ghi": "test2", + "qwe": 2, + }, + "bar": true, + "baz": "bonkers", + "foo": 2, + "pom": Object { + "bom": 3, + "mob": 4, + }, + "xyz": Array [ + "3", + "4", + ], +} +`; + +exports[`reads single yaml from file system and parses to json 1`] = ` +Object { + "pid": Object { + "enabled": true, + "file": "/var/run/kibana.pid", + }, +} +`; + +exports[`returns a deep object 1`] = ` +Object { + "pid": Object { + "enabled": true, + "file": "/var/run/kibana.pid", + }, +} +`; + +exports[`should inject an environment variable value when setting a value with \${ENV_VAR} 1`] = ` +Object { + "bar": "pre-val1-mid-val2-post", + "elasticsearch": Object { + "requestHeadersWhitelist": Array [ + "val1", + "val2", + ], + }, + "foo": 1, +} +`; + +exports[`should throw an exception when referenced environment variable in a config value does not exist 1`] = `"Unknown environment variable referenced in config : KBN_ENV_VAR1"`; diff --git a/src/core/server/config/__tests__/apply_argv.test.ts b/src/core/server/config/__tests__/apply_argv.test.ts index 9fd36b308f049e..7908dd24680212 100644 --- a/src/core/server/config/__tests__/apply_argv.test.ts +++ b/src/core/server/config/__tests__/apply_argv.test.ts @@ -17,7 +17,7 @@ * under the License. */ -import { ObjectToRawConfigAdapter, RawConfig } from '..'; +import { Config, ObjectToConfigAdapter } from '..'; /** * Overrides some config values with ones from argv. @@ -25,7 +25,7 @@ import { ObjectToRawConfigAdapter, RawConfig } from '..'; * @param config `RawConfig` instance to update config values for. * @param argv Argv object with key/value pairs. */ -export function overrideConfigWithArgv(config: RawConfig, argv: { [key: string]: any }) { +export function overrideConfigWithArgv(config: Config, argv: { [key: string]: any }) { if (argv.port != null) { config.set(['server', 'port'], argv.port); } @@ -42,7 +42,7 @@ test('port', () => { port: 123, }; - const config = new ObjectToRawConfigAdapter({ + const config = new ObjectToConfigAdapter({ server: { port: 456 }, }); @@ -56,7 +56,7 @@ test('host', () => { host: 'example.org', }; - const config = new ObjectToRawConfigAdapter({ + const config = new ObjectToConfigAdapter({ server: { host: 'org.example' }, }); @@ -70,7 +70,7 @@ test('ignores unknown', () => { unknown: 'some value', }; - const config = new ObjectToRawConfigAdapter({}); + const config = new ObjectToConfigAdapter({}); jest.spyOn(config, 'set'); overrideConfigWithArgv(config, argv); diff --git a/src/core/server/config/__tests__/config_service.test.ts b/src/core/server/config/__tests__/config_service.test.ts index 2dbf99587f3349..c41ae3ccd8b752 100644 --- a/src/core/server/config/__tests__/config_service.test.ts +++ b/src/core/server/config/__tests__/config_service.test.ts @@ -27,7 +27,7 @@ jest.mock('../../../../utils/package_json', () => ({ pkg: mockPackage })); import { schema, Type, TypeOf } from '../schema'; -import { ConfigService, ObjectToRawConfigAdapter } from '..'; +import { ConfigService, ObjectToConfigAdapter } from '..'; import { logger } from '../../logging/__mocks__'; import { Env } from '../env'; import { getEnvOptions } from './__mocks__/env'; @@ -36,7 +36,7 @@ const emptyArgv = getEnvOptions(); const defaultEnv = new Env('/kibana', emptyArgv); test('returns config at path as observable', async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ key: 'foo' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ key: 'foo' })); const configService = new ConfigService(config$, defaultEnv, logger); const configs = configService.atPath('key', ExampleClassWithStringSchema); @@ -48,7 +48,7 @@ test('returns config at path as observable', async () => { test('throws if config at path does not match schema', async () => { expect.assertions(1); - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ key: 123 })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ key: 123 })); const configService = new ConfigService(config$, defaultEnv, logger); const configs = configService.atPath('key', ExampleClassWithStringSchema); @@ -61,7 +61,7 @@ test('throws if config at path does not match schema', async () => { }); test("returns undefined if fetching optional config at a path that doesn't exist", async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ foo: 'bar' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ foo: 'bar' })); const configService = new ConfigService(config$, defaultEnv, logger); const configs = configService.optionalAtPath('unique-name', ExampleClassWithStringSchema); @@ -71,7 +71,7 @@ test("returns undefined if fetching optional config at a path that doesn't exist }); test('returns observable config at optional path if it exists', async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ value: 'bar' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ value: 'bar' })); const configService = new ConfigService(config$, defaultEnv, logger); const configs = configService.optionalAtPath('value', ExampleClassWithStringSchema); @@ -82,7 +82,7 @@ test('returns observable config at optional path if it exists', async () => { }); test("does not push new configs when reloading if config at path hasn't changed", async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ key: 'value' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ key: 'value' })); const configService = new ConfigService(config$, defaultEnv, logger); const valuesReceived: any[] = []; @@ -90,13 +90,13 @@ test("does not push new configs when reloading if config at path hasn't changed" valuesReceived.push(config.value); }); - config$.next(new ObjectToRawConfigAdapter({ key: 'value' })); + config$.next(new ObjectToConfigAdapter({ key: 'value' })); expect(valuesReceived).toEqual(['value']); }); test('pushes new config when reloading and config at path has changed', async () => { - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ key: 'value' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ key: 'value' })); const configService = new ConfigService(config$, defaultEnv, logger); const valuesReceived: any[] = []; @@ -104,7 +104,7 @@ test('pushes new config when reloading and config at path has changed', async () valuesReceived.push(config.value); }); - config$.next(new ObjectToRawConfigAdapter({ key: 'new value' })); + config$.next(new ObjectToConfigAdapter({ key: 'new value' })); expect(valuesReceived).toEqual(['value', 'new value']); }); @@ -114,7 +114,7 @@ test("throws error if config class does not implement 'schema'", async () => { class ExampleClass {} - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ key: 'value' })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ key: 'value' })); const configService = new ConfigService(config$, defaultEnv, logger); const configs = configService.atPath('key', ExampleClass as any); @@ -147,7 +147,7 @@ test('tracks unhandled paths', async () => { }, }; - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter(initialConfig)); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter(initialConfig)); const configService = new ConfigService(config$, defaultEnv, logger); configService.atPath('foo', createClassWithSchema(schema.string())); @@ -178,7 +178,7 @@ test('correctly passes context', async () => { const env = new Env('/kibana', getEnvOptions()); - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter({ foo: {} })); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter({ foo: {} })); const configService = new ConfigService(config$, env, logger); const configs = configService.atPath( 'foo', @@ -213,7 +213,7 @@ test('handles enabled path, but only marks the enabled path as used', async () = }, }; - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter(initialConfig)); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter(initialConfig)); const configService = new ConfigService(config$, defaultEnv, logger); const isEnabled = await configService.isEnabledAtPath('pid'); @@ -231,7 +231,7 @@ test('handles enabled path when path is array', async () => { }, }; - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter(initialConfig)); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter(initialConfig)); const configService = new ConfigService(config$, defaultEnv, logger); const isEnabled = await configService.isEnabledAtPath(['pid']); @@ -249,7 +249,7 @@ test('handles disabled path and marks config as used', async () => { }, }; - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter(initialConfig)); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter(initialConfig)); const configService = new ConfigService(config$, defaultEnv, logger); const isEnabled = await configService.isEnabledAtPath('pid'); @@ -262,7 +262,7 @@ test('handles disabled path and marks config as used', async () => { test('treats config as enabled if config path is not present in config', async () => { const initialConfig = {}; - const config$ = new BehaviorSubject(new ObjectToRawConfigAdapter(initialConfig)); + const config$ = new BehaviorSubject(new ObjectToConfigAdapter(initialConfig)); const configService = new ConfigService(config$, defaultEnv, logger); const isEnabled = await configService.isEnabledAtPath('pid'); diff --git a/src/core/server/config/__tests__/raw_config_service.test.ts b/src/core/server/config/__tests__/raw_config_service.test.ts index baa4d2f8fe92e2..66cc31bc77774f 100644 --- a/src/core/server/config/__tests__/raw_config_service.test.ts +++ b/src/core/server/config/__tests__/raw_config_service.test.ts @@ -17,49 +17,73 @@ * under the License. */ -const mockGetConfigFromFile = jest.fn(); +const mockGetConfigFromFiles = jest.fn(); jest.mock('../read_config', () => ({ - getConfigFromFile: mockGetConfigFromFile, + getConfigFromFiles: mockGetConfigFromFiles, })); import { first } from 'rxjs/operators'; import { RawConfigService } from '../raw_config_service'; const configFile = '/config/kibana.yml'; +const anotherConfigFile = '/config/kibana.dev.yml'; beforeEach(() => { - mockGetConfigFromFile.mockReset(); - mockGetConfigFromFile.mockImplementation(() => ({})); + mockGetConfigFromFiles.mockReset(); + mockGetConfigFromFiles.mockImplementation(() => ({})); }); -test('loads raw config when started', () => { - const configService = new RawConfigService(configFile); +test('loads single raw config when started', () => { + const configService = new RawConfigService([configFile]); configService.loadConfig(); - expect(mockGetConfigFromFile).toHaveBeenCalledTimes(1); - expect(mockGetConfigFromFile).toHaveBeenLastCalledWith(configFile); + expect(mockGetConfigFromFiles).toHaveBeenCalledTimes(1); + expect(mockGetConfigFromFiles).toHaveBeenLastCalledWith([configFile]); }); -test('re-reads the config when reloading', () => { - const configService = new RawConfigService(configFile); +test('loads multiple raw configs when started', () => { + const configService = new RawConfigService([configFile, anotherConfigFile]); configService.loadConfig(); - mockGetConfigFromFile.mockClear(); - mockGetConfigFromFile.mockImplementation(() => ({ foo: 'bar' })); + expect(mockGetConfigFromFiles).toHaveBeenCalledTimes(1); + expect(mockGetConfigFromFiles).toHaveBeenLastCalledWith([configFile, anotherConfigFile]); +}); + +test('re-reads single config when reloading', () => { + const configService = new RawConfigService([configFile]); + + configService.loadConfig(); + + mockGetConfigFromFiles.mockClear(); + mockGetConfigFromFiles.mockImplementation(() => ({ foo: 'bar' })); + + configService.reloadConfig(); + + expect(mockGetConfigFromFiles).toHaveBeenCalledTimes(1); + expect(mockGetConfigFromFiles).toHaveBeenLastCalledWith([configFile]); +}); + +test('re-reads multiple configs when reloading', () => { + const configService = new RawConfigService([configFile, anotherConfigFile]); + + configService.loadConfig(); + + mockGetConfigFromFiles.mockClear(); + mockGetConfigFromFiles.mockImplementation(() => ({ foo: 'bar' })); configService.reloadConfig(); - expect(mockGetConfigFromFile).toHaveBeenCalledTimes(1); - expect(mockGetConfigFromFile).toHaveBeenLastCalledWith(configFile); + expect(mockGetConfigFromFiles).toHaveBeenCalledTimes(1); + expect(mockGetConfigFromFiles).toHaveBeenLastCalledWith([configFile, anotherConfigFile]); }); test('returns config at path as observable', async () => { - mockGetConfigFromFile.mockImplementation(() => ({ key: 'value' })); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'value' })); - const configService = new RawConfigService(configFile); + const configService = new RawConfigService([configFile]); configService.loadConfig(); @@ -73,9 +97,9 @@ test('returns config at path as observable', async () => { }); test("does not push new configs when reloading if config at path hasn't changed", async () => { - mockGetConfigFromFile.mockImplementation(() => ({ key: 'value' })); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'value' })); - const configService = new RawConfigService(configFile); + const configService = new RawConfigService([configFile]); configService.loadConfig(); @@ -84,8 +108,8 @@ test("does not push new configs when reloading if config at path hasn't changed" valuesReceived.push(config); }); - mockGetConfigFromFile.mockClear(); - mockGetConfigFromFile.mockImplementation(() => ({ key: 'value' })); + mockGetConfigFromFiles.mockClear(); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'value' })); configService.reloadConfig(); @@ -95,9 +119,9 @@ test("does not push new configs when reloading if config at path hasn't changed" }); test('pushes new config when reloading and config at path has changed', async () => { - mockGetConfigFromFile.mockImplementation(() => ({ key: 'value' })); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'value' })); - const configService = new RawConfigService(configFile); + const configService = new RawConfigService([configFile]); configService.loadConfig(); @@ -106,8 +130,8 @@ test('pushes new config when reloading and config at path has changed', async () valuesReceived.push(config); }); - mockGetConfigFromFile.mockClear(); - mockGetConfigFromFile.mockImplementation(() => ({ key: 'new value' })); + mockGetConfigFromFiles.mockClear(); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'new value' })); configService.reloadConfig(); @@ -121,9 +145,9 @@ test('pushes new config when reloading and config at path has changed', async () test('completes config observables when stopped', done => { expect.assertions(0); - mockGetConfigFromFile.mockImplementation(() => ({ key: 'value' })); + mockGetConfigFromFiles.mockImplementation(() => ({ key: 'value' })); - const configService = new RawConfigService(configFile); + const configService = new RawConfigService([configFile]); configService.loadConfig(); diff --git a/src/core/server/config/__tests__/read_config.test.ts b/src/core/server/config/__tests__/read_config.test.ts index 74683f4227929f..b9aa3871b17947 100644 --- a/src/core/server/config/__tests__/read_config.test.ts +++ b/src/core/server/config/__tests__/read_config.test.ts @@ -17,28 +17,63 @@ * under the License. */ -import { getConfigFromFile } from '../read_config'; +import { relative, resolve } from 'path'; +import { getConfigFromFiles } from '../read_config'; const fixtureFile = (name: string) => `${__dirname}/__fixtures__/${name}`; -test('reads yaml from file system and parses to json', () => { - const config = getConfigFromFile(fixtureFile('config.yml')); +test('reads single yaml from file system and parses to json', () => { + const config = getConfigFromFiles([fixtureFile('config.yml')]); - expect(config).toEqual({ - pid: { - enabled: true, - file: '/var/run/kibana.pid', - }, - }); + expect(config).toMatchSnapshot(); }); test('returns a deep object', () => { - const config = getConfigFromFile(fixtureFile('/config_flat.yml')); + const config = getConfigFromFiles([fixtureFile('/config_flat.yml')]); + + expect(config).toMatchSnapshot(); +}); + +test('reads and merges multiple yaml files from file system and parses to json', () => { + const config = getConfigFromFiles([fixtureFile('/one.yml'), fixtureFile('/two.yml')]); + + expect(config).toMatchSnapshot(); +}); + +test('should inject an environment variable value when setting a value with ${ENV_VAR}', () => { + process.env.KBN_ENV_VAR1 = 'val1'; + process.env.KBN_ENV_VAR2 = 'val2'; + + const config = getConfigFromFiles([fixtureFile('/en_var_ref_config.yml')]); + + delete process.env.KBN_ENV_VAR1; + delete process.env.KBN_ENV_VAR2; + + expect(config).toMatchSnapshot(); +}); + +test('should throw an exception when referenced environment variable in a config value does not exist', () => { + expect(() => + getConfigFromFiles([fixtureFile('/en_var_ref_config.yml')]) + ).toThrowErrorMatchingSnapshot(); +}); + +describe('different cwd()', () => { + const originalCwd = process.cwd(); + const tempCwd = resolve(__dirname); + + beforeAll(() => process.chdir(tempCwd)); + afterAll(() => process.chdir(originalCwd)); + + test('resolves relative files based on the cwd', () => { + const relativePath = relative(tempCwd, fixtureFile('/one.yml')); + const config = getConfigFromFiles([relativePath]); + + expect(config).toMatchSnapshot(); + }); - expect(config).toEqual({ - pid: { - enabled: true, - file: '/var/run/kibana.pid', - }, + test('fails to load relative paths, not found because of the cwd', () => { + const relativePath = relative(resolve(__dirname, '../../'), fixtureFile('/one.yml')); + expect(() => getConfigFromFiles([relativePath])).toThrowError(/ENOENT/); }); }); diff --git a/src/core/server/config/raw_config.ts b/src/core/server/config/config.ts similarity index 80% rename from src/core/server/config/raw_config.ts rename to src/core/server/config/config.ts index c87a6fe5768a5a..07a3a7be81dd91 100644 --- a/src/core/server/config/raw_config.ts +++ b/src/core/server/config/config.ts @@ -17,12 +17,12 @@ * under the License. */ -import { ConfigPath } from './config_service'; +export type ConfigPath = string | string[]; /** - * Represents raw config store. + * Represents config store. */ -export interface RawConfig { +export interface Config { /** * Returns whether or not there is a config value located at the specified path. * @param configPath Path to locate value at. @@ -49,4 +49,11 @@ export interface RawConfig { * @returns List of the string config paths. */ getFlattenedPaths(): string[]; + + /** + * Returns a full copy of the underlying raw config object. Should be used ONLY + * in extreme cases when there is no other better way, e.g. bridging with the + * "legacy" systems that consume and process config in a different way. + */ + toRaw(): Record; } diff --git a/src/core/server/config/config_service.ts b/src/core/server/config/config_service.ts index bd839e51cbcf56..a3314d5657141e 100644 --- a/src/core/server/config/config_service.ts +++ b/src/core/server/config/config_service.ts @@ -21,14 +21,10 @@ import { isEqual } from 'lodash'; import { Observable } from 'rxjs'; import { distinctUntilChanged, first, map } from 'rxjs/operators'; +import { Config, ConfigPath, ConfigWithSchema, Env } from '.'; import { Logger, LoggerFactory } from '../logging'; -import { ConfigWithSchema } from './config_with_schema'; -import { Env } from './env'; -import { RawConfig } from './raw_config'; import { Type } from './schema'; -export type ConfigPath = string | string[]; - export class ConfigService { private readonly log: Logger; @@ -39,7 +35,7 @@ export class ConfigService { private readonly handledPaths: ConfigPath[] = []; constructor( - private readonly config$: Observable, + private readonly config$: Observable, readonly env: Env, logger: LoggerFactory ) { @@ -62,12 +58,12 @@ export class ConfigService { * @param ConfigClass A class (not an instance of a class) that contains a * static `schema` that we validate the config at the given `path` against. */ - public atPath, Config>( + public atPath, TConfig>( path: ConfigPath, - ConfigClass: ConfigWithSchema + ConfigClass: ConfigWithSchema ) { - return this.getDistinctRawConfig(path).pipe( - map(rawConfig => this.createConfig(path, rawConfig, ConfigClass)) + return this.getDistinctConfig(path).pipe( + map(config => this.createConfig(path, config, ConfigClass)) ); } @@ -77,14 +73,13 @@ export class ConfigService { * * @see atPath */ - public optionalAtPath, Config>( + public optionalAtPath, TConfig>( path: ConfigPath, - ConfigClass: ConfigWithSchema + ConfigClass: ConfigWithSchema ) { - return this.getDistinctRawConfig(path).pipe( + return this.getDistinctConfig(path).pipe( map( - rawConfig => - rawConfig === undefined ? undefined : this.createConfig(path, rawConfig, ConfigClass) + config => (config === undefined ? undefined : this.createConfig(path, config, ConfigClass)) ) ); } @@ -93,13 +88,11 @@ export class ConfigService { const enabledPath = createPluginEnabledPath(path); const config = await this.config$.pipe(first()).toPromise(); - if (!config.has(enabledPath)) { return true; } const isEnabled = config.get(enabledPath); - if (isEnabled === false) { // If the plugin is _not_ enabled, we mark the entire plugin path as // handled, as it's expected that it won't be used. @@ -121,10 +114,10 @@ export class ConfigService { return config.getFlattenedPaths().filter(path => !isPathHandled(path, handledPaths)); } - private createConfig, Config>( + private createConfig, TConfig>( path: ConfigPath, - rawConfig: {}, - ConfigClass: ConfigWithSchema + config: Record, + ConfigClass: ConfigWithSchema ) { const namespace = Array.isArray(path) ? path.join('.') : path; @@ -138,8 +131,8 @@ export class ConfigService { ); } - const config = ConfigClass.schema.validate( - rawConfig, + const validatedConfig = ConfigClass.schema.validate( + config, { dev: this.env.mode.dev, prod: this.env.mode.prod, @@ -147,10 +140,10 @@ export class ConfigService { }, namespace ); - return new ConfigClass(config, this.env); + return new ConfigClass(validatedConfig, this.env); } - private getDistinctRawConfig(path: ConfigPath) { + private getDistinctConfig(path: ConfigPath) { this.markAsHandled(path); return this.config$.pipe(map(config => config.get(path)), distinctUntilChanged(isEqual)); diff --git a/src/core/server/config/index.ts b/src/core/server/config/index.ts index 030fdca252d33d..a5f535d12db1ee 100644 --- a/src/core/server/config/index.ts +++ b/src/core/server/config/index.ts @@ -17,18 +17,11 @@ * under the License. */ -/** - * This is a name of configuration node that is specifically dedicated to - * the configuration values used by the new platform only. Eventually all - * its nested values will be migrated to the stable config and this node - * will be deprecated. - */ -export const NEW_PLATFORM_CONFIG_ROOT = '__newPlatform'; - export { ConfigService } from './config_service'; export { RawConfigService } from './raw_config_service'; -export { RawConfig } from './raw_config'; +export { Config, ConfigPath } from './config'; /** @internal */ -export { ObjectToRawConfigAdapter } from './object_to_raw_config_adapter'; +export { ObjectToConfigAdapter } from './object_to_config_adapter'; export { Env } from './env'; export { ConfigWithSchema } from './config_with_schema'; +export { getConfigFromFiles } from './read_config'; diff --git a/src/core/server/config/object_to_raw_config_adapter.ts b/src/core/server/config/object_to_config_adapter.ts similarity index 75% rename from src/core/server/config/object_to_raw_config_adapter.ts rename to src/core/server/config/object_to_config_adapter.ts index 3abd73f01fcb9a..b6ec7726035656 100644 --- a/src/core/server/config/object_to_raw_config_adapter.ts +++ b/src/core/server/config/object_to_config_adapter.ts @@ -17,32 +17,35 @@ * under the License. */ -import { get, has, set } from 'lodash'; +import { cloneDeep, get, has, set } from 'lodash'; -import { ConfigPath } from './config_service'; -import { RawConfig } from './raw_config'; +import { Config, ConfigPath } from './'; /** * Allows plain javascript object to behave like `RawConfig` instance. * @internal */ -export class ObjectToRawConfigAdapter implements RawConfig { - constructor(private readonly rawValue: { [key: string]: any }) {} +export class ObjectToConfigAdapter implements Config { + constructor(private readonly rawConfig: Record) {} public has(configPath: ConfigPath) { - return has(this.rawValue, configPath); + return has(this.rawConfig, configPath); } public get(configPath: ConfigPath) { - return get(this.rawValue, configPath); + return get(this.rawConfig, configPath); } public set(configPath: ConfigPath, value: any) { - set(this.rawValue, configPath, value); + set(this.rawConfig, configPath, value); } public getFlattenedPaths() { - return [...flattenObjectKeys(this.rawValue)]; + return [...flattenObjectKeys(this.rawConfig)]; + } + + public toRaw() { + return cloneDeep(this.rawConfig); } } diff --git a/src/core/server/config/raw_config_service.ts b/src/core/server/config/raw_config_service.ts index ae1b99fd42650b..870defdb5bc03b 100644 --- a/src/core/server/config/raw_config_service.ts +++ b/src/core/server/config/raw_config_service.ts @@ -17,52 +17,41 @@ * under the License. */ -import { isEqual, isPlainObject } from 'lodash'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { distinctUntilChanged, filter, map } from 'rxjs/operators'; +import { cloneDeep, isEqual, isPlainObject } from 'lodash'; +import { Observable, ReplaySubject } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; import typeDetect from 'type-detect'; -import { ObjectToRawConfigAdapter } from './object_to_raw_config_adapter'; -import { RawConfig } from './raw_config'; -import { getConfigFromFile } from './read_config'; - -// Used to indicate that no config has been received yet -const notRead = Symbol('config not yet read'); +import { Config } from './config'; +import { ObjectToConfigAdapter } from './object_to_config_adapter'; +import { getConfigFromFiles } from './read_config'; export class RawConfigService { /** - * The stream of configs read from the config file. Will be the symbol - * `notRead` before the config is initially read, and after that it can - * potentially be `null` for an empty yaml file. + * The stream of configs read from the config file. * * This is the _raw_ config before any overrides are applied. - * - * As we have a notion of a _current_ config we rely on a BehaviorSubject so - * every new subscription will immediately receive the current config. */ - private readonly rawConfigFromFile$ = new BehaviorSubject(notRead); + private readonly rawConfigFromFile$: ReplaySubject> = new ReplaySubject(1); - private readonly config$: Observable; + private readonly config$: Observable; - constructor(readonly configFile: string) { + constructor( + readonly configFiles: ReadonlyArray, + configAdapter: (rawConfig: Record) => Config = rawConfig => + new ObjectToConfigAdapter(rawConfig) + ) { this.config$ = this.rawConfigFromFile$.pipe( - filter(rawConfig => rawConfig !== notRead), + // We only want to update the config if there are changes to it. + distinctUntilChanged(isEqual), map(rawConfig => { - // If the raw config is null, e.g. if empty config file, we default to - // an empty config - if (rawConfig == null) { - return new ObjectToRawConfigAdapter({}); - } - if (isPlainObject(rawConfig)) { // TODO Make config consistent, e.g. handle dots in keys - return new ObjectToRawConfigAdapter(rawConfig); + return configAdapter(cloneDeep(rawConfig)); } throw new Error(`the raw config must be an object, got [${typeDetect(rawConfig)}]`); - }), - // We only want to update the config if there are changes to it - distinctUntilChanged(isEqual) + }) ); } @@ -70,8 +59,7 @@ export class RawConfigService { * Read the initial Kibana config. */ public loadConfig() { - const config = getConfigFromFile(this.configFile); - this.rawConfigFromFile$.next(config); + this.rawConfigFromFile$.next(getConfigFromFiles(this.configFiles)); } public stop() { diff --git a/src/core/server/config/read_config.ts b/src/core/server/config/read_config.ts index c1b8ce930af2e7..f468c08ec559b9 100644 --- a/src/core/server/config/read_config.ts +++ b/src/core/server/config/read_config.ts @@ -20,11 +20,43 @@ import { readFileSync } from 'fs'; import { safeLoad } from 'js-yaml'; +import { isPlainObject, set } from 'lodash'; import { ensureDeepObject } from './ensure_deep_object'; const readYaml = (path: string) => safeLoad(readFileSync(path, 'utf8')); -export const getConfigFromFile = (configFile: string) => { - const yaml = readYaml(configFile); - return yaml == null ? yaml : ensureDeepObject(yaml); +function replaceEnvVarRefs(val: string) { + return val.replace(/\$\{(\w+)\}/g, (match, envVarName) => { + const envVarValue = process.env[envVarName]; + if (envVarValue !== undefined) { + return envVarValue; + } + + throw new Error(`Unknown environment variable referenced in config : ${envVarName}`); + }); +} + +function merge(target: Record, value: any, key?: string) { + if (isPlainObject(value) || Array.isArray(value)) { + for (const [subKey, subVal] of Object.entries(value)) { + merge(target, subVal, key ? `${key}.${subKey}` : subKey); + } + } else if (key !== undefined) { + set(target, key, typeof value === 'string' ? replaceEnvVarRefs(value) : value); + } + + return target; +} + +export const getConfigFromFiles = (configFiles: ReadonlyArray) => { + let mergedYaml = {}; + + for (const configFile of configFiles) { + const yaml = readYaml(configFile); + if (yaml !== null) { + mergedYaml = merge(mergedYaml, yaml); + } + } + + return ensureDeepObject(mergedYaml); }; diff --git a/src/core/server/http/https_redirect_server.ts b/src/core/server/http/https_redirect_server.ts index 9a77c63f1b85b1..b2664c5e24b550 100644 --- a/src/core/server/http/https_redirect_server.ts +++ b/src/core/server/http/https_redirect_server.ts @@ -30,6 +30,8 @@ export class HttpsRedirectServer { constructor(private readonly log: Logger) {} public async start(config: HttpConfig) { + this.log.debug('starting http --> https redirect server'); + if (!config.ssl.enabled || config.ssl.redirectHttpFromPort === undefined) { throw new Error( 'Redirect server cannot be started when [ssl.enabled] is set to `false`' + @@ -37,10 +39,6 @@ export class HttpsRedirectServer { ); } - this.log.info( - `starting HTTP --> HTTPS redirect server [${config.host}:${config.ssl.redirectHttpFromPort}]` - ); - // Redirect server is configured in the same way as any other HTTP server // within the platform with the only exception that it should always be a // plain HTTP server, so we just ignore `tls` part of options. @@ -65,6 +63,7 @@ export class HttpsRedirectServer { try { await this.server.start(); + this.log.debug(`http --> https redirect server running at ${this.server.info.uri}`); } catch (err) { if (err.code === 'EADDRINUSE') { throw new Error( @@ -79,11 +78,12 @@ export class HttpsRedirectServer { } public async stop() { - this.log.info('stopping HTTPS redirect server'); - - if (this.server !== undefined) { - await this.server.stop(); - this.server = undefined; + if (this.server === undefined) { + return; } + + this.log.debug('stopping http --> https redirect server'); + await this.server.stop(); + this.server = undefined; } } diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 27d9a12081897b..7d55670239f5e9 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -43,7 +43,11 @@ export class Server { const unhandledConfigPaths = await this.configService.getUnusedPaths(); if (unhandledConfigPaths.length > 0) { - throw new Error(`some config paths are not handled: ${JSON.stringify(unhandledConfigPaths)}`); + // We don't throw here since unhandled paths are verified by the "legacy" + // Kibana right now, but this will eventually change. + this.log.trace( + `some config paths are not handled by the core: ${JSON.stringify(unhandledConfigPaths)}` + ); } } diff --git a/src/core/server/legacy_compat/__mocks__/legacy_config_mock.ts b/src/core/server/legacy_compat/__mocks__/legacy_config_mock.ts deleted file mode 100644 index ed1b7c04625756..00000000000000 --- a/src/core/server/legacy_compat/__mocks__/legacy_config_mock.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. - */ - -/** - * This is a partial mock of src/server/config/config.js. - */ -export class LegacyConfigMock { - public readonly set = jest.fn((key, value) => { - // Real legacy config throws error if key is not presented in the schema. - if (!this.rawData.has(key)) { - throw new TypeError(`Unknown schema key: ${key}`); - } - - this.rawData.set(key, value); - }); - - public readonly get = jest.fn(key => { - // Real legacy config throws error if key is not presented in the schema. - if (!this.rawData.has(key)) { - throw new TypeError(`Unknown schema key: ${key}`); - } - - return this.rawData.get(key); - }); - - public readonly has = jest.fn(key => this.rawData.has(key)); - - constructor(public rawData: Map = new Map()) {} -} diff --git a/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_config.test.ts.snap b/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_config.test.ts.snap deleted file mode 100644 index 527f2154eb250b..00000000000000 --- a/src/core/server/legacy_compat/__tests__/__snapshots__/legacy_platform_config.test.ts.snap +++ /dev/null @@ -1,74 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`#get correctly handles paths that do not exist in legacy config. 1`] = `"Unknown schema key: one"`; - -exports[`#get correctly handles paths that do not exist in legacy config. 2`] = `"Unknown schema key: one.two"`; - -exports[`#get correctly handles paths that do not exist in legacy config. 3`] = `"Unknown schema key: one.three"`; - -exports[`#get correctly handles silent logging config. 1`] = ` -Object { - "appenders": Object { - "default": Object { - "kind": "legacy-appender", - "legacyLoggingConfig": Object { - "silent": true, - }, - }, - }, - "root": Object { - "level": "off", - }, -} -`; - -exports[`#get correctly handles verbose file logging config with json format. 1`] = ` -Object { - "appenders": Object { - "default": Object { - "kind": "legacy-appender", - "legacyLoggingConfig": Object { - "dest": "/some/path.log", - "json": true, - "verbose": true, - }, - }, - }, - "root": Object { - "level": "all", - }, -} -`; - -exports[`#set correctly sets values for new platform config. 1`] = ` -Object { - "plugins": Object { - "scanDirs": Array [ - "bar", - ], - }, -} -`; - -exports[`#set correctly sets values for new platform config. 2`] = ` -Object { - "plugins": Object { - "scanDirs": Array [ - "baz", - ], - }, -} -`; - -exports[`#set tries to set values for paths that do not exist in legacy config. 1`] = `"Unknown schema key: unknown"`; - -exports[`#set tries to set values for paths that do not exist in legacy config. 2`] = `"Unknown schema key: unknown.sub1"`; - -exports[`#set tries to set values for paths that do not exist in legacy config. 3`] = `"Unknown schema key: unknown.sub2"`; - -exports[`\`getFlattenedPaths\` returns paths from new platform config only. 1`] = ` -Array [ - "__newPlatform.known", - "__newPlatform.known2.sub", -] -`; diff --git a/src/core/server/legacy_compat/__tests__/legacy_platform_config.test.ts b/src/core/server/legacy_compat/__tests__/legacy_platform_config.test.ts deleted file mode 100644 index f15baebcb2434a..00000000000000 --- a/src/core/server/legacy_compat/__tests__/legacy_platform_config.test.ts +++ /dev/null @@ -1,170 +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 { LegacyConfigToRawConfigAdapter } from '..'; -import { LegacyConfigMock } from '../__mocks__/legacy_config_mock'; - -let legacyConfigMock: LegacyConfigMock; -let configAdapter: LegacyConfigToRawConfigAdapter; -beforeEach(() => { - legacyConfigMock = new LegacyConfigMock(new Map([['__newPlatform', null]])); - configAdapter = new LegacyConfigToRawConfigAdapter(legacyConfigMock); -}); - -describe('#get', () => { - test('correctly handles paths that do not exist in legacy config.', () => { - expect(() => configAdapter.get('one')).toThrowErrorMatchingSnapshot(); - expect(() => configAdapter.get(['one', 'two'])).toThrowErrorMatchingSnapshot(); - expect(() => configAdapter.get(['one.three'])).toThrowErrorMatchingSnapshot(); - }); - - test('returns undefined for new platform config values, even if they do not exist', () => { - expect(configAdapter.get(['__newPlatform', 'plugins'])).toBe(undefined); - }); - - test('returns new platform config values if they exist', () => { - configAdapter = new LegacyConfigToRawConfigAdapter( - new LegacyConfigMock( - new Map([['__newPlatform', { plugins: { scanDirs: ['foo'] } }]]) - ) - ); - expect(configAdapter.get(['__newPlatform', 'plugins'])).toEqual({ - scanDirs: ['foo'], - }); - expect(configAdapter.get('__newPlatform.plugins')).toEqual({ - scanDirs: ['foo'], - }); - }); - - test('correctly handles paths that do not need to be transformed.', () => { - legacyConfigMock.rawData = new Map([ - ['one', 'value-one'], - ['one.sub', 'value-one-sub'], - ['container', { value: 'some' }], - ]); - - expect(configAdapter.get('one')).toEqual('value-one'); - expect(configAdapter.get(['one', 'sub'])).toEqual('value-one-sub'); - expect(configAdapter.get('one.sub')).toEqual('value-one-sub'); - expect(configAdapter.get('container')).toEqual({ value: 'some' }); - }); - - test('correctly handles silent logging config.', () => { - legacyConfigMock.rawData = new Map([['logging', { silent: true }]]); - - expect(configAdapter.get('logging')).toMatchSnapshot(); - }); - - test('correctly handles verbose file logging config with json format.', () => { - legacyConfigMock.rawData = new Map([ - ['logging', { verbose: true, json: true, dest: '/some/path.log' }], - ]); - - expect(configAdapter.get('logging')).toMatchSnapshot(); - }); -}); - -describe('#set', () => { - test('tries to set values for paths that do not exist in legacy config.', () => { - expect(() => configAdapter.set('unknown', 'value')).toThrowErrorMatchingSnapshot(); - - expect(() => - configAdapter.set(['unknown', 'sub1'], 'sub-value-1') - ).toThrowErrorMatchingSnapshot(); - - expect(() => configAdapter.set('unknown.sub2', 'sub-value-2')).toThrowErrorMatchingSnapshot(); - }); - - test('correctly sets values for existing paths.', () => { - legacyConfigMock.rawData = new Map([['known', ''], ['known.sub1', ''], ['known.sub2', '']]); - - configAdapter.set('known', 'value'); - configAdapter.set(['known', 'sub1'], 'sub-value-1'); - configAdapter.set('known.sub2', 'sub-value-2'); - - expect(legacyConfigMock.rawData.get('known')).toEqual('value'); - expect(legacyConfigMock.rawData.get('known.sub1')).toEqual('sub-value-1'); - expect(legacyConfigMock.rawData.get('known.sub2')).toEqual('sub-value-2'); - }); - - test('correctly sets values for new platform config.', () => { - legacyConfigMock.rawData = new Map([ - ['__newPlatform', { plugins: { scanDirs: ['foo'] } }], - ]); - - configAdapter = new LegacyConfigToRawConfigAdapter(legacyConfigMock); - - configAdapter.set(['__newPlatform', 'plugins', 'scanDirs'], ['bar']); - expect(legacyConfigMock.rawData.get('__newPlatform')).toMatchSnapshot(); - - configAdapter.set('__newPlatform.plugins.scanDirs', ['baz']); - expect(legacyConfigMock.rawData.get('__newPlatform')).toMatchSnapshot(); - }); -}); - -describe('#has', () => { - test('returns false if config is not set', () => { - expect(configAdapter.has('unknown')).toBe(false); - expect(configAdapter.has(['unknown', 'sub1'])).toBe(false); - expect(configAdapter.has('unknown.sub2')).toBe(false); - }); - - test('returns false if new platform config is not set', () => { - expect(configAdapter.has('__newPlatform.unknown')).toBe(false); - expect(configAdapter.has(['__newPlatform', 'unknown'])).toBe(false); - }); - - test('returns true if config is set.', () => { - legacyConfigMock.rawData = new Map([ - ['known', 'foo'], - ['known.sub1', 'bar'], - ['known.sub2', 'baz'], - ]); - - expect(configAdapter.has('known')).toBe(true); - expect(configAdapter.has(['known', 'sub1'])).toBe(true); - expect(configAdapter.has('known.sub2')).toBe(true); - }); - - test('returns true if new platform config is set.', () => { - legacyConfigMock.rawData = new Map([ - ['__newPlatform', { known: 'foo', known2: { sub: 'bar' } }], - ]); - - configAdapter = new LegacyConfigToRawConfigAdapter(legacyConfigMock); - - expect(configAdapter.has('__newPlatform.known')).toBe(true); - expect(configAdapter.has('__newPlatform.known2')).toBe(true); - expect(configAdapter.has('__newPlatform.known2.sub')).toBe(true); - expect(configAdapter.has(['__newPlatform', 'known'])).toBe(true); - expect(configAdapter.has(['__newPlatform', 'known2'])).toBe(true); - expect(configAdapter.has(['__newPlatform', 'known2', 'sub'])).toBe(true); - }); -}); - -test('`getFlattenedPaths` returns paths from new platform config only.', () => { - legacyConfigMock.rawData = new Map([ - ['__newPlatform', { known: 'foo', known2: { sub: 'bar' } }], - ['legacy', { known: 'baz' }], - ]); - - configAdapter = new LegacyConfigToRawConfigAdapter(legacyConfigMock); - - expect(configAdapter.getFlattenedPaths()).toMatchSnapshot(); -}); diff --git a/src/core/server/legacy_compat/config/__tests__/__snapshots__/legacy_object_to_config_adapter.test.ts.snap b/src/core/server/legacy_compat/config/__tests__/__snapshots__/legacy_object_to_config_adapter.test.ts.snap new file mode 100644 index 00000000000000..d03398e173e407 --- /dev/null +++ b/src/core/server/legacy_compat/config/__tests__/__snapshots__/legacy_object_to_config_adapter.test.ts.snap @@ -0,0 +1,102 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`#get correctly handles server config. 1`] = ` +Object { + "basePath": "/abc", + "cors": false, + "host": "host", + "maxPayload": 1000, + "port": 1234, + "rewriteBasePath": false, + "ssl": Object { + "enabled": true, + "keyPassphrase": "some-phrase", + "someNewValue": "new", + }, +} +`; + +exports[`#get correctly handles silent logging config. 1`] = ` +Object { + "appenders": Object { + "default": Object { + "kind": "legacy-appender", + "legacyLoggingConfig": Object { + "silent": true, + }, + }, + }, + "root": Object { + "level": "off", + }, +} +`; + +exports[`#get correctly handles verbose file logging config with json format. 1`] = ` +Object { + "appenders": Object { + "default": Object { + "kind": "legacy-appender", + "legacyLoggingConfig": Object { + "dest": "/some/path.log", + "json": true, + "verbose": true, + }, + }, + }, + "root": Object { + "level": "all", + }, +} +`; + +exports[`#getFlattenedPaths returns all paths of the underlying object. 1`] = ` +Array [ + "known", + "knownContainer.sub1", + "knownContainer.sub2", + "legacy.known", +] +`; + +exports[`#set correctly sets values for existing paths. 1`] = ` +Object { + "known": "value", + "knownContainer": Object { + "sub1": "sub-value-1", + "sub2": "sub-value-2", + }, +} +`; + +exports[`#set correctly sets values for paths that do not exist. 1`] = ` +Object { + "unknown": "value", +} +`; + +exports[`#toRaw returns a deep copy of the underlying raw config object. 1`] = ` +Object { + "known": "foo", + "knownContainer": Object { + "sub1": "bar", + "sub2": "baz", + }, + "legacy": Object { + "known": "baz", + }, +} +`; + +exports[`#toRaw returns a deep copy of the underlying raw config object. 2`] = ` +Object { + "known": "bar", + "knownContainer": Object { + "sub1": "baz", + "sub2": "baz", + }, + "legacy": Object { + "known": "baz", + }, +} +`; diff --git a/src/core/server/legacy_compat/config/__tests__/legacy_object_to_config_adapter.test.ts b/src/core/server/legacy_compat/config/__tests__/legacy_object_to_config_adapter.test.ts new file mode 100644 index 00000000000000..b465a55be42432 --- /dev/null +++ b/src/core/server/legacy_compat/config/__tests__/legacy_object_to_config_adapter.test.ts @@ -0,0 +1,178 @@ +/* + * 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 { LegacyObjectToConfigAdapter } from '../legacy_object_to_config_adapter'; + +describe('#get', () => { + test('correctly handles paths that do not exist.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({}); + + expect(configAdapter.get('one')).not.toBeDefined(); + expect(configAdapter.get(['one', 'two'])).not.toBeDefined(); + expect(configAdapter.get(['one.three'])).not.toBeDefined(); + }); + + test('correctly handles paths that do not need to be transformed.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + one: 'value-one', + two: { + sub: 'value-two-sub', + }, + container: { + value: 'some', + }, + }); + + expect(configAdapter.get('one')).toEqual('value-one'); + expect(configAdapter.get(['two', 'sub'])).toEqual('value-two-sub'); + expect(configAdapter.get('two.sub')).toEqual('value-two-sub'); + expect(configAdapter.get('container')).toEqual({ value: 'some' }); + }); + + test('correctly handles silent logging config.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + logging: { silent: true }, + }); + + expect(configAdapter.get('logging')).toMatchSnapshot(); + }); + + test('correctly handles verbose file logging config with json format.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + logging: { verbose: true, json: true, dest: '/some/path.log' }, + }); + + expect(configAdapter.get('logging')).toMatchSnapshot(); + }); + + test('correctly handles server config.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + server: { + autoListen: true, + basePath: '/abc', + cors: false, + host: 'host', + maxPayloadBytes: 1000, + port: 1234, + rewriteBasePath: false, + ssl: { + enabled: true, + keyPassphrase: 'some-phrase', + someNewValue: 'new', + }, + someNotSupportedValue: 'val', + }, + }); + + expect(configAdapter.get('server')).toMatchSnapshot(); + }); +}); + +describe('#set', () => { + test('correctly sets values for paths that do not exist.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({}); + + configAdapter.set('unknown', 'value'); + configAdapter.set(['unknown', 'sub1'], 'sub-value-1'); + configAdapter.set('unknown.sub2', 'sub-value-2'); + + expect(configAdapter.toRaw()).toMatchSnapshot(); + }); + + test('correctly sets values for existing paths.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + known: '', + knownContainer: { + sub1: 'sub-1', + sub2: 'sub-2', + }, + }); + + configAdapter.set('known', 'value'); + configAdapter.set(['knownContainer', 'sub1'], 'sub-value-1'); + configAdapter.set('knownContainer.sub2', 'sub-value-2'); + + expect(configAdapter.toRaw()).toMatchSnapshot(); + }); +}); + +describe('#has', () => { + test('returns false if config is not set', () => { + const configAdapter = new LegacyObjectToConfigAdapter({}); + + expect(configAdapter.has('unknown')).toBe(false); + expect(configAdapter.has(['unknown', 'sub1'])).toBe(false); + expect(configAdapter.has('unknown.sub2')).toBe(false); + }); + + test('returns true if config is set.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + known: 'foo', + knownContainer: { + sub1: 'bar', + sub2: 'baz', + }, + }); + + expect(configAdapter.has('known')).toBe(true); + expect(configAdapter.has(['knownContainer', 'sub1'])).toBe(true); + expect(configAdapter.has('knownContainer.sub2')).toBe(true); + }); +}); + +describe('#toRaw', () => { + test('returns a deep copy of the underlying raw config object.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + known: 'foo', + knownContainer: { + sub1: 'bar', + sub2: 'baz', + }, + legacy: { known: 'baz' }, + }); + + const firstRawCopy = configAdapter.toRaw(); + + configAdapter.set('known', 'bar'); + configAdapter.set(['knownContainer', 'sub1'], 'baz'); + + const secondRawCopy = configAdapter.toRaw(); + + expect(firstRawCopy).not.toBe(secondRawCopy); + expect(firstRawCopy.knownContainer).not.toBe(secondRawCopy.knownContainer); + + expect(firstRawCopy).toMatchSnapshot(); + expect(secondRawCopy).toMatchSnapshot(); + }); +}); + +describe('#getFlattenedPaths', () => { + test('returns all paths of the underlying object.', () => { + const configAdapter = new LegacyObjectToConfigAdapter({ + known: 'foo', + knownContainer: { + sub1: 'bar', + sub2: 'baz', + }, + legacy: { known: 'baz' }, + }); + + expect(configAdapter.getFlattenedPaths()).toMatchSnapshot(); + }); +}); diff --git a/src/core/server/legacy_compat/config/legacy_object_to_config_adapter.ts b/src/core/server/legacy_compat/config/legacy_object_to_config_adapter.ts new file mode 100644 index 00000000000000..ef07e86e5fefc6 --- /dev/null +++ b/src/core/server/legacy_compat/config/legacy_object_to_config_adapter.ts @@ -0,0 +1,83 @@ +/* + * 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 { ConfigPath, ObjectToConfigAdapter } from '../../config'; + +/** + * Represents logging config supported by the legacy platform. + */ +interface LegacyLoggingConfig { + silent?: boolean; + verbose?: boolean; + quiet?: boolean; + dest?: string; + json?: boolean; + events?: Record; +} + +/** + * Represents adapter between config provided by legacy platform and `RawConfig` + * supported by the current platform. + */ +export class LegacyObjectToConfigAdapter extends ObjectToConfigAdapter { + private static transformLogging(configValue: LegacyLoggingConfig = {}) { + const loggingConfig = { + appenders: { + default: { kind: 'legacy-appender', legacyLoggingConfig: configValue }, + }, + root: { level: 'info' }, + }; + + if (configValue.silent) { + loggingConfig.root.level = 'off'; + } else if (configValue.quiet) { + loggingConfig.root.level = 'error'; + } else if (configValue.verbose) { + loggingConfig.root.level = 'all'; + } + + return loggingConfig; + } + + private static transformServer(configValue: any = {}) { + // TODO: New platform uses just a subset of `server` config from the legacy platform, + // new values will be exposed once we need them (eg. customResponseHeaders or xsrf). + return { + basePath: configValue.basePath, + cors: configValue.cors, + host: configValue.host, + maxPayload: configValue.maxPayloadBytes, + port: configValue.port, + rewriteBasePath: configValue.rewriteBasePath, + ssl: configValue.ssl, + }; + } + + public get(configPath: ConfigPath) { + const configValue = super.get(configPath); + switch (configPath) { + case 'logging': + return LegacyObjectToConfigAdapter.transformLogging(configValue); + case 'server': + return LegacyObjectToConfigAdapter.transformServer(configValue); + default: + return configValue; + } + } +} diff --git a/src/core/server/legacy_compat/index.ts b/src/core/server/legacy_compat/index.ts index dcc5c31fbb87d9..dc5db0ab1fb7ab 100644 --- a/src/core/server/legacy_compat/index.ts +++ b/src/core/server/legacy_compat/index.ts @@ -23,35 +23,29 @@ import { map } from 'rxjs/operators'; /** @internal */ export { LegacyPlatformProxifier } from './legacy_platform_proxifier'; /** @internal */ -export { LegacyConfigToRawConfigAdapter, LegacyConfig } from './legacy_platform_config'; +export { LegacyObjectToConfigAdapter } from './config/legacy_object_to_config_adapter'; -import { LegacyConfig, LegacyConfigToRawConfigAdapter, LegacyPlatformProxifier } from '.'; +import { LegacyObjectToConfigAdapter, LegacyPlatformProxifier } from '.'; import { Env } from '../config'; import { Root } from '../root'; import { BasePathProxyRoot } from '../root/base_path_proxy_root'; function initEnvironment(rawKbnServer: any, isDevClusterMaster = false) { - const config: LegacyConfig = rawKbnServer.config; - - const legacyConfig$ = new BehaviorSubject(config); - const config$ = legacyConfig$.pipe( - map(legacyConfig => new LegacyConfigToRawConfigAdapter(legacyConfig)) - ); - const env = Env.createDefault({ // The core doesn't work with configs yet, everything is provided by the // "legacy" Kibana, so we can have empty array here. configs: [], // `dev` is the only CLI argument we currently use. - cliArgs: { dev: config.get('env.dev') }, + cliArgs: { dev: rawKbnServer.config.get('env.dev') }, isDevClusterMaster, }); + const legacyConfig$ = new BehaviorSubject>(rawKbnServer.config.get()); return { - config$, + config$: legacyConfig$.pipe(map(legacyConfig => new LegacyObjectToConfigAdapter(legacyConfig))), env, // Propagates legacy config updates to the new platform. - updateConfig(legacyConfig: LegacyConfig) { + updateConfig(legacyConfig: Record) { legacyConfig$.next(legacyConfig); }, }; diff --git a/src/core/server/legacy_compat/legacy_platform_config.ts b/src/core/server/legacy_compat/legacy_platform_config.ts deleted file mode 100644 index 47dc2082e2ccd3..00000000000000 --- a/src/core/server/legacy_compat/legacy_platform_config.ts +++ /dev/null @@ -1,147 +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 { NEW_PLATFORM_CONFIG_ROOT, ObjectToRawConfigAdapter, RawConfig } from '../config'; -import { ConfigPath } from '../config/config_service'; - -/** - * Represents legacy Kibana config class. - * @internal - */ -export interface LegacyConfig { - get: (configPath: string) => any; - set: (configPath: string, configValue: any) => void; - has: (configPath: string) => boolean; -} - -/** - * Represents logging config supported by the legacy platform. - */ -interface LegacyLoggingConfig { - silent?: boolean; - verbose?: boolean; - quiet?: boolean; - dest?: string; - json?: boolean; -} - -/** - * Represents adapter between config provided by legacy platform and `RawConfig` - * supported by the current platform. - */ -export class LegacyConfigToRawConfigAdapter implements RawConfig { - private static flattenConfigPath(configPath: ConfigPath) { - if (!Array.isArray(configPath)) { - return configPath; - } - - return configPath.join('.'); - } - - private static transformLogging(configValue: LegacyLoggingConfig) { - const loggingConfig = { - appenders: { - default: { kind: 'legacy-appender', legacyLoggingConfig: configValue }, - }, - root: { level: 'info' }, - }; - - if (configValue.silent) { - loggingConfig.root.level = 'off'; - } else if (configValue.quiet) { - loggingConfig.root.level = 'error'; - } else if (configValue.verbose) { - loggingConfig.root.level = 'all'; - } - - return loggingConfig; - } - - private static transformServer(configValue: any) { - // TODO: New platform uses just a subset of `server` config from the legacy platform, - // new values will be exposed once we need them (eg. customResponseHeaders, cors or xsrf). - return { - basePath: configValue.basePath, - cors: configValue.cors, - host: configValue.host, - maxPayload: configValue.maxPayloadBytes, - port: configValue.port, - rewriteBasePath: configValue.rewriteBasePath, - ssl: configValue.ssl, - }; - } - - private static isNewPlatformConfig(configPath: ConfigPath) { - if (Array.isArray(configPath)) { - return configPath[0] === NEW_PLATFORM_CONFIG_ROOT; - } - - return configPath.startsWith(NEW_PLATFORM_CONFIG_ROOT); - } - - private newPlatformConfig: ObjectToRawConfigAdapter; - - constructor(private readonly legacyConfig: LegacyConfig) { - this.newPlatformConfig = new ObjectToRawConfigAdapter({ - [NEW_PLATFORM_CONFIG_ROOT]: legacyConfig.get(NEW_PLATFORM_CONFIG_ROOT) || {}, - }); - } - - public has(configPath: ConfigPath) { - if (LegacyConfigToRawConfigAdapter.isNewPlatformConfig(configPath)) { - return this.newPlatformConfig.has(configPath); - } - - return this.legacyConfig.has(LegacyConfigToRawConfigAdapter.flattenConfigPath(configPath)); - } - - public get(configPath: ConfigPath) { - if (LegacyConfigToRawConfigAdapter.isNewPlatformConfig(configPath)) { - return this.newPlatformConfig.get(configPath); - } - - configPath = LegacyConfigToRawConfigAdapter.flattenConfigPath(configPath); - - const configValue = this.legacyConfig.get(configPath); - - switch (configPath) { - case 'logging': - return LegacyConfigToRawConfigAdapter.transformLogging(configValue); - case 'server': - return LegacyConfigToRawConfigAdapter.transformServer(configValue); - default: - return configValue; - } - } - - public set(configPath: ConfigPath, value: any) { - if (LegacyConfigToRawConfigAdapter.isNewPlatformConfig(configPath)) { - return this.newPlatformConfig.set(configPath, value); - } - - this.legacyConfig.set(LegacyConfigToRawConfigAdapter.flattenConfigPath(configPath), value); - } - - public getFlattenedPaths() { - // This method is only used to detect unused config paths, but when we run - // new platform within the legacy one then the new platform is in charge of - // only `__newPlatform` config node and the legacy platform will check the rest. - return this.newPlatformConfig.getFlattenedPaths(); - } -} diff --git a/src/core/server/root/__tests__/index.test.ts b/src/core/server/root/__tests__/index.test.ts index d59cee896cc1e6..851e7c9dca85ed 100644 --- a/src/core/server/root/__tests__/index.test.ts +++ b/src/core/server/root/__tests__/index.test.ts @@ -33,12 +33,12 @@ jest.mock('../../', () => ({ Server: jest.fn(() => mockServer) })); import { BehaviorSubject } from 'rxjs'; import { filter, first } from 'rxjs/operators'; import { Root } from '../'; -import { Env, RawConfig } from '../../config'; +import { Config, Env } from '../../config'; import { getEnvOptions } from '../../config/__tests__/__mocks__/env'; import { logger } from '../../logging/__mocks__'; const env = new Env('.', getEnvOptions()); -const config$ = new BehaviorSubject({} as RawConfig); +const config$ = new BehaviorSubject({} as Config); const mockProcessExit = jest.spyOn(global.process, 'exit').mockImplementation(() => { // noop diff --git a/src/core/server/root/index.ts b/src/core/server/root/index.ts index 25cba09681ac88..935d11a83e9631 100644 --- a/src/core/server/root/index.ts +++ b/src/core/server/root/index.ts @@ -17,11 +17,11 @@ * under the License. */ -import { Observable, Subscription } from 'rxjs'; -import { catchError, first, map, shareReplay } from 'rxjs/operators'; +import { ConnectableObservable, Observable, Subscription } from 'rxjs'; +import { catchError, first, map, publishReplay } from 'rxjs/operators'; import { Server } from '..'; -import { ConfigService, Env, RawConfig } from '../config'; +import { Config, ConfigService, Env } from '../config'; import { Logger, LoggerFactory, LoggingConfig, LoggingService } from '../logging'; @@ -39,7 +39,7 @@ export class Root { private loggingConfigSubscription?: Subscription; constructor( - rawConfig$: Observable, + config$: Observable, private readonly env: Env, private readonly onShutdown: OnShutdown = () => { // noop @@ -49,7 +49,7 @@ export class Root { this.logger = this.loggingService.asLoggerFactory(); this.log = this.logger.get('root'); - this.configService = new ConfigService(rawConfig$, env, this.logger); + this.configService = new ConfigService(config$, env, this.logger); } public async start() { @@ -104,15 +104,23 @@ export class Root { throw err; }), - shareReplay(1) - ); + publishReplay(1) + ) as ConnectableObservable; - // Wait for the first update to complete and throw if it fails. + // Subscription and wait for the first update to complete and throw if it fails. + const connectSubscription = update$.connect(); await update$.pipe(first()).toPromise(); // Send subsequent update failures to this.shutdown(), stopped via loggingConfigSubscription. this.loggingConfigSubscription = update$.subscribe({ - error: error => this.shutdown(error), + error: err => this.shutdown(err), }); + + // Add subscription we got from `connect` so that we can dispose both of them + // at once. We can't inverse this and add consequent updates subscription to + // the one we got from `connect` because in the error case the latter will be + // automatically disposed before the error is forwarded to the former one so + // the shutdown logic won't be called. + this.loggingConfigSubscription.add(connectSubscription); } } diff --git a/src/server/config/schema.js b/src/server/config/schema.js index bbeb41eae0020f..6fa09a400cc09b 100644 --- a/src/server/config/schema.js +++ b/src/server/config/schema.js @@ -255,8 +255,4 @@ export default () => Joi.object({ locale: Joi.string().default('en'), }).default(), - // This is a configuration node that is specifically handled by the config system - // in the new platform, and that the current platform doesn't need to handle at all. - __newPlatform: Joi.any(), - }).default(); From 11488d505561c87628ceb19c931a1fde4f3079da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Tue, 28 Aug 2018 17:17:53 +0200 Subject: [PATCH 044/173] [APM] Revert to using apm-* as default indices (#22445) * [APM] Revert to using apm-* as default indices * Update docs --- docs/settings/apm-settings.asciidoc | 8 ++++---- src/core_plugins/apm_oss/index.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/settings/apm-settings.asciidoc b/docs/settings/apm-settings.asciidoc index fdbbee30ecad75..6e785818c09cf5 100644 --- a/docs/settings/apm-settings.asciidoc +++ b/docs/settings/apm-settings.asciidoc @@ -19,10 +19,10 @@ xpack.apm.ui.enabled:: Set to `false` to hide the APM plugin {kib} from the menu apm_oss.indexPattern:: Index pattern is used for integrations with Machine Learning and Kuery Bar. It must match all apm indices. Defaults to `apm-*`. -apm_oss.errorIndices:: Matcher for indices containing error documents. Defaults to `apm-\*-error-*`. +apm_oss.errorIndices:: Matcher for indices containing error documents. Defaults to `apm-\*`. -apm_oss.onboardingIndices:: Matcher for indices containing onboarding documents. Defaults to `apm-\*-onboarding-*`. +apm_oss.onboardingIndices:: Matcher for indices containing onboarding documents. Defaults to `apm-\*`. -apm_oss.spanIndices:: Matcher for indices containing span documents. Defaults to `apm-\*-span-*`. +apm_oss.spanIndices:: Matcher for indices containing span documents. Defaults to `apm-\*`. -apm_oss.transactionIndices:: Matcher for indices containing transaction documents. Defaults to `apm-\*-transaction-*`. +apm_oss.transactionIndices:: Matcher for indices containing transaction documents. Defaults to `apm-\*`. diff --git a/src/core_plugins/apm_oss/index.js b/src/core_plugins/apm_oss/index.js index 69ff8901d2f3fb..fcbc188f89066d 100644 --- a/src/core_plugins/apm_oss/index.js +++ b/src/core_plugins/apm_oss/index.js @@ -30,10 +30,10 @@ export default function apmOss(kibana) { indexPattern: Joi.string().default('apm-*'), // ES Indices - errorIndices: Joi.string().default('apm-*-error-*'), - onboardingIndices: Joi.string().default('apm-*-onboarding-*'), - spanIndices: Joi.string().default('apm-*-span-*'), - transactionIndices: Joi.string().default('apm-*-transaction-*'), + errorIndices: Joi.string().default('apm-*'), + onboardingIndices: Joi.string().default('apm-*'), + spanIndices: Joi.string().default('apm-*'), + transactionIndices: Joi.string().default('apm-*'), }).default(); }, }); From 76f5d87a5bf2f6e7be34a027e3231e7857a433e9 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 28 Aug 2018 11:53:03 -0400 Subject: [PATCH 045/173] Some more boilerplate --- .../components/apm/instances/instances.js | 2 +- .../public/components/apm/overview/index.js | 4 +- .../components/cluster/overview/apm_panel.js | 16 +-- .../monitoring/server/lib/apm/_apm_stats.js | 128 ++++++++++++++++++ .../server/lib/apm/create_apm_query.js | 34 +++++ .../server/lib/apm/get_apms_for_clusters.js | 61 +++++++++ .../monitoring/server/lib/apm/index.js | 7 + .../lib/cluster/get_clusters_from_request.js | 17 ++- .../server/routes/api/v1/apm/instances.js | 25 +++- .../server/routes/api/v1/apm/overview.js | 30 +++- .../server/routes/api/v1/cluster/cluster.js | 3 +- .../server/routes/api/v1/cluster/clusters.js | 3 +- 12 files changed, 305 insertions(+), 25 deletions(-) create mode 100644 x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js create mode 100644 x-pack/plugins/monitoring/server/lib/apm/index.js diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js index 429f99c76be675..5904d072c5d5e3 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js @@ -48,7 +48,7 @@ export function ApmServerInstances({ apms, goToInstance }) { return (
- + - + {charts} diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js index 2b828e6d93ad92..7944bdb1fc5c19 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/apm_panel.js @@ -7,7 +7,7 @@ import React from 'react'; import { get } from 'lodash'; import { formatMetric } from 'plugins/monitoring/lib/format_number'; -import { ClusterItemContainer, HealthStatusIndicator } from './helpers'; +import { ClusterItemContainer } from './helpers'; import { EuiFlexGrid, @@ -26,26 +26,20 @@ export function ApmPanel(props) { return null; } - const status = props.count > 0 ? 'green' : 'red'; - - const statusIndicator = ( - - ); - - const goToKibana = () => props.changeUrl('apm'); + const goToApm = () => props.changeUrl('apm'); const goToInstances = () => props.changeUrl('apm/instances'); return ( - +

Overview diff --git a/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js b/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js new file mode 100644 index 00000000000000..7a804206fec871 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/_apm_stats.js @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { capitalize, get } from 'lodash'; + +export const getDiffCalculation = (max, min) => { + // no need to test max >= 0, but min <= 0 which is normal for a derivative after restart + // because we are aggregating/collapsing on ephemeral_ids + if ( + max !== null && min !== null && + max >= 0 && min >= 0 && + max >= min + ) { + return max - min; + } + + return null; +}; + +export const apmAggFilterPath = [ + 'aggregations.total', + 'aggregations.types.buckets.key', + 'aggregations.types.buckets.uuids.buckets.doc_count', + 'aggregations.min_events_total.value', + 'aggregations.max_events_total.value', + 'aggregations.min_bytes_sent_total.value', + 'aggregations.max_bytes_sent_total.value', +]; + +export const apmUuidsAgg = maxBucketSize => ({ + types: { + terms: { + field: 'beats_stats.beat.type', + size: 1000 // 1000 different types of beats possible seems like enough + }, + aggs: { + uuids: { + terms: { + field: 'beats_stats.beat.uuid', + size: maxBucketSize, + } + } + } + }, + total: { + cardinality: { + field: 'beats_stats.beat.uuid', + precision_threshold: 10000 + } + }, + ephemeral_ids: { + terms: { + field: 'beats_stats.metrics.beat.info.ephemeral_id', + size: maxBucketSize + }, + aggs: { + min_events: { + min: { + field: 'beats_stats.metrics.libbeat.pipeline.events.total' + } + }, + max_events: { + max: { + field: 'beats_stats.metrics.libbeat.pipeline.events.total' + } + }, + min_bytes_sent: { + min: { + field: 'beats_stats.metrics.libbeat.output.write.bytes' + } + }, + max_bytes_sent: { + max: { + field: 'beats_stats.metrics.libbeat.output.write.bytes' + } + }, + }, + }, + min_events_total: { + sum_bucket: { + buckets_path: 'ephemeral_ids>min_events' + } + }, + max_events_total: { + sum_bucket: { + buckets_path: 'ephemeral_ids>max_events' + } + }, + min_bytes_sent_total: { + sum_bucket: { + buckets_path: 'ephemeral_ids>min_bytes_sent' + } + }, + max_bytes_sent_total: { + sum_bucket: { + buckets_path: 'ephemeral_ids>max_bytes_sent' + } + }, +}); + +export const apmAggResponseHandler = response => { + const buckets = get(response, 'aggregations.types.buckets', []); + const beatTotal = get(response, 'aggregations.total.value', null); + const beatTypes = buckets.reduce((types, typeBucket) => { + return [ + ...types, + { + type: capitalize(typeBucket.key), + count: get(typeBucket, 'uuids.buckets.length'), + } + ]; + }, []); + + const eventsTotalMax = get(response, 'aggregations.max_events_total.value', null); + const eventsTotalMin = get(response, 'aggregations.min_events_total.value', null); + const bytesSentMax = get(response, 'aggregations.max_bytes_sent_total.value', null); + const bytesSentMin = get(response, 'aggregations.min_bytes_sent_total.value', null); + + return { + beatTotal, + beatTypes, + totalEvents: getDiffCalculation(eventsTotalMax, eventsTotalMin), + bytesSent: getDiffCalculation(bytesSentMax, bytesSentMin), + }; +}; diff --git a/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js new file mode 100644 index 00000000000000..7a8b296f024274 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/create_apm_query.js @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { defaults } from 'lodash'; +import { ApmMetric } from '../metrics'; +import { createQuery } from '../create_query'; + +/** + * {@code createQuery} for all APM instances. + * + * @param {Object} options The options to pass to {@code createQuery} + */ +export function createApmQuery(options = { }) { + options = defaults(options, { + filters: [], + metric: ApmMetric.getMetricFields(), + type: 'beats_stats', + }); + + options.filters.push({ + bool: { + must: { + term: { + 'beats_stats.beat.type': 'apm-server' + } + } + } + }); + + return createQuery(options); +} diff --git a/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js new file mode 100644 index 00000000000000..d9add26bbe5548 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/get_apms_for_clusters.js @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under 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 { checkParam } from '../error_missing_required'; +import { createApmQuery } from './create_apm_query'; +import { ApmMetric } from '../metrics'; +import { apmAggResponseHandler, apmUuidsAgg, apmAggFilterPath } from './_apm_stats'; + +export function handleResponse(clusterUuid, response) { + const { beatTotal, beatTypes, totalEvents, bytesSent } = apmAggResponseHandler(response); + + // combine stats + const stats = { + totalEvents, + bytesSent, + beats: { + total: beatTotal, + types: beatTypes, + } + }; + + return { + clusterUuid, + stats, + }; +} + +export function getApmsForClusters(req, apmIndexPattern, clusters) { + checkParam(apmIndexPattern, 'apmIndexPattern in apms/getApmsForClusters'); + + const start = req.payload.timeRange.min; + const end = req.payload.timeRange.max; + const config = req.server.config(); + const maxBucketSize = config.get('xpack.monitoring.max_bucket_size'); + + return Promise.all(clusters.map(async cluster => { + const clusterUuid = cluster.cluster_uuid; + const params = { + index: apmIndexPattern, + size: 0, + ignoreUnavailable: true, + filterPath: apmAggFilterPath, + body: { + query: createApmQuery({ + start, + end, + clusterUuid, + metric: ApmMetric.getMetricFields() // override default of BeatMetric.getMetricFields + }), + aggs: apmUuidsAgg(maxBucketSize) + }, + }; + + const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); + const response = await callWithRequest(req, 'search', params); + return handleResponse(clusterUuid, response); + })); +} diff --git a/x-pack/plugins/monitoring/server/lib/apm/index.js b/x-pack/plugins/monitoring/server/lib/apm/index.js new file mode 100644 index 00000000000000..39746f7c1f9603 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/apm/index.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { getApmsForClusters } from './get_apms_for_clusters'; 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 427cd5af19ab11..6e88e55811fd2e 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 @@ -18,12 +18,20 @@ import { alertsClusterSearch } from '../../cluster_alerts/alerts_cluster_search' import { checkLicense as checkLicenseForAlerts } from '../../cluster_alerts/check_license'; import { getClustersSummary } from './get_clusters_summary'; import { CLUSTER_ALERTS_SEARCH_SIZE } from '../../../common/constants'; +import { getApmsForClusters } from '../apm/get_apms_for_clusters'; /** * Get all clusters or the cluster associated with {@code clusterUuid} when it is defined. */ export async function getClustersFromRequest(req, indexPatterns, { clusterUuid, start, end } = {}) { - const { esIndexPattern, kbnIndexPattern, lsIndexPattern, beatsIndexPattern, alertsIndex } = indexPatterns; + const { + esIndexPattern, + kbnIndexPattern, + lsIndexPattern, + beatsIndexPattern, + apmIndexPattern, + alertsIndex + } = indexPatterns; // get clusters with stats and cluster state let clusters = await getClustersStats(req, esIndexPattern, clusterUuid); @@ -106,6 +114,13 @@ export async function getClustersFromRequest(req, indexPatterns, { clusterUuid, set(clusters[clusterIndex], 'beats', beats.stats); }); + // add apm data + const apmsByCluster = await getApmsForClusters(req, apmIndexPattern, clusters); + apmsByCluster.forEach(apm => { + const clusterIndex = findIndex(clusters, { cluster_uuid: apm.clusterUuid }); + set(clusters[clusterIndex], 'apm', apm.stats); + }); + const config = req.server.config(); const kibanaUuid = config.get('server.uuid'); return getClustersSummary(clusters, kibanaUuid); diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js index f2f5a38dfa995f..0d48058ad63846 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instances.js @@ -5,11 +5,11 @@ */ import Joi from 'joi'; +import { prefixIndexPattern } from '../../../../lib/ccs_utils'; +import { getStats } from '../../../../lib/beats'; +import { handleError } from '../../../../lib/errors'; export function apmInstancesRoute(server) { - /** - * Kibana listing (instances) - */ server.route({ method: 'POST', path: '/api/monitoring/v1/clusters/{clusterUuid}/apm/instances', @@ -27,8 +27,25 @@ export function apmInstancesRoute(server) { }) } }, - async handler() { + async handler(req, reply) { + const config = server.config(); + const ccs = req.payload.ccs; + const clusterUuid = req.params.clusterUuid; + const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + try { + + const [ stats ] = await Promise.all([ + getStats(req, apmIndexPattern, clusterUuid), + ]); + + reply({ + stats, + }); + + } catch (err) { + reply(handleError(err, req)); + } } }); } diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js index cde130f6e5bce1..51f88940b4f99b 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/overview.js @@ -5,11 +5,13 @@ */ import Joi from 'joi'; +import { prefixIndexPattern } from '../../../../lib/ccs_utils'; +import { getStats } from '../../../../lib/beats'; +import { getMetrics } from '../../../../lib/details/get_metrics'; +import { metricSet } from './metric_set_overview'; +import { handleError } from '../../../../lib/errors'; export function apmOverviewRoute(server) { - /** - * Kibana overview (metrics) - */ server.route({ method: 'POST', path: '/api/monitoring/v1/clusters/{clusterUuid}/apm', @@ -27,8 +29,28 @@ export function apmOverviewRoute(server) { }) } }, - async handler() { + async handler(req, reply) { + const config = server.config(); + const ccs = req.payload.ccs; + const clusterUuid = req.params.clusterUuid; + const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + try { + const [ + stats, + metrics, + ] = await Promise.all([ + getStats(req, apmIndexPattern, clusterUuid), + getMetrics(req, apmIndexPattern, metricSet), + ]); + + reply({ + stats, + metrics + }); + } catch (err) { + reply(handleError(err, req)); + } } }); } diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/cluster/cluster.js b/x-pack/plugins/monitoring/server/routes/api/v1/cluster/cluster.js index 1d41341b9895e0..329dc16e5bab4e 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/cluster/cluster.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/cluster/cluster.js @@ -37,8 +37,9 @@ export function clusterRoute(server) { const kbnIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.kibana.index_pattern', ccs); const lsIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.logstash.index_pattern', ccs); const beatsIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); const alertsIndex = prefixIndexPattern(config, 'xpack.monitoring.cluster_alerts.index', ccs); - const indexPatterns = { esIndexPattern, kbnIndexPattern, lsIndexPattern, beatsIndexPattern, alertsIndex }; + const indexPatterns = { esIndexPattern, kbnIndexPattern, lsIndexPattern, beatsIndexPattern, apmIndexPattern, alertsIndex }; const options = { clusterUuid: req.params.clusterUuid, start: req.payload.timeRange.min, diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/cluster/clusters.js b/x-pack/plugins/monitoring/server/routes/api/v1/cluster/clusters.js index ad42ed71643b22..315947f0344396 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/cluster/clusters.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/cluster/clusters.js @@ -44,8 +44,9 @@ export function clustersRoute(server) { const kbnIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.kibana.index_pattern', ccs); const lsIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.logstash.index_pattern', ccs); const beatsIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + const apmIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); const alertsIndex = prefixIndexPattern(config, 'xpack.monitoring.cluster_alerts.index', ccs); - const indexPatterns = { esIndexPattern, kbnIndexPattern, lsIndexPattern, beatsIndexPattern, alertsIndex }; + const indexPatterns = { esIndexPattern, kbnIndexPattern, lsIndexPattern, beatsIndexPattern, apmIndexPattern, alertsIndex }; clusters = await getClustersFromRequest(req, indexPatterns); } catch (err) { From 1b78e13ed1f58be89ddb9cc14cd7551504f7921b Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 28 Aug 2018 13:34:48 -0400 Subject: [PATCH 046/173] Add instance code --- .../server/routes/api/v1/apm/instance.js | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js index a2fb799d22c732..8afa3e1ca2842c 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/apm/instance.js @@ -5,13 +5,11 @@ */ import Joi from 'joi'; +import { prefixIndexPattern } from '../../../../lib/ccs_utils'; +import { getMetrics } from '../../../../lib/details/get_metrics'; +import { metricSet } from './metric_set_overview'; +import { handleError } from '../../../../lib/errors'; -/** - * Kibana instance: This will fetch all data required to display a Kibana - * instance's page. The current details returned are: - * - Kibana Instance Summary (Status) - * - Metrics - */ export function apmInstanceRoute(server) { server.route({ method: 'POST', @@ -31,7 +29,23 @@ export function apmInstanceRoute(server) { }) } }, - async handler() { + async handler(req, reply) { + const beatUuid = req.params.beatUuid; + const config = server.config(); + const ccs = req.payload.ccs; + const beatsIndexPattern = prefixIndexPattern(config, 'xpack.monitoring.beats.index_pattern', ccs); + + try { + const [ metrics ] = await Promise.all([ + getMetrics(req, beatsIndexPattern, metricSet, [{ term: { 'beats_stats.beat.uuid': beatUuid } }]), + ]); + + reply({ + metrics, + }); + } catch (err) { + reply(handleError(err, req)); + } } }); } From 9d24c00a12b4b8f978364e2ca97d69eadcfc2934 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 28 Aug 2018 11:59:53 -0600 Subject: [PATCH 047/173] Eui sharing top nav (#21997) * just getting the popover to open and start laying out the context menu * pass getUnhashableStates to ShareMenu * generate original and snapshot ids * move state into ShareUrlContent * start working on form * use radio group * add input for creating short URL * display URL in alert until copy functionallity gets migrated to EUI * allowEmbed prop * replace share directive with showShareContextMenu * fix button styling * add jest test for share_context_menu * use EuiCopy to copy URL, add jest test for ShareUrlContent component * clean up * display short URL create error message in form instead of with toast * switch option order so disbaled option can not be first * fix discover share functional tests * add functions required by reporting * typescript * remove empty file * fix typescript compile error * move import so jest tests work * fix Failed prop type: The proptextToCopyis marked as required inEuiCopy, but its value isundefined * move shortUrl out of react state and into Component object * getUnhashableStates type from any[] to object[] * add comment about type change once EUI issue is solved * add functional test for saved object URL sharing * remove commit --- .../kibana/public/dashboard/dashboard_app.js | 18 +- .../dashboard/top_nav/get_top_nav_config.js | 10 +- .../dashboard/top_nav/options_popover.less | 7 - .../public/dashboard/top_nav/share.html | 4 - .../dashboard/top_nav/show_options_popover.js | 3 +- .../public/discover/controllers/discover.js | 24 +- .../discover/partials/share_search.html | 5 - .../kibana/public/visualize/editor/editor.js | 18 +- .../public/visualize/editor/panels/share.html | 4 - .../share_context_menu.test.js.snap | 65 ++++ .../share_url_content.test.js.snap | 266 ++++++++++++++ .../components/share_context_menu.test.js | 45 +++ .../share/components/share_context_menu.tsx | 99 +++++ .../share/components/share_url_content.less | 3 + .../components/share_url_content.test.js | 44 +++ .../share/components/share_url_content.tsx | 347 ++++++++++++++++++ src/ui/public/share/directives/share.js | 198 ---------- src/ui/public/share/index.js | 2 +- src/ui/public/share/lib/url_shortener.test.js | 7 - .../{url_shortener.js => url_shortener.ts} | 29 +- .../public/share/show_share_context_menu.tsx | 83 +++++ src/ui/public/share/views/share.html | 238 ------------ .../state_management/state_hashing/index.d.ts | 20 + src/ui/public/styles/navbar.less | 8 + .../functional/apps/discover/_shared_links.js | 52 ++- test/functional/config.js | 4 +- test/functional/page_objects/discover_page.js | 23 -- test/functional/page_objects/index.js | 1 + test/functional/page_objects/share_page.js | 46 +++ .../dashboard_mode/dashboard_view_mode.js | 2 +- 30 files changed, 1118 insertions(+), 557 deletions(-) delete mode 100644 src/core_plugins/kibana/public/dashboard/top_nav/options_popover.less delete mode 100644 src/core_plugins/kibana/public/dashboard/top_nav/share.html delete mode 100644 src/core_plugins/kibana/public/discover/partials/share_search.html delete mode 100644 src/core_plugins/kibana/public/visualize/editor/panels/share.html create mode 100644 src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap create mode 100644 src/ui/public/share/components/__snapshots__/share_url_content.test.js.snap create mode 100644 src/ui/public/share/components/share_context_menu.test.js create mode 100644 src/ui/public/share/components/share_context_menu.tsx create mode 100644 src/ui/public/share/components/share_url_content.less create mode 100644 src/ui/public/share/components/share_url_content.test.js create mode 100644 src/ui/public/share/components/share_url_content.tsx delete mode 100644 src/ui/public/share/directives/share.js rename src/ui/public/share/lib/{url_shortener.js => url_shortener.ts} (69%) create mode 100644 src/ui/public/share/show_share_context_menu.tsx delete mode 100644 src/ui/public/share/views/share.html create mode 100644 src/ui/public/state_management/state_hashing/index.d.ts create mode 100644 test/functional/page_objects/share_page.js diff --git a/src/core_plugins/kibana/public/dashboard/dashboard_app.js b/src/core_plugins/kibana/public/dashboard/dashboard_app.js index e2e12acafa4070..43b29ab5a877ad 100644 --- a/src/core_plugins/kibana/public/dashboard/dashboard_app.js +++ b/src/core_plugins/kibana/public/dashboard/dashboard_app.js @@ -43,6 +43,7 @@ import { showCloneModal } from './top_nav/show_clone_modal'; import { showSaveModal } from './top_nav/show_save_modal'; import { showAddPanel } from './top_nav/show_add_panel'; import { showOptionsPopover } from './top_nav/show_options_popover'; +import { showShareContextMenu } from 'ui/share'; import { migrateLegacyQuery } from 'ui/utils/migrateLegacyQuery'; import * as filterActions from 'ui/doc_table/actions/filter'; import { FilterManagerProvider } from 'ui/filter_manager'; @@ -50,6 +51,7 @@ import { EmbeddableFactoriesRegistryProvider } from 'ui/embeddable/embeddable_fa import { DashboardPanelActionsRegistryProvider } from 'ui/dashboard_panel_actions/dashboard_panel_actions_registry'; import { VisTypesRegistryProvider } from 'ui/registry/vis_types'; import { timefilter } from 'ui/timefilter'; +import { getUnhashableStatesProvider } from 'ui/state_management/state_hashing'; import { DashboardViewportProvider } from './viewport/dashboard_viewport_provider'; @@ -83,6 +85,7 @@ app.directive('dashboardApp', function ($injector) { const docTitle = Private(DocTitleProvider); const embeddableFactories = Private(EmbeddableFactoriesRegistryProvider); const panelActionsRegistry = Private(DashboardPanelActionsRegistryProvider); + const getUnhashableStates = Private(getUnhashableStatesProvider); panelActionsStore.initializeFromRegistry(panelActionsRegistry); @@ -399,6 +402,16 @@ app.directive('dashboardApp', function ($injector) { }, }); }; + navActions[TopNavIds.SHARE] = (menuItem, navController, anchorElement) => { + showShareContextMenu({ + anchorElement, + allowEmbed: true, + getUnhashableStates, + objectId: dash.id, + objectType: 'dashboard', + }); + }; + updateViewMode(dashboardStateManager.getViewMode()); // update root source when filters update @@ -438,11 +451,6 @@ app.directive('dashboardApp', function ($injector) { kbnUrl.removeParam(DashboardConstants.ADD_VISUALIZATION_TO_DASHBOARD_MODE_PARAM); kbnUrl.removeParam(DashboardConstants.NEW_VISUALIZATION_ID_PARAM); } - - // TODO remove opts once share has been converted to react - $scope.opts = { - dashboard: dash, // used in share.html - }; } }; }); diff --git a/src/core_plugins/kibana/public/dashboard/top_nav/get_top_nav_config.js b/src/core_plugins/kibana/public/dashboard/top_nav/get_top_nav_config.js index 7343443f7bf9e7..c0ac1cb2702b2c 100644 --- a/src/core_plugins/kibana/public/dashboard/top_nav/get_top_nav_config.js +++ b/src/core_plugins/kibana/public/dashboard/top_nav/get_top_nav_config.js @@ -38,7 +38,7 @@ export function getTopNavConfig(dashboardMode, actions, hideWriteControls) { ] : [ getFullScreenConfig(actions[TopNavIds.FULL_SCREEN]), - getShareConfig(), + getShareConfig(actions[TopNavIds.SHARE]), getCloneConfig(actions[TopNavIds.CLONE]), getEditConfig(actions[TopNavIds.ENTER_EDIT_MODE]) ] @@ -49,7 +49,7 @@ export function getTopNavConfig(dashboardMode, actions, hideWriteControls) { getViewConfig(actions[TopNavIds.EXIT_EDIT_MODE]), getAddConfig(actions[TopNavIds.ADD]), getOptionsConfig(actions[TopNavIds.OPTIONS]), - getShareConfig()]; + getShareConfig(actions[TopNavIds.SHARE])]; default: return []; } @@ -127,12 +127,12 @@ function getAddConfig(action) { /** * @returns {kbnTopNavConfig} */ -function getShareConfig() { +function getShareConfig(action) { return { key: TopNavIds.SHARE, description: 'Share Dashboard', - testId: 'dashboardShareButton', - template: require('plugins/kibana/dashboard/top_nav/share.html') + testId: 'shareTopNavButton', + run: action, }; } diff --git a/src/core_plugins/kibana/public/dashboard/top_nav/options_popover.less b/src/core_plugins/kibana/public/dashboard/top_nav/options_popover.less deleted file mode 100644 index b9c1271573ecbb..00000000000000 --- a/src/core_plugins/kibana/public/dashboard/top_nav/options_popover.less +++ /dev/null @@ -1,7 +0,0 @@ -.dashOptionsPopover { - height: 100%; - - .euiPopover__anchor { - height: 100%; - } -} diff --git a/src/core_plugins/kibana/public/dashboard/top_nav/share.html b/src/core_plugins/kibana/public/dashboard/top_nav/share.html deleted file mode 100644 index 046acbb5c95b8e..00000000000000 --- a/src/core_plugins/kibana/public/dashboard/top_nav/share.html +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/src/core_plugins/kibana/public/dashboard/top_nav/show_options_popover.js b/src/core_plugins/kibana/public/dashboard/top_nav/show_options_popover.js index 68c95c6ad300a1..2d2dd83b4c34e9 100644 --- a/src/core_plugins/kibana/public/dashboard/top_nav/show_options_popover.js +++ b/src/core_plugins/kibana/public/dashboard/top_nav/show_options_popover.js @@ -17,7 +17,6 @@ * under the License. */ -import './options_popover.less'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -55,7 +54,7 @@ export function showOptionsPopover({ document.body.appendChild(container); const element = ( { + showShareContextMenu({ + anchorElement, + allowEmbed: false, + getUnhashableStates, + objectId: savedSearch.id, + objectType: 'search', + }); + } }]; - // the saved savedSearch - const savedSearch = $route.current.locals.savedSearch; - $scope.$on('$destroy', savedSearch.destroy); - // the actual courier.SearchSource $scope.searchSource = savedSearch.searchSource; $scope.indexPattern = resolveIndexPatternLoading(); diff --git a/src/core_plugins/kibana/public/discover/partials/share_search.html b/src/core_plugins/kibana/public/discover/partials/share_search.html deleted file mode 100644 index 69fee7ad756d0b..00000000000000 --- a/src/core_plugins/kibana/public/discover/partials/share_search.html +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/src/core_plugins/kibana/public/visualize/editor/editor.js b/src/core_plugins/kibana/public/visualize/editor/editor.js index 39e64c62cc2805..6d88eec7d7c2f6 100644 --- a/src/core_plugins/kibana/public/visualize/editor/editor.js +++ b/src/core_plugins/kibana/public/visualize/editor/editor.js @@ -23,7 +23,6 @@ import './visualization_editor'; import 'ui/vis/editors/default/sidebar'; import 'ui/visualize'; import 'ui/collapsible_sidebar'; -import 'ui/share'; import 'ui/query_bar'; import chrome from 'ui/chrome'; import angular from 'angular'; @@ -43,6 +42,8 @@ import { migrateLegacyQuery } from 'ui/utils/migrateLegacyQuery'; import { recentlyAccessed } from 'ui/persisted_log'; import { timefilter } from 'ui/timefilter'; import { getVisualizeLoader } from '../../../../../ui/public/visualize/loader'; +import { showShareContextMenu } from 'ui/share'; +import { getUnhashableStatesProvider } from 'ui/state_management/state_hashing'; uiRoutes .when(VisualizeConstants.CREATE_PATH, { @@ -115,6 +116,7 @@ function VisEditor( ) { const docTitle = Private(DocTitleProvider); const queryFilter = Private(FilterBarQueryFilterProvider); + const getUnhashableStates = Private(getUnhashableStatesProvider); const notify = new Notifier({ location: 'Visualization Editor' @@ -156,8 +158,16 @@ function VisEditor( }, { key: 'share', description: 'Share Visualization', - template: require('plugins/kibana/visualize/editor/panels/share.html'), - testId: 'visualizeShareButton', + testId: 'shareTopNavButton', + run: (menuItem, navController, anchorElement) => { + showShareContextMenu({ + anchorElement, + allowEmbed: true, + getUnhashableStates, + objectId: savedVis.id, + objectType: 'visualization', + }); + } }, { key: 'inspect', description: 'Open Inspector for visualization', @@ -251,7 +261,7 @@ function VisEditor( $scope.isAddToDashMode = () => addToDashMode; $scope.timeRange = timefilter.getTime(); - $scope.opts = _.pick($scope, 'doSave', 'savedVis', 'shareData', 'isAddToDashMode'); + $scope.opts = _.pick($scope, 'doSave', 'savedVis', 'isAddToDashMode'); stateMonitor = stateMonitorFactory.create($state, stateDefaults); stateMonitor.ignoreProps([ 'vis.listeners' ]).onChange((status) => { diff --git a/src/core_plugins/kibana/public/visualize/editor/panels/share.html b/src/core_plugins/kibana/public/visualize/editor/panels/share.html deleted file mode 100644 index 1eeaf5afa608e2..00000000000000 --- a/src/core_plugins/kibana/public/visualize/editor/panels/share.html +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap b/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap new file mode 100644 index 00000000000000..e4157f40f2ce94 --- /dev/null +++ b/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap @@ -0,0 +1,65 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should only render permalink panel when there are no other panels 1`] = ` +, + "id": 1, + "title": "Permalink", + }, + ] + } +/> +`; + +exports[`should render context menu panel when there are more than one panel 1`] = ` +, + "id": 1, + "title": "Permalink", + }, + Object { + "content": , + "id": 2, + "title": "Embed Code", + }, + Object { + "id": 3, + "items": Array [ + Object { + "icon": "console", + "name": "Embed code", + "panel": 2, + }, + Object { + "icon": "link", + "name": "Permalinks", + "panel": 1, + }, + ], + "title": "Share this dashboard", + }, + ] + } +/> +`; diff --git a/src/ui/public/share/components/__snapshots__/share_url_content.test.js.snap b/src/ui/public/share/components/__snapshots__/share_url_content.test.js.snap new file mode 100644 index 00000000000000..7898c7f0654a5d --- /dev/null +++ b/src/ui/public/share/components/__snapshots__/share_url_content.test.js.snap @@ -0,0 +1,266 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`render 1`] = ` + + + + + Snapshot + + + + + , + }, + Object { + "data-test-subj": "exportAsSavedObject", + "disabled": true, + "id": "savedObject", + "label": + + Saved object + + + + + , + }, + ] + } + /> + + + + + + + + + + + + + +`; + +exports[`should enable saved object export option when objectId is provided 1`] = ` + + + + + Snapshot + + + + + , + }, + Object { + "data-test-subj": "exportAsSavedObject", + "disabled": false, + "id": "savedObject", + "label": + + Saved object + + + + + , + }, + ] + } + /> + + + + + + + + + + + + + +`; diff --git a/src/ui/public/share/components/share_context_menu.test.js b/src/ui/public/share/components/share_context_menu.test.js new file mode 100644 index 00000000000000..385441fef5d8a4 --- /dev/null +++ b/src/ui/public/share/components/share_context_menu.test.js @@ -0,0 +1,45 @@ +/* + * 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. + */ + +jest.mock('../lib/url_shortener', () => ({})); + +import React from 'react'; +import { shallow } from 'enzyme'; + +import { + ShareContextMenu, +} from './share_context_menu'; + +test('should render context menu panel when there are more than one panel', () => { + const component = shallow( {}} + />); + expect(component).toMatchSnapshot(); +}); + +test('should only render permalink panel when there are no other panels', () => { + const component = shallow( {}} + />); + expect(component).toMatchSnapshot(); +}); diff --git a/src/ui/public/share/components/share_context_menu.tsx b/src/ui/public/share/components/share_context_menu.tsx new file mode 100644 index 00000000000000..6846632ba63dad --- /dev/null +++ b/src/ui/public/share/components/share_context_menu.tsx @@ -0,0 +1,99 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { Component } from 'react'; + +import { EuiContextMenu } from '@elastic/eui'; + +import { ShareUrlContent } from './share_url_content'; + +interface Props { + allowEmbed: boolean; + objectId?: string; + objectType: string; + getUnhashableStates: () => object[]; +} + +export class ShareContextMenu extends Component { + public render() { + const { panels, initialPanelId } = this.getPanels(); + return ; + } + + private getPanels = () => { + const panels = []; + const menuItems = []; + + const permalinkPanel = { + id: panels.length + 1, + title: 'Permalink', + content: ( + + ), + }; + menuItems.push({ + name: 'Permalinks', + icon: 'link', + panel: permalinkPanel.id, + }); + panels.push(permalinkPanel); + + if (this.props.allowEmbed) { + const embedPanel = { + id: panels.length + 1, + title: 'Embed Code', + content: ( + + ), + }; + panels.push(embedPanel); + menuItems.push({ + name: 'Embed code', + icon: 'console', + panel: embedPanel.id, + }); + } + + // TODO add plugable panels here + + if (menuItems.length > 1) { + const topLevelMenuPanel = { + id: panels.length + 1, + title: `Share this ${this.props.objectType}`, + items: menuItems.sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }), + }; + panels.push(topLevelMenuPanel); + } + + const lastPanelIndex = panels.length - 1; + const initialPanelId = panels[lastPanelIndex].id; + return { panels, initialPanelId }; + }; +} diff --git a/src/ui/public/share/components/share_url_content.less b/src/ui/public/share/components/share_url_content.less new file mode 100644 index 00000000000000..95b950e5b0e940 --- /dev/null +++ b/src/ui/public/share/components/share_url_content.less @@ -0,0 +1,3 @@ +.shareUrlContentForm{ + padding: 16px; +} diff --git a/src/ui/public/share/components/share_url_content.test.js b/src/ui/public/share/components/share_url_content.test.js new file mode 100644 index 00000000000000..3ee722041eca44 --- /dev/null +++ b/src/ui/public/share/components/share_url_content.test.js @@ -0,0 +1,44 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +jest.mock('../lib/url_shortener', () => ({})); + +import React from 'react'; +import { shallow } from 'enzyme'; + +import { + ShareUrlContent, +} from './share_url_content'; + +test('render', () => { + const component = shallow( {}} + />); + expect(component).toMatchSnapshot(); +}); + +test('should enable saved object export option when objectId is provided', () => { + const component = shallow( {}} + />); + expect(component).toMatchSnapshot(); +}); diff --git a/src/ui/public/share/components/share_url_content.tsx b/src/ui/public/share/components/share_url_content.tsx new file mode 100644 index 00000000000000..4c3f1812dff4a0 --- /dev/null +++ b/src/ui/public/share/components/share_url_content.tsx @@ -0,0 +1,347 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// TODO: Remove once typescript definitions are in EUI +declare module '@elastic/eui' { + export const EuiCopy: React.SFC; + export const EuiForm: React.SFC; +} + +import React, { Component } from 'react'; +import './share_url_content.less'; + +import { + EuiButton, + EuiCopy, + EuiFlexGroup, + EuiFlexItem, + EuiForm, + EuiFormRow, + EuiIconTip, + EuiLoadingSpinner, + EuiRadioGroup, + EuiSwitch, +} from '@elastic/eui'; + +import { format as formatUrl, parse as parseUrl } from 'url'; + +import { unhashUrl } from '../../state_management/state_hashing'; +import { shortenUrl } from '../lib/url_shortener'; + +// TODO: Remove once EuiIconTip supports "content" prop +const FixedEuiIconTip = EuiIconTip as React.SFC; + +interface Props { + isEmbedded?: boolean; + objectId?: string; + objectType: string; + getUnhashableStates: () => object[]; +} + +enum ExportUrlAsType { + EXPORT_URL_AS_SAVED_OBJECT = 'savedObject', + EXPORT_URL_AS_SNAPSHOT = 'snapshot', +} + +interface State { + exportUrlAs: ExportUrlAsType; + useShortUrl: boolean; + isCreatingShortUrl: boolean; + url?: string; + shortUrlErrorMsg?: string; +} + +export class ShareUrlContent extends Component { + private mounted?: boolean; + private shortUrlCache?: string; + + constructor(props: Props) { + super(props); + + this.shortUrlCache = undefined; + + this.state = { + exportUrlAs: ExportUrlAsType.EXPORT_URL_AS_SNAPSHOT, + useShortUrl: false, + isCreatingShortUrl: false, + url: '', + }; + } + + public componentWillUnmount() { + window.removeEventListener('hashchange', this.resetUrl); + + this.mounted = false; + } + + public componentDidMount() { + this.mounted = true; + this.setUrl(); + + window.addEventListener('hashchange', this.resetUrl, false); + } + + public render() { + return ( + + {this.renderExportAsRadioGroup()} + + {this.renderShortUrlSwitch()} + + + {(copy: () => void) => ( + + Copy {this.props.isEmbedded ? 'iFrame code' : 'link'} + + )} + + + ); + } + + private isNotSaved = () => { + return this.props.objectId === undefined || this.props.objectId === ''; + }; + + private resetUrl = () => { + if (this.mounted) { + this.shortUrlCache = undefined; + this.setState( + { + useShortUrl: false, + }, + this.setUrl + ); + } + }; + + private getSavedObjectUrl = () => { + if (this.isNotSaved()) { + return; + } + + const url = window.location.href; + // Replace hashes with original RISON values. + const unhashedUrl = unhashUrl(url, this.props.getUnhashableStates()); + + const parsedUrl = parseUrl(unhashedUrl); + if (!parsedUrl || !parsedUrl.hash) { + return; + } + + // Get the application route, after the hash, and remove the #. + const parsedAppUrl = parseUrl(parsedUrl.hash.slice(1), true); + + return formatUrl({ + protocol: parsedUrl.protocol, + auth: parsedUrl.auth, + host: parsedUrl.host, + pathname: parsedUrl.pathname, + hash: formatUrl({ + pathname: parsedAppUrl.pathname, + query: { + // Add global state to the URL so that the iframe doesn't just show the time range + // default. + _g: parsedAppUrl.query._g, + }, + }), + }); + }; + + private getSnapshotUrl = () => { + const url = window.location.href; + // Replace hashes with original RISON values. + return unhashUrl(url, this.props.getUnhashableStates()); + }; + + private makeUrlEmbeddable = (url: string) => { + const embedQueryParam = '?embed=true'; + const urlHasQueryString = url.indexOf('?') !== -1; + if (urlHasQueryString) { + return url.replace('?', `${embedQueryParam}&`); + } + return `${url}${embedQueryParam}`; + }; + + private makeIframeTag = (url?: string) => { + if (!url) { + return; + } + + const embeddableUrl = this.makeUrlEmbeddable(url); + return ``; + }; + + private setUrl = () => { + let url; + if (this.state.exportUrlAs === ExportUrlAsType.EXPORT_URL_AS_SAVED_OBJECT) { + url = this.getSavedObjectUrl(); + } else if (this.state.useShortUrl) { + url = this.shortUrlCache; + } else { + url = this.getSnapshotUrl(); + } + + if (this.props.isEmbedded) { + url = this.makeIframeTag(url); + } + + this.setState({ url }); + }; + + private handleExportUrlAs = (optionId: string) => { + this.setState( + { + exportUrlAs: optionId as ExportUrlAsType, + }, + this.setUrl + ); + }; + + // TODO: switch evt type to ChangeEvent once https://github.com/elastic/eui/issues/1134 is resolved + private handleShortUrlChange = async (evt: any) => { + const isChecked = evt.target.checked; + + if (!isChecked || this.shortUrlCache !== undefined) { + this.setState({ useShortUrl: isChecked }, this.setUrl); + return; + } + + // "Use short URL" is checked but shortUrl has not been generated yet so one needs to be created. + this.setState({ + isCreatingShortUrl: true, + shortUrlErrorMsg: undefined, + }); + + try { + const shortUrl = await shortenUrl(this.getSnapshotUrl()); + if (this.mounted) { + this.shortUrlCache = shortUrl; + this.setState( + { + isCreatingShortUrl: false, + useShortUrl: isChecked, + }, + this.setUrl + ); + } + } catch (fetchError) { + if (this.mounted) { + this.shortUrlCache = undefined; + this.setState( + { + useShortUrl: false, + isCreatingShortUrl: false, + shortUrlErrorMsg: `Unable to create short URL. Error: ${fetchError.message}`, + }, + this.setUrl + ); + } + } + }; + + private renderExportUrlAsOptions = () => { + return [ + { + id: ExportUrlAsType.EXPORT_URL_AS_SNAPSHOT, + label: this.renderWithIconTip( + 'Snapshot', + `Snapshot URLs encode the current state of the ${this.props.objectType} in the URL itself. + Edits to the saved ${this.props.objectType} won't be visible via this URL.` + ), + ['data-test-subj']: 'exportAsSnapshot', + }, + { + id: ExportUrlAsType.EXPORT_URL_AS_SAVED_OBJECT, + disabled: this.isNotSaved(), + label: this.renderWithIconTip( + 'Saved object', + `You can share this URL with people to let them load the most recent saved version of this ${ + this.props.objectType + }.` + ), + ['data-test-subj']: 'exportAsSavedObject', + }, + ]; + }; + + private renderWithIconTip = (child: React.ReactNode, tipContent: React.ReactNode) => { + return ( + + {child} + + + + + ); + }; + + private renderExportAsRadioGroup = () => { + const generateLinkAsHelp = this.isNotSaved() + ? `Can't share as saved object until the ${this.props.objectType} has been saved.` + : undefined; + return ( + + + + ); + }; + + private renderShortUrlSwitch = () => { + if (this.state.exportUrlAs === ExportUrlAsType.EXPORT_URL_AS_SAVED_OBJECT) { + return; + } + + const switchLabel = this.state.isCreatingShortUrl ? ( + + Short URL + + ) : ( + 'Short URL' + ); + const switchComponent = ( + + ); + const tipContent = `We recommend sharing shortened snapshot URLs for maximum compatibility. + Internet Explorer has URL length restrictions, + and some wiki and markup parsers don't do well with the full-length version of the snapshot URL, + but the short URL should work great.`; + + return ( + + {this.renderWithIconTip(switchComponent, tipContent)} + + ); + }; +} diff --git a/src/ui/public/share/directives/share.js b/src/ui/public/share/directives/share.js deleted file mode 100644 index 9aada8b1dacd11..00000000000000 --- a/src/ui/public/share/directives/share.js +++ /dev/null @@ -1,198 +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 { - parse as parseUrl, - format as formatUrl, -} from 'url'; - -import { - getUnhashableStatesProvider, - unhashUrl, -} from '../../state_management/state_hashing'; -import { toastNotifications } from '../../notify'; - -import { shortenUrl } from '../lib/url_shortener'; - -import { uiModules } from '../../modules'; -import shareTemplate from '../views/share.html'; -const app = uiModules.get('kibana'); - -app.directive('share', function (Private) { - const getUnhashableStates = Private(getUnhashableStatesProvider); - - return { - restrict: 'E', - scope: { - objectType: '@', - objectId: '@', - allowEmbed: '@', - }, - template: shareTemplate, - controllerAs: 'share', - controller: function ($scope, $document, $location) { - if ($scope.allowEmbed !== 'false' && $scope.allowEmbed !== undefined) { - throw new Error('allowEmbed must be "false" or undefined'); - } - - // Default to allowing an embedded IFRAME, unless it's explicitly set to false. - this.allowEmbed = $scope.allowEmbed === 'false' ? false : true; - this.objectType = $scope.objectType; - - function getOriginalUrl() { - // If there is no objectId, then it isn't saved, so it has no original URL. - if ($scope.objectId === undefined || $scope.objectId === '') { - return; - } - - const url = $location.absUrl(); - // Replace hashes with original RISON values. - const unhashedUrl = unhashUrl(url, getUnhashableStates()); - - const parsedUrl = parseUrl(unhashedUrl); - // Get the Angular route, after the hash, and remove the #. - const parsedAppUrl = parseUrl(parsedUrl.hash.slice(1), true); - - return formatUrl({ - protocol: parsedUrl.protocol, - auth: parsedUrl.auth, - host: parsedUrl.host, - pathname: parsedUrl.pathname, - hash: formatUrl({ - pathname: parsedAppUrl.pathname, - query: { - // Add global state to the URL so that the iframe doesn't just show the time range - // default. - _g: parsedAppUrl.query._g, - }, - }), - }); - } - - function getSnapshotUrl() { - const url = $location.absUrl(); - // Replace hashes with original RISON values. - return unhashUrl(url, getUnhashableStates()); - } - - this.makeUrlEmbeddable = url => { - const embedQueryParam = '?embed=true'; - const urlHasQueryString = url.indexOf('?') !== -1; - if (urlHasQueryString) { - return url.replace('?', `${embedQueryParam}&`); - } - return `${url}${embedQueryParam}`; - }; - - this.makeIframeTag = url => { - if (!url) return; - - const embeddableUrl = this.makeUrlEmbeddable(url); - return ``; - }; - - this.urls = { - original: undefined, - snapshot: undefined, - shortSnapshot: undefined, - shortSnapshotIframe: undefined, - }; - - this.urlFlags = { - shortSnapshot: false, - shortSnapshotIframe: false, - }; - - const updateUrls = () => { - this.urls = { - original: getOriginalUrl(), - snapshot: getSnapshotUrl(), - shortSnapshot: undefined, - shortSnapshotIframe: undefined, - }; - - // Whenever the URL changes, reset the Short URLs to regular URLs. - this.urlFlags = { - shortSnapshot: false, - shortSnapshotIframe: false, - }; - }; - - // When the URL changes, update the links in the UI. - $scope.$watch(() => $location.absUrl(), () => { - updateUrls(); - }); - - this.toggleShortSnapshotUrl = () => { - this.urlFlags.shortSnapshot = !this.urlFlags.shortSnapshot; - - if (this.urlFlags.shortSnapshot) { - shortenUrl(this.urls.snapshot) - .then(shortUrl => { - // We're using ES6 Promises, not $q, so we have to wrap this in $apply. - $scope.$apply(() => { - this.urls.shortSnapshot = shortUrl; - }); - }); - } - }; - - this.toggleShortSnapshotIframeUrl = () => { - this.urlFlags.shortSnapshotIframe = !this.urlFlags.shortSnapshotIframe; - - if (this.urlFlags.shortSnapshotIframe) { - const snapshotIframe = this.makeUrlEmbeddable(this.urls.snapshot); - shortenUrl(snapshotIframe) - .then(shortUrl => { - // We're using ES6 Promises, not $q, so we have to wrap this in $apply. - $scope.$apply(() => { - this.urls.shortSnapshotIframe = shortUrl; - }); - }); - } - }; - - this.copyToClipboard = selector => { - // Select the text to be copied. If the copy fails, the user can easily copy it manually. - const copyTextarea = $document.find(selector)[0]; - copyTextarea.select(); - - try { - const isCopied = document.execCommand('copy'); - if (isCopied) { - toastNotifications.add({ - title: 'URL was copied to the clipboard', - 'data-test-subj': 'shareCopyToClipboardSuccess', - }); - } else { - toastNotifications.add({ - title: 'URL selected. Press Ctrl+C to copy.', - 'data-test-subj': 'shareCopyToClipboardSuccess', - }); - } - } catch (err) { - toastNotifications.add({ - title: 'URL selected. Press Ctrl+C to copy.', - 'data-test-subj': 'shareCopyToClipboardSuccess', - }); - } - }; - } - }; -}); diff --git a/src/ui/public/share/index.js b/src/ui/public/share/index.js index ec8154739e0420..99728720d526b3 100644 --- a/src/ui/public/share/index.js +++ b/src/ui/public/share/index.js @@ -17,4 +17,4 @@ * under the License. */ -import './directives/share'; +export { showShareContextMenu } from './show_share_context_menu'; diff --git a/src/ui/public/share/lib/url_shortener.test.js b/src/ui/public/share/lib/url_shortener.test.js index d971ab4d99b23e..0c45220ff78d17 100644 --- a/src/ui/public/share/lib/url_shortener.test.js +++ b/src/ui/public/share/lib/url_shortener.test.js @@ -20,13 +20,6 @@ jest.mock('ui/kfetch', () => ({})); jest.mock('../../chrome', () => ({})); -jest.mock('ui/notify', - () => ({ - toastNotifications: { - addDanger: () => {}, - } - }), { virtual: true }); - import sinon from 'sinon'; import expect from 'expect.js'; import { shortenUrl } from './url_shortener'; diff --git a/src/ui/public/share/lib/url_shortener.js b/src/ui/public/share/lib/url_shortener.ts similarity index 69% rename from src/ui/public/share/lib/url_shortener.js rename to src/ui/public/share/lib/url_shortener.ts index cf584a5673f3ab..037214bd9b4509 100644 --- a/src/ui/public/share/lib/url_shortener.js +++ b/src/ui/public/share/lib/url_shortener.ts @@ -17,32 +17,27 @@ * under the License. */ -import chrome from '../../chrome'; -import url from 'url'; import { kfetch } from 'ui/kfetch'; -import { toastNotifications } from 'ui/notify'; +import url from 'url'; +import chrome from '../../chrome'; -export async function shortenUrl(absoluteUrl) { +export async function shortenUrl(absoluteUrl: string) { const basePath = chrome.getBasePath(); const parsedUrl = url.parse(absoluteUrl); + if (!parsedUrl || !parsedUrl.path) { + return; + } const path = parsedUrl.path.replace(basePath, ''); const hash = parsedUrl.hash ? parsedUrl.hash : ''; const relativeUrl = path + hash; const body = JSON.stringify({ url: relativeUrl }); - try { - const resp = await kfetch({ method: 'POST', 'pathname': '/api/shorten_url', body }); - return url.format({ - protocol: parsedUrl.protocol, - host: parsedUrl.host, - pathname: `${basePath}/goto/${resp.urlId}` - }); - } catch (fetchError) { - toastNotifications.addDanger({ - title: `Unable to create short URL. Error: ${fetchError.message}`, - 'data-test-subj': 'shortenUrlFailure', - }); - } + const resp = await kfetch({ method: 'POST', pathname: '/api/shorten_url', body }); + return url.format({ + protocol: parsedUrl.protocol, + host: parsedUrl.host, + pathname: `${basePath}/goto/${resp.urlId}`, + }); } diff --git a/src/ui/public/share/show_share_context_menu.tsx b/src/ui/public/share/show_share_context_menu.tsx new file mode 100644 index 00000000000000..4adefcad539ea0 --- /dev/null +++ b/src/ui/public/share/show_share_context_menu.tsx @@ -0,0 +1,83 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// TODO: Remove once typescript definitions are in EUI +declare module '@elastic/eui' { + export const EuiWrappingPopover: React.SFC; +} + +import React from 'react'; +import ReactDOM from 'react-dom'; + +import { ShareContextMenu } from './components/share_context_menu'; + +import { EuiWrappingPopover } from '@elastic/eui'; + +let isOpen = false; + +const container = document.createElement('div'); + +const onClose = () => { + ReactDOM.unmountComponentAtNode(container); + isOpen = false; +}; + +interface ShowProps { + anchorElement: any; + allowEmbed: boolean; + getUnhashableStates: () => object[]; + objectId?: string; + objectType: string; +} + +export function showShareContextMenu({ + anchorElement, + allowEmbed, + getUnhashableStates, + objectId, + objectType, +}: ShowProps) { + if (isOpen) { + onClose(); + return; + } + + isOpen = true; + + document.body.appendChild(container); + const element = ( + + + + ); + ReactDOM.render(element, container); +} diff --git a/src/ui/public/share/views/share.html b/src/ui/public/share/views/share.html deleted file mode 100644 index 72ea890010a260..00000000000000 --- a/src/ui/public/share/views/share.html +++ /dev/null @@ -1,238 +0,0 @@ -
- - - - -
- -

- Share Snapshot -

- - -
- Snapshot URLs encode the current state of the {{share.objectType}} in the URL itself. Edits to the saved {{share.objectType}} won't be visible via this URL. -
- - -
- -
- - -
- - - - - -
- Add to your HTML source. Note that all clients must be able to access Kibana. -
-
- - -
- - - - - - - -
- We recommend sharing shortened snapshot URLs for maximum compatibility. Internet Explorer has URL length restrictions, and some wiki and markup parsers don't do well with the full-length version of the snapshot URL, but the short URL should work great. -
-
-
-
diff --git a/src/ui/public/state_management/state_hashing/index.d.ts b/src/ui/public/state_management/state_hashing/index.d.ts new file mode 100644 index 00000000000000..163d9ed07f2cc3 --- /dev/null +++ b/src/ui/public/state_management/state_hashing/index.d.ts @@ -0,0 +1,20 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export function unhashUrl(url: string, kbnStates: any[]): any; diff --git a/src/ui/public/styles/navbar.less b/src/ui/public/styles/navbar.less index 335bf10723cb68..bceec41b466497 100644 --- a/src/ui/public/styles/navbar.less +++ b/src/ui/public/styles/navbar.less @@ -111,3 +111,11 @@ navbar { } } } + +.navbar__popover { + height: 100%; + + .euiPopover__anchor { + height: 100%; + } +} diff --git a/test/functional/apps/discover/_shared_links.js b/test/functional/apps/discover/_shared_links.js index ae6fbfc517e4bb..cac5954c4db2f5 100644 --- a/test/functional/apps/discover/_shared_links.js +++ b/test/functional/apps/discover/_shared_links.js @@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }) { const log = getService('log'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'discover', 'header']); + const PageObjects = getPageObjects(['common', 'discover', 'header', 'share']); describe('shared links', function describeIndexTests() { let baseUrl; @@ -59,20 +59,13 @@ export default function ({ getService, getPageObjects }) { //After hiding the time picker, we need to wait for //the refresh button to hide before clicking the share button - return PageObjects.common.sleep(1000); - }); - - describe('shared link', function () { - it('should show "Share a link" caption', async function () { - const expectedCaption = 'Share saved'; - - await PageObjects.discover.clickShare(); - const actualCaption = await PageObjects.discover.getShareCaption(); + await PageObjects.common.sleep(1000); - expect(actualCaption).to.contain(expectedCaption); - }); + await PageObjects.share.clickShareTopNavButton(); + }); - it('should show the correct formatted URL', async function () { + describe('permalink', function () { + it('should allow for copying the snapshot URL', async function () { const expectedUrl = baseUrl + '/app/kibana?_t=1453775307251#' + @@ -81,32 +74,35 @@ export default function ({ getService, getPageObjects }) { '-23T18:31:44.000Z\'))&_a=(columns:!(_source),index:\'logstash-' + '*\',interval:auto,query:(language:lucene,query:\'\')' + ',sort:!(\'@timestamp\',desc))'; - const actualUrl = await PageObjects.discover.getSharedUrl(); + const actualUrl = await PageObjects.share.getSharedUrl(); // strip the timestamp out of each URL expect(actualUrl.replace(/_t=\d{13}/, '_t=TIMESTAMP')).to.be( expectedUrl.replace(/_t=\d{13}/, '_t=TIMESTAMP') ); }); - it('gets copied to clipboard', async function () { - const isCopiedToClipboard = await PageObjects.discover.clickCopyToClipboard(); - expect(isCopiedToClipboard).to.eql(true); - }); - - // TODO: verify clipboard contents - it('shorten URL button should produce a short URL', async function () { + it('should allow for copying the snapshot URL as a short URL', async function () { const re = new RegExp(baseUrl + '/goto/[0-9a-f]{32}$'); - await PageObjects.discover.clickShortenUrl(); - await retry.try(async function tryingForTime() { - const actualUrl = await PageObjects.discover.getSharedUrl(); + await PageObjects.share.checkShortenUrl(); + await retry.try(async () => { + const actualUrl = await PageObjects.share.getSharedUrl(); expect(actualUrl).to.match(re); }); }); - // NOTE: This test has to run immediately after the test above - it('copies short URL to clipboard', async function () { - const isCopiedToClipboard = await PageObjects.discover.clickCopyToClipboard(); - expect(isCopiedToClipboard).to.eql(true); + it('should allow for copying the saved object URL', async function () { + const expectedUrl = + baseUrl + + '/app/kibana#' + + '/discover/ab12e3c0-f231-11e6-9486-733b1ac9221a' + + '?_g=(refreshInterval%3A(pause%3A!t%2Cvalue%3A0)' + + '%2Ctime%3A(from%3A\'2015-09-19T06%3A31%3A44.000Z\'%2C' + + 'mode%3Aabsolute%2Cto%3A\'2015-09-23T18%3A31%3A44.000Z\'))'; + await PageObjects.discover.loadSavedSearch('A Saved Search'); + await PageObjects.share.clickShareTopNavButton(); + await PageObjects.share.exportAsSavedObject(); + const actualUrl = await PageObjects.share.getSharedUrl(); + expect(actualUrl).to.be(expectedUrl); }); }); }); diff --git a/test/functional/config.js b/test/functional/config.js index c142d46ccd29b7..885770a0ab0c48 100644 --- a/test/functional/config.js +++ b/test/functional/config.js @@ -32,6 +32,7 @@ import { PointSeriesPageProvider, VisualBuilderPageProvider, TimelionPageProvider, + SharePageProvider } from './page_objects'; import { @@ -85,7 +86,8 @@ export default async function ({ readConfigFile }) { monitoring: MonitoringPageProvider, pointSeries: PointSeriesPageProvider, visualBuilder: VisualBuilderPageProvider, - timelion: TimelionPageProvider + timelion: TimelionPageProvider, + share: SharePageProvider, }, services: { es: commonConfig.get('services.es'), diff --git a/test/functional/page_objects/discover_page.js b/test/functional/page_objects/discover_page.js index 3c7d282401aa49..c3283fc35ca15a 100644 --- a/test/functional/page_objects/discover_page.js +++ b/test/functional/page_objects/discover_page.js @@ -226,29 +226,6 @@ export function DiscoverPageProvider({ getService, getPageObjects }) { .getVisibleText(); } - clickShare() { - return testSubjects.click('discoverShareButton'); - } - - clickShortenUrl() { - return testSubjects.click('sharedSnapshotShortUrlButton'); - } - - async clickCopyToClipboard() { - await testSubjects.click('sharedSnapshotCopyButton'); - - // Confirm that the content was copied to the clipboard. - return await testSubjects.exists('shareCopyToClipboardSuccess'); - } - - async getShareCaption() { - return await testSubjects.getVisibleText('shareUiTitle'); - } - - async getSharedUrl() { - return await testSubjects.getProperty('sharedSnapshotUrl', 'value'); - } - async toggleSidebarCollapse() { return await testSubjects.click('collapseSideBarButton'); } diff --git a/test/functional/page_objects/index.js b/test/functional/page_objects/index.js index 72f07453041d1a..04fc7240480ffa 100644 --- a/test/functional/page_objects/index.js +++ b/test/functional/page_objects/index.js @@ -31,3 +31,4 @@ export { MonitoringPageProvider } from './monitoring_page'; export { PointSeriesPageProvider } from './point_series_page'; export { VisualBuilderPageProvider } from './visual_builder_page'; export { TimelionPageProvider } from './timelion_page'; +export { SharePageProvider } from './share_page'; diff --git a/test/functional/page_objects/share_page.js b/test/functional/page_objects/share_page.js new file mode 100644 index 00000000000000..07951ebf2cae58 --- /dev/null +++ b/test/functional/page_objects/share_page.js @@ -0,0 +1,46 @@ +/* + * 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 function SharePageProvider({ getService, getPageObjects }) { + const testSubjects = getService('testSubjects'); + const PageObjects = getPageObjects(['visualize']); + + class SharePage { + async clickShareTopNavButton() { + return testSubjects.click('shareTopNavButton'); + } + + async getSharedUrl() { + return await testSubjects.getAttribute('copyShareUrlButton', 'data-share-url'); + } + + async checkShortenUrl() { + const shareForm = await testSubjects.find('shareUrlForm'); + await PageObjects.visualize.checkCheckbox('useShortUrl'); + await shareForm.waitForDeletedByClassName('euiLoadingSpinner'); + } + + async exportAsSavedObject() { + return await testSubjects.click('exportAsSavedObject'); + } + + } + + return new SharePage(); +} diff --git a/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js b/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js index 7fb26877a4a6c0..8dc31bb586911e 100644 --- a/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js +++ b/x-pack/test/functional/apps/dashboard_mode/dashboard_view_mode.js @@ -158,7 +158,7 @@ export default function ({ getService, getPageObjects }) { }); it('does not show the sharing menu item', async () => { - const shareMenuItemExists = await testSubjects.exists('dashboardShareButton'); + const shareMenuItemExists = await testSubjects.exists('shareTopNavButton'); expect(shareMenuItemExists).to.be(false); }); From 7acb1b2993b52156c10e279bd10e251f04e64430 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 28 Aug 2018 15:31:13 -0400 Subject: [PATCH 048/173] Remove more specific code --- .../server/lib/metrics/apm/classes.js | 247 +----------------- .../monitoring/server/lib/metrics/index.js | 2 +- 2 files changed, 2 insertions(+), 247 deletions(-) diff --git a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js index a11776d7d7d445..12c8e2f15dfeae 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/apm/classes.js @@ -4,25 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ClusterMetric, Metric } from '../classes'; -import { SMALL_FLOAT, LARGE_FLOAT } from '../../../../common/formatting'; - -export class ApmClusterMetric extends ClusterMetric { - constructor(opts) { - super({ - ...opts, - app: 'apm', - ...ApmClusterMetric.getMetricFields() - }); - } - - static getMetricFields() { - return { - uuidField: 'cluster_uuid', - timestampField: 'beats_stats.timestamp' - }; - } -} +import { Metric } from '../classes'; export class ApmMetric extends Metric { constructor(opts) { @@ -40,230 +22,3 @@ export class ApmMetric extends Metric { }; } } - -export class ApmSuccessResponseMetric extends ApmMetric { - constructor(opts) { - super({ - ...opts, - format: SMALL_FLOAT, - metricAgg: 'max', - units: '%', - // debug: true, - derivative: true - }); - - const metrics = [ - 'beats_stats.metrics.apm-server.server.response.valid.ok', - 'beats_stats.metrics.apm-server.server.response.valid.accepted', - ]; - - this.aggs = metrics.reduce((accum, metric) => { - const split = metric.split('.'); - const name = split[split.length - 1]; - accum[name] = { - max: { field: metric } - }; - accum[`${name}_deriv`] = { - derivative: { buckets_path: name, gap_policy: 'skip', unit: '1m' } - }; - return accum; - }, {}); - - this.aggs = { - ...this.aggs, - metric_deriv: { - derivative: { - buckets_path: 'metric', - gap_policy: 'skip', - unit: '1m' - } - } - }; - - /* - * Convert a counter of milliseconds of utilization time into a percentage of the bucket size - */ - this.calculation = ( - _bucket = {}, - _key, - _metric, - // bucketSizeInSeconds - ) => { - if (_bucket.metric_deriv) { - const total = _bucket.metric_deriv.normalized_value; - const successes = _bucket.ok_deriv.normalized_value + _bucket.accepted_deriv.normalized_value; - // const bucketSizeInMillis = bucketSizeInSeconds * 1000; - - if ( - total >= 0 && - total !== null - ) { - return successes / total /*/ bucketSizeInMillis*/ * 100; - } - } - return null; - }; - } -} - -export class ApmFailureResponseMetric extends ApmMetric { - constructor(opts) { - super({ - ...opts, - format: SMALL_FLOAT, - metricAgg: 'max', - units: '%', - // debug: true, - derivative: true - }); - - const metrics = [ - 'beats_stats.metrics.apm-server.server.response.errors.toolarge', - 'beats_stats.metrics.apm-server.server.response.errors.validate', - 'beats_stats.metrics.apm-server.server.response.errors.method', - 'beats_stats.metrics.apm-server.server.response.errors.unauthorized', - 'beats_stats.metrics.apm-server.server.response.errors.ratelimit', - 'beats_stats.metrics.apm-server.server.response.errors.queue', - 'beats_stats.metrics.apm-server.server.response.errors.decode', - 'beats_stats.metrics.apm-server.server.response.errors.forbidden', - 'beats_stats.metrics.apm-server.server.response.errors.concurrency', - 'beats_stats.metrics.apm-server.server.response.errors.closed', - ]; - - this.aggs = metrics.reduce((accum, metric) => { - const split = metric.split('.'); - const name = split[split.length - 1]; - accum[name] = { - max: { field: metric } - }; - accum[`${name}_deriv`] = { - derivative: { buckets_path: name, gap_policy: 'skip', unit: '1m' } - }; - return accum; - }, {}); - - this.aggs = { - ...this.aggs, - metric_deriv: { - derivative: { - buckets_path: 'metric', - gap_policy: 'skip', - unit: '1m' - } - } - }; - - /* - * Convert a counter of milliseconds of utilization time into a percentage of the bucket size - */ - this.calculation = ( - _bucket = {}, - _key, - _metric, - // bucketSizeInSeconds - ) => { - // console.log('ApmSuccessFailureMetric.calculation', _bucket); - if (_bucket.metric_deriv) { - const total = _bucket.metric_deriv.normalized_value; - const failures = _bucket.toolarge_deriv.normalized_value - + _bucket.validate_deriv.normalized_value - + _bucket.method_deriv.normalized_value - + _bucket.unauthorized_deriv.normalized_value - + _bucket.ratelimit_deriv.normalized_value - + _bucket.queue_deriv.normalized_value - + _bucket.decode_deriv.normalized_value - + _bucket.forbidden_deriv.normalized_value - + _bucket.concurrency_deriv.normalized_value - + _bucket.closed_deriv.normalized_value; - - // const bucketSizeInMillis = bucketSizeInSeconds * 1000; - - if ( - total >= 0 && - total !== null - ) { - // console.log(`Value=${((okDerivNormalizedValue + acceptedDerivNormalizedValue) / totalDerivNormalizedValue) /*/ bucketSizeInMillis */* 100}`); - return failures / total /*/ bucketSizeInMillis*/ * 100; - } - } - return null; - }; - } -} - - -export class ApmCpuUtilizationMetric extends ApmMetric { - constructor(opts) { - super({ - ...opts, - format: SMALL_FLOAT, - metricAgg: 'max', - units: '%', - derivative: true - }); - - /* - * Convert a counter of milliseconds of utilization time into a percentage of the bucket size - */ - this.calculation = ( - { metric_deriv: metricDeriv } = {}, - _key, - _metric, - bucketSizeInSeconds - ) => { - if (metricDeriv) { - const { normalized_value: metricDerivNormalizedValue } = metricDeriv; - const bucketSizeInMillis = bucketSizeInSeconds * 1000; - - if ( - metricDerivNormalizedValue >= 0 && - metricDerivNormalizedValue !== null - ) { - return metricDerivNormalizedValue / bucketSizeInMillis * 100; - } - } - return null; - }; - } -} - -export class ApmEventsRateClusterMetric extends ApmClusterMetric { - constructor(opts) { - super({ - ...opts, - derivative: true, - format: LARGE_FLOAT, - metricAgg: 'max', - units: '/m' - }); - - this.aggs = { - beats_uuids: { - terms: { - field: 'beats_stats.beat.uuid', - size: 10000 - }, - aggs: { - event_rate_per_beat: { - max: { - field: this.field - } - } - } - }, - event_rate: { - sum_bucket: { - buckets_path: 'beats_uuids>event_rate_per_beat', - gap_policy: 'skip' - } - }, - metric_deriv: { - derivative: { - buckets_path: 'event_rate', - gap_policy: 'skip', - unit: '1m' - } - } - }; - } -} diff --git a/x-pack/plugins/monitoring/server/lib/metrics/index.js b/x-pack/plugins/monitoring/server/lib/metrics/index.js index 391c7d5717c47d..0d4ec565272c2c 100644 --- a/x-pack/plugins/monitoring/server/lib/metrics/index.js +++ b/x-pack/plugins/monitoring/server/lib/metrics/index.js @@ -6,7 +6,7 @@ export { ElasticsearchMetric } from './elasticsearch/classes'; export { KibanaClusterMetric, KibanaMetric } from './kibana/classes'; -export { ApmClusterMetric, ApmMetric } from './apm/classes'; +export { ApmMetric } from './apm/classes'; export { LogstashClusterMetric, LogstashMetric } from './logstash/classes'; export { BeatsClusterMetric, BeatsMetric } from './beats/classes'; export { metrics } from './metrics'; From 879a8b158de373b00fd25489bc4b00983069dbef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Tue, 28 Aug 2018 21:48:19 +0200 Subject: [PATCH 049/173] [Docs] Use literal asterix in APM docs (#22460) --- docs/settings/apm-settings.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/settings/apm-settings.asciidoc b/docs/settings/apm-settings.asciidoc index 6e785818c09cf5..31ebe5ac6034e9 100644 --- a/docs/settings/apm-settings.asciidoc +++ b/docs/settings/apm-settings.asciidoc @@ -19,10 +19,10 @@ xpack.apm.ui.enabled:: Set to `false` to hide the APM plugin {kib} from the menu apm_oss.indexPattern:: Index pattern is used for integrations with Machine Learning and Kuery Bar. It must match all apm indices. Defaults to `apm-*`. -apm_oss.errorIndices:: Matcher for indices containing error documents. Defaults to `apm-\*`. +apm_oss.errorIndices:: Matcher for indices containing error documents. Defaults to `apm-*`. -apm_oss.onboardingIndices:: Matcher for indices containing onboarding documents. Defaults to `apm-\*`. +apm_oss.onboardingIndices:: Matcher for indices containing onboarding documents. Defaults to `apm-*`. -apm_oss.spanIndices:: Matcher for indices containing span documents. Defaults to `apm-\*`. +apm_oss.spanIndices:: Matcher for indices containing span documents. Defaults to `apm-*`. -apm_oss.transactionIndices:: Matcher for indices containing transaction documents. Defaults to `apm-\*`. +apm_oss.transactionIndices:: Matcher for indices containing transaction documents. Defaults to `apm-*`. From 75afb9ce630ce3e99271ccd9e896440fef685def Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 28 Aug 2018 16:09:59 -0400 Subject: [PATCH 050/173] Remove this custom format --- x-pack/plugins/monitoring/public/lib/format_number.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/x-pack/plugins/monitoring/public/lib/format_number.js b/x-pack/plugins/monitoring/public/lib/format_number.js index b14ac8b44fab85..3ef93e9140cbb0 100644 --- a/x-pack/plugins/monitoring/public/lib/format_number.js +++ b/x-pack/plugins/monitoring/public/lib/format_number.js @@ -30,8 +30,6 @@ export function formatNumber(num, which) { switch (which) { case 'time_since': return moment(moment() - num).from(moment(), true); - case 'time_since2': - return moment().from(num, true); case 'time': return moment(num).format('H:mm:ss'); case 'int_commas': From 7a679e0f7709996c8675993e5c0b65f766cdf9fa Mon Sep 17 00:00:00 2001 From: liza-mae Date: Tue, 28 Aug 2018 16:17:57 -0600 Subject: [PATCH 051/173] Fix gauge test (#22472) --- test/functional/apps/visualize/_tsvb_chart.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/functional/apps/visualize/_tsvb_chart.js b/test/functional/apps/visualize/_tsvb_chart.js index 67610ecec9d230..6bf554d4b51e0c 100644 --- a/test/functional/apps/visualize/_tsvb_chart.js +++ b/test/functional/apps/visualize/_tsvb_chart.js @@ -21,6 +21,7 @@ import expect from 'expect.js'; export default function ({ getService, getPageObjects }) { const log = getService('log'); + const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'visualize', 'header', 'settings', 'visualBuilder']); describe('visual builder', function describeIndexTests() { @@ -111,10 +112,12 @@ export default function ({ getService, getPageObjects }) { }); it('should verify gauge label and count display', async function () { - const labelString = await PageObjects.visualBuilder.getGaugeLabel(); - expect(labelString).to.be('Count'); - const gaugeCount = await PageObjects.visualBuilder.getGaugeCount(); - expect(gaugeCount).to.be('156'); + await retry.try(async () => { + const labelString = await PageObjects.visualBuilder.getGaugeLabel(); + expect(labelString).to.be('Count'); + const gaugeCount = await PageObjects.visualBuilder.getGaugeCount(); + expect(gaugeCount).to.be('156'); + }); }); }); From 36a922e0f63f0cd9c680c46058865e0a61bf2d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 29 Aug 2018 00:29:42 +0200 Subject: [PATCH 052/173] Bump backport to 4.4.1 (#22456) * Bump backport to 4.4.1 * Update lock file --- package.json | 2 +- yarn.lock | 56 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index a34bf062fea0d9..87397fe714c507 100644 --- a/package.json +++ b/package.json @@ -245,7 +245,7 @@ "angular-mocks": "1.4.7", "babel-eslint": "8.1.2", "babel-jest": "^22.4.3", - "backport": "4.2.0", + "backport": "4.4.1", "chai": "3.5.0", "chance": "1.0.10", "cheerio": "0.22.0", diff --git a/yarn.lock b/yarn.lock index df005a261d848e..fabdd2b34c6a9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1891,9 +1891,9 @@ backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" -backport@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/backport/-/backport-4.2.0.tgz#1dde936a784a024e653d5824515efe9c39d69363" +backport@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/backport/-/backport-4.4.1.tgz#39c912dd403b78fde81efb863a76abeaaf0279b6" dependencies: axios "^0.18.0" chalk "^2.4.1" @@ -1903,11 +1903,12 @@ backport@4.2.0: lodash.flatten "^4.4.0" lodash.get "^4.4.2" lodash.isempty "^4.4.0" + lodash.isstring "^4.0.1" mkdirp "^0.5.1" - ora "^2.1.0" + ora "^3.0.0" rimraf "^2.6.2" strip-json-comments "^2.0.1" - yargs "^11.0.0" + yargs "^12.0.1" bail@^1.0.0: version "1.0.2" @@ -3779,6 +3780,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -8405,6 +8412,10 @@ lodash.isobject@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + lodash.istypedarray@^3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" @@ -9572,9 +9583,9 @@ ora@^1.3.0: cli-spinners "^1.0.1" log-symbols "^2.1.0" -ora@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" +ora@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" dependencies: chalk "^2.3.1" cli-cursor "^2.1.0" @@ -14477,6 +14488,10 @@ xregexp@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-3.2.0.tgz#cb3601987bfe2695b584000c18f1c4a8c322878e" +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -14485,7 +14500,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -14497,6 +14512,12 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -14555,6 +14576,23 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" + dependencies: + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" From 925e13f7096e4783e1deed2935e2e14ff64d233e Mon Sep 17 00:00:00 2001 From: Spencer Date: Tue, 28 Aug 2018 16:54:15 -0700 Subject: [PATCH 053/173] [chrome/urlOverflowCheck] use `modifyUrl` helper (#22435) Fixes #18835 This updates the url-overflow redirect to use the `modifyUrl()` helper which was written almost exclusively to help deal with the confusion that node's `path` and `pathname` nonsense creates. I tested this in Edge and things seem to work well, but I'd appreciate if @baracudda or @chandanpal could checkout this PR and see if it works for them. --- src/ui/public/chrome/api/angular.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ui/public/chrome/api/angular.js b/src/ui/public/chrome/api/angular.js index f043950972f607..19fcfa410f2482 100644 --- a/src/ui/public/chrome/api/angular.js +++ b/src/ui/public/chrome/api/angular.js @@ -19,7 +19,7 @@ import React, { Fragment } from 'react'; import _ from 'lodash'; -import { format as formatUrl, parse as parseUrl } from 'url'; +import { modifyUrl } from 'ui/url'; import { uiModules } from '../../modules'; import { toastNotifications } from '../../notify'; @@ -97,10 +97,11 @@ export function initAngularApi(chrome, internals) { }); } } catch (e) { - const { host, path, search, protocol } = parseUrl(window.location.href); - // rewrite the entire url to force the browser to reload and - // discard any potentially unstable state from before - window.location.href = formatUrl({ host, path, search, protocol, hash: '#/error/url-overflow' }); + window.location.href = modifyUrl(window.location.href, parts => { + parts.hash = '#/error/url-overflow'; + }); + // force the browser to reload to that Kibana's potentially unstable state is unloaded + window.location.reload(); } }; From 1e5d82c2abf4e1e2e33df1d4e1a2109b78b0b15d Mon Sep 17 00:00:00 2001 From: Leanid Shutau Date: Wed, 29 Aug 2018 11:55:34 +0300 Subject: [PATCH 054/173] Integrate main i18n tool into build pipeline (#22254) * Integrate main i18n tool to build process * Resolve comments * Remove old task * Replace default Error with FailError --- .../translations/es.json | 6 +- .../translations/es.json | 6 +- .../translations/es.json | 6 +- ..._default_translations.js => i18n_check.js} | 2 +- .../extract_code_messages.test.js.snap | 4 +- .../extract_default_translations.test.js.snap | 8 +- .../extract_handlebars_messages.test.js.snap | 8 +- .../extract_html_messages.test.js.snap | 4 +- .../extract_i18n_call_messages.test.js.snap | 8 +- .../extract_pug_messages.test.js.snap | 4 +- .../extract_react_messages.test.js.snap | 6 +- src/dev/i18n/extract_default_translations.js | 16 +-- .../i18n/extract_default_translations.test.js | 5 +- src/dev/i18n/extract_handlebars_messages.js | 35 +++++-- src/dev/i18n/extract_html_messages.js | 35 +++++-- src/dev/i18n/extract_i18n_call_messages.js | 32 ++++-- src/dev/i18n/extract_react_messages.js | 39 ++++++-- ...ault_translations.js => run_i18n_check.js} | 0 src/ui/translations/en.json | 4 - src/ui/ui_render/bootstrap/template.js.hbs | 2 +- src/ui/ui_render/views/ui_app.pug | 2 +- tasks/config/run.js | 9 ++ tasks/jenkins.js | 2 +- tasks/test.js | 2 +- tasks/utils/i18n_verify_keys.js | 99 ------------------- tasks/verify_translations.js | 90 ----------------- 26 files changed, 164 insertions(+), 270 deletions(-) rename scripts/{extract_default_translations.js => i18n_check.js} (93%) rename src/dev/{run_extract_default_translations.js => run_i18n_check.js} (100%) delete mode 100644 src/ui/translations/en.json delete mode 100644 tasks/utils/i18n_verify_keys.js delete mode 100644 tasks/verify_translations.js diff --git a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/build_action_test_plugin/translations/es.json b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/build_action_test_plugin/translations/es.json index 2f0e09a5542ed4..b553d7b7d5fe86 100644 --- a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/build_action_test_plugin/translations/es.json +++ b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/build_action_test_plugin/translations/es.json @@ -1,4 +1,4 @@ { - "UI-WELCOME_MESSAGE": "Cargando Kibana", - "UI-WELCOME_ERROR": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." -} \ No newline at end of file + "common.ui.welcomeMessage": "Cargando Kibana", + "common.ui.welcomeError": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." +} diff --git a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_build_test_plugin/translations/es.json b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_build_test_plugin/translations/es.json index 2f0e09a5542ed4..b553d7b7d5fe86 100644 --- a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_build_test_plugin/translations/es.json +++ b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_build_test_plugin/translations/es.json @@ -1,4 +1,4 @@ { - "UI-WELCOME_MESSAGE": "Cargando Kibana", - "UI-WELCOME_ERROR": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." -} \ No newline at end of file + "common.ui.welcomeMessage": "Cargando Kibana", + "common.ui.welcomeError": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." +} diff --git a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_package_test_plugin/translations/es.json b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_package_test_plugin/translations/es.json index 2f0e09a5542ed4..b553d7b7d5fe86 100644 --- a/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_package_test_plugin/translations/es.json +++ b/packages/kbn-plugin-helpers/tasks/build/__fixtures__/create_package_test_plugin/translations/es.json @@ -1,4 +1,4 @@ { - "UI-WELCOME_MESSAGE": "Cargando Kibana", - "UI-WELCOME_ERROR": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." -} \ No newline at end of file + "common.ui.welcomeMessage": "Cargando Kibana", + "common.ui.welcomeError": "Kibana no se cargó correctamente. Heck la salida del servidor para obtener más información." +} diff --git a/scripts/extract_default_translations.js b/scripts/i18n_check.js similarity index 93% rename from scripts/extract_default_translations.js rename to scripts/i18n_check.js index 4de2184cb1be29..f461e1514e69f5 100644 --- a/scripts/extract_default_translations.js +++ b/scripts/i18n_check.js @@ -18,4 +18,4 @@ */ require('../src/setup_node_env'); -require('../src/dev/run_extract_default_translations'); +require('../src/dev/run_i18n_check'); diff --git a/src/dev/i18n/__snapshots__/extract_code_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_code_messages.test.js.snap index e9c1972c181f46..507efdfd615955 100644 --- a/src/dev/i18n/__snapshots__/extract_code_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_code_messages.test.js.snap @@ -26,6 +26,6 @@ Array [ ] `; -exports[`extractCodeMessages throws on empty id 1`] = `"Empty \\"id\\" value in i18n() or i18n.translate() is not allowed."`; +exports[`extractCodeMessages throws on empty id 1`] = `" I18N ERROR  Empty \\"id\\" value in i18n() or i18n.translate() is not allowed."`; -exports[`extractCodeMessages throws on missing defaultMessage 1`] = `"Empty defaultMessage in intl.formatMessage() is not allowed (\\"message-id\\")."`; +exports[`extractCodeMessages throws on missing defaultMessage 1`] = `" I18N ERROR  Empty defaultMessage in intl.formatMessage() is not allowed (\\"message-id\\")."`; diff --git a/src/dev/i18n/__snapshots__/extract_default_translations.test.js.snap b/src/dev/i18n/__snapshots__/extract_default_translations.test.js.snap index b84544e6207039..750280b7f8d954 100644 --- a/src/dev/i18n/__snapshots__/extract_default_translations.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_default_translations.test.js.snap @@ -133,4 +133,10 @@ exports[`dev/i18n/extract_default_translations injects default formats into en.j }" `; -exports[`dev/i18n/extract_default_translations throws on wrong message namespace 1`] = `"Expected \\"wrong_plugin_namespace.message-id\\" id to have \\"plugin_2\\" namespace. See i18nrc.json for the list of supported namespaces."`; +exports[`dev/i18n/extract_default_translations throws on id collision 1`] = ` +" I18N ERROR  Error in src/dev/i18n/__fixtures__/extract_default_translations/test_plugin_3/test_file.jsx +Error:  I18N ERROR  There is more than one default message for the same id \\"plugin_3.duplicate_id\\": +\\"Message 1\\" and \\"Message 2\\"" +`; + +exports[`dev/i18n/extract_default_translations throws on wrong message namespace 1`] = `" I18N ERROR  Expected \\"wrong_plugin_namespace.message-id\\" id to have \\"plugin_2\\" namespace. See i18nrc.json for the list of supported namespaces."`; diff --git a/src/dev/i18n/__snapshots__/extract_handlebars_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_handlebars_messages.test.js.snap index 4506967f0eac09..7c9f72a6921ba6 100644 --- a/src/dev/i18n/__snapshots__/extract_handlebars_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_handlebars_messages.test.js.snap @@ -12,10 +12,10 @@ Array [ ] `; -exports[`dev/i18n/extract_handlebars_messages throws on empty id 1`] = `"Empty id argument in Handlebars i18n is not allowed."`; +exports[`dev/i18n/extract_handlebars_messages throws on empty id 1`] = `" I18N ERROR  Empty id argument in Handlebars i18n is not allowed."`; -exports[`dev/i18n/extract_handlebars_messages throws on missing defaultMessage property 1`] = `"Empty defaultMessage in Handlebars i18n is not allowed (\\"message-id\\")."`; +exports[`dev/i18n/extract_handlebars_messages throws on missing defaultMessage property 1`] = `" I18N ERROR  Empty defaultMessage in Handlebars i18n is not allowed (\\"message-id\\")."`; -exports[`dev/i18n/extract_handlebars_messages throws on wrong number of arguments 1`] = `"Wrong number of arguments for handlebars i18n call."`; +exports[`dev/i18n/extract_handlebars_messages throws on wrong number of arguments 1`] = `" I18N ERROR  Wrong number of arguments for handlebars i18n call."`; -exports[`dev/i18n/extract_handlebars_messages throws on wrong properties argument type 1`] = `"Properties string in Handlebars i18n should be a string literal (\\"ui.id-1\\")."`; +exports[`dev/i18n/extract_handlebars_messages throws on wrong properties argument type 1`] = `" I18N ERROR  Properties string in Handlebars i18n should be a string literal (\\"ui.id-1\\")."`; diff --git a/src/dev/i18n/__snapshots__/extract_html_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_html_messages.test.js.snap index 2e18503b5d35b2..aa6048b92b84ce 100644 --- a/src/dev/i18n/__snapshots__/extract_html_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_html_messages.test.js.snap @@ -26,6 +26,6 @@ Array [ ] `; -exports[`dev/i18n/extract_html_messages throws on empty i18n-id 1`] = `"Empty \\"i18n-id\\" value in angular directive is not allowed."`; +exports[`dev/i18n/extract_html_messages throws on empty i18n-id 1`] = `" I18N ERROR  Empty \\"i18n-id\\" value in angular directive is not allowed."`; -exports[`dev/i18n/extract_html_messages throws on missing i18n-default-message attribute 1`] = `"Empty defaultMessage in angular directive is not allowed (\\"message-id\\")."`; +exports[`dev/i18n/extract_html_messages throws on missing i18n-default-message attribute 1`] = `" I18N ERROR  Empty defaultMessage in angular directive is not allowed (\\"message-id\\")."`; diff --git a/src/dev/i18n/__snapshots__/extract_i18n_call_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_i18n_call_messages.test.js.snap index 396c735726b294..13a79e578861ca 100644 --- a/src/dev/i18n/__snapshots__/extract_i18n_call_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_i18n_call_messages.test.js.snap @@ -20,10 +20,10 @@ Array [ ] `; -exports[`extractI18nCallMessages throws if defaultMessage is not a string literal 1`] = `"defaultMessage value in i18n() or i18n.translate() should be a string literal (\\"message-id\\")."`; +exports[`extractI18nCallMessages throws if defaultMessage is not a string literal 1`] = `" I18N ERROR  defaultMessage value in i18n() or i18n.translate() should be a string literal (\\"message-id\\")."`; -exports[`extractI18nCallMessages throws if message id value is not a string literal 1`] = `"Message id in i18n() or i18n.translate() should be a string literal."`; +exports[`extractI18nCallMessages throws if message id value is not a string literal 1`] = `" I18N ERROR  Message id in i18n() or i18n.translate() should be a string literal."`; -exports[`extractI18nCallMessages throws if properties object is not provided 1`] = `"Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; +exports[`extractI18nCallMessages throws if properties object is not provided 1`] = `" I18N ERROR  Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; -exports[`extractI18nCallMessages throws on empty defaultMessage 1`] = `"Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; +exports[`extractI18nCallMessages throws on empty defaultMessage 1`] = `" I18N ERROR  Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; diff --git a/src/dev/i18n/__snapshots__/extract_pug_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_pug_messages.test.js.snap index d67546739a9c16..16767f882063af 100644 --- a/src/dev/i18n/__snapshots__/extract_pug_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_pug_messages.test.js.snap @@ -10,6 +10,6 @@ Array [ ] `; -exports[`extractPugMessages throws on empty id 1`] = `"Empty \\"id\\" value in i18n() or i18n.translate() is not allowed."`; +exports[`extractPugMessages throws on empty id 1`] = `" I18N ERROR  Empty \\"id\\" value in i18n() or i18n.translate() is not allowed."`; -exports[`extractPugMessages throws on missing default message 1`] = `"Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; +exports[`extractPugMessages throws on missing default message 1`] = `" I18N ERROR  Empty defaultMessage in i18n() or i18n.translate() is not allowed (\\"message-id\\")."`; diff --git a/src/dev/i18n/__snapshots__/extract_react_messages.test.js.snap b/src/dev/i18n/__snapshots__/extract_react_messages.test.js.snap index 542cd6817e4937..2bf17cab30c282 100644 --- a/src/dev/i18n/__snapshots__/extract_react_messages.test.js.snap +++ b/src/dev/i18n/__snapshots__/extract_react_messages.test.js.snap @@ -20,8 +20,8 @@ Array [ ] `; -exports[`dev/i18n/extract_react_messages extractIntlMessages throws if context value is not a string literal 1`] = `"context value should be a string literal (\\"message-id\\")."`; +exports[`dev/i18n/extract_react_messages extractIntlMessages throws if context value is not a string literal 1`] = `" I18N ERROR  context value should be a string literal (\\"message-id\\")."`; -exports[`dev/i18n/extract_react_messages extractIntlMessages throws if defaultMessage value is not a string literal 1`] = `"defaultMessage value should be a string literal (\\"message-id\\")."`; +exports[`dev/i18n/extract_react_messages extractIntlMessages throws if defaultMessage value is not a string literal 1`] = `" I18N ERROR  defaultMessage value should be a string literal (\\"message-id\\")."`; -exports[`dev/i18n/extract_react_messages extractIntlMessages throws if message id is not a string literal 1`] = `"Message id should be a string literal."`; +exports[`dev/i18n/extract_react_messages extractIntlMessages throws if message id is not a string literal 1`] = `" I18N ERROR  Message id should be a string literal."`; diff --git a/src/dev/i18n/extract_default_translations.js b/src/dev/i18n/extract_default_translations.js index 645c43ed319d15..5bbfaa221b433a 100644 --- a/src/dev/i18n/extract_default_translations.js +++ b/src/dev/i18n/extract_default_translations.js @@ -21,6 +21,7 @@ import path from 'path'; import { i18n } from '@kbn/i18n'; import JSON5 from 'json5'; import normalize from 'normalize-path'; +import chalk from 'chalk'; import { extractHtmlMessages } from './extract_html_messages'; import { extractCodeMessages } from './extract_code_messages'; @@ -28,16 +29,16 @@ import { extractPugMessages } from './extract_pug_messages'; import { extractHandlebarsMessages } from './extract_handlebars_messages'; import { globAsync, readFileAsync, writeFileAsync } from './utils'; import { paths, exclude } from '../../../.i18nrc.json'; +import { createFailError } from '../run'; const ESCAPE_SINGLE_QUOTE_REGEX = /\\([\s\S])|(')/g; function addMessageToMap(targetMap, key, value) { const existingValue = targetMap.get(key); if (targetMap.has(key) && existingValue.message !== value.message) { - throw new Error( - `There is more than one default message for the same id "${key}": \ -"${existingValue.message}" and "${value.message}"` - ); + throw createFailError(`${chalk.white.bgRed(' I18N ERROR ')} \ +There is more than one default message for the same id "${key}": +"${existingValue.message}" and "${value.message}"`); } targetMap.set(key, value); } @@ -78,7 +79,8 @@ export function validateMessageNamespace(id, filePath) { ); if (!id.startsWith(`${expectedNamespace}.`)) { - throw new Error(`Expected "${id}" id to have "${expectedNamespace}" namespace. \ + throw createFailError(`${chalk.white.bgRed(' I18N ERROR ')} \ +Expected "${id}" id to have "${expectedNamespace}" namespace. \ See i18nrc.json for the list of supported namespaces.`); } } @@ -131,7 +133,9 @@ export async function extractMessagesFromPathToMap(inputPath, targetMap) { addMessageToMap(targetMap, id, value); } } catch (error) { - throw new Error(`Error in ${name}\n${error.message || error}`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Error in ${normalizePath(name)}\n${error}` + ); } } }) diff --git a/src/dev/i18n/extract_default_translations.test.js b/src/dev/i18n/extract_default_translations.test.js index b1e3ade402ebc5..57e89f731fc6af 100644 --- a/src/dev/i18n/extract_default_translations.test.js +++ b/src/dev/i18n/extract_default_translations.test.js @@ -76,10 +76,7 @@ describe('dev/i18n/extract_default_translations', () => { const [, , pluginPath] = pluginsPaths; await expect( extractDefaultTranslations({ paths: [pluginPath], output: pluginPath }) - ).rejects.toMatchObject({ - message: `Error in ${path.join(pluginPath, 'test_file.jsx')} -There is more than one default message for the same id "plugin_3.duplicate_id": "Message 1" and "Message 2"`, - }); + ).rejects.toThrowErrorMatchingSnapshot(); }); test('validates message namespace', () => { diff --git a/src/dev/i18n/extract_handlebars_messages.js b/src/dev/i18n/extract_handlebars_messages.js index b63e30a7dd7d95..1aabdb61e2be13 100644 --- a/src/dev/i18n/extract_handlebars_messages.js +++ b/src/dev/i18n/extract_handlebars_messages.js @@ -17,7 +17,10 @@ * under the License. */ +import chalk from 'chalk'; + import { formatJSString } from './utils'; +import { createFailError } from '../run'; const HBS_REGEX = /(?<=\{\{)([\s\S]*?)(?=\}\})/g; const TOKENS_REGEX = /[^'\s]+|(?:'([^'\\]|\\[\s\S])*')/g; @@ -36,22 +39,29 @@ export function* extractHandlebarsMessages(buffer) { } if (tokens.length !== 3) { - throw new Error('Wrong number of arguments for handlebars i18n call.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Wrong number of arguments for handlebars i18n call.` + ); } if (!idString.startsWith(`'`) || !idString.endsWith(`'`)) { - throw new Error('Message id should be a string literal.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Message id should be a string literal.` + ); } const messageId = formatJSString(idString.slice(1, -1)); if (!messageId) { - throw new Error(`Empty id argument in Handlebars i18n is not allowed.`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Empty id argument in Handlebars i18n is not allowed.` + ); } if (!propertiesString.startsWith(`'`) || !propertiesString.endsWith(`'`)) { - throw new Error( - `Properties string in Handlebars i18n should be a string literal ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Properties string in Handlebars i18n should be a string literal ("${messageId}").` ); } @@ -59,19 +69,26 @@ export function* extractHandlebarsMessages(buffer) { const message = formatJSString(properties.defaultMessage); if (typeof message !== 'string') { - throw new Error( - `defaultMessage value in Handlebars i18n should be a string ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +defaultMessage value in Handlebars i18n should be a string ("${messageId}").` ); } if (!message) { - throw new Error(`Empty defaultMessage in Handlebars i18n is not allowed ("${messageId}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in Handlebars i18n is not allowed ("${messageId}").` + ); } const context = formatJSString(properties.context); if (context != null && typeof context !== 'string') { - throw new Error(`Context value in Handlebars i18n should be a string ("${messageId}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Context value in Handlebars i18n should be a string ("${messageId}").` + ); } yield [messageId, { message, context }]; diff --git a/src/dev/i18n/extract_html_messages.js b/src/dev/i18n/extract_html_messages.js index 456916daf350ae..4c8cad3ce10088 100644 --- a/src/dev/i18n/extract_html_messages.js +++ b/src/dev/i18n/extract_html_messages.js @@ -17,12 +17,14 @@ * under the License. */ +import chalk from 'chalk'; import { jsdom } from 'jsdom'; import { parse } from '@babel/parser'; import { isDirectiveLiteral, isObjectExpression, isStringLiteral } from '@babel/types'; import { isPropertyWithKey, formatHTMLString, formatJSString, traverseNodes } from './utils'; import { DEFAULT_MESSAGE_KEY, CONTEXT_KEY } from './constants'; +import { createFailError } from '../run'; /** * Find all substrings of "{{ any text }}" pattern @@ -51,13 +53,17 @@ function parseFilterObjectExpression(expression) { for (const property of node.properties) { if (isPropertyWithKey(property, DEFAULT_MESSAGE_KEY)) { if (!isStringLiteral(property.value)) { - throw new Error('defaultMessage value should be a string literal.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} defaultMessage value should be a string literal.` + ); } message = formatJSString(property.value.value); } else if (isPropertyWithKey(property, CONTEXT_KEY)) { if (!isStringLiteral(property.value)) { - throw new Error('context value should be a string literal.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} context value should be a string literal.` + ); } context = formatJSString(property.value.value); @@ -95,20 +101,27 @@ function* getFilterMessages(htmlContent) { const filterObjectExpression = expression.slice(filterStart + I18N_FILTER_MARKER.length).trim(); if (!filterObjectExpression || !idExpression) { - throw new Error(`Cannot parse i18n filter expression: {{ ${expression} }}`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Cannot parse i18n filter expression: {{ ${expression} }}` + ); } const messageId = parseIdExpression(idExpression); if (!messageId) { - throw new Error('Empty "id" value in angular filter expression is not allowed.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty "id" value in angular filter expression is not allowed.` + ); } const { message, context } = parseFilterObjectExpression(filterObjectExpression) || {}; if (!message) { - throw new Error( - `Empty defaultMessage in angular filter expression is not allowed ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in angular filter expression is not allowed ("${messageId}").` ); } @@ -124,12 +137,18 @@ function* getDirectiveMessages(htmlContent) { for (const element of document.querySelectorAll('[i18n-id]')) { const messageId = formatHTMLString(element.getAttribute('i18n-id')); if (!messageId) { - throw new Error('Empty "i18n-id" value in angular directive is not allowed.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty "i18n-id" value in angular directive is not allowed.` + ); } const message = formatHTMLString(element.getAttribute('i18n-default-message')); if (!message) { - throw new Error(`Empty defaultMessage in angular directive is not allowed ("${messageId}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in angular directive is not allowed ("${messageId}").` + ); } const context = formatHTMLString(element.getAttribute('i18n-context')) || undefined; diff --git a/src/dev/i18n/extract_i18n_call_messages.js b/src/dev/i18n/extract_i18n_call_messages.js index 5b537ba4e01d23..ba146c06621fe3 100644 --- a/src/dev/i18n/extract_i18n_call_messages.js +++ b/src/dev/i18n/extract_i18n_call_messages.js @@ -17,10 +17,12 @@ * under the License. */ +import chalk from 'chalk'; import { isObjectExpression, isStringLiteral } from '@babel/types'; import { isPropertyWithKey, formatJSString } from './utils'; import { DEFAULT_MESSAGE_KEY, CONTEXT_KEY } from './constants'; +import { createFailError } from '../run'; /** * Extract messages from `funcName('id', { defaultMessage: 'Message text' })` call expression AST @@ -29,37 +31,46 @@ export function extractI18nCallMessages(node) { const [idSubTree, optionsSubTree] = node.arguments; if (!isStringLiteral(idSubTree)) { - throw new Error('Message id in i18n() or i18n.translate() should be a string literal.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Message id in i18n() or i18n.translate() should be a string literal.` + ); } const messageId = idSubTree.value; if (!messageId) { - throw new Error('Empty "id" value in i18n() or i18n.translate() is not allowed.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty "id" value in i18n() or i18n.translate() is not allowed.` + ); } let message; let context; if (!isObjectExpression(optionsSubTree)) { - throw new Error( - `Empty defaultMessage in i18n() or i18n.translate() is not allowed ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in i18n() or i18n.translate() is not allowed ("${messageId}").` ); } for (const prop of optionsSubTree.properties) { if (isPropertyWithKey(prop, DEFAULT_MESSAGE_KEY)) { if (!isStringLiteral(prop.value)) { - throw new Error( - `defaultMessage value in i18n() or i18n.translate() should be a string literal ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +defaultMessage value in i18n() or i18n.translate() should be a string literal ("${messageId}").` ); } message = formatJSString(prop.value.value); } else if (isPropertyWithKey(prop, CONTEXT_KEY)) { if (!isStringLiteral(prop.value)) { - throw new Error( - `context value in i18n() or i18n.translate() should be a string literal ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +context value in i18n() or i18n.translate() should be a string literal ("${messageId}").` ); } @@ -68,8 +79,9 @@ export function extractI18nCallMessages(node) { } if (!message) { - throw new Error( - `Empty defaultMessage in i18n() or i18n.translate() is not allowed ("${messageId}").` + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in i18n() or i18n.translate() is not allowed ("${messageId}").` ); } diff --git a/src/dev/i18n/extract_react_messages.js b/src/dev/i18n/extract_react_messages.js index 3c6f9c4ecb5a0a..014f1214d0a18a 100644 --- a/src/dev/i18n/extract_react_messages.js +++ b/src/dev/i18n/extract_react_messages.js @@ -18,13 +18,17 @@ */ import { isJSXIdentifier, isObjectExpression, isStringLiteral } from '@babel/types'; +import chalk from 'chalk'; import { isPropertyWithKey, formatJSString, formatHTMLString } from './utils'; import { DEFAULT_MESSAGE_KEY, CONTEXT_KEY } from './constants'; +import { createFailError } from '../run'; function extractMessageId(value) { if (!isStringLiteral(value)) { - throw new Error('Message id should be a string literal.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Message id should be a string literal.` + ); } return value.value; @@ -32,7 +36,10 @@ function extractMessageId(value) { function extractMessageValue(value, id) { if (!isStringLiteral(value)) { - throw new Error(`defaultMessage value should be a string literal ("${id}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +defaultMessage value should be a string literal ("${id}").` + ); } return value.value; @@ -40,7 +47,9 @@ function extractMessageValue(value, id) { function extractContextValue(value, id) { if (!isStringLiteral(value)) { - throw new Error(`context value should be a string literal ("${id}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} context value should be a string literal ("${id}").` + ); } return value.value; @@ -55,7 +64,10 @@ export function extractIntlMessages(node) { const options = node.arguments[0]; if (!isObjectExpression(options)) { - throw new Error('Object with defaultMessage property is not passed to intl.formatMessage().'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Object with defaultMessage property is not passed to intl.formatMessage().` + ); } const [messageIdProperty, messageProperty, contextProperty] = [ @@ -69,7 +81,10 @@ export function extractIntlMessages(node) { : undefined; if (!messageId) { - throw new Error('Empty "id" value in intl.formatMessage() is not allowed.'); + createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty "id" value in intl.formatMessage() is not allowed.` + ); } const message = messageProperty @@ -77,7 +92,10 @@ export function extractIntlMessages(node) { : undefined; if (!message) { - throw new Error(`Empty defaultMessage in intl.formatMessage() is not allowed ("${messageId}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty defaultMessage in intl.formatMessage() is not allowed ("${messageId}").` + ); } const context = contextProperty @@ -104,7 +122,9 @@ export function extractFormattedMessages(node) { : undefined; if (!messageId) { - throw new Error('Empty "id" value in is not allowed.'); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} Empty "id" value in is not allowed.` + ); } const message = messageProperty @@ -112,7 +132,10 @@ export function extractFormattedMessages(node) { : undefined; if (!message) { - throw new Error(`Default message in is not allowed ("${messageId}").`); + throw createFailError( + `${chalk.white.bgRed(' I18N ERROR ')} \ +Empty default message in is not allowed ("${messageId}").` + ); } const context = contextProperty diff --git a/src/dev/run_extract_default_translations.js b/src/dev/run_i18n_check.js similarity index 100% rename from src/dev/run_extract_default_translations.js rename to src/dev/run_i18n_check.js diff --git a/src/ui/translations/en.json b/src/ui/translations/en.json deleted file mode 100644 index ac491cf6f34657..00000000000000 --- a/src/ui/translations/en.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "UI-WELCOME_MESSAGE": "Loading", - "UI-WELCOME_ERROR": "" -} diff --git a/src/ui/ui_render/bootstrap/template.js.hbs b/src/ui/ui_render/bootstrap/template.js.hbs index 7ab440dac49087..ca4501a23eff10 100644 --- a/src/ui/ui_render/bootstrap/template.js.hbs +++ b/src/ui/ui_render/bootstrap/template.js.hbs @@ -33,7 +33,7 @@ window.onload = function () { err.style['text-align'] = 'center'; err.style['background'] = '#F44336'; err.style['padding'] = '25px'; - err.innerText = '{{i18n 'UI-WELCOME_ERROR' '{"defaultMessage": "Kibana did not load properly. Check the server output for more information."}'}}'; + err.innerText = '{{i18n 'common.ui.welcomeError' '{"defaultMessage": "Kibana did not load properly. Check the server output for more information."}'}}'; document.body.innerHTML = err.outerHTML; } diff --git a/src/ui/ui_render/views/ui_app.pug b/src/ui/ui_render/views/ui_app.pug index 9f2c7fd3ec0fa5..2fc5710a86c8b9 100644 --- a/src/ui/ui_render/views/ui_app.pug +++ b/src/ui/ui_render/views/ui_app.pug @@ -108,6 +108,6 @@ block content .kibanaWelcomeLogoCircle .kibanaWelcomeLogo .kibanaWelcomeText - | #{i18n('UI-WELCOME_MESSAGE', { defaultMessage: 'Loading Kibana' })} + | #{i18n('common.ui.welcomeMessage', { defaultMessage: 'Loading Kibana' })} script(src=bootstrapScriptUrl) diff --git a/tasks/config/run.js b/tasks/config/run.js index 8facd9e0822fdb..5c17bd408dbd5e 100644 --- a/tasks/config/run.js +++ b/tasks/config/run.js @@ -99,6 +99,15 @@ module.exports = function (grunt) { ] }, + // used by the test and jenkins:unit tasks + // runs the i18n_check script to check i18n engine usage + i18nCheck: { + cmd: process.execPath, + args: [ + require.resolve('../../scripts/i18n_check'), + ] + }, + // used by the test:server task // runs all node.js/server mocha tests mocha: { diff --git a/tasks/jenkins.js b/tasks/jenkins.js index a68f81f34020dd..e0f587e53bc903 100644 --- a/tasks/jenkins.js +++ b/tasks/jenkins.js @@ -26,6 +26,7 @@ module.exports = function (grunt) { 'run:eslint', 'run:tslint', 'run:typeCheck', + 'run:i18nCheck', 'run:checkFileCasing', 'licenses', 'verifyDependencyVersions', @@ -36,7 +37,6 @@ module.exports = function (grunt) { 'test:projects', 'test:browser-ci', 'run:apiIntegrationTests', - 'verifyTranslations', ]); grunt.registerTask('jenkins:selenium', [ diff --git a/tasks/test.js b/tasks/test.js index 4a05c408864f51..d106b53d278294 100644 --- a/tasks/test.js +++ b/tasks/test.js @@ -68,10 +68,10 @@ module.exports = function (grunt) { !grunt.option('quick') && 'run:eslint', !grunt.option('quick') && 'run:tslint', !grunt.option('quick') && 'run:typeCheck', + !grunt.option('quick') && 'run:i18nCheck', 'run:checkFileCasing', 'licenses', 'test:quick', - 'verifyTranslations', ]) ); }); diff --git a/tasks/utils/i18n_verify_keys.js b/tasks/utils/i18n_verify_keys.js deleted file mode 100644 index fe62a5b999aa7c..00000000000000 --- a/tasks/utils/i18n_verify_keys.js +++ /dev/null @@ -1,99 +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 fs from 'fs'; -import glob from 'glob'; -import path from 'path'; -import Promise from 'bluebird'; -import _ from 'lodash'; - -const readFile = Promise.promisify(fs.readFile); -const globProm = Promise.promisify(glob); - -/** - * Return all the translation keys found for the file pattern - * @param {String} translationPattern - regEx pattern for translations - * @param {Array} filesPatterns - List of file patterns to be checked for translation keys - * @return {Promise} - A Promise object which will return a String Array of the translation keys - * not translated then the Object will contain all non translated translation keys with value of file the key is from - */ -export function getTranslationKeys(translationPattern, filesPatterns) { - return getFilesToVerify(filesPatterns) - .then(function (filesToVerify) { - return getKeys(translationPattern, filesToVerify); - }); -} - -/** - * Return translation keys that are not translated - * @param {Array} translationKeys - List of translation keys to be checked if translated - * @param {Object} localeTranslations - Object of locales and their translations - * @return {Object} - A object which will be empty if all translation keys are translated. If translation keys are - * not translated then the Object will contain all non translated translation keys per localem - */ -export function getNonTranslatedKeys(translationKeys, localeTranslations) { - const keysNotTranslatedPerLocale = {}; - _.forEach(localeTranslations, (translations, locale) => { - const keysNotTranslated = _.difference(translationKeys, Object.keys(translations)); - if (!_.isEmpty(keysNotTranslated)) { - keysNotTranslatedPerLocale[locale] = keysNotTranslated; - } - }); - return keysNotTranslatedPerLocale; -} - -function getFilesToVerify(verifyFilesPatterns) { - const filesToVerify = []; - - return Promise.map(verifyFilesPatterns, (verifyFilesPattern) => { - const baseSearchDir = path.dirname(verifyFilesPattern); - const pattern = path.join('**', path.basename(verifyFilesPattern)); - return globProm(pattern, { cwd: baseSearchDir, matchBase: true }) - .then(function (files) { - for (const file of files) { - filesToVerify.push(path.join(baseSearchDir, file)); - } - }); - }) - .then(function () { - return filesToVerify; - }); -} - -function getKeys(translationPattern, filesToVerify) { - const translationKeys = []; - const translationRegEx = new RegExp(translationPattern, 'g'); - - const filePromises = _.map(filesToVerify, (file) => { - return readFile(file, 'utf8') - .then(function (fileContents) { - let regexMatch; - while ((regexMatch = translationRegEx.exec(fileContents)) !== null) { - if (regexMatch.length >= 2) { - const translationKey = regexMatch[1]; - translationKeys.push(translationKey); - } - } - }); - }); - return Promise.all(filePromises) - .then(function () { - return _.uniq(translationKeys); - }); -} diff --git a/tasks/verify_translations.js b/tasks/verify_translations.js deleted file mode 100644 index 1820fe14ac4911..00000000000000 --- a/tasks/verify_translations.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// TODO: Integrate a new tool for translations checking -// https://github.com/elastic/kibana/pull/19826 -import { i18nLoader } from '@kbn/i18n'; - -import { toArray } from 'rxjs/operators'; -import { fromRoot, formatListAsProse } from '../src/utils'; -import { findPluginSpecs } from '../src/plugin_discovery'; -import { collectUiExports } from '../src/ui'; - -import * as i18nVerify from './utils/i18n_verify_keys'; - -export default function (grunt) { - grunt.registerTask('verifyTranslations', async function () { - const done = this.async(); - - try { - const { spec$ } = findPluginSpecs({ - env: 'production', - plugins: { - scanDirs: [fromRoot('src/core_plugins')] - } - }); - - const specs = await spec$.pipe(toArray()).toPromise(); - const uiExports = collectUiExports(specs); - await verifyTranslations(uiExports); - - done(); - } catch (error) { - done(error); - } - }); - -} - -async function verifyTranslations(uiExports) { - const keysUsedInViews = []; - - // Search files for used translation keys - const translationPatterns = [ - { regexp: 'i18n\\(\'(.*)\'\\)', - parsePaths: [fromRoot('src/ui/ui_render/views/*.pug')] } - ]; - for (const { regexp, parsePaths } of translationPatterns) { - const keys = await i18nVerify.getTranslationKeys(regexp, parsePaths); - for (const key of keys) { - keysUsedInViews.push(key); - } - } - - // get all of the translations from uiExports - const translations = await i18nLoader.getAllTranslationsFromPaths(uiExports.translationPaths); - const keysWithoutTranslations = Object.entries( - i18nVerify.getNonTranslatedKeys(keysUsedInViews, translations) - ); - - if (!keysWithoutTranslations.length) { - return; - } - - throw new Error( - '\n' + - '\n' + - 'The following keys are used in angular/pug views but are not translated:\n' + - keysWithoutTranslations.map(([locale, keys]) => ( - ` - ${locale}: ${formatListAsProse(keys)}` - )).join('\n') + - '\n' + - '\n' - ); -} From 3c8d8c622fa2708032c32ebabdd57728136381a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20St=C3=BCrmer?= Date: Wed, 29 Aug 2018 13:18:46 +0200 Subject: [PATCH 055/173] Update redux, ,react-redux and corresponding types (#22442) --- package.json | 9 +++-- .../public/dashboard/actions/embeddables.ts | 9 +++-- .../panel_options_menu_container.ts | 7 ++-- .../kibana/public/selectors/types.ts | 8 +++++ src/core_plugins/kibana/public/store.ts | 3 +- yarn.lock | 35 +++++-------------- 6 files changed, 30 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 87397fe714c507..5ea6728b6458ea 100644 --- a/package.json +++ b/package.json @@ -157,14 +157,14 @@ "react-grid-layout": "^0.16.2", "react-input-range": "^1.3.0", "react-markdown": "^3.1.4", - "react-redux": "^5.0.6", + "react-redux": "^5.0.7", "react-router-dom": "4.2.2", "react-sizeme": "^2.3.6", "react-toggle": "4.0.2", "reactcss": "1.2.3", - "redux": "3.7.2", + "redux": "4.0.0", "redux-actions": "2.2.1", - "redux-thunk": "2.2.0", + "redux-thunk": "2.3.0", "regression": "2.0.0", "request": "^2.85.0", "reselect": "^3.0.1", @@ -235,8 +235,7 @@ "@types/prop-types": "^15.5.3", "@types/react": "^16.3.14", "@types/react-dom": "^16.0.5", - "@types/react-redux": "^5.0.6", - "@types/redux": "^3.6.31", + "@types/react-redux": "^6.0.6", "@types/redux-actions": "^2.2.1", "@types/sinon": "^5.0.0", "@types/strip-ansi": "^3.0.0", diff --git a/src/core_plugins/kibana/public/dashboard/actions/embeddables.ts b/src/core_plugins/kibana/public/dashboard/actions/embeddables.ts index f0b0388a01873d..f2b570ec25a082 100644 --- a/src/core_plugins/kibana/public/dashboard/actions/embeddables.ts +++ b/src/core_plugins/kibana/public/dashboard/actions/embeddables.ts @@ -18,14 +18,13 @@ */ import _ from 'lodash'; -import { Dispatch } from 'redux'; import { createAction } from 'redux-actions'; -import { CoreKibanaState, getEmbeddableCustomization, getPanel } from '../../selectors'; +import { getEmbeddableCustomization, getPanel } from '../../selectors'; import { PanelId, PanelState } from '../selectors'; import { updatePanel } from './panels'; import { EmbeddableMetadata, EmbeddableState } from 'ui/embeddable'; -import { KibanaAction } from '../../selectors/types'; +import { KibanaAction, KibanaThunk } from '../../selectors/types'; export enum EmbeddableActionTypeKeys { EMBEDDABLE_IS_INITIALIZING = 'EMBEDDABLE_IS_INITIALIZING', @@ -100,9 +99,9 @@ export const embeddableError = createAction( export function embeddableStateChanged(changeData: { panelId: PanelId; embeddableState: EmbeddableState; -}) { +}): KibanaThunk { const { panelId, embeddableState } = changeData; - return (dispatch: Dispatch, getState: () => CoreKibanaState) => { + return (dispatch, getState) => { // Translate embeddableState to things redux cares about. const customization = getEmbeddableCustomization(getState(), panelId); if (!_.isEqual(embeddableState.customization, customization)) { diff --git a/src/core_plugins/kibana/public/dashboard/panel/panel_header/panel_options_menu_container.ts b/src/core_plugins/kibana/public/dashboard/panel/panel_header/panel_options_menu_container.ts index 1ae187156dc318..d53f211a393c85 100644 --- a/src/core_plugins/kibana/public/dashboard/panel/panel_header/panel_options_menu_container.ts +++ b/src/core_plugins/kibana/public/dashboard/panel/panel_header/panel_options_menu_container.ts @@ -18,7 +18,7 @@ */ import { EuiContextMenuPanelDescriptor } from '@elastic/eui'; -import * as Redux from 'react-redux'; +import { connect } from 'react-redux'; import { ContainerState, Embeddable } from 'ui/embeddable'; import { panelActionsStore } from '../../store/panel_actions_store'; import { @@ -41,6 +41,7 @@ import { setVisibleContextMenuPanelId, } from '../../actions'; +import { Dispatch } from 'redux'; import { DashboardContextMenuPanel } from 'ui/dashboard_panel_actions'; import { CoreKibanaState } from '../../../selectors'; import { DashboardViewMode } from '../../dashboard_view_mode'; @@ -106,7 +107,7 @@ const mapStateToProps = ( * @param panelId {string} */ const mapDispatchToProps = ( - dispatch: Redux.Dispatch, + dispatch: Dispatch, { panelId }: PanelOptionsMenuContainerOwnProps ) => ({ onDeletePanel: () => { @@ -200,7 +201,7 @@ const mergeProps = ( }; }; -export const PanelOptionsMenuContainer = Redux.connect< +export const PanelOptionsMenuContainer = connect< PanelOptionsMenuContainerStateProps, PanelOptionsMenuContainerDispatchProps, PanelOptionsMenuContainerOwnProps, diff --git a/src/core_plugins/kibana/public/selectors/types.ts b/src/core_plugins/kibana/public/selectors/types.ts index 8789f3ca1d5e5a..61ae8da5ed4bba 100644 --- a/src/core_plugins/kibana/public/selectors/types.ts +++ b/src/core_plugins/kibana/public/selectors/types.ts @@ -18,6 +18,7 @@ */ import { Action } from 'redux'; +import { ThunkAction } from 'redux-thunk'; import { DashboardState } from '../dashboard/selectors'; export interface CoreKibanaState { @@ -28,3 +29,10 @@ export interface KibanaAction extends Action { readonly type: T; readonly payload: P; } + +export type KibanaThunk< + R = Action | Promise | void, + S = CoreKibanaState, + E = any, + A extends Action = Action +> = ThunkAction; diff --git a/src/core_plugins/kibana/public/store.ts b/src/core_plugins/kibana/public/store.ts index 0ae75249d5b259..47458bc5249fca 100644 --- a/src/core_plugins/kibana/public/store.ts +++ b/src/core_plugins/kibana/public/store.ts @@ -23,11 +23,10 @@ import thunk from 'redux-thunk'; import { QueryLanguageType } from 'ui/embeddable/types'; import { DashboardViewMode } from './dashboard/dashboard_view_mode'; import { reducers } from './reducers'; -import { CoreKibanaState } from './selectors'; const enhancers = [applyMiddleware(thunk)]; -export const store = createStore( +export const store = createStore( reducers, { dashboard: { diff --git a/yarn.lock b/yarn.lock index fabdd2b34c6a9a..2fefc214986a81 100644 --- a/yarn.lock +++ b/yarn.lock @@ -495,12 +495,12 @@ "@types/node" "*" "@types/react" "*" -"@types/react-redux@^5.0.6": - version "5.0.21" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-5.0.21.tgz#98a3a371dfc22c894889f660d7515717639d20f4" +"@types/react-redux@^6.0.6": + version "6.0.6" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.6.tgz#87f1d0a6ea901b93fcaf95fa57641ff64079d277" dependencies: "@types/react" "*" - redux "^3.6.0" + redux "^4.0.0" "@types/react@*", "@types/react@^16.3.14": version "16.3.14" @@ -512,10 +512,6 @@ version "2.3.0" resolved "https://registry.yarnpkg.com/@types/redux-actions/-/redux-actions-2.3.0.tgz#d28d7913ec86ee9e20ecb33a1fed887ecb538149" -"@types/redux@^3.6.31": - version "3.6.31" - resolved "https://registry.yarnpkg.com/@types/redux/-/redux-3.6.31.tgz#40eafa7575db36b912ce0059b85de98c205b0708" - "@types/retry@*", "@types/retry@^0.10.2": version "0.10.2" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.10.2.tgz#bd1740c4ad51966609b058803ee6874577848b37" @@ -8243,7 +8239,7 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash-es@^4.17.4, lodash-es@^4.17.5, lodash-es@^4.2.1: +lodash-es@^4.17.4, lodash-es@^4.17.5: version "4.17.7" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.7.tgz#db240a3252c3dd8360201ac9feef91ac977ea856" @@ -8538,7 +8534,7 @@ lodash@^4.0.0, lodash@^4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" -lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@^4.8.2, lodash@~4.17.4, lodash@~4.17.5: +lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@^4.8.2, lodash@~4.17.4, lodash@~4.17.5: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -10979,7 +10975,7 @@ react-redux-request@^1.5.6: lodash.isequal "^4.5.0" prop-types "^15.6.1" -react-redux@^5.0.6, react-redux@^5.0.7: +react-redux@^5.0.7: version "5.0.7" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" dependencies: @@ -11329,24 +11325,11 @@ redux-actions@2.2.1: lodash-es "^4.17.4" reduce-reducers "^0.1.0" -redux-thunk@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" - redux-thunk@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" -redux@3.7.2, redux@^3.6.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - -redux@4.0.0: +redux@4.0.0, redux@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03" dependencies: @@ -12793,7 +12776,7 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^1.0.3, symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" From 50facf42e90e8119fa3078ca791c3f7fca26472c Mon Sep 17 00:00:00 2001 From: Brandon Kobel Date: Wed, 29 Aug 2018 07:33:09 -0400 Subject: [PATCH 056/173] Fixing a few typos and some links that were updated (#22470) --- docs/development/security/rbac.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/development/security/rbac.asciidoc b/docs/development/security/rbac.asciidoc index a3508b8aced355..9db9dbc0afa8cb 100644 --- a/docs/development/security/rbac.asciidoc +++ b/docs/development/security/rbac.asciidoc @@ -1,7 +1,7 @@ [[development-security-rbac]] === Role-based access control -Role-based access control (RBAC) in {kib} relies upon the {ref}/security-api-privileges.html[privilege APIs] that Elasticsearch exposes. This {kib} to define the privileges that {kib} wishes to grant to users, assign them to the relevant users using roles, and then authorize the user to perform a specific action. This is handled within a secured instance of the `SavedObjectsClient` and available transparently to consumers when using `request.getSavedObjectsClient()` or `savedObjects.getScopedSavedObjectsClient()`. +Role-based access control (RBAC) in {kib} relies upon the {ref}/security-privileges.html#application-privileges[application privileges] that Elasticsearch exposes. This allows {kib} to define the privileges that {kib} wishes to grant to users, assign them to the relevant users using roles, and then authorize the user to perform a specific action. This is handled within a secured instance of the `SavedObjectsClient` and available transparently to consumers when using `request.getSavedObjectsClient()` or `savedObjects.getScopedSavedObjectsClient()`. [[development-rbac-privileges]] ==== {kib} Privileges @@ -76,7 +76,7 @@ Roles that grant <> should be managed using the < Date: Wed, 29 Aug 2018 16:52:27 +0300 Subject: [PATCH 057/173] Add translations for Netflow tutorial (#22138) --- .../tutorials/netflow/common_instructions.js | 237 +++++++++++++++--- .../server/tutorials/netflow/elastic_cloud.js | 6 +- .../kibana/server/tutorials/netflow/index.js | 22 +- .../server/tutorials/netflow/on_prem.js | 6 +- .../netflow/on_prem_elastic_cloud.js | 6 +- 5 files changed, 228 insertions(+), 49 deletions(-) diff --git a/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js b/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js index eaf554d6b21895..f5c1b85bb8c925 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/common_instructions.js @@ -17,34 +17,90 @@ * under the License. */ +/* eslint-disable no-multi-str */ + +import { i18n } from '@kbn/i18n'; + export function createCommonNetflowInstructions() { return { CONFIG: { ON_PREM: { OSX: [ { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + title: i18n.translate('kbn.server.tutorials.netflow.common.config.onPrem.osxTitle', { + defaultMessage: 'Edit the configuration', + }), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPrem.osxTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config/logstash.yml`', + }, + } + ), commands: ['modules:', ' - name: netflow', ' var.input.udp.port: '], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPrem.osxTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data.', + values: { + udpPort: '``', + }, + } + ), }, ], WINDOWS: [ { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + title: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPrem.windowsTitle', + { + defaultMessage: 'Edit the configuration', + } + ), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPrem.windowsTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config\\logstash.yml`', + }, + } + ), commands: ['modules:', ' - name: netflow', ' var.input.udp.port: '], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPrem.windowsTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data.', + values: { + udpPort: '``', + }, + } + ), }, ], }, ON_PREM_ELASTIC_CLOUD: { OSX: [ { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + title: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.osxTitle', + { + defaultMessage: 'Edit the configuration', + } + ), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.osxTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config/logstash.yml`', + }, + } + ), commands: [ 'modules:', ' - name: netflow', @@ -53,16 +109,40 @@ export function createCommonNetflowInstructions() { ' var.elasticsearch.username: elastic', ' var.elasticsearch.password: ', ], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data, ' + - '`` is the URL of Elasticsearch running on Elastic Cloud, and ' + - '`` is the password of the `elastic` user.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.osxTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data, \ + {esUrl} is the URL of Elasticsearch running on Elastic Cloud, and \ + {password} is the password of the {elastic} user.', + values: { + elastic: '`elastic`', + esUrl: '``', + password: '``', + udpPort: '``', + }, + } + ), }, ], WINDOWS: [ { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + title: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.windowsTitle', + { + defaultMessage: 'Edit the configuration', + } + ), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.windowsTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config\\logstash.yml`', + }, + } + ), commands: [ 'modules:', ' - name: netflow', @@ -71,18 +151,42 @@ export function createCommonNetflowInstructions() { ' var.elasticsearch.username: elastic', ' var.elasticsearch.password: ', ], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data, ' + - '`` is the URL of Elasticsearch running on Elastic Cloud, and ' + - '`` is the password of the `elastic` user.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.onPremElasticCloud.windowsTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data, \ + {esUrl} is the URL of Elasticsearch running on Elastic Cloud, and \ + {password} is the password of the {elastic} user.', + values: { + elastic: '`elastic`', + esUrl: '``', + password: '``', + udpPort: '``', + }, + } + ), }, ], }, ELASTIC_CLOUD: { OSX: [ { - title: 'Edit the configuration', - textPre: 'Modify `config/logstash.yml` to set the configuration parameters:', + title: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.osxTitle', + { + defaultMessage: 'Edit the configuration', + } + ), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.osxTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config/logstash.yml`', + }, + } + ), commands: [ 'cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"', @@ -91,15 +195,38 @@ export function createCommonNetflowInstructions() { ' - name: netflow', ' var.input.udp.port: ', ], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data and ' + - '`` is the password of the `elastic` user.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.osxTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data and \ + {password} is the password of the {elastic} user.', + values: { + elastic: '`elastic`', + password: '``', + udpPort: '``', + }, + } + ), }, ], WINDOWS: [ { - title: 'Edit the configuration', - textPre: 'Modify `config\\logstash.yml` to set the configuration parameters:', + title: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.windowsTitle', + { + defaultMessage: 'Edit the configuration', + } + ), + textPre: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.windowsTextPre', + { + defaultMessage: 'Modify {logstashConfigPath} to set the configuration parameters:', + values: { + logstashConfigPath: '`config\\logstash.yml`', + }, + } + ), commands: [ 'cloud.id: "{config.cloud.id}"', 'cloud.auth: "elastic:"', @@ -108,9 +235,19 @@ export function createCommonNetflowInstructions() { ' - name: netflow', ' var.input.udp.port: ', ], - textPost: - 'Where `` is the UDP port on which Logstash will receive Netflow data and ' + - '`` is the password of the `elastic` user.', + textPost: i18n.translate( + 'kbn.server.tutorials.netflow.common.config.elasticCloud.windowsTextPost', + { + defaultMessage: + 'Where {udpPort} is the UDP port on which Logstash will receive Netflow data and \ + {password} is the password of the {elastic} user.', + values: { + elastic: '`elastic`', + password: '``', + udpPort: '``', + }, + } + ), }, ], }, @@ -118,22 +255,42 @@ export function createCommonNetflowInstructions() { SETUP: { OSX: [ { - title: 'Run the Netflow module', - textPre: 'Run:', + title: i18n.translate('kbn.server.tutorials.netflow.common.setup.osxTitle', { + defaultMessage: 'Run the Netflow module', + }), + textPre: i18n.translate('kbn.server.tutorials.netflow.common.setup.osxTextPre', { + defaultMessage: 'Run:', + }), commands: ['./bin/logstash --modules netflow --setup'], - textPost: - 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + - ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + textPost: i18n.translate('kbn.server.tutorials.netflow.common.setup.osxTextPost', { + defaultMessage: + 'The {setupOption} option creates a {netflowPrefix} index pattern in Elasticsearch and imports \ + Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + values: { + setupOption: '`--setup`', + netflowPrefix: '`netflow-*`', + }, + }), }, ], WINDOWS: [ { - title: 'Run the Netflow module', - textPre: 'Run:', + title: i18n.translate('kbn.server.tutorials.netflow.common.setup.windowsTitle', { + defaultMessage: 'Run the Netflow module', + }), + textPre: i18n.translate('kbn.server.tutorials.netflow.common.setup.windowsTextPre', { + defaultMessage: 'Run:', + }), commands: ['bin\\logstash --modules netflow --setup'], - textPost: - 'The `--setup` option creates a `netflow-*` index pattern in Elasticsearch and imports' + - ' Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + textPost: i18n.translate('kbn.server.tutorials.netflow.common.setup.windowsTextPost', { + defaultMessage: + 'The {setupOption} option creates a {netflowPrefix} index pattern in Elasticsearch and imports \ + Kibana dashboards and visualizations. Omit this option for subsequent runs to avoid overwriting existing dashboards.', + values: { + setupOption: '`--setup`', + netflowPrefix: '`netflow-*`', + }, + }), }, ], }, diff --git a/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js b/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js index ddb3afc0488fdb..6ba76c2b5fa9c2 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/elastic_cloud.js @@ -17,6 +17,8 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; + import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; import { createCommonNetflowInstructions } from './common_instructions'; @@ -29,7 +31,9 @@ export function createElasticCloudInstructions() { return { instructionSets: [ { - title: 'Getting Started', + title: i18n.translate('kbn.server.tutorials.netflow.elasticCloudInstructions.title', { + defaultMessage: 'Getting Started', + }), instructionVariants: [ { id: INSTRUCTION_VARIANT.OSX, diff --git a/src/core_plugins/kibana/server/tutorials/netflow/index.js b/src/core_plugins/kibana/server/tutorials/netflow/index.js index 9617fe033b630f..72903b6922eed6 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/index.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/index.js @@ -17,6 +17,10 @@ * under the License. */ +/* eslint-disable no-multi-str */ + +import { i18n } from '@kbn/i18n'; + import { TUTORIAL_CATEGORY } from '../../../common/tutorials/tutorial_category'; import { createOnPremInstructions } from './on_prem'; import { createElasticCloudInstructions } from './elastic_cloud'; @@ -27,12 +31,18 @@ export function netflowSpecProvider() { id: 'netflow', name: 'Netflow', category: TUTORIAL_CATEGORY.SECURITY, - shortDescription: 'Collect Netflow records sent by a Netflow exporter.', - longDescription: - 'The Logstash Netflow module collects and parses network flow data, ' + - ' indexes the events into Elasticsearch, and installs a suite of Kibana dashboards.' + - ' This module support Netflow Version 5 and 9.' + - ' [Learn more]({config.docs.logstash}/netflow-module.html).', + shortDescription: i18n.translate('kbn.server.tutorials.netflow.tutorialShortDescription', { + defaultMessage: 'Collect Netflow records sent by a Netflow exporter.', + }), + longDescription: i18n.translate('kbn.server.tutorials.netflow.tutorialLongDescription', { + defaultMessage: + 'The Logstash Netflow module collects and parses network flow data, \ +indexes the events into Elasticsearch, and installs a suite of Kibana dashboards. \ +This module support Netflow Version 5 and 9. [Learn more]({linkUrl}).', + values: { + linkUrl: '{config.docs.logstash}/netflow-module.html', + }, + }), completionTimeMinutes: 10, //previewImagePath: 'kibana-apache.png', TODO onPrem: createOnPremInstructions(), diff --git a/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js b/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js index 6fb41ee0eb9d36..cc060611361bdc 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/on_prem.js @@ -17,6 +17,8 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; + import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; import { createCommonNetflowInstructions } from './common_instructions'; @@ -29,7 +31,9 @@ export function createOnPremInstructions() { return { instructionSets: [ { - title: 'Getting Started', + title: i18n.translate('kbn.server.tutorials.netflow.onPremInstructions.title', { + defaultMessage: 'Getting Started', + }), instructionVariants: [ { id: INSTRUCTION_VARIANT.OSX, diff --git a/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js b/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js index 87f647882518f5..49674621b70be8 100644 --- a/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js +++ b/src/core_plugins/kibana/server/tutorials/netflow/on_prem_elastic_cloud.js @@ -17,6 +17,8 @@ * under the License. */ +import { i18n } from '@kbn/i18n'; + import { INSTRUCTION_VARIANT } from '../../../common/tutorials/instruction_variant'; import { createLogstashInstructions } from '../../../common/tutorials/logstash_instructions'; import { @@ -35,7 +37,9 @@ export function createOnPremElasticCloudInstructions() { return { instructionSets: [ { - title: 'Getting Started', + title: i18n.translate('kbn.server.tutorials.netflow.onPremElasticCloudInstructions.title', { + defaultMessage: 'Getting Started', + }), instructionVariants: [ { id: INSTRUCTION_VARIANT.OSX, From 169fdf9566aa467dcda90f2c05a7198eef4927f6 Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Wed, 29 Aug 2018 10:07:48 -0400 Subject: [PATCH 058/173] Update snapshots --- .../__test__/__snapshots__/get_clusters_summary.test.js.snap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x-pack/plugins/monitoring/server/lib/cluster/__test__/__snapshots__/get_clusters_summary.test.js.snap b/x-pack/plugins/monitoring/server/lib/cluster/__test__/__snapshots__/get_clusters_summary.test.js.snap index 7a27dc22e1d412..fcb05ad52ead25 100644 --- a/x-pack/plugins/monitoring/server/lib/cluster/__test__/__snapshots__/get_clusters_summary.test.js.snap +++ b/x-pack/plugins/monitoring/server/lib/cluster/__test__/__snapshots__/get_clusters_summary.test.js.snap @@ -8,6 +8,7 @@ Array [ "enabled": true, }, }, + "apm": undefined, "beats": Object { "beats": Object { "total": null, @@ -108,6 +109,7 @@ Array [ "enabled": true, }, }, + "apm": undefined, "beats": Object { "beats": Object { "total": null, @@ -213,6 +215,7 @@ Array [ "enabled": true, }, }, + "apm": undefined, "beats": Object { "beats": Object { "total": null, @@ -313,6 +316,7 @@ Array [ "enabled": true, }, }, + "apm": undefined, "beats": Object { "beats": Object { "total": null, From 7ecd1357d87430e79237b2e01195186303941e3a Mon Sep 17 00:00:00 2001 From: Brandon Kobel Date: Wed, 29 Aug 2018 11:06:27 -0400 Subject: [PATCH 059/173] Changing doc link from ES to Stack docs (#22497) --- docs/development/security/rbac.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/security/rbac.asciidoc b/docs/development/security/rbac.asciidoc index 9db9dbc0afa8cb..5651c776360c1a 100644 --- a/docs/development/security/rbac.asciidoc +++ b/docs/development/security/rbac.asciidoc @@ -1,7 +1,7 @@ [[development-security-rbac]] === Role-based access control -Role-based access control (RBAC) in {kib} relies upon the {ref}/security-privileges.html#application-privileges[application privileges] that Elasticsearch exposes. This allows {kib} to define the privileges that {kib} wishes to grant to users, assign them to the relevant users using roles, and then authorize the user to perform a specific action. This is handled within a secured instance of the `SavedObjectsClient` and available transparently to consumers when using `request.getSavedObjectsClient()` or `savedObjects.getScopedSavedObjectsClient()`. +Role-based access control (RBAC) in {kib} relies upon the {xpack-ref}/security-privileges.html#application-privileges[application privileges] that Elasticsearch exposes. This allows {kib} to define the privileges that {kib} wishes to grant to users, assign them to the relevant users using roles, and then authorize the user to perform a specific action. This is handled within a secured instance of the `SavedObjectsClient` and available transparently to consumers when using `request.getSavedObjectsClient()` or `savedObjects.getScopedSavedObjectsClient()`. [[development-rbac-privileges]] ==== {kib} Privileges From 5c136a115be9b73be31327848abdee74500e143d Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Wed, 29 Aug 2018 13:36:33 -0400 Subject: [PATCH 060/173] Fix tests --- .../cluster/fixtures/multicluster.json | 24 +++++++++++++++++++ .../monitoring/cluster/fixtures/overview.json | 8 +++++++ 2 files changed, 32 insertions(+) diff --git a/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/multicluster.json b/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/multicluster.json index 259d3e962c594d..4afa415e3a6358 100644 --- a/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/multicluster.json +++ b/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/multicluster.json @@ -85,6 +85,14 @@ "memory_limit": 0, "count": 0 }, + "apm": { + "totalEvents": null, + "bytesSent": null, + "beats": { + "total": null, + "types": [] + } + }, "beats": { "totalEvents": null, "bytesSent": null, @@ -192,6 +200,14 @@ "memory_limit": 0, "count": 0 }, + "apm": { + "totalEvents": null, + "bytesSent": null, + "beats": { + "total": null, + "types": [] + } + }, "beats": { "totalEvents": null, "bytesSent": null, @@ -301,6 +317,14 @@ "memory_limit": 1501560832, "count": 1 }, + "apm": { + "totalEvents": null, + "bytesSent": null, + "beats": { + "total": null, + "types": [] + } + }, "beats": { "totalEvents": null, "bytesSent": null, diff --git a/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/overview.json b/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/overview.json index faa64e2c4cdb55..e86d58bfbdc4eb 100644 --- a/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/overview.json +++ b/x-pack/test/api_integration/apis/monitoring/cluster/fixtures/overview.json @@ -87,6 +87,14 @@ "memory_limit": 1501560832, "count": 1 }, + "apm": { + "totalEvents": null, + "bytesSent": null, + "beats": { + "total": null, + "types": [] + } + }, "beats": { "totalEvents": null, "bytesSent": null, From 57940f16489ad88e35b43dbde539f5fc87bf3fcc Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 29 Aug 2018 12:18:00 -0600 Subject: [PATCH 061/173] add aria-label to search input on dashboard listing view (#22467) --- .../listing/__snapshots__/dashboard_listing.test.js.snap | 3 +++ .../kibana/public/dashboard/listing/dashboard_listing.js | 1 + 2 files changed, 4 insertions(+) diff --git a/src/core_plugins/kibana/public/dashboard/listing/__snapshots__/dashboard_listing.test.js.snap b/src/core_plugins/kibana/public/dashboard/listing/__snapshots__/dashboard_listing.test.js.snap index 664928fea677c4..f8dd924d09f419 100644 --- a/src/core_plugins/kibana/public/dashboard/listing/__snapshots__/dashboard_listing.test.js.snap +++ b/src/core_plugins/kibana/public/dashboard/listing/__snapshots__/dashboard_listing.test.js.snap @@ -99,6 +99,7 @@ exports[`after fetch initialFilter 1`] = ` grow={true} > Date: Wed, 29 Aug 2018 12:31:36 -0600 Subject: [PATCH 062/173] Implement inspector for Saved Searches (#22376) * Implement inspector for Saved Searches * add inspect top nav to discover app * add functional test, add support for empty results * clean up functional test names * create inspector request before processing response --- .../public/discover/controllers/discover.js | 49 +++++++++++++ .../discover/embeddable/search_embeddable.js | 9 +++ .../discover/embeddable/search_template.html | 1 + .../segmented_search_request.js | 2 +- src/ui/public/doc_table/doc_table.js | 21 ++++++ test/functional/apps/discover/_inspector.js | 70 +++++++++++++++++++ test/functional/apps/discover/index.js | 1 + 7 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 test/functional/apps/discover/_inspector.js diff --git a/src/core_plugins/kibana/public/discover/controllers/discover.js b/src/core_plugins/kibana/public/discover/controllers/discover.js index 67f6b22b7ed1d8..d449bdcfef832e 100644 --- a/src/core_plugins/kibana/public/discover/controllers/discover.js +++ b/src/core_plugins/kibana/public/discover/controllers/discover.js @@ -55,6 +55,9 @@ import '../components/fetch_error'; import { getPainlessError } from './get_painless_error'; import { showShareContextMenu } from 'ui/share'; import { getUnhashableStatesProvider } from 'ui/state_management/state_hashing'; +import { Inspector } from 'ui/inspector'; +import { RequestAdapter } from 'ui/inspector/adapters'; +import { getRequestInspectorStats, getResponseInspectorStats } from 'ui/courier/utils/courier_inspector_utils'; const app = uiModules.get('apps/discover', [ 'kibana/notify', @@ -159,6 +162,9 @@ function discoverController( location: 'Discover' }); const getUnhashableStates = Private(getUnhashableStatesProvider); + const inspectorAdapters = { + requests: new RequestAdapter() + }; $scope.getDocLink = getDocLink; $scope.intervalOptions = intervalOptions; @@ -201,6 +207,15 @@ function discoverController( objectType: 'search', }); } + }, { + key: 'inspect', + description: 'Open Inspector for search', + testId: 'openInspectorButton', + run() { + Inspector.open(inspectorAdapters, { + title: savedSearch.title + }); + } }]; // the actual courier.SearchSource @@ -554,9 +569,38 @@ function discoverController( segmented.setSortFn(sortFn); segmented.setSize($scope.opts.sampleSize); + let inspectorRequests = []; + function logResponseInInspector(resp) { + if (inspectorRequests.length > 0) { + const inspectorRequest = inspectorRequests.shift(); + inspectorRequest + .stats(getResponseInspectorStats($scope.searchSource, resp)) + .ok({ json: resp }); + } + } + // triggered when the status updated segmented.on('status', function (status) { $scope.fetchStatus = status; + if (status.complete === 0) { + // starting new segmented search request + inspectorAdapters.requests.reset(); + inspectorRequests = []; + } + + if (status.remaining > 0) { + const inspectorRequest = inspectorAdapters.requests.start( + `Segment ${$scope.fetchStatus.complete}`, + { + description: `This request queries Elasticsearch to fetch the data for the search.`, + }); + inspectorRequest.stats(getRequestInspectorStats($scope.searchSource)); + $scope.searchSource.getSearchRequestBody().then(body => { + inspectorRequest.json(body); + }); + inspectorRequests.push(inspectorRequest); + } + }); segmented.on('first', function () { @@ -564,6 +608,7 @@ function discoverController( }); segmented.on('segment', (resp) => { + logResponseInInspector(resp); if (resp._shards.failed > 0) { $scope.failures = _.union($scope.failures, resp._shards.failures); $scope.failures = _.uniq($scope.failures, false, function (failure) { @@ -572,6 +617,10 @@ function discoverController( } }); + segmented.on('emptySegment', function (resp) { + logResponseInInspector(resp); + }); + segmented.on('mergedSegment', function (merged) { $scope.mergedEsResp = merged; diff --git a/src/core_plugins/kibana/public/discover/embeddable/search_embeddable.js b/src/core_plugins/kibana/public/discover/embeddable/search_embeddable.js index 8b076ce825e2e0..5a138f0897b881 100644 --- a/src/core_plugins/kibana/public/discover/embeddable/search_embeddable.js +++ b/src/core_plugins/kibana/public/discover/embeddable/search_embeddable.js @@ -22,6 +22,7 @@ import { Embeddable } from 'ui/embeddable'; import searchTemplate from './search_template.html'; import * as columnActions from 'ui/doc_table/actions/columns'; import { getTime } from 'ui/timefilter/get_time'; +import { RequestAdapter } from 'ui/inspector/adapters'; export class SearchEmbeddable extends Embeddable { constructor({ onEmbeddableStateChanged, savedSearch, editUrl, loader, $rootScope, $compile }) { @@ -38,6 +39,13 @@ export class SearchEmbeddable extends Embeddable { this.$rootScope = $rootScope; this.$compile = $compile; this.customization = {}; + this.inspectorAdaptors = { + requests: new RequestAdapter() + }; + } + + getInspectorAdapters() { + return this.inspectorAdaptors; } emitEmbeddableStateChange(embeddableState) { @@ -84,6 +92,7 @@ export class SearchEmbeddable extends Embeddable { this.searchScope.description = this.savedSearch.description; this.searchScope.searchSource = this.savedSearch.searchSource; + this.searchScope.inspectorAdapters = this.inspectorAdaptors; const timeRangeSearchSource = this.searchScope.searchSource.create(); timeRangeSearchSource.setField('filter', () => { diff --git a/src/core_plugins/kibana/public/discover/embeddable/search_template.html b/src/core_plugins/kibana/public/discover/embeddable/search_template.html index a6b763f9b4ca7e..3fbcb16ea17da3 100644 --- a/src/core_plugins/kibana/public/discover/embeddable/search_template.html +++ b/src/core_plugins/kibana/public/discover/embeddable/search_template.html @@ -13,5 +13,6 @@ on-move-column="moveColumn" on-remove-column="removeColumn" data-test-subj="embeddedSavedSearchDocTable" + inspector-adapters="inspectorAdapters" > diff --git a/src/ui/public/courier/fetch/request/segmented_search_request/segmented_search_request.js b/src/ui/public/courier/fetch/request/segmented_search_request/segmented_search_request.js index 3245a0f03dee07..6ab49eee4fe655 100644 --- a/src/ui/public/courier/fetch/request/segmented_search_request/segmented_search_request.js +++ b/src/ui/public/courier/fetch/request/segmented_search_request/segmented_search_request.js @@ -233,7 +233,7 @@ export function SegmentedSearchRequestProvider(Private, config) { this.resp = _.omit(this._mergedResp, '_bucketIndex'); if (firstHits) this._handle.emit('first', seg); - if (gotHits) this._handle.emit('segment', seg); + gotHits ? this._handle.emit('segment', seg) : this._handle.emit('emptySegment', seg); if (haveHits) this._handle.emit('mergedSegment', this.resp); } diff --git a/src/ui/public/doc_table/doc_table.js b/src/ui/public/doc_table/doc_table.js index b7e47a9c9d6258..479f59beea9cb6 100644 --- a/src/ui/public/doc_table/doc_table.js +++ b/src/ui/public/doc_table/doc_table.js @@ -27,6 +27,7 @@ import './components/table_header'; import './components/table_row'; import { dispatchRenderComplete } from '../render_complete'; import { uiModules } from '../modules'; +import { getRequestInspectorStats, getResponseInspectorStats } from '../courier/utils/courier_inspector_utils'; import { getLimitedSearchResultsMessage } from './doc_table_strings'; @@ -49,6 +50,7 @@ uiModules.get('kibana') onChangeSortOrder: '=?', onMoveColumn: '=?', onRemoveColumn: '=?', + inspectorAdapters: '=?', }, link: function ($scope, $el) { const notify = new Notifier(); @@ -132,7 +134,26 @@ uiModules.get('kibana') } function startSearching() { + let inspectorRequest = undefined; + if (_.has($scope, 'inspectorAdapters.requests')) { + $scope.inspectorAdapters.requests.reset(); + inspectorRequest = $scope.inspectorAdapters.requests.start('Data', { + description: `This request queries Elasticsearch to fetch the data for the search.`, + }); + inspectorRequest.stats(getRequestInspectorStats($scope.searchSource)); + $scope.searchSource.getSearchRequestBody().then(body => { + inspectorRequest.json(body); + }); + } $scope.searchSource.onResults() + .then(resp => { + if (inspectorRequest) { + inspectorRequest + .stats(getResponseInspectorStats($scope.searchSource, resp)) + .ok({ json: resp }); + } + return resp; + }) .then(onResults) .catch(error => { notify.error(error); diff --git a/test/functional/apps/discover/_inspector.js b/test/functional/apps/discover/_inspector.js new file mode 100644 index 00000000000000..5ca2497ef84e48 --- /dev/null +++ b/test/functional/apps/discover/_inspector.js @@ -0,0 +1,70 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import expect from 'expect.js'; + +export default function ({ getService, getPageObjects }) { + const PageObjects = getPageObjects(['common', 'header', 'visualize']); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + + const STATS_ROW_NAME_INDEX = 0; + const STATS_ROW_VALUE_INDEX = 1; + function getHitCount(requestStats) { + const hitsCountStatsRow = requestStats.find((statsRow) => { + return statsRow[STATS_ROW_NAME_INDEX] === 'Hits'; + }); + return hitsCountStatsRow[STATS_ROW_VALUE_INDEX]; + } + + describe('inspect', () => { + before(async () => { + await esArchiver.loadIfNeeded('logstash_functional'); + await esArchiver.load('discover'); + // delete .kibana index and update configDoc + await kibanaServer.uiSettings.replace({ + 'dateFormat:tz': 'UTC', + 'defaultIndex': 'logstash-*' + }); + + await PageObjects.common.navigateToApp('discover'); + }); + + afterEach(async () => { + await PageObjects.visualize.closeInspector(); + }); + + it('should display request stats with no results', async () => { + await PageObjects.visualize.openInspector(); + const requestStats = await PageObjects.visualize.getInspectorTableData(); + + expect(getHitCount(requestStats)).to.be('0'); + }); + + it('should display request stats with results', async () => { + await PageObjects.header.setAbsoluteRange('2015-09-19 06:31:44.000', '2015-09-23 18:31:44.000'); + + await PageObjects.visualize.openInspector(); + const requestStats = await PageObjects.visualize.getInspectorTableData(); + + expect(getHitCount(requestStats)).to.be('14004'); + }); + + }); +} diff --git a/test/functional/apps/discover/index.js b/test/functional/apps/discover/index.js index 2aff236694c939..4c8441d5e40ded 100644 --- a/test/functional/apps/discover/index.js +++ b/test/functional/apps/discover/index.js @@ -37,5 +37,6 @@ export default function ({ getService, loadTestFile }) { loadTestFile(require.resolve('./_sidebar')); loadTestFile(require.resolve('./_source_filters')); loadTestFile(require.resolve('./_large_string')); + loadTestFile(require.resolve('./_inspector')); }); } From 10e88ab6b3a6b995580543b0392b5d50ee6e5236 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 29 Aug 2018 11:33:27 -0700 Subject: [PATCH 063/173] [Monitoring] Fix logging when Monitoring reinitializes with HUP signal (#22464) --- x-pack/plugins/monitoring/init.js | 2 +- .../collectors/get_ops_stats_collector.js | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/monitoring/init.js b/x-pack/plugins/monitoring/init.js index 84c23c3774b6fb..24aecb4a604d30 100644 --- a/x-pack/plugins/monitoring/init.js +++ b/x-pack/plugins/monitoring/init.js @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { LOGGING_TAG, KIBANA_MONITORING_LOGGING_TAG, } from './common/constants'; +import { LOGGING_TAG, KIBANA_MONITORING_LOGGING_TAG } from './common/constants'; import { requireUIRoutes } from './server/routes'; import { instantiateClient } from './server/es_client/instantiate_client'; import { initMonitoringXpackInfo } from './server/init_monitoring_xpack_info'; diff --git a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.js b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.js index baad3916934513..6528abd7a361a3 100644 --- a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.js +++ b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.js @@ -4,7 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ -import { KIBANA_STATS_TYPE_MONITORING } from '../../../common/constants'; +import { + LOGGING_TAG, + KIBANA_MONITORING_LOGGING_TAG, + KIBANA_STATS_TYPE_MONITORING, +} from '../../../common/constants'; import { opsBuffer } from './ops_buffer'; /* @@ -34,11 +38,17 @@ export function getOpsStatsCollector(server) { // `process` is a NodeJS global, and is always available without using require/import process.on('SIGHUP', () => { - this.log.info('Re-initializing Kibana Monitoring due to SIGHUP'); + server.log( + ['info', LOGGING_TAG, KIBANA_MONITORING_LOGGING_TAG], + 'Re-initializing Kibana Monitoring due to SIGHUP' + ); setTimeout(() => { stop(); start(); - this.log.info('Re-initialized Kibana Monitoring due to SIGHUP'); + server.log( + ['info', LOGGING_TAG, KIBANA_MONITORING_LOGGING_TAG], + 'Re-initialized Kibana Monitoring due to SIGHUP' + ); }, 5 * 1000); // wait 5 seconds to avoid race condition with reloading logging configuration }); From 3e528473b1c8d58796b2a65d01809652aa17bee6 Mon Sep 17 00:00:00 2001 From: Alex F Date: Wed, 29 Aug 2018 17:51:19 -0400 Subject: [PATCH 064/173] [WIP] Logs Sample Data (#22276) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log sample data, check ✅ --- .../flights/dashboard.png | Bin 828616 -> 72913 bytes .../sample_data_resources/logs/dashboard.png | Bin 0 -> 100448 bytes src/server/sample_data/data_sets/index.js | 1 + .../sample_data/data_sets/logs/index.js | 167 +++++++++++++ .../sample_data/data_sets/logs/logs.json.gz | Bin 0 -> 1448053 bytes .../data_sets/logs/saved_objects.js | 236 ++++++++++++++++++ .../sample_data/routes/lib/load_data.test.js | 14 +- src/server/sample_data/sample_data_mixin.js | 2 + test/functional/apps/home/_sample_data.js | 44 +++- 9 files changed, 458 insertions(+), 6 deletions(-) create mode 100644 src/core_plugins/kibana/public/home/sample_data_resources/logs/dashboard.png create mode 100644 src/server/sample_data/data_sets/logs/index.js create mode 100644 src/server/sample_data/data_sets/logs/logs.json.gz create mode 100644 src/server/sample_data/data_sets/logs/saved_objects.js diff --git a/src/core_plugins/kibana/public/home/sample_data_resources/flights/dashboard.png b/src/core_plugins/kibana/public/home/sample_data_resources/flights/dashboard.png index 31186a52f10f962ec236d846a69c4b90b225cf6d..00ff0b6605d6999d51d1feeb4605be57f1eee9d5 100644 GIT binary patch literal 72913 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

NA1@wEm!V>wK}jTd|qtvk7vAA|)YoxPO>Jr!&wf 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

vGy2rQbXEdd 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 YA5E&QWG5)sG5`Po07*qoM6N<$f~KKs3IG5A literal 828616 zcmcG#byyqS*Df52q(FhTxCTlo6o*oROR?f!+^x7f1S`@Och}mU3h|TB5&(RR8 zkJrs-002g{xrm5@q=*Qmf`hH8xs?e3@cDaO0#HTSoS^U6b1y9ZCDQvWu<#Edz}`n+ zf2WF9ucheNQ2c-B5R-LQX1?(^5d{k4S>aVu5m*KIw_^8GW|jry%qvvmsCSJXEv!^O zx!Sa?HQugzUwa>W?>vA2k4SoN282`r>^StaxBgb&)zsCW z>yv<z~GD_595i~pIBuRKSd~G|J8Sp8PyutE!AXCQ5QO# zAeYK8xFHr^?Ihfg-Nt2P8j=lpE#E1*0C@#XWjxynbJVpk9_HHlk!=?4=;9%I@|z4K zrb~~hc9F_>skUrndL?T64F0>;L5Uif)+0pqf?DS6QhBpS@yBg6nXQt<@ejL5?D*ua0$1tb!G`RyC)%Xit| zcd2?qXbgkxUb+6pK^N|d;(CiDDf~O+g~pE(;UAHPzg{f-RH2rLis^UXq@VQT6K#q@ z+LYhK{2{VOhdCoGJ6=dfc=;({;6YJVuhawVM$^bETXrTvrShP{e$`~&B= z#0KgO&W zxb%(C+t&-C%GtPVkwg+Q)XY?6v`24dUulJq|EBo!^1JBdTaD=D&slE;-Uq7)Eei99 z@<{Bzy^I!!GB@V0B45ZLlP8E#i;?aJ4wwz3Z3>*RiUk_V*k^rH`WD+08y5Q*YdR<^ z#bT0JB=s@3Ns+qHd|Gu{$%5(f^(Fcxd6@WzOztVu3DKIk8l}Zoi};%0!w))PHp16g zV_8GHq`Safri0Xm zCPpSKTkeDIgEWJEakljBU$P1k3vLQdRO5?di&Iq^%h`Vos?@4tsg9`VlzS*#7Fo2D zNREh($jcVQm)FT3`fK9g_Hh{Bv7!!t9DW>@9@Zs@G8z0+IjJsI(p};*o7t3n$8q`f zQfz-~-)y>ho~sT$rEgT<))-{8X5^Ff>%)Mh(&R7a7z4^A9zNQ-!W~qiIX03~*&ZGx_(#HkoDt(8IO`{l)dCnri;>MzM&9(X3 zIK|||4ElJ~?!kCt=DB7Z)`&Pv6g&&i7l|n=ke) zVZi;Ni|hS*7!GM7i70UiXTb+Ii_af7N#2p#e6;#V#xeOJ*`Q{+pm#TlttZhk)uLsk zVdN&~d!c0LfM$$%3`7}AIo&+nJZum5Lr_w%M!ZJg0=Z*0_Z;7fSHdk5=5$x*o0;t8 zKY273dtcvIEt@Q`1+wRb>q$0^_rquDhxjyF!5L|~tzyoh|3S*}?|LZe#p9921Z zm2*|;*yA`tfLUP3OVi7~4XG`#?GR!CQG}R4#vZU9lpib~fXHOe;!$c)UOx*!1_M`j z_D)b*ELQa+mB*_xe|BE1hpbnv?@$p?O-61L?}la)Ynk#Tne!?0RkPuJa?jHGlo6B^ zWD=N`ES8GTS?o3Y({AY`cfURz2H2q zJO&qwgQ|I$y{3J3L!O(Gmy?&t!?;!Z!jkFrsC}X`>&~k7RO8QW-L(9VEJmwIw}a=m z=Ml6oUmL#0e&@9ne8zAi^1bDE+V_BGpiY-ghOB(MVmrzKrb4blmIbCpu13KgCKKsF zp&|(j$$iVHhys}lP9|1s`Nh7A@eAa=v(UuQCK(6QPur4}$y_>K_I^kHVwgN{Mss)|CjGSJbeR4y327#CCTLk76Yy9RM|4%RFt|kMaX2Fe6x$bl&PZ8CCZDasGLK z_HYi-@Yj2zKG~$=vsaY6GSm`(s1wd8uf5vTWhVyzu^NZOQ2a$vEw}v6xprj#&&=`M z?-KLTxdFYTwR4dUoR6qdsFVKpmO67sx38XZcKfcJuV5}E_que9Enke4Rg^BATlF7n zGpu~*A0^wU+(qui`@)*RufX5ID@zBJjYaCUT;&aBL!nGqTHIQg^=)gMK1(yv<}{vl z%JoBau5m%JoQJH7mF9hORnt|?TdP~nytS@nOSkq3c4|8|V=J|uPFHw`w`bM6J3vq5 zD^8U}mDmI7qoI{+L!S$HonAw`ikgKgfhvTTQea#aU)Q;Ev9Reb^QtrKyXX*}?`{gk4%)W~3?Ca34z=y67JtqFDRgJFTmY^I;~Pb|HgjXb+$^HXH& zQ*A%G${ceo?M=AD>y8hHT-{vD*3#VTp}Nzp!0VmmV-HHN@h4X3#*##1L=dRl>yw+( zjmnn!z=uOK{Pv`$FLPV-&Us7q_r2#KI}x5J{N<1__@kvQ9JBXlv_NayKBO5wg$zfo z*Byl{+)JHV+&FixsXW!4hb^Sw`nbXEjaXeOu1haUAI2_^Io8PC1P{Go3iIRDI7y%& zK?2C+gUV&nedD3@a6;Qgpq`|jbbFGIC7j~n@jIU~bHYjPgCc`(_cK{Jw3~APfEwHP zyZiH^$wUbXeD-aa1Ueiy;&xY&``NT%cgV*xb0jYRzyT?MiM;QtpLl!d1+A@b;8_R8 zp3Rk-PQ&J}1qQZ`odBOl0BgS-ZcmsSAC@2`3&8*;4Wm^r(WZIVE-O{v(Q)3HIED?q z3s+Y&Oiw9X6bS^1MYsE`;RpZ_(ENQPNh-ZP0RWIP%vIE#)MaIOjBKr$4UBCKO_<%R z?GR@J0DNvdh)rt~Cj&}1YbzT^9yk6s|D3^t*#5hl}RQ$i2Bfjy!`Re3k$HT(n>gvku`hnTj!Hk8Co12@3m7Rs1 zoe6OUlcT$hlYtwPjU)AcUF3gXN7Tg8$idvs$=ue4^6zyG3~imA_}{$wd!zsJ`mf(< z;%5GT?_}fn-`zrVkmc_Y7B*&9mj82YL{q-MdwCSh-At_1Ma`{EY#b5y5a3|t=H&aQ z!T;yb|Gnk^XsYplo3gWUaQ)Aw|KreqH|1mb+lBwprT=hedw$kEdkI3@8-7qE zn5_x$kp7V{4RTXM+7y{*o$04_%$Wc zzq9!5qFiMm`R<;aeW1YtY|>iCi#>ZQ^sg+p^1f(*vkdoNugw9JuQ}hn`M0`MLM4O@ z(3n)^07TM|_gF*&&?EniMM(4+2jJx^Z3t}+lJCR2(X-FKDF4br>4QEF5Q3kDYm;CB zM8*5Q{YwM%HWDA@D}a)rN%9*Spz2qSy6nGWb4ag4J|j%wjsMWGF=C9?err(tJ0k=@ z-(*1|0rcywMoA;asDC#x^4}RDUz93;02aVl4E!B2Qt?iB#ghMu3n2#n)n8i>wYyCV zML1Im*AVr;{Uvs1Ozi#B?F2Njzu<{(EPyeso$dBWd+fJIRj9jT!y_|CRaL`|? zcERzJ(HZ*+(7z51j+M?u@{NsRL;8R1S3)G{57+Ha_zyVO$39O>4;j4&N%((nvPtSE zql>sZ5$=8rQO;4}Q*NB#{Q+r`T-fY2j%GS{iSs!?# z_!}qtcU=i6S=mEypHqWV*PIRA_h^NZ`Y%3=1d*||XLufQCvn+l$I`0~_Dc{lX>w%k zYt>mry%GEIIqOs4>xb(akVr80$HTQsqhQ-9dex%0<*irAWOf}$r(B9tJs;L(zr5_n zeDp2(%EdtZS%_h1F~qazm2Vg+cyPYb$mHr^p~`B3z4IP@xf2LtjAKwE*nN?TfF(** z#*#n%=lDYaYrw0_(F=2_ymB)R!1|PZ(sr5}8esdOMzeQJ_pKNP{)N?9-68KUk47c7 zz?*l+%`~!gAa#B2ud}(9Lg*s3`3U$Y(qw`0}=hSVmh2?AYik5 zrVl`BaU5FD&wxa;v_DKfv>W#PaC>Dk6d#xT(Gue>7xH+A4#ItDe!e|2+2m}gQE!v> zup{^s1ozk5#tPv$iAznyA1Y=IED5}clryAjU*y{bJ!Y`OyhC> zB^5`Xb+g!V4ogn4H-aTfdKZ%EddnG0k!#@m$6?0~T`1jZvBsR+7-_}rCXM-4 zD8)5WMp+?Ic8mf28_h{Kjv$eV9-WQj>Fa>^9W904RV5zV}x51Ec%L6T7i?77Y zac49RVMo0T0MzXuEYjpQ@r)&r^_pcp-F~t@hK`hRl;BgW$92UJ} zd-)m6CWEo3)~ML{-CR{;r0pT&YDja7wU+l{3)XP=Tu{Xl$#4IuPaV=4v!)N@A~?kS z6!*L-<;7~{@qWlalE)}P_ziW%dsa%v?Ig400KK6E77!6wCes_-?MZmykeO2j=GrBY zOXHa-sdm8$e$<@GlSQ>;c5=$*BKvl?V3v_|Js%@4ppndB{+frhRWB3r`Ky%%?rECq zYLsrPhx;s8IW&13;A?hmoNlH|3~+Nhc;OD6Ld_!4&Qh`8TiH-I*SybEI6Y^G<^-@_ z#XIII?frRAD2oh$_j9Buld2>H^JJ`pxIaCo7@gC043qqh^HrYzGPc~%I`QCCUku{5 z-YnOi2o)JA%ulCpe}XrYj+}#I`%Z;{w@{9q>s3#dU?f0GW}4$Dca_tglKj@!u}~2Y z(=(uz`kCjtAJCyj^nCPH;&0^C%Fg|{@{En7w@v71_Xy|Ug|lIkS`h(m5N>t;8z7{+ z1Iimw>=PU3JEbQCmFQQ#AT_fF0D@RAf{$7Hg0i3=lKCSEZJkR49CGB2}_t5Yu1FlTk+pMcKa#q*y+^lwz_w3xeb zoZvG*-CNWF4%9&REiu8@CvOnQ-}AV2j!bhKzw9v+;LwRmNK{VQXpk0kog}=D=-CJM z5k2oq)k%y)!~+xGAXQ_!mOutbPHahkE2x4Os>qGm^3By~b97O79IZ$)At_ET*ANcgjMuXHo^X3mJvPYJM~3@!xcZAd91%$95gwhE(qr?Krgn$a z+-guFWc*Bc@TuQPo(%vnvEL0Z)oT}^`NE}tz7Y)K#DKl0ae4!Dtv0p{i{W5EOjJ7= z>{j!vMs`#MNaKqBN_8Lq;Ni^$F(IZl%~}f+pX6?n$~8>b1;p=;%An9hzJ(GQ@Kx*` z5fTDJF%rwWn*ciK$MXF*=0$L#`Uoz!(#qyVBpigwQV^KY5-Zt=tuh;^pT~t->J5O9Wv;EQmQ&&U^~0rd)HLmtyn75x$k6 zC!=yL5~AlZ2O`Vjz_N5*%wjR9K_acqfZR!Lk7bkx?* zzaAVe<}cNm!>;P<1NpR+XjF?+W|Wvj$a8I=xc~W18>(Fue_zcG{Z$gOd!8Gj(pyw!)Za5ir22B}+ZLwP$~(*qNices>}#SlewQ5FK9lFn(-0Fq^D$ zHd5TM=5-#%mWgk|)UD}0t6?@U7{>seVNfeet+85|BvZ#gwI-Xk)S(~qD%~NZ;h)@n ze6|K;?BRzc?^%)}GNl2xAsl3YYmMNSQSK%eD}(5H$)4tplGO&W)s$*=G}%<@rMlyg zsUn4)IW^Alu*wBGF(+dnlq!v2iqFFwfG3LZ5;Ut>!LgznU@K`eVaM!;)~k%~c64nFQw zj%4LTwx4jvy`z7W`0PG2e0BM7746yQ)|q9* zUM~3Ypg6VV>^Yevn2tlJMdDQsK=vi3+$av(s@`tv~ zx0M^-@(bk2m0wP~=)aofJT)OnWt1t*tMg!8=NVP>!KZna^-Xs&H&{Af#7^htK+IN> zS$foQ+dZ=`)^AdduaO+qiyTJ@gJBS`blvQ)Xj|PLaxS|}bK6*NyjkL62{b4MYeV*B z-%D(Af!(vtjU;}^gPUKJukjHA5`1j>!AUWx>%J9t8X#ZlGp>3}cq8yql)kx}-8~G! zLNF3*-5LPaSI<+1lEN%JUM~=9G2VwJQRSF1h6ZPN4re(mHBL~7p2|$x8pJP8!c$ADY4(1wE*9aTgh1~=uqr?eOlB+#pG-CxMaWG$R#2OcetO-29@Zt{HZ&; z%jr;*Ag6IFXeMPNRnv2Z-`=jv%>fStyzibf#!xs8vx%Dv$fP*mcP}r6nZERC_Y!zG z5oz2ABK_0J?|H@XB{Mq|bEQv_GwM|8W_i;YF3|JNO@f@zgDihhzHx8u+hG0)wN8oP z?Iv#HcCzI#@O9`%FFMH?^X-9Nd^pi~t>v8CE829o>=#6=l+&8H^07cLA{OhRP0i4{ zkGHI(Z*7mHgrV|y)eMd8{I;>>V)#!<$H*C!5-TDSKan^R1fI7&M2|Mdz!<8>sLCv% z0k}(&eF{9q0=gUYj|Vwxu125f8x(HY^7S9o+N@~KmTH+{*eo|x@;zQmDYdwrj^k&^ z7=Kl{B~ZMUr2mTn6vmEKwhF1JJqF+BC;qWhx_Bi)79}-7Ob9M|<1_6<4D87N#8om* zArMSQn`-B;?Xj2Z@6t^Z)2-WJm*uoO-uc`6b}Jzlk&JAoKmE!O;<-SX)GOwv?UVTu zDoeXHQ>-T47fx>Scz1bfH75Av)wmU}6-^QTy_@U)>W~4E!fEm`VOM)2(#&68w`cb4 z72vxS#sy7W&asvsK6R{b78{i#I zho{)KvE6fTW6Ik70mHa`w1I^C?4T-tv z4+i*XqOpvsugw9;Avj)ZmET{9cI{<+$)AR!77YQBl~2GBQOfadqSqy@(9D0 zX@T;^9EX^%4PKx!7@ub>$+Rf-Tz%Y1pZWFWKsd5mzjPCR5=c8J8LSpZ71I`dT1_aq z_eV^YAAwFNcgS?KcsNU;TCQ4!)=RGaungwN`nDTk$XXLj)Vih~vQ;&C8H?udH8+)Z za;c_4d`mZK<=ASr)N2}(16lUlYI`FF*Qjq{*RHcl`kQ>6 zA<%zHL}WZSXL5d;OER&t4G%xF(!w;%KGi}H_42qkjCAYqdJR1DZAOK~g_P4O5*_zl zVr8@S66XhrB9+276{Fvq)Po5rz25q%GPBH9ga=^>5c%TYy#U?F2|iws#kaf^aNbvG zgq1b_0lED({6d8+|M%D?w=;9IeYzjdGwn^FEE-j!i*?qPJ|xIwiS1@zttnnpVLBdR0*6X-7&@)i+$W^s)-XJ{LV zpA>hptnntH)Wjt>%$hZyXUlXf{Rd;;8!<*fsf*`+QmX4S^#(&i$ywouse0JMmm3iw z49(ZtTG6XbHhwhnJ8XXbV0KE%SHbCWw5&m|R>qj0?osp|dYLNZ#q%G|!bq?CIi7vt zd~qoyMu7#)6n@}6t;{)P~77u;=d?0ikIOFV}59z>`w;c z6G|{zBmWX79g#2r25{DGK*pTAy?RVw=>jOn6Uaw@_qTwo;v*m)7*lNg1Xh+C&Go!hDTO30Ml@!2Wm^$YLd*ECYQZ-!f$`{L^5`xeoX-1(HVghCs`V`f`ZnJ~v> z584$7YtXGjvT1!EvX43`^}<`XmKzd}YX>9UBP6UF1LMKt>k_oU{nH6*d(do7RyH#}(YYFKiJsX!TPPm=)m~HXs6Y zB%=gB)@RtHeUI!C92fCFqSCIqR6C}wxDKWYLLj>3k_cf>{_=hO)`rVjtq}+n`7tsb zviAqmVWOOS!=c}Bq+>I6>6TPoV3rxGH$!t>^J$h^zz+V^Zv-_bsUC9xe}_+=+-klu z^!sB38esWVdRF^~9ze%v+EdIIoUqv1lsXcn9r#+7gI05%y+!3m*&}jpraU{i(efB9 z&tf6^Y_hgA_ogin+WFb@nsjP2jU`~JDF|4C1h{dv(bWs`Vb^nc^8u$`FX|Kf!(E-y zR>$wKLQcSVp$31_&5WVO^*xA!`?v0m)DbO<-kkX0K}LbTHMI|ga#uTK9{7wJ04cMM z5&7kM4>iR6n$70Fd?KQO6Ol$``}+k>2VFO8Wh^@Uv2Xh;@Wo4Q=Y3`|PrIhuo`JK| z`XRnzP0Bhd8+ +Y?ysJH9kDzzMte<%}9>t|XrV8V*J3^qXii8gltZ{Y#Hm^%Ixf zd~p%acznR*U3N`ex|Bt##ijy@dttm?h*{*7-$p+5PY^mN_<>BI0V?XGp4f$Uko}XHeXtmEy0KPmCZBV#-&;vKLJ7AadFTZi zTZ$E0%oLe^Fv7xf>yh8izn`}aKr6dB(JzH~Y`IU#f(LpC^-?P~g!$408E*{&Fib31 zfCS}jcSU3l{Z!okKDS$h-LEiugl)z%g}232`zD}o7SO)rPeHk6AQ<~=sF(!5!#LeE zrn`XbUUZl+*6>qdnd;s?+)$H8!>w(gm=B$GcUI|N8bl_Ey(cXGWU06f{S_RZm2@A* z0AA_vLq>fB24C@=4}Um4{dU)S^XKOoBG5JsyoMM#hI8$*9G*xN+N?C0vy6GFM|XpY z)}2U|bmXnJo8%onz^%QrM@4@1^%3&PpJ<;ty4n9u>;%o$AQQG2cc0PslIrgNWfXEg zX9#!?OEAH{3u1Td24{5hT>VYS?e_&}A122${^Kg33mA!kG|1yyoJ7DwOkB!0t0_dP z8Ag_^rd3jc-KFi$#5A=TPmZ^(8h$CVqU*MSy0_NeetFj7@jj56X|sj$ertzv3B6Ie z|N9>l2f8ugIxGxUg=9akBo_r4G?1kgK#Ci@Y!?ufHhp@)?`EN)0JAM$f3_elxS&9{ zCghHUhFMeX0Er|$L~wMsYb2oYQ@aSR$YcJy-JF%olH0JhZ?hM_p zdJI8@{Q!e+l@MD5vcz-#nI@Yzg^J0VO__D$i}SF`Wm4h<+oMv`+a0C%xE1-d-Tc99Jg6EP{(v-?Uu!X= zl-1ZgGv=83Bh0KRL*Q9#qP^SObdkT*v010vw#XRjxh$_1_QUd{7SAkan$P(1go%a@ zIbECh1a3$ZFrb7dHX;j(yIJC2F-wE-BV)iIso;5vT8sX{vtVq^G?ar}1LOX&g2;~- z&qQ7>cD@`&kOyBwdpba#KD(fG-#!)XSl17m5&Zfpk9faiw;s`(6kPZ(EK}0T_Y!f` z+e?IlGA{`aJDQ%8Gjr{pt$U*#TaJ^TFTrkWk#2LL-hkWg-2vRQ@t+L)q!-~f*I)yuuUEa!IFGUBmLM!Zrdm~p$qytzCJDb|79ZE$2a&@HdXuf& z;<3%|nkS??ljbpuEa!CC}~mY#2_I=cpyY6TkhDyu%U$ zsLvONuO#f>*ZacZi}t0h2qhW1amCFZ(O*yqg#oM>QG#)t&url`Kn1J zt}s3h9kY=wx0*g{2ah$N<8DJ!@XPg|dxB`er$s8q1b9xWR)aoLlGDyDI@*huK7$V# zTX~6}TAjZ>RR&X7g`#@Z*#(x|F4;ZniYU?5MSFr>kck7b&qUH8j6VpN-{ND>%f~-7 zDN;17yK%P~gw2cS{91}cKikUIi=5^n0(0%16rCwEt|Iac_2Zk5i0Eq9#HY)?eq!gZ zWXqEZsqknGSz^zI;EmrlgK+)36w2yYzZ1T-0-SVwqe%sVyjVA=89DJPO5A&i%@VP4 zAc{5C9r#k66~ECLs&DAb)8Le05nBBq7WxVfQ}D0;C4qy=f!{z0^^?8V)paPaY`X$l z0h@JXR>tN(&<~T{pcGnlddIYtuV|;PQ@-S}R;L@JqpA(g(BRwB`+3U%w4ve~E>rTw zZ}!irpRc17yUh9_acaa9J~+cUDavj-FfH9H-UUZE#)Hp*DF|K-w(C!bdJ*{ee62u{ z+K8OUWP@fgPa@-!-|F$(>r5=GPkxmkkCMDe`F`30pGz)h81(GuHK|zzcBqSy2$p5t ztgt)i91}_!U-+Qj-KARmrBsGXmxGaE6B*TN)346(Xe0$ZM(45=(bB)9c^c>}{y^0; zW|&z@Sk@G#3zh1ty{?%2>5&cD6;ywZ;tD(QM}<<_5z*ct148vX_GfF%r>r<~oUmY=CdMKW z$qSJYa6LT2WY*nVrV_f)Td7v@trNv7vvaP;jZ8%wMmg2WjQ3D(085n{aY&35=Q3oP~w?|+q z>pJg0Jn7M`h@8H{rnL~bUUn4M<&+t@B$_*=LY{AQG<&aF6wA%}qN-!ooxCE@i}J~A z%W=X?fxTODQ-Q9oDy$!wJ>pB@i*{vlJvvOObZBpwhy#=|{|D}OHkJb-aRBzK{qd~s zvdv<}|r;HAU+1b0W&D?iikO7v5TxR8wz z?TYJ@%2n z!gV}n%k?ts8gdyN!#SGB>RUb1J+>n3)Oy!+mYm?au<{YL1d}-wBEV-=c}lP+>j4Pu z1(ANS@wPjnyg7`N8hP8-gbWlBR^S+QNifH#a38^K;{DQxWx{_oZ)94&tyZ>D+=vEv z2|9kY((D>R8@Ta&m+aS{gAdQmmm3opGyY=UHbF#1Q3^quTNW9urJW3a>%=QwLT=?E z+VAj`vLRn}On3W(9uw9azuWSc&B_5Fikw1z69E3}fLW5Xh*tTzdqC`yLBn7h@*AHP z+)uWs!Ri*sOo$*;F|ktB3w=3fNq+IC2v&T}+K((3QK}=*4DV^1oXJ{Pn&ls%j+qrA z0gUs{3U|U_Zs|2YOdZtg=>}_hm_jt-7_1IF|u5AJ{sqAYtSHkvU-rph; zuS)suW|@cdd8`>38m-pdZtr$JzJouexx6o2;!jZ0_k?^P_FcdT|NfUjDZETC~+c^ zPF*pgRu3a$sw3oT{@@2@jEtKgJ&`VvF%fbUCye8qxGp`E$77*BX#rQ&UU1&Fme?W^ZKS{Q{V)uSAP#stN~Y^Z=&U*aruPm`QXCM zdX8XC^X%3#&o1Gr3g@Ka>4OhZckq`AkRYUmjozU9(5|ob!Vao4Gu0H zvRVW=8j6?_ms&aoMByP=J0=WS5SH$-|DM`5WGw`^0QRJ(+YdjX5(!G&Eo-6O%(a`$ zQ{@UKBaPK8CBwy&wrSdX=NC;+7E0`-2ps!5`#ku8$hf_RtehbN0~wuFA+i+v5COwg zMZ44kKfMd(nGbM&Sj_8d2t#gD_)|5!Q7->BkgUMc4awe)?qx3_cDX-$tTQ4BKDn5Z zCuQk>mZMiH?d+9x90epZj<(N?jtBR?uOTAjT;@+5L@^!^)MQ)RikHIWFjC{>Ag>DN z@tMYiy}lzAmn;bwHj5;)ve{{4qSY!(CN^fvN+jN_X=&!QHMoHy>Je;cyjB!tsSR@< zh6UXE{LjqMO1LzJxPCM_g7!l&(3ic z&fGShmwaNxiU?F+Q-B;HTZ3`pIL|R=xpozJSyOqOizZ0B znxaOSWAOCOe^OtG&r^4H3gKQkc$DwVQuhM@=?mlanyntSlCxDNLn!3PV3zVVk4L+m zbTzL-LNP&9OY!Mz+F_hsjZE$96_Ggx@bytv>YcAl8q2KO?vbz$%5mzWbMdnC4&^$-nUbJSvqTTI#vUa@_2OyT1_>Yo38x-_+TAj1x*;Lclz z?0c7!in-C9wtH$xyjNcbne=1^b$=Ct1&a@qlh%LsOZ0~(QXFn(vfq>TJYYwJ$K_gb zN^K;v`Mtl^rWC`Vp(nrJDvn#dUaGH<+4oL2Tf7(drZ*CNS~Ye&z8%>b7Js6Xvovv= zhQ+~_p1(kEI4Y(o-um&>X4Zn3Pkb8ti3Ei71C@GAmP>a$9Ekr(0X*g;K3b!6G7Z7% zL4u@e)xMw??^ErKu}D+xT5aZm?EI!gNPoGE&9d;3*IlR3v38fwL-)EdrAsbhJ5I!a z4rF{1eG)3qT=y{z6YP&3$yd$+l8ntvR6ZCHyc7pdm zC#5KzwtRc6O8r9AZzvv z{coiGipDIVm0nllj^JKsiS(Wic_6^jb`MgDbGd`lNB|waS>iXcbXPPI7f~11Ke_7a$u8uoBnUKGTP04avc=^_H zCLQ(`zPH<}KTSW{xQKxHY+dF_pU8Mn#02WeN-3fAIr$=xVU@Q-@Y{#;G1MPLi^6$_ z2o{8cwtuc*gUPnEk84ubVSvV7Lobc+kB;NWNAc6KxXY>2hoj2|yRA_rV!b8`I!uQk zuB2sWO{CYrm(EAa3t`dt?WJTi^eLo)A4cZmuw;Wvaz;VUmoePfB*4bBdpdAR>JVeW zQKIABEpiVxomRK-0EvMvFxPy+8;tX-c1*0CwKcw}s_=7)HS<5kw1r-YIdEK?tGwLo z?e4v0dFw1+&hk!UICK@}al`LgbM|hsnf;D)Y#@eq2vLr(g&68h6sa|$T`EGIO|$T`vZ1&D0w}b=&zRoe?0cVgs)AJ zh3YJHt83MKeI;nVTAn7128cvEese{sc+gW}CfT#V7RGV3EKLIfmqFGhEP)R>ErL`& zh%hCyaZAb(vC{PIF|6tGXhjQA{xFNaA*OY_?z|(HDyJ%(eRaF)0V{o$qhY7G3ak-k zFBb`r?XC2=@FcsF0F@Olt=D2N@;Q08Ua@*uQH5n-kF3@lX}IXl8H)ol1yQ{FTb#_n z0M>?`ICqV;&{5LCg-3}NYRrT(8BhKX1AvYnm+eCcijvd%TlRel|LCbo!*#&;eQn{{ z(ScYmpkrQZG)^k_XG(!4RjXpy8T)!we3f35kKF0ykUT@Ho8>&KMo8?S@mkJFi=Ta) zg{N3JAt0+L!bKDL0v9li@MZO7M-b+0cxKH{7aUT~VY-UN6IQiY@DWag%%EL1b?C4| z`3G%gWn}2M-X>=W1Tkj~Kly}gnL#AsfqRr7e!mnUc$7LhD`8Ok3M8v7?au@9EMI!* z%x`~>0+M3IX-S>Ck)PwcpdY)O0&0X=;os)>BV~6V{x|j+OxPXgS!Zd)A!YK zfnv@tm&3(v-KQLry=BNm36)?_x9Y+B4j!DE0eK45zM(u%G8L4byyNyY=gibH&+Z_s zFvE$gV2Ywv++MC{;t>=~wHEF}AxmsW?DGBNJHWfY{B|@#rSsjhLX{qBIa8!MS!b<9 z?MO1+es^)UOgDPZLA%z%bL$-b|F+{o2>gr-7CdqecU^#)QGHJK76OK8Pt(@#nW#$kuB!W zw|+n|7N0+4-`A9$uQ-RmP`Wp38%Lkn`2%@1GAx$1RpS8p>85)`` z))i@8tjH$;_?}iH6zxgx^blez@r|Y8$61ynBmmJAk$_jjcZ8e^;TYADB07hO;>NB= zfrFHk(HRh_*lSw6oE@`qKI{S|{c(o!mN(va7i{*dPxb)T)kf|7q{jQD!%j3iX|q`vb>OM8 z@#1ozyV4T^8fC`y1;|yby;f#_vbp8aXxwmJAX0YeGe1KJwIa zjO4X1lCKP@UjM z$RFrrd=vs|74F~U4^5MrxCZ3uSuKZ!jEd9`t#F~vjBWdI%|0u<><$)H_vAh6r*@>X zUgEm503+*?qLRz6(cb$SLM=ovX2*1$1v|$gP#4|KN5G_(;RgE!r2&S}5Qyu!t6*L7 z^L@~Yk4<~QSMghNj1z@BV2t%r-9S8(*08CwD}oddf9-##R<9hfakx~UBB+Fb0qU6r z;e^Dl-KAl?4IpeMJ+w+W&fb9ivU{ps-FmhH7H5hkT_Q(lU&OV_v;+u>^8&%3eRvFq z2XFPr3qDRiPz{im6Vb9V`rgbMAY;QEZ;%7lfT$}$1%F|UaI2GhyhhV@mNmG{trO6G z37Z>22t#a${MQiRJk%cL_XPBH`(a{7D}=kt_Hg-bAE$?h;^-skHTOpEmhFEIbMO!_ z=bc7clgpt6UZKtco%gfql;F{|IOqhsc;UB3lijsDN}L-JQ>-&-uC#K5u%5@_0kY8* zIGH5^JYO2*=|M)eQHmn=??Q+f{dg~@mBU^TZKl?ABk@M?orQ2ap}}2O-SZ0*;*IK;$!g<|>X^zs1&q(QX{Gx-lllZv zlP48(&>BTl%W@Hs@XBmmbxx#QizkW#dSvjEM^{0YXP6x3kuDy0I(K_ti|jmOvUfRA zNBy;Jk*jebfC|T(jsl`qq$1hmdTetyd`!vzdq_M%X2V&Y<5}b|pyRX;#M1tFr4@dZ z%Ij)_E$C+KkL0Uzshr&+m{sZlK^rmpEjzOTFdY8C#TQX&^QAz6N`g}pgl_rG@+~FU zdD^mYE?r2i*OsXY9zy!7-rugJScvwyTzkqcr(0>jJK=*2<4f6GX3wc6v)et(ypq8C zX)7Nc8E0;98@n-vsRRvzEe?ZTZQ_sa;^{M7F)sj&x6V0E2ZCQ*dIfyl-bb)#H|kP& z!yIo7CyIn9xZEKJOgmD!lReN=@ey@8oYq^7hx*p{dJclOW5i*(syWG(BjuMX&NEWS z5w6@C$#bQtL>tF?no%qCM@u0*CI6Kg6_NsWAAW0{d6yibVjfT%dAzL~iZ?268ZDbZ z)PARK(JF5qBdi@3A8m<{0r*n*3HJ5rmiyMQ{PJX3o)>@)!?(H}8~RMRy?}>U6=(jg zRa#Gl1+R+$9F`9^3YwWhNTjLI#Ts*E+_H05P@=HGjT>6=*RO&CZ~lQQ(@XxD7b}Iz zv^juqEI-dr4Uo!8kb||R_spRKSWftI%3VKZuG!Vr{kZkIroIp?5WWF*iJU-dCjMMk zIgx~5uucGX$UZ2(aSU@CVuUQZP38J4&z)U{&W*CTQCj;KtE@dwv}|jf;C*C{p)V-- zxUzIP`OBJ~TJBI&CJ~wrK6s^W{>-(FW?K3Er_!m$>tv)Z3b%EnoJed`i@A*)ksR@` zUx@#xyz4)+bEjr45U6Mfj7YL8n=u^5DM4Kas@bcuw5gmi-lC`bs>EiGNrEh3GiC?(z9UD8Oih(&ix$0GK%p7(pc^X)yx*=IcO z>-opwP-3lh-}k(JbIxD%ab*%_9i7z$MjffB>BQ3I*e!Ri(J*RP;^r4gN7^@h{}D&p zmb7j^UZWOfrJ!KckN#VX0}<}c!RxKh%#>T43Ne-p2g&tK5>|^iZ>}R zmT4==3Tuf-h2Wh2#yaj_@?oUU#0ry18bXJpI7|>ms+u_#nA!w zsKe9m{8|ie?q8&5m9LsCbI*F(bdjo~_Vm;jI0|1SulID;3@EQ>Ld8CAvpW}TyOJ4O zIUG6nRh_h}#AiaK$-C^2zZF|kzyp9Ol9S%!VC(IAM@hN)#oxd|=YGvOC^Wh; zn^9*vW??>dhBTYvwOg_a-7YH1U)urg({Wvsu0>jrY$QJ3;S89u_uYZM)LWgAa-)dO9*_Guk8mRR4mUveOduB{$#)=ALwcMtrx9C;a z(&p;qR@`G&dI>g@Ow``>{TU}a=QDV;Q?wmC#kmMaQY#J3Pp} zC+cEzLF3CUgg>9J{xw;@emhpif!hbkY$5(e_5k9@L+?PNMPNp$I*b)0W~^d>Pm#@osV|a zF#C{oYJw|uGyEPNJ*N38j59Zf^rNoFJ3vlUypQ2N>s_Z;0w&=jvSIJ|4y*S*63Isb z_P;DZz-ZKr%~yxAL>Z%P66@c4vvfIIFkX4IbaIE53pHHw=7=c1wHeQgjd`rxnW(Op zEl;^QS(^T4?$ZHk;w1jM@wGzv={M@CxjLP_s~3r>bu&UyI!=GpmwMMD6T@6mtB$WI zHpfq4K>zh*w$4fRCHAUk0p12thrc)~AKTh*>H2KB?+k-NN1+~I9`rj{FvIucS>a?6 zqU##=Bs9L-Zt5Kn(yn|Tn+Qnb2M7M24Do!8cTfm~hDeIU;JfGc>p_%6`n#qssIFU= zZ4m66&xY_ji__*jy32}PtHS?S;%S79#4PI%*p4FF;e1PVH7b|zg z(6Or%z<&X>GkV(L-JQjH%}rnG{SNUHi!h9k?S3nhWE+3-GlE6NuldYJ?zX-9?PU#G zs5M2#Zgcaw&jcE|K=8&W7twAGXg|imLsp?rMAy`ymM4MF@5n*bXf|ewz~+gzs;I z;N*s|)^#@!R9VeTY;eB2#k*z@ZM>rurz@M@M6hw=v0Dkv0OCI$IE7l{-g^|bZ{<({ zGtQBdlj-)!x<{iwN-q}cK%-@5lU3-+1@Y1C3DBx?OAQomr%>PU!ZRmKI9F6WAB zr)7ziVD(!+iHqMo2XmHoS}4NE~v(;Pz5`FMJkX$!+;XiW~$S_R~$ z6ooX-*Vv_Bjr%RDMiF0dF{bpRpbLXFdJ;&7O1~rj0aPYzN=xzewTnso|wRs zae)l?vsvd%%c-(XSs=`DOM}0t?upAS)?F5*Ji5cy8L#spL0`MIm5g`oiOAUdd>G(I zg&%K?_jTCKSil)bwS=ppe#!-e<=(rc{ijwAzPL2{#^#Fm)qZsryXAI|qpni_B~4Rf zWAh$!YV||o$Cny8RH!Q`IW%CB?Zc&)&E|h3cs*x*UR%$1|=9$98Pth8u7_xrE4u>7Jx!4#((ao3G9n2@5>kcT8+VwgWX zwGwI300tgYBS2>8?7k;YRlTQodl{el)IGS5OLDSdDOdu-fW5!2i^}~qP?+C?b7nG! z$~f)M2`6VsM^M=x{3P!34y+wUR0^-n(ZUqJ+V4BpSWd%7oMu$;@tG6nFcLA|wVLH{ zhxCN`oMk7d4x@6`>jPYcwOpr;t0nY818cGwo4vW#OFFNz6Y1^wjguD+rW)J=eu=oS9y$I@kf4ZzyDL>56Q~m0M&joh@}@e-K_DXI^z6A zmDRjK16q41QyxeYM6lYQ%vG0M7f)e2cx+1iN*FTp1TA88M98!dilxc@JeebTCT^X-;YC3R618nx(HNL5A9Y4hvw>CRsK$B?)XJWh+KVL;om%0I!ZAwG zUnFy0AxG_%Vo}_!t9+Gw2E)!!jtf`gj|5g5HhiH-7C}(2d$?unwMIRJz5$QSe{Rj3s!@+?Nuljj54#BZomxjH6gp~! zn-?;GgU&THU($=otKS0Q-^_^aZ~V0l7RT{To^S@HBDyH+Xu(c729eu^2uO*Tm7YL}ITUTznM2_?sF zmocuh{+BsHnZSCY!wL}H_0W#4s)Wa7%P^>A@k?Yq2<-mo^v(I%g>MFxb zqkn0wuNI{X^v_anxo%~R0?t&;k;Z-_*uu+4xLYx`4xlWaYLJh~lVcnx&-#OXjRbto zeP6g1(Bb7`-pY@k_HmA0alWDDnGH=vfdqK>zp4RZQS7<9V4fbO^oEa*IPkd_I35@% z<>Lbla)Bl#D<*=fcn@~e_i_;GxSf68DEfod0E*n~X5p=Naa+5d9GxB^qAC5Vrt7M` z9231dt>y}hUY#_f3Pph)`s^F8jrF%IXe*6Bhd!Z`H&NVTa^0TsmL?Fe8%Spn+05w8 zWDd$28c%KMV0+5jPJ5exvCbw=Tp!+`H8687fdogb8#g#N zki!0R4{y?KDurcYsW1L?!#3V0D2|U_lH-kaT`KzuMxQjL;0G>^WB; z(LhL?K#T$}<$39X3qxxaPd&8A@x$f9IKt0ZVafhF5dSE+-@thjNS9G* z4K@Is5Y(HYm7lQAqq_HfRhJRyK-dH&nq_1X96yNQs!a;4qeQ4KIf@pFq)CX*Nl=#| zwt&;|)m9Yt4RwpUU8*3ElCd4)11(M(IU|$_SW791By3B<_r>ReX>hXtYneUEumW_dB zssMq9dKAQMzGjHe0T4>6?~>MYf3DFOxVtbsxflIIaZSMUa~$Yr04k~J!LPU5jx20O zQ2XezEw)o$zv=HBRT~&cY6mRI7yRM~o@5xWVACB@1WD2ekR;a-*d&G1G+Y}j#~Hq* zcsxc{1I9rJ{aaA>df~z6Yr_QhfX&J=vM;5ZWd~&cn&284Z5O~rHu&E!GuCe%1lM}b zSXBo+6SUOKz~+oMW`N+=IE_v<*o~jqu9wF-2eM+VG&Ls9R@3$mpm_aj zb6xdf%Kt|q4Tgl;&~=LlvXjr!S@Oy=6%L-HP=jMrU}SW_k}hOJjhNhV8gcT2MN}9E zEnE=Lf6P0a*OT?ATnkg)t^e@yey($@dB>=`y?AayRAtrsJH7+C8?TpjisvbZ)Qi+* zq*?ZjydTLq&VV3^x-A}wquCB~teS^$s}(!xT6`VA*dN%Pu8jT}LQKw<@BN8-rrL&> zX;xhbU1dl%9XBLD6+rTf40gdcI}$ z>aZQs(oUSrluhyGsWh7RufZkv9Tm^FU;)1Fd^Ll_DT zVa%^$3NG;`&9dnXJ3NROM^pcer15Rq+=SgF5KGgEYUz)>N4qJJ**5@uc^@7*{4e!_ zJe3`a zy-(B>HxM6>h2xO4J%Z+lf@w3hd2BJl&lkXYT)fMiwX_vj2~r;AoWp zszqI~k6URxN-aCMcxJlw$ zp#9y)#q5;JlaJV3Y!B>1DD=5PU|ZQQJiSNUD8Ht#H6BN07ZE+?3HbrQJeE%j6A|`cmeU&FxPbv)@4=7gS0Ikj=SErd(j2VtHx!9d>=m<@*JB8{Jt@ zhYXsd@BMAtoAK9|b&*8!Gr>Y}r`nB=?HOiYo*&L0R@&d@D4MQ1ezkQEc zwO>m1{N+Lu-%q-q)}Y&qXBs1TkX!P@r(L=c;pyZt^l?O#g}9Ya5tt`rB9=74ctl%h z^oEw`@RM!g>PH_VsDLkGa*yooa<##*o!_2LfKG>`C%ZL1zft@fJj*+!2W>d?E@EHi zclT)?bRPkqE)ME*TY^AQfkfA}1QWw1V1}1oVWUTA@Oh!}Y))3OV&Y=IS3E;0QwBLi z2gsD~G*q--Lcvzns^oZcv?~UQpjy;Ylj&LeIYd`?7eoEK?@YEh+Zaz6R3$NAE z_^CbA`#S^g(a^P6h-lTU`OhKa=wD^J4^gJ`MRHINZ253wrf5(|Rl^xyW<6%=FV>Ab@#XLX zPB70A>;e1`{__R@Fx&?#^t5WI0a$$9+TyQp)c8Cfa(PLxVwc55a`^X;q)CRL9;zd> z>tbs-08^s%)Fc3Ym$nHL3dXkjg*a2II2Bg548Tpk&pzx-q8f9aOSEi`_*6~zcK?DU$3cwG3)DNqfiIB?a#Wdo$0GOW1924N-sk<4nicvQx0)JgpxAmkvZsssmZM;y6H+_4F z%%|m>DCk|lV`~~Z{P;Wi!SALYDRMk4{o^A3cZe^syD*w`8LQd_;->Hez^_-_dLm0zX|Gf=^tIf zrH9DYI;*eOD%Wnn=te5LH;W&*#thW7xnrG{kg$EA6sOpM@92(a4NL7T1fJa8&tzBh zy)r=U+iInS*Xt%Yt+0;TJUMD=$oor^~Fz=aXEDq2*$m6H6F_w<;;FpcnT+(Z2W`3 zbxer=Z3js|roPV$GeKNT3XN-OW)V>BnF-?p!Uz~{U9F=QZLVP!Q-nW5IWW(qxq)+>(w9kGgOeE}6OwP-Yt4&pw9b!vm3v zkI#RHiaysbsPiQIpj~sZRk~&Guw2*dbo+kpGx1w$%Mt_j=gbxLuG{m|WU+|O+Z>!O zpw8x?gbHoo70T`3d}+U|SDTgM?ce5&IU3&AeQ>3yR}eU%S)t~3Ob`P%xYM@FYyoLu zPCE5pM7u)jZQ|PGsiA)7SVyxbz_N8NtpQr^6pzE8i;eW{-MMrE0Cx==W>3+>OnIrV zI%QYTh_&@^FcNpQ(m|_<_VE2fFpAT%(itW3TBsX!oOLTy2=|DNtigGqzOO03PyO+&mN$c_bdsppz z{j^N5HhRNQyGYiAeFydTn&4O5PwPJy*zEKNW4zk>n6-`@aEc=8-*= ziE?dkKB_Q@$6JShZR)+wC%I+aAAzV6thTzY8EK4nj0ql8iM~-tJP&W@KQkgWLZz7j z-Q+wl(zC`_2(WMdu-X^Ti&5HELPC*D&CXEicJiKbV8co*5FdN%O_C>iz$=?|-s6U} zt!(||wYBRWg`nw)0ojz!D!fm*2qRbTPfc5m+GQ^cpv=V{QH2HqVY|G|9}wO>Qq3>3 z59*{vs{r7TRvgldr?c;G&!_6yGCP{mnh{+-}EAO@&g)UFm54S3899~F> z5a`*bO692SE{4nMy?*s)SixDM$(*QH#E%{^M3B3SQ< z6TJ=YYL&~qK8=M7aK|s>&z_XXW4;yb9Jmxmm;XwsmZ&CfKVqPg=?pi_G-6?cu709E z#O`|@UvGbHQoH$+z!XCz_`a?1I$K` z>@t93TqlW73Ytg?%X9bTRzSS3Cd=n_QEUYKTCD7sMblao2xCQyv8_a1t(=wi_Y2Azj!*x|XEXihB6F=f*IzYv1 zsn|@WH6Jh0=rx#$k-BaS{lLmrpAl-gNB)Ls?7?HD4mU>a6O)z*@8`%V)Mhv_$p|=V zh6%|oX@5`WviKg(fs1o5jKI^ypi^2Iy10C49Is=-a<|@q$J_Sf&l0Rrz%vDoiBo6fDJH0ZxY6qFlu!if`enMt~az^(oeCXxDMQ| z6H1pm+owN@GUykz$}kn!w{G}Va^abj+%t`xnLYkW4uEOnA|M(3g)MiZVd36d>p4ev zHou$#x741}EZ=M4Gnk>skl{eUL6DlR>rap4(p69+$-5etA~;+$D1gfzxzWvUf73gc z_a+QZ1d{2V3IB6=>5sV)t*pcU-DvzH#TX!a85=DY;C_`u;ZGLat7%X4m;p*Uy7lF? zzqX|&eZT9Lj81@p5L5o(*q(0)D_fh&ZR3Y-E3)ys?!7Q7VF77Aqq$Ud>{R{+l-sqlhZwz6W&q*a6R=;;i?i(Aib( zrgNE{A5^kM;$!FwU;S>k{<6kvM9I;_E?=-yXxhPY_`+Mfl<3eCSWh1n@L!S#7B0SU zaer^A-ucFuvVD#ELxW@jJemF3q%tRtvYhC}5^!-Ob+uf{rj$1f3>8>urp?Ej(tesA zQX}p_wiwCyQ@vfFC@J4Cwf)(N$Y08wgkIX$jTL2e^(n)f94WLo1eAa^jJeI;$=Vqj zcQSEtJ{#zoyv_a7B6Oy~Nf+1##*|!QyCq)^h{yccUgQ;}Atne=+eoRwKWY6I#!vbv zB`G*rEYF?20tt?_^Aym^wp52HVuBlA#D5ie9+~D4{!wFR(HNCRImUR@_dfjD2HFDu zmtcuo!~O9J^Q}7PI*M!Stn0?TN^647_iwLbV1TTuP2uMbyfGQy-gRnkV11MJ!ms(J z)NJ@+x=qG)8*Eu@01W2?g5DpK+I?nUy8#VfLR70SyT#YS7iEnoO9lf!HJ6OV2;ARp z=uHdf4XEiI=yJIH)=xjnzP5`v!`!%{#mBcj(S)~;-F4lS+t&Td1>NT^XshAP7j{7_^S6l)NUP{IzKYj@&8N^*TpM43*PB$VqY`4%M{0Byt!n<1^;f{PHc`dh!WuKfF)z{mk zFW*ugP67t?;xTysUjZGpgeS>QzE%dD)pT#LsEm(s%5$2bJTN%HrT%%ah-^qo%@Hni z_;N5W)#gWHgea=7aM40MF}?$CB8Qh^u~Mdz*8Hdrqxz$c#10(%PUsGp4U0;oOhH#QI>a-+{q{d-x$0Swgrg?6H%gDX7KndG_EHkUypLTA*;zM90G#pWb zVHg_d*ptSPA3p<)R2kSVqfIeer|(2vLpIuB&pI;-bVVW+?WZr0GvnQpjbll$xPZaB z1+t>~*S+|@sY(%B(5=y|39sqaB~lWotNl)FbznQJ>}T`Szi1%2gXr^xn6eqh!V#*ytPV(8b4i(Nk0#B}+%*46vD=8jj5+56OI2$i0H_<@!Y1ipC1}7^BP^d zQ+mW8Q$-5tCdclNMU5hA=^_QT;@HQE8J|S8CnJ9J$YN6){z~NUe8!~I(yIrGohMOx zGH^w#77LO!_vA+HPyqjnq`u>mz>;)~Yc?|b;S&MlGpOpr+;sfp^ zJn@b%R8L9$*f*rzLc66KrhQWaC+5fpNdKuGhtCXmty=AsS!htP_ZGAe<8P z{@YoRj6ebcrm81sz85pu3e=<=?_Q{qw*0obgYtjAyDCPku7rt&iO#N#|* z42nH#1^;jss?nA#4#Dm~xc>Kl<7SrjPmL6@TYB*r*jI;_G#sA;{FA9u{~-%A(L_YQ z#Rs*|xoQU(J(5XYg7HAViw^MHwFk_*>4nh7wy1f)=!{JFst<7v4<0hCCIs0bqNu^Q zfNw}dvWU=A{bhBwg_>^$CN&L0AV7ox7oA-f+&_=iOZ3BQj{k7nmalLuhzCMF-kFRr z?GYR`#pvj6rU7v`q7y8S;aCeD2Y{8bZuSyLO%Rr`N~vPL6b7!Fr67U?VLQp9dlkWP zm+1wy)7TrSTGHTK01dqw>+fe~_dd!tTZaq+%|7*1F!;PPtmu)_&C9|I~#4|Ksah zlI20plZTtj+7>V$`@%F zFult#8&2C~jl1|FCUwV$7B}=3IOTmkh>*Dkx2{r?hifh%_HtQHD&q4k_=M&#Gm9ht zXBUU5AHF(G3d={J&f0~!t!ESfzjyf25?_y`%*Ha|Nn?U13yztmnanpB6%Jm zdK(2#@m5wXzLmQ$>3j-2-larK9{jPl`1^Ke);aO*_{I4FMyB(f$cLY~-o*IazjOcY z-N#a>996}Qr?3S9qe}r=B(XH3O=2X}J7SPO@kb5?GKMFz5A}p)WOnwzm)Y25 zw~vWvSdixQXi)LDP$A!|vb#S*MI-&%+GM;rUO^N$+3pg(_+!839U-3? z5hTOJq(@ILiFQ+CiUTQ5&5#fh6VJ8$-#5p9d`<4t*(x$Xy4jdw4vOXD3k64?NHyZ7 zM?q3?&A7z>*n7!~Y!QzKd0>09ht<`hak1MxYCrlOJxBI=;#B*U<U_ zfM$EXfQkF9Brmw*B=wLwrT^GlA!N2yq=%d@!BdR35^o==a)~!G3LuGDTNhF0Y~{UKn=&#PUG=y3&Wl|JO%1;6^!CL1wV1lbf=|3}e(t8G7rlz{8IqWiQWVw= zTd_qe-+%I|{^$29av(o~e4h2}_|VOu5z4>xJ|uplx-Imvp8W`syaChOfrJ3>9U z1tKX)->J`NuED*wQVj07h87o<%9zeduJsxqt?B9QeFoMs<`02(C=%q%yaEOQGNX7- zcmGU%5KAS*DbTF!?GHzV9MrxHl0jDdfd#oT3l4Gqo&gaY;iTv1ZnuPwhkTeXO4KGj zJA_Alt7YsKp8gP9sQZu*@`#@Pm781LSk4;>@Z#t}wm^|(_JGG9s$OC=_=rytB`rGy z5wZmce?sntaLr9Zh>HRvFb zRGMvi!SlDm!Rt~70ck7i>#`sz3E>){5*y%3_m4i3|MxEzyN9@p$hk2ph!`T^NyuuP z|9d>&5*gyIi53vx`vQ_%#$lelf>Bk;qERcQdu7{HXfNi`DTvepEIExqnFJ9;rn#zx z(?|v#ul`iA_i2WJTV3bfEIh*dif)2crlR-|3$inH@7{x+U_IX6!%FhiMYXwjfHd4U ze9l9iks)xO51S*aKED?q{joc|!Y7O^{4Dt7hqMr1cqD|T--(swNfhGnfr{$h$xY@)WlakF#4ZA7u#;nxF;)wB^eq-Bvh>?>ugN#Pd!8uyI-sL zn&?j;OfiVB3==3j9oqK@Av;b3%uJCPF}UEPeiG}bYMtC5bmWjwyFebqY9*Fir=V^O zu1IKH_#e8$dv%YHP`4FH6VcA_eDri>?^K6w%~(37k5R@?Ftfm@p!k4nMwT-fg!CoKWa zs6hLlp{3@d46Z;gX#`3spiakkgJ3*m4kClMh@0N`$}t=sIT{ep5QDvep6tv_gw2W(@cKlg9uf)0lEhBB3+E6)03edF z*OW@Q&)woCOLH#TTvGCaI>6VbcHOi;Ix`;{KdG0{M8Sjwsj``81uON;0+6tKczBor zaEDU56rTB5&KHm#s~awSs?NXkneGXZXWM!ikO;Vfu#^El@AG!*6`+THdH(f)N-U)? zLi9!*8)Y!A$qWpsEcsU=C6?j28nDeKT4vzsx zSfEwf;4}z|py%a<3fUm|>J(n*iv}|rtpG876SW;P0FM4j0N?17R}U`8o2I9xwg^GD z=0Wh@X9ve`Wg6kgmj$8JqH{1}Ag72Sx2|cu>Wo{y_m1ibtTAU$3b2tffY>^tV~VMAlN z%5sU?lfm~Lf2YbpBBSHk05a*>BUy-68le~D9jwN{6L7ysA2dFQu<(dbJN}iI3=u9j=|h;Ajcg0X!=+Zd5$JHZPNuWS^Q z&#=NrO16 zumMgZB~9Q$BBkKrSx-PV!65ou2AYV4B)czv-z2htX*3mTVNAl#>$Bfify9@!qZ zrYi)f-Tl<3bMAU5dx()a=O>2ybz6D)&%;d#YOJ{Kc0JBcd`FO=0KbZv+&q#bve>BK z1o;g3R8H_BmHap%K*ehcLiNL&{7;$#Oy9|*D1cz3Y)(yDj)Ts#4iN^?i3iJxC37{xcq_-QU_{Ua;24;^d! z{aTMwyc!?AYdkDcj3t7Yi51S(G~ZlWVDaD`L!;v280y+8o+4s;LV=Nwm+*pUz8kU+ zB0w5=5%fDftl>D`%^Pe5LN$7N`k$zlyyhd199K!gH)KZ1Al@LOu@{79P)I1O&b;+s zn0}onr03ydjASFxC*O!Yzn48rCrkn>6(d13TD-=iXX0L0b-wUl(!Tak7 z!q~-92;1vRbLva7 zv0VDbx{A0ExMM79At4ct+Ji{bH4iqnK|R($)CU5dH=Pcd((nhyn`^1o%A|x4v){KM zXG-tkuR<Tt=payqt#K@~e3RS@mDx;PrxIsi(TCkk`e zl*~#C1_AP{Z3}ZN`0arN@gQ_u+RVw8s%p?TxzQQz)Fl|9K19TP1@ZjmPB!csiFao+ ze;6doTKfW!?!W4@H&ERIx}fnMtk#4?C&&w^c1F^EHi-_wAZCSJKn_aEXRB|kiSvLZ zGJ(^Sp}^BNm5Jxr!?E%M?_=NOQLv|e%)<}*123eJ>Ai5ly-0ALU2=24Eg|I-c=4b} zx#XIm^bT^ zc_Dmub2=B|MqLDsH4z|*0{Pk!w&x&hC83#o2mg$hd-^POhCvD0=L?-QdU^1Dv>P5d z1%-HE6E-JAeW??2rtzz{Hwv`LAqB55o)q31HsuKmwsy0%_5`9oTgtpSJ=ofP!@uJi7&4(2Z0XNGej4)`yH&$>jnb z=EW~`y?iZa6P{e^OKUm880T-)y)>)&rx~z{)j$aWvwmriQD_>PhSw>}XGTv(1MUg> zZ(CllXz4idhI)*vc+wCJ0x*^OEO0N*V*jq;y-8=Sx<#~QuKF)uh<{WjzH*{ zO|))qN?%EqkD*@A?ubPFJ3oACdIT5`rc!k16>xWJZzwd7Sg%HAJ z4V!#~i8($9o)XDoUvxu@VK;<%3zykYi_N4=WpSP;bu2cgc(mRAzU^7s4Q+7{q{3xi z99;h~_ZC6VYPk$lh*wvoDBfWTyTS9{Q+&XD%@_=sT7P5#e-*Hf=9q8XPu8dB`S%-C zU;8`iWhVKs(~)eY9n?AW3Ch@CPrtuRud94S$EfEu6{Yl!!O223KKEAe^)yvn4PV-z zH;l&l=E#B6{<*ZP*_b(fXSJTSw`($sb|vHK*_XawF-Tq1<^%_%nPQTR5JYS(3|QOH zo4~;?zZ=-fG6*{Fv6Rkx@$Zzh_diSniMbWC#v(urrvY3e%!54dpR9sA1Tjz1sC6~2 znut~BrO$q8XZJYm_AEROU4mr4)PZ%L3zS&zYKkut`gYAxW$a%Qn zvn>)Q!?EAF#WeH;$P{xV{XLvwmq9Jl*&53=JXQJRJ?D9*6HPC`RWAbj7melIJp>k~DN z2A5I|(nfuoD8j}pX$rfKwWreR#T(bW-Zxh*f)$gnYOn)* z{6?-geJ&dz=HHntZP!+792^%f-`a3eA<(M0A-8FuMcCO7&LNC|i-Lry2C~V|x6zm0 z&l54qa~%!QIO`bHn~!F}opSS?M1gf<+L=GOK7|GR8a=qA9S?ot1v<6o@fXmBd^VwV z0|DrM`@A;1);<+YM^Vwy{!kZykVl%my={n&W}5=(=pjRAlb&a@#2(cbPFW5v=Zk?7 z=mPLctjc1p{o}E*w+Lrtxw5;BDS+^2s;YT*T6i=Hf3fc*JddzjS5i_M8w{M$)0orx zmb!$1yRYsZU&np5vQQ22#=THt#NO}Q4V&6~GVD!*)!)H%WlS;-uX!?>9t3e3XGqjvk;-)IxV zm7~l#DUwX?jOKT{ju8b(9BpiTU2}{(Uo={NWOO<*pYf`3IxG2CijshD@M}n_oq=Ij zI9?}otDl=ei8ycK>knJW<<9`c;@d?-%y!~Bm(4A8CFA`Wki=v>X_Ix4rxUx z(~I8OP@O2Fd#c>oc-Un2%qN%?zyKd~&p{B6a|cKb)qa7?pyaT1GPXkrva4~YRQ;C& z@yM&@4-ihB02=ykZF;FEZ#)3m5r@lWpX+wgKv5rWs@lT#5}<4(8ZxoHq3D z+c*-`Z}CoXRJhnL^YV+H1_+BY{+I-32_w zM|B{LOHz&YjG3%L&|-q6S;8a*J;Z{&hCzTyZkQOJU)=P*NP%ltz6y%B2CW*-cyOs5o7JBztR({9;T-LdgDl`t zOsH&fcTZ>?>nt%~*Q_VIzkc>fea5{D>r4kF^JHpx9fpo<@hl914!G(87+w8p7=EzZ zmXtmHJ`KkzpC0Bw0&YHm3BcB2L_~F2e}jBDu^yti+|e<1&EAHem3C3#i0pgqTP8)^ zsG32V9(dxPP15#a$x!RRI||QzWp;DkCHhU@?Mz)G zg$?e0e`{*Q`6sCH6dvfa9J^HvkKS%+UQ#?i*0>@l|$#E-u(33h2j9r~A&t|jNi_aR8%Dp1EX`@cX|ASSW4BZ_}o5=i> z1bSwkJ@x^v)Z4IIN(M?zF6^m+UOB;)Z>FZQ25(ApIafZ09}eY=KA&LQM$*A-n3u45 z^+DJ7(fiP{U%O%!YG1G*j>F6Or=1gd`C*JBX!Yrj>qyEvkKPM?eM)AS7s99J$j?Oh z_gv%k1n6&n(%asyJ87--RGYpkZJK&g@^%#!Qa61LZ1oI}x$Y>UGy?addzD$}1J}R~ zoml7Y>;s*PI*oD@(CnHF-~VQHAj`f`bY6Jk=yb?qHT^a9g-)Y79Gcb|PF7;2W&-s* zT{S?7a{~E3O;pfSC%lIfrveiQ*NTTVN?oI|-A)0=U=fnA22K@MTPG7<{h`ysl<8*l zv#pEVA5R73&Hb&cW?a0irz?6MsSb&7|Mmvp7>*XY#lfqu)tui2Twfk1BqY%P$_JE- z!)(#(o@xTC^{2p>TlX57*$)cj3JnDySskiRq+?ZYI+&csJQ;{xfUg=}a^x@Xif!EpogC>24-#KTaA3mBG;|nG!H^Pe<5eb0jk>2u@+nUN&&JET_7#t5+Pv zFgpVZ( zaeR)?o+p8?ITZJ;QnVd?*qUn1xYP$vhI1j7lJWWtx0N2Kh-#U`MkGr*Y-P5b4L<3h zE*MV>ag$Xqaj>sWnm?dDRm$amPg*JyR?x#)td^hNb|}vzj&P|TH`3;*Qga-3mtPsJ zEW4u@AS7UrdGqCkEZtAFE!!Po-{jmlR+7$tCEvKm2)(rEyJc*twKXmLK^2U3bSCR= z{e02{P9slYHron))>tFyXr<>Dap-%eY@D?Eb^B!_eY_~0$*}fIc?YD!lSMUbSnElo zHAr$0;TgxS3YxIT`9&-&$dL%+&C!#f?^U5rX>28u7j}lBt_lY-<4M4u;}9UTECCz! z%7ST4Ne5${b=zDxRo)?r6*m}w8|cB>UDPbrWjb2|1k&tEf2B4A?hM?>UT8Na33D30$lKe8`QI~5Zp89_&y~6q3ud~b zdgJ5c9r`l$8^cV3Kc|Ll%`^r8$>Jmp+V)E0(T0Y`jK(M}ULc#gNFtEe40e5~OZpyUVBBC9XVdoE9+?x;bjY+(7DFSxkZ5gga z4F!gI^)OSPsuP?dEU=HHvk+mM?eYKBjv}|F$%m=n?X*<-2b4`gabj*>}&kxp< zBSvxVqYY__h(HjhUjNjRs@=0%1IEB77%ISvL#P`mp@j?7mZebwyHyqIVGKFb)~;@$ zJy?8r#mBlLHLXC?v4J-J3esu4=I+~nSVm&R%wy;IS_)At+=ENtp?Lxdj2XVNEq8oj z{p17LHjjVm($ND;U=$f#AKKE)qYujrmt{sqRY^9v$njh-H5QdPZ_8zH!l-2 zY%^g($7!?WG4VN$p@JGy*t3=1t{=SCh8v-6(Qpxl>iV;2%c3T7K&9*VdW!5ZBQ3ku zK4wUP$RksfG$?z`oS-)KQg*U`a?W5Lj{2ErVV#Ovvcf|_qo^3)(R8lgZK0tP%F>^U zsP%rM2WNWj+G65v-a2}@!egMnTm*H-$1r-ZZt;zb{M6Ur&#JX08c{F9Q#Aa&{12Gl zJ@As%$6h`S&@C-K-_?Dt_6o@d$9Rfm_YN9dxgsx@v>vD%EYQOW?PqNKm=tfSD_C0g zu4A5W_*E4_^!lLI_K4=@AONOe$tybh+%q1LobW=P)mdqt z)9Qd2Tb_>)@Qx6{*1~#HScJjI*(bzbrK80B@5@VskV$?faFt`95308U+;rDB5W}#dI=~|i@{5f*}vkIxAxuESwCw)=82j##O=V}|bcrFJ3k?JiQ6;LT~Q~7chb7~=kIs{!$DXF_% zX^Zuse8ui1Zr78`Msrf4iEO?LtM3EdYpFGj%ZcAFL~MVOuDya_IqS;!7{nJBM?09W z&_E=T@RC<0Q5kSjU(qMa4&hQ<5x@72d?9Vyy9p*=e$1|dz|<|*86Ey;ec<>R9TpBg zgsnSKy{$nkEo3V%2rxynkw^nj6%z)@@qwypLLu3<{xF1CVTTLu5kEBatX17QR1c&) z;;O2u*>m1qs(P#1oxr?^SNO~gc8ctgvt8fe0@rO0T(-GV0GTLzvG4Kc-30?QFzR3U zg@0;P!>}%gTc_84jt6tsb(iIt{0POk-bt!OuSQ7~#{t8N6Od0!w9`q`HoBato2HP2 z`8Gd9i46?df?pW~;OE5ce9Vv@Jd*(q%uQ1~gFkRr(xqb)ys2X9+;WoK(A z)QIX`Tb;m~kb39=rP>1jLmP!D&&|M|*jEzArC#yo(bv1fZ(d8PE0CKQXFQFx7H6di zd+uH-_+Ymgh~Ms0q__pvZvGtGv5!4#xEvkTNj}Ct_v1HBwOxe0)ZRITbI0prg-eC-Pk1O75}7;MzMB+0P1#lZdL$ zOzV}%<^JrHyM#R7+seg`Q=U#^Ru$8Hk%kYAUn{Ji_9~u8_AoPWzK!w|3O^rNI8r7a zd7JFY$Wkdmx=s(8KR&Qd9)3rkSt2jLj*0iP%`|?Q)Q_;Y^y&QxI`FX}MWx+L$_zT! z?0iQ$+a#|e$l<4>J?Is|;a9icWgi;NbhzI}m93XjyQKSu4hwZE-ZD1Vz?I(l7V?%6aq+k*Z{Es>4`pYrj-+2qH$2i>u`ZTp zZqrGp@P4QMJ%3PbpG48HD|<6oI$Xl)c+D2NZkSV%beQOBt7d4DnaJS!$-OIl@4;}@ z(^iO{d44sYTz|swslW=^a<~%1j1XaER$)GJj4ntn6@gXmAc_w`RHybdIQ7 zy-V|T)r#bJzuz$*pPyFz5NpJdN%CrF*-9SDX!VH!^taD-S43o3iKm+*1En7*kQ4n# zIIIZNgO{O7-vab{e~#69H`X=yv%%hbm$&#H2D@2m{d3GR{Ng^R>2F!4_kYZOnO)^6 z-09U6&h!^Lt2I(~uk&WjWOGe+K()@9?Skq998G%j&I{~`XuHjv5_P@Vf&4@BJEU?{ zyty{Mx{tzTzLwBmCvZq3)!anHQFHa(Z|-Alaa?LYE_}MmCg80ye=CF)!fnlpe^6X; zHMJ(JkA3gIH~pMHqO-qj`S(_62M5cdtI19wjaPDjQ&Z$t>$*GK$7T3pwv~64zK9(; zc&+_@&BQ?Wqv(&?C(b4y1G^oDw-&q>%FB%gx{4Ct3(*n>3}h}-vF`fI3nltq3l^f0Jxc7PNQuTmdDvtyBIzI;3A`H{&IZ1&Y2q)26yb%ZWsxfSk=oy1%<&+ zT*#YnsmYhd$o;-&KTsdq^y+#{CT-mdq?j0&|LB3LWZY2 z4~nD~YIP&R%!{p@A1(TXB5wRvD)j>TFt0y+aAqVch8Z()&{ooD7Y(6&n0 zys5FK(tN!el-GssZg(HLMMQg$pQS{{oFLlxl8mag8+Kr&HS3@Bk9BF1t$G7sc1VHf z${@fdkO%dk{+CfQ{U_TS1`nv6JX-sX&}lk``H$SAk0*jznxgZl?{#%fNI7m&4ATXY{G^Q zNtLX6dT!~@B~Z5@|)ycwbZTSt9rke@NpEX)w5E{<9NN|-f8#4J_T=2vRmO3{_>S;tD@mCHf79JTN+vEie9dxXj;-PKJM9jVFljCKuZqJTKG^5S zqJI0RlHqzaMx9mFI3{7r_f2u%{e$Jyxfps7ilJQEOl?PykG1W!B|Xch{+$APCv}rJes}b{xD=~0WXVKS47oU!W3sZI%u0k!70E8W_7%jO_BVLT#h+kk>{@W4Gk zrYK)0II{O@mLkKe#Eavg9wcua$fY;Et!RQTK3-A~VGBC6danvU&|IJZbW@I8T%A!| zTU-zfpDrb|j%dP2oG9o)wN3qhF324BybEChmxS9{-2z!#x!5#j5N)ifT~yGfR!@Fx zDLdk3#PJc`_l}Oa2CUCJqgb@Rbt>I*CPm^mTSsu}k$AXKfIQHHMO{Er=!Bgb;JvQ! zd8bK{lzOAK45!OK>T)T-=(`xIzi4 z@rHLBr##R>ihbxwU-9V9Ru3gtcPwaQNFUX0oQdMPUagC|Z1WF*_!XVq)7KCP#|s6b zm8`DwSJOZ!k%U*o5*m)xb}RLgaKMZ4$4{S&Z+u+t>y}Y-4ClEK^Ut%dH#h9eVaNkP z8`fNQB~rN1ziTDAb>3Y2=*Az12zK&V3s7;|`JuqnI7~E+*;PeBo?nur99DYw-=O=tJ}*LnyKM6{GstwZ)*E%CCkZo+=N6w z7-N`k+l>6|5@)BX%j-vavf8Fyvx722p$ zuH1XJ57gU5HySdOIS|Z{`q*DA!k6}o_%Jb3ZxUtX7zojUF`&X(!|LM0 zu~!9K^N?_&(CjL2K`?H_vy_a=KOx8x4+M(U$CFc;eeN{MN zaK$eyCc375(u;iuP-eZ^GPBldcRcK-4w%8$9I_CjwdKUMQD8rM_s@G_DV|DpMFci= z>9(%1`BkoXk~&SOGf_mqGZ~RR6t?c!rAl~Ddk~sMT?J_$=L)?6bhHy#;NSE~!mU?U z3P?|5u&TJJ*k1P(Q8UZefN~X1L95mS<$}hyqiaLy=OQvgX*;mWv8uq-k3`4n80FLL z^z>;(8%*#9U5Ix)IEaz1cSsk=2w1|@rWb*jnx-}k04d{{WFAGQG5%8<*e+W*g7pAq z=bNTI@nJ8{*v|w00@MtX?(GRM#J>b}+zNEJN3*Xle}>xxT-u6@nic^H86Qx(J~p6D z;c$wpVsqtlpU{i_g1)s#6o{>5xXHAg7+$96EQW;G zog{tZ9f;>7Ax$_mGZURjES<5G3%05ydVBF9(M+B)^m=3=_MMp8(-Uy^gh3;6)8Upx z$nGyoztVyDb$FlC9(0CvdE_!NEtC`}Ga;*L-9^P-LlO?3VhBr}_^a#@ELSw^+g_u2 zk#M6tU}NYwzHz+19Jq#6FmSZk>sV*y(nWw|znDGEsXl+kA7GeQnm|u;8tn}Tv$U^O z8sE!eI>n%K->+CC$D!$WrGloZe3{qX*-sTO3ES`w_2kXed4Vi9%fYR^UW|}ZZ#n|N zf%U1KOVwJc!(LDOCt5T0q2} zg?5n2*S9_hq|C7Fi@cqM8T8f0datr+RQMVwaF2>zOABa7eK^ia@04WSX#nuiy5-tX z3ecO^`IG{`awSRw;Ik(S(17u!c%}w$u};o41?X@c1fac&yki$%TiY;MW_GYB$qIOm zM&bhX7k8MO)LS&wg^)23Sx3MGD)doH^c7e2uA8T!Dc{}!&I$m*lJBA}QS&U|igM4S zLD7qw>dAQnLotfibn4ry!Vuw>%ZG#tR@;4)_{j?y-!t0u@mypgSy2&c#y+>n9eo5LRE!&Vmm^JzjjCZbEhCdQh zQ%B(Lq>QAX=ZDKD%e%D{>M#TqGaAeiJGk`VYj__|tvz6J+*++}CaJE+%!I(Lt@l>P zz(?uVU|wm!FKaWH95XR8P4xr`l>rckZW!2&OK7tG!fq&Q0E&TMkPZ_8V&P#b3_3zq z=TlL4;#M{CpOChd=I8q)6&%(E&ElaiM&}Q@f`2O%`kj@3^5eCf&8~CsTKgvk_ZNTP zpk}$Fg@Y)bt-OE6JKnZ^5ry@PH9IxKWv4t+Vb=tW7(GC>Ez>vtd$dHI+eD2uJ!KE? z`E1|%?wM}Cu9=d}4SV;mM|st=+0Kq;c+y8~q*;XhBo^d$GXa?QstpnlcaFu|-}j4| zzdV|-M>xCdN-rWe_ZE@bI{Nzc=Yk_ecMAg2#UT@Z_ViS`f@@3z(5lS>4n_1ZRN*#y z6IQpN?5)9L>B_9Yy53W*oqBQSC) z>qE3#e6Ddx5sPKD)3s$iRVk_V!iz9-*kFR!OCF_hwXC$z9ShKC@6hiEEc3+(;()%n zJrT&onn}HGbv^I04D9j`z|b{Hzzw9hLC(49b|ub#kj&M&Q=AZXgMy*k*FcF^$y@6c zG1OFY(b&c&wH_eEWkH)>v>=(-L(JmB=l3m`Mu2HKm0xcm^omjKn3JPSCH4j`SnA48`o(-}4Q)%&!Gl;R4K zPqn*|)?Hd|zvC6A9eSB7e_D0=6d9JmtvQzJm`hO=AV~)nUC^9c*RWzkrF&a;QxA}X zo~UUz*ueVO8g7Cl1761t3!JNMJ92(a@IgKN0_B+=W0(_Bmo&76^=0=>X;{E0hoHaO zn7R?*m{HqYlFNixH)vm#kX--AZ9_Wsdl>JqFF!>EOSo2NeHf#t?7(wD%p)>;2g3~U zG->_nQ+VV?Q=YTjBqV6F+)X$I*2HGK@P~aQd4E@T-7hi7Btiuy$aAYn{>-M%XF^6B zyH>5^V@3B{=uu1%X9Dy^`PN4JeSepAxY)07tfRL3@kRAs+NlgPfZu51fok(ScWkyk zr1;L0(3OG|dCKqi-lBAveFq&yN69{&i&`)5W!h z6lB$*RRqX$&&5+E=#v3SirBaPPdNo;01s%r$gx|O^HMDh%c1z*hG|aeyG6rpz^I~W1m`op5*y&u7oMEV#}y_hIgPforTP@# z#!y5sO1(|IfcdXrUu(L|b_Gs(am1&HiUf0n=vijJ+iB8dUsWaHqZVMrBy@CWvW9J~ zFGztQT5K#Su9_$cUeg#gF(LzwE7<~lbUsOOi6;2b2~Sm%t$rMU#H_5~coVJk;^&=u zFG|v>AEOQ)>Z+<1bd65F)!=+mJ_|d~`-xv$oPGy~JlKV?#xQlPU#oj*g{FtL6ma~EA^&yV$hkQsSK4@psKJD@b*6tg_0o1?2a zzfjV_#qNZb|BG1=?B>=}FYuQgE{}i_&3!l$u7b+QI45h9Pv@UmajkgOSN0!dvEv@< zW%kaLzsk1PyZQW>mK#>QN9X)*+Jq-75c%6=PruGyb8Y{-Qq*L|Hh`+;gx7lz3Kyyz z@3kk#rl~!Z4Gh(-QeqUX8tqH#A1CISQYn@@<`25c*wU<}iQB*NraXWe(6^9OZMJyc@*KZG$U83-LgX$}7;Esh|xXAcDQPskJf2 z#AR5*fD}*mIA2;cM;~urGn1XvafR5p|Bmt>A09iq)c@?39S&Qkk82nPbn=jJ91O~{ z?FrT(n#0$;f^Tl$Jcsu7Ce@g%t$yft>^?@`kv(-vz5rE6epQr{MrSz#Wa60?*9gie z@=zNV7#qrDqHFOX_e%nBK2jCZHPwIWM7d>2Hy}>ZC(bsy5bJ$%RP=QU7b2Mal`+4C zdW!?J1J@sH&X;!^8W%SN;_E1y7ZOW|zE!OQ1H5mD>%$07dv8o&=v*ZQ6rvn}1m;xj z$j*69$~pq?XaQ2_60j5K4qa5;$^iTs4jvE+1O@*JIaNltj4QhJ3IX<5NU_)}&Nbvw z63c65Ge~G}h`|MZb5(HpDM6p0gPD0hw*{)*iR1)<#q~qQq1D0-<`sfe>plVvNg=W! zWrYF9N3PxtEBDo{t{CUNZ=lOeGik2B^UyAg=d z;pltHH?>Wa3R1Dtm6;JoprN!cFYpWq`{gjq6STLG&)GO0i?{vM<^UY`B$mjkU_;1Oy{xn+QRC01(6B&w8a8ZqnRKmrE+xwW-rD}eKJB0gx* z>99NxgPRWNz1PuWx2t}>XWkBHcTVMaZ(v82r#1?(s<}#Gti4Dj%|$4wogOtWgs@L*fyuOnVf8G}+%bq=tGdk0%){YtM{b&D z3?9v^d>C=A0c}3#vG}eScBb)%rmu|f zH09aDaP`CY5_;3krEz0dJ2h6?#M9o}-=+cN{SBQ{mC3#(oJGD;NG`zHtD&~HgA`)! zSAA|1QrxhPmz~Ba9p3=x5Ic*P3aCS9@NVVlGIb}&+QO<9w24%AE=Q+e_CJU}^Wy14 z>hD`wpRnmRHLpXDYjyv^U@7{ed9SpDs|2wG>422IoB|K{*4~p-d%WowOGlt12m+Tu zJ#cTgMLAUipd(XSpQ$Z?qBs%alD74YI#+^9#3opI=`Rk$=lrWdZe(<(t_qzgp@vrT zoqZh4`H<2Bu;YdhbF>F5w2DC5R{o?jvQ$=6Z2(BJq_lT^=M&l{xYEcuO652iq(p$Za0Fo^+=KfPs`1~i|is&Cyx>&P?Kky z%MAU(F^u5&zfroXsd`&J)>!gQgx`N0FeeK5X}{PS6qAE~>aX=?<$un6HMt!=K92QT zM^uX{I2vyce`u|Gt8bos^cm-Vtf`RMMcBiTsvz2^pJ|?HyV&v+jYF!pg{9N=3BXLg z^HwKlzyd=<+fHrHQ37wex}ys}8d6qBOiQpp7C0AlK=tD%4aHf-(ZZ%2{&wE z=&=qOIr{_Qvz}ANqm@T2SIMl{!UN#VF)Oi#wan5HGr1IZ2Yp79EH3DQfqud~Mzi2k z!kWtic9DaCLL}k3f~XE0djfYD?W#bK=N3u<`F)Y)dO&w46<2JnUjDkSZhyT1T4)LI z1eA{_Pgi+XD~>)c#rBs_MuO^6tOOnFus$)$?iT-->tOHL~9x9n>Hn5Zia1u`R=4W_`er`xTfE*|~qcg!pga;+Qxybnt_FVKumc))vg;}RbJ|qpmJQf2L z^?>J+xk*VL9{~l~3nI~Ca$UADfV$rGDpukQE45y;zoO=WsUY& z@u7H*B2e8`F%8*USQ4U$n`ml{K|L)-jPH;CE@8zRvkM)frDG4>mri{+6Ks4CxgKma zdS8BWwmj<&_BMt6E$IELu2(d_={8&qtwyV`zZO`qe3R=MF}2V|(OZ3mPs6l@D5Y7N zmfvgoed4t(!qIclvTH#So$MP_de!A-@qrJEsj9e&5Vy_g)I)%4{;_ew?_10ya8RwS zS1lz3L&{q~6C9H})p;l+xMSO|NMn^~o*lC;H&Ohnuhuzu#hS*74lTWICv3(T_9)}- zFhapptzywwD=zt!G%EB#z@mmD6@NJ|Wcnlw&5AER4I~?$uTS@0kg1!OFJDAp3FN%b z0X%})(HwMKqw&35k>!ckkQpd#sw?>EZxuh#UdbgdTyB5UF|S#0MGq^{cr^4@`MDh} zx2uoz4&~*uLPw^6sZ}oE$jO`!Yzu6p3!7YsJn#w(%zDVV2j!Z+NiRcyyu2}(7pon-*ewCCldo)W(FqSVNM`Lrt@ za9H;XuvLF#NUlvREB0BC1{8uf;9G6z@|)gHpmA}zL!tZq0`QSmiYC|+M0h-|22rrz z)npp5$0cgN)*N$(7XPk-G@hjU(EXo35}Zn&qPyHO!ec@A+Cg?TGMoIMj<r#VLsj>=Q8}RCoYrUxW zd95K$Er;GK4Mg6|GHfl4Ns=k8Kr#KG24|q5HedmEHe|DkW5$b_`P-@a!Lxj8dLRhZ z@_u?o`#u=nD7hrO0h$Bb!E}ob&Qwc_?gGQi8s|V_J`~bAA9HJT zG-TBqbd%H3r1EwppSi~)e&%%~P@CNRB!USPN(}LFfRlp9)=%Wef)}X|=$IYqrfCBY z-}E8-*Qh0=L(-sQ=Fg7mdd_<9UZG`HE-~i#)M?6~*n~vq%12OH$Mw|=i7>eou{r}G zp7E57O@TkXA3grX?}IaLB^7#ieE;qNPg(#RuB(c9kz)Rf@0=*+Dik6NgZPXAWY9+K z>~9TBJ{s^B_d65Y0Lpga!CZ=QE~(hHqB}VW`a*&aQBzL4jvxuTDf~ojJ%?qRWIM;8cFRaPVW^X_Jz8 z%`ky`m%OdXHnI-NkQlk&B3#;Ul2fIF0qNnHLf$cD9c`%+9hR4&DnoiHi35|gNb>7q zH;(vi9hxbv{JPf8j=6f~-yXGM42~@&j3?NADLQ_N;mg+>Nt5dd1pVkp--BBMGaXEVCXy3{C5!^Gx*=4}sxBBelM+y$F$) zx<){42UN3?bg$7UcpA%usZz-7h--=Tp+K`<{tD@?lT!hYS`jM9_RI$2@e)1D))$Sf08jfxEQ95*s=9 zsiM`Vqoc!6L51JaR_)c4#faR4VCw;k)*c}&s9OwSr%ahNLn#X?6QEnZtwZ(pNvqMr z{Qk)4Xz%6UZ7uzEJe4^viv?A^t|c6a&brzlai0#9Ufokf&bN_e$DrqmCSR)H;<5}9 z5*I*X8dc0(e2x&(%+53TWm_wF>%Ge>!|g3EvUA*LF`-g&S%`~?zam45OFAKwoKdUf zQW2`0c8i1tA@E9aZjqLP+NInYXRiYdaK&kJCLe>92Trfqe0v;CjMhx!&pxgd_*`2D z`e&+At9QQ4`OmEN&6$qCjZQBJcg9WxGXL1R8rxi=*!?udG?9Gs^vZIT^uo%dn;@}H zD|(A^k1KoH+cuFPY=!?7^Om44gwgmx83OiDhCa>i+bn4i&}waQrgj?t_$n;MPFVd% z3qVImVsV69>UUl&iY$4*fq5LRI*~n*tT{cL7pxgNQPcM+n63NJD@SdM zQ?kM9-$E#roiFMl4d$}f449`!gJBVZgW~PJ-JS2ob+&B~UM-*99Qr1yhSwRYQ#HBa zhGYab<_+{^kZsLEIF9)jm+|4pCcYC5_!e&02TnI+KE8&gA7MkH*~GW33al8zlIw$p zdF(yv*I!LTlv^^GPw^WI&dX(V9M!&b(sTIRJ^+Q`d4wkHAE&~y6a!0%6imoBeF z`bOw8`ru#G$-KE~H2XHU!1lF5nZx)~+jd8(K@z<18uqq)z)+h!!tp6JW`-l_v5*z* zw)@{CC|^^7nt8($9^0?(t81zox1dm$wP>CbA%v2nKYi|%$aszVi$^LcrHD?aF^MvS zEhj%5f9?f_@a*AE8w}<#-9n>wZm6_Zn&mM=n|q#=fmGaLrnd0Pp75hzszq|PK;dga z0kR%FNrD9|3ox%PK&tosl)($4t$YeJ>9x0{?nl*EJCX|!Eup5$iP!hqPz zCyP>{V-i%(;+yF(L5*0Ws&%)?zNrk~1Vwed{rjVhzJ?_ZaIO{b_@%))c((EDr7U+w zn^wlwb^dtt)4HZbUR79+XK#ype?>U+`%@KsmqC2hm&9xbLLB)!Umts^6wCi96yVUm zex$d%3|ysAK>Ez!v~ZB^MrxabBv$55zX*fQSEre?9E?16CE@G0ffS2WHP+8^Oiw}% zb-s?tIY{wWn3zD1JfMEgpi9z*{b;?+3;^+|2?Di@`_*0a(VSok6tSUf{#{g^CQpwgK_t)zc3e%Bfz6_b{FT7&%macZT@2wWYm+=IFcP|Q) z-*;(g9=w?L`m&2Yj%-@LZE{N_G-&&Vq>M}qMF*(* zsY~+zJCce`LW^yjbH9sd+agc-t{aKj^cpArEa1Q3u4q(2msArD`XUDPq;JwG;kS;^ z#x|R*_S0+xDQH8Ba_1yk3>f7KWCZ!32*T!{;4OHr8RaK0;GC|{aTto%m!JAuM(c!x{)=G zx-T0C*p!|ruzD`&Pr!wZT$-W+BfHdi#6V@?K5q1LixchD|JBNuu|nh zTYv|iHjID$T0~RR+T~~NNg%%S2dmDwjG*Q&+~a>gv?d?H$$O?v+gO^&0{zXN3-6gB z&q+fo$LE)!^m1&yfB8KJhY!zz*waNoMiT;TvezyH`J%*o(Ixx0@K@SQz_OkoKSX3)XtbM@cJ0KWUdUyrXT$CYFLuUK2Kyj(>_Abwh`=$)6( zrEj)~3W$T!qcBIG10@CKnwlChR-OM}FS+2^f&PC>JUiS8=oKC;`iTqxi9rI;E4l)- zO0qx!w6D;jJb3R!y)I+e*$A=xx{E-b_GkUSs6VbFqy`T6MS|I{O5l!vC4{l=0$2a< z2MCxE)}z2jo%f$WtAa!9sBiqge*Mq?sN--1e6mCRDJ^dhsd4VF`?t&t6iy%70p0k0 z7YK?+SxIE?qDk|A?c;^5ZAuzl=znI)YJIcb>$Z$mWoNgu`*PFv!Z5mhf zZN8da)%xy#efIr`?Um-`>#6fI&ttM~roW+@#^yu>#Q0CA3+Nw`m>jb{cTG-Dx0!AK zAJt#(@GV*dcF%ukAh67zSnr4=6ORTK;cuhb14@({Y>Ln%@-XwhgF-q&#taOQ|JS3n ziBQ=2=($*kf$`735BtYIJUMz0GPy;n59EU4R8pdL`Dx(4OY8?r)b&jIgBd!~_EO$( zw+m$6_ghj35;8`dH|K&(oII(AgmnJ-7|T}(Ehm;IB0EI&NhAZk2mkXc1!o9 z5R@(fGkpw&{ZVr*Qh%2V41>Zo_Ao=gSiKzTI!wSyl?w&g?CkzVH__g190a<{wo|akD+ui5=xtu*m!1{FN z2Yp1LbftjVf8n_&*!Drw8)OO1uY~NK!poOj-v8G*_~$>w#e!!K`Z@A31`6}jL5uGC zVl(fT0B166sA%R2q~p5!Q*@UvM<-0DmHQynvqZWU@R$*b`hDqy*zOm(4Bk$hxYfr3 zR!E`(u|v0UyL;y*w}AP1ves3n0t{t;-sRnW8dywt#zAm^j#NvYhjd+ql5k|+dL;%fi_n*@c`&zSuSXYtxT@QR~GkDP?kFT>v4 z*}ZxEe<8}h6r$(~LOlhAfkBfi7bZ4@pEe0-wr3EEv3IL8=O=z^7tq%4EaTTc2Mr{? zUu*h`2qgA@4!~}G-CunTL^UJ(t}E>Rv`wco>heM!ztfFd&{s9ou3kR2li)+F*R3Dm zRcYyHJc14(xO&dwgR6|Ph&yRH<9)Vx z0bUiDOTXV}tsDd7CY`Uj`-k&69i9Qghv5cGOi;7G+-f>g;(#UU1bp_U~?Q3ITof4cdH_9C)h-L7uU+&EV0DTt1bisV-<*JpmOcjW9rzA z?)TY%!pdNEO`+87I=NEYv`dFUZ;q#7=ycl#$=|qDxVwQ5ymMtW@f$r^ncfEkgY1%* z;ZIwq?PH&%_>JWC`j;T7HbHB9Z8Jlb>pBxI}pYxXhhg8!+{X#T8Qz;d5I zx%ot>4I0sjCCBh;l`FU8#QMfsqC&6F+a{Trto^_o-z4cnI?Jkr)mL&blaiLT=-l7q zmV}o6k^w8@`$IHJZp1i^*Wc+rT4mR_wR4}(5EOQ9?>sLpcp>X$WH2^`+`Im=@pk_ORYY8QH(q<5g*`Tn`)InS-5@m@bh0&^}fLk|L^i+5)FT?P+bWirT;9Bz?&&^({_vx~T{V?iI-sezs;7o;}dL^LwrY zw7!r+9&}KZ_UqthfcRIC$B*vr1?zb3^Z5>iz0%|3LDg+1^EK+0p!h$@(j3g(G4D;0 zqUs-XX|_9lU+8PQk!d5jd?(Vz}7^Ci9Kb`wfGp8^sCHolFF)j4#Pr8JtxNs5O?{bJT} zay&11i{3d@Cg_y?U& zr9x~_?@FXyyPji!Nj_aK>t3;loSB-vQZU#wqEs;M{x;98yo8!`1_u0qd@cB6TD;jcTJj@a6c*>}H-e{%i zCmCf+A;_-$;?>rn$Nm;=0KOHwpPkMGfpS<>p`Dk*yfTJ^JiyCiF8+o#6vv->*$rB|xDmQ0S=I@XfG`x80 zkd16h6CTA=UPkOz&53>C8F3qtx7I*-zzTi;ReE8UZqBZNSS5@LXwD`7>O$|N(Zc*^OWL-_yH(&C z)~U?AhL<0)-|m2NUs#}!DqirWeTo z8QkqNPJK2b872^Xcm1*b>*n8U(ck00zTf#Y@d+-Rjvk*))8JQdY3DrgQ@ePFa_8Eh zWQI#;f!svQ9y!T5WyJ%~Ej1GI>_qpRi!1#3^9e2PR*vcTdGi)tW6eWcI~Aw-bxgd! z-eiVEj!xm_G{x#IdARg~{)l`>jxB>_9hysMDs(n(Z9=PLCu!W9jzj$Vy_`6eL{;%6 z0-tZKV88wKr^1M+nC-*!2aJwwm}kwtd2Ito8{6TgXVR#*IZm?V2-@>{}PHpY_rTo+;2s?z8Ko-k&s?p!}V!gya5% zsMX0>t(|Ga!-qygU!z)y(Y>5MPxqkCZZ>c9vWLipEGU%Q|I{q#TMOVkE0i6pUeE9g zq_cB-?~d0yG$ zj%RzvwpZ5%?Di^ENzt#;nYpddsBo%0%1pqM^lfD#L!UNydh3b()fdq%$!75F#L*q~ z5IA~%b*K6&?}>zz&9}Aoc`yIV=#_PJ`ErM9UftR5>42RMakL1U`5Ib0>fZfwoedf~ z&WSy%S!`HRF8dOM>t6G=n|( z^?VSqXFD&xU`I`bmHXDa;sh?Jbn3}j$K~jm=D7y4(O0G}*l~fl{4%j@;}9XSB7L{& zYmm+Z!}F}!=*NeB=C~AORKDSJeM@#jcsCYj#jhkeF6yff(mTlO>P~6;|-6C8%maIMqD2(8a zQuZ6J3CUZLCTkt1ZBu4CZAcw$+Ru!MmMhV#^z4-{wD*Q8p({B^*DI)`wv0<``?QU} z)JnmUZ}ZH{(5;r~vy|V5e4oszm^FX2t*d~cG*w2VA-m46_fCfBc9wh>M_tsOsP7gj zSeN38D*o(^{_)=PTmAbAEzy2a*n1BbzCPhkZz|8CEJ^oHQn?dtF59l%J^aVwd9{l| z>X4B7@v-E7y%xl|HMR)_%}nGRcO&5tWKwwwcdK5+CKPV%r7zfw&lgrUGjGA@x{hz& zQ-3{|qWN*@D`kF1VKj+X&%1Sn6Z&r5r0rsoCLud~oL8Rd3KA~!^8Hd%RAOL4t#*P4 zS)BiH+zq%?v0VRZLP?GK&bx<|&4fj!t)|TK80YBhigUYk-s#hO=+67AWyy15-MrOa ziY$$qfSAP-^GCaJ$9v%2?-eGW`szmGEsojNE~d?`oAQ1DZqzVrrun_$q&Ctx0PHhsNG+Ugz- ze6f_b{cn`4LA6py$CBK-sc##jDw8wpPH>k#J3Jrv(t@mUl#APKsx06nPWtUK7uYwS%g8SS2?aKW%w}UKi`xjNK9rJws0^R? zT`R?@%w(X%?`Mp8h)(ty_RrzxPDt~=f?fKLF{q_R@}jM`*UoOPT$qbW+J7Wh{npsa zbyn!13JmFDV_1ay8ZA9@RH69z35S{fQF+Mj-eFK*Y&-WL7}A+=-RcXokqa7w^{QLM z;VMV<T+H;QRJ2>F%#b<$RGtpyT;F=uZwZ9O5<oNxoindzpYNUTn>l|mVTK{k{j7VfYpr#ybxBfV{(6Ilr*HlU$ccjUGTXmGJ#u<8 zxA9hlu)nwQwEte~A6L50%kzmZgpik*`e3$9ccZv9RdC)K*I|eilakYX-quXB_~w<| zyYcY06qqDpZ_#uVQ-xH3d{24RIAoU?TyXvE0u{O|FcVMqxYu;hP>9Hp&xbtKyepDq z9hmG@uLHLV}%g^Gr(c6`hR{ zT5pAzo7En~0*U$G63wio#9K;5xzC<9W$BtPs53VgXi>8P&0fXSc$xY5RRgzv56XzC z@_p#$-RXHIv16d}7mH{9DsJ**Sba_f0*VpVW*vC45cLwcku+M3?YDOA_`mnHbj4F6 zlma7Q@vW&B%ilrCN=l85PJP(pN{#%(?M01+RW$6NPvpSwwYWvXP#|VnZY4#$AW+$e zage7sLdjkudq|+!l-Py7;L)4s-mtZ$-rQ|&|B?#D+F{bf@s0s>=5P3DUDMht!oD>% z>ez2XLBbi2@@ITS6lOFSq~A_Eqx9TTLm+^2BUDgfwjrWs~8F#-8veUbpgZp!>mD>ic(hdSo&aWT-&hP1m{q-hcWR)9k*Y@1E^x9K5cz ztjdH94jwM{^nXrH+h5Uc>`1oYzR zDrfR%A6(#9>QP4Lsq!1IlYR67>mjI*UZt`z7^if zyzF%X3UZI#$T@nCweTQ02P&!_>vCVHAT4(WOqR zP9XW_0iX5@WTQbVy8udzIbEoEv{-dSFhf;NZrW8I-Pw6#ooVvpg*d0;qJ&?@=!(W z`_`E3(-HGW53+g={* zre(VjmnLT#Ba**sqoTU)(QUQC1O3 z7CwDRay1%|OBbqoAugEd{LBZO#072%wYmWYDkyo!4w&DNslTTI|}>F}`N(|6GM5>14GY!yu2`ndlMDY=;)n6_K&7 z9zqp~%fvfhHuj3g#4HD{J^uNCbz<(v_`h6~4U-R|1xaj_1vQ7y%83iN?%+d#`en8; zxie>`TIla?!QBS|9BMewNW0`^eApo2-6WfkwuASPYrL@{z3Zo@57{^`0u=3EN+1t( z)34Ud&EE@Z7Ue;{77{@UQXL;mJHeZus31=Qv)KbXM(Zq?E+( zHz&G-C4s@yAoTRLRyH}l*YvB}keu5mb*jbL3O3VP5cS>3!rZ}_zsv%A%hh+~C`e;5$#b~HMUU{J;G@EnC_Z<8X1A)fxDg+T z+e*T=rm`EqCHF|$@_PCE%M2&H!C?sj!LH|xSS^OH;WW^UL3+s|sp^0cw7Asu;% zBg($_XJu~F3{-vis@lG=XPKW?>4~m|P_E~jQZ*hwEh3v~*IlYtg1DWQVUM1u(0#xA z&Dd|YS^*NH)jENX10a61OKfawkBskwQ8m@@%$54Q=1O}HRIPzjRqjE@Uxk=wY}5nj zSV4l`a|oAS(KxZv8gdVDu@;QA*Gf_U{JXGP2n~5OI6TjPdBEPh-`-jDrgQI048RSL zIowhGi^%~%rHQ!J_Y64m=d*`FPjHxG_StWndkNbMZQ|;osvNMX)v?&~?i04z@%x3s zX6SFdqEdiZqTglzT@K-kF;!jxpci|HqX#^HF&N3eXsTpf?V|#LxoCDNn2znm?R#`~ z8JqiQx&v20jLNZMQX?97d?*OqqMKUeHEL*Szb(Ch-wlK;t_tUp^7%;kMTf6PfPV0s z+#7$rz3DFhqrJIxbG=e|%3~LACO<2~ipyj|sRPZ|Y9uTrLNOI4nJ4b#;I5YU!9Ff( z=Osmxys>!!iaz`96qC)q4|Huy0<&e>INZ)&E(TFe-#)0c4o}#2%9YE zvd6MaomVI;?75TQp61b{K)vtX>Oyas8N(Xx8Pf_eSv7K*buoJhenVz)ka~lo4n0*d zUb}7T%imLjYSn9Sf|eo6@c=6e1Etl@!h)C) z?{yFF>Yn@e(NiBVgWk?dt_Y`w3^qzgt4X*%eDA)Ie8UM>=eyV%PuTxb4PB}CCI#vm zNLQt^od@;xZ@j_%<)GB~3t8GP>d7o27H1PXLd@+K`m{q^%6vkOS02aTb4Zw;IRNN78)EMk8d z@EogrEDvg8x?6#_1RJrR|HgX(P&XW21FZ<@peOCZVoBOxP z0q@60Ko^s)U-|2vZjTdS20q-#`d{EBUtx~V2Z7{4O84(*{flSu|0j+zK%@TH@^4@$ z2YdlYg4YYYW*UJ0S(4g=zaCP~2LdF)v})C}|6%F=i+1?klm3UL`|oAxZq%VBeMYta z4Z{}4q!56CN5CQnuATq)j~>+I%JI6#{Tm3%pnxOaZ}w$R`&yvVdQryXuhX*oaNh$2 z3G$x(jGGVQXjSBZ zp8rl4?r{PC68fKvYf=Ma&KuXd2OE2ia{-!0ESZ^^lFZe>zJTPz!f7E>5BrwnKWB`O z!;VZI$N&=%SAA|y+y>170=~)uWPvDU@n0G?3~;>s_7v3^unq`i;M55MZELUVIsQ3^ zazGw&JWK)5-aBbQM@G;luuHZL5Skg#ZD?bM+>d0JNduPWK0NkFmjG+) zyaDCG!ESf#jLhD+b?T0%;c-xW@kAmx$nci{4>uzAcF4`|4f+& z&`a0NHjZy=t4)#3w= zQX7y`k^H1~%T@VP z{o--+5l6yz`xtrkso@03kA!P0aTqV%UrmoR1H?3*XlO+J3;({WIND=vfa_pqjRA}) z*EBi5lE2cDb?#3#(d2oxPX{}$ap?%ClsyC^37P}eAO;VG4sUI374TO6(je-mbQ&!! ztqf)|etoo9n+mj&zp<(wwf?7i8+z=BBQAxX>pJN2y5s~qP|yn{Yo=Ds`hySoL6^Jd zIDRFC2`~s4YF-)wmg(*(!La3nYHL{j!#2NR{utLklbf3M`1&UB4lJxxAeP`I2;?;A zVS|<`S6-Iv5zqiF`IqwL9L8@dDjTE4rWs5WBm?LvBCjp@Pxkp#k=X_VsSHa6y$HL% z1w0+i*IycXY@)l;Hxb;P+d?@4@_eJ%^5D<&RppnzKT<*#z^Uep!eT^0Pk}YhCGKkj zJ2A1q5@6#J)n7VJHsi~}LN&lX+Od_GkTu3$MD}{%_3Z`i}!W_v1hf zLGnzmfAQbl{ZPRWeH?^76B!)(=W(>LFnRmgGRs7Pjz9bc3#@E5RpKx$*&HD1-}v4V zQPcklkjGCyK>yMliv#vZAv~TB^b`WSYxL&<%BI-g%J*apv*`a{ek`C$_wFGAcyrIj z{`~C!q*pq2<(L6jNFUThhl{U%_^0<9(EZ2P_xaD)|7S+^zjpcx5GSXcH;a6a5Oe_pv??tCAq7yZ?~T*=Pog zAgnuS6+rR|R|!m@w}Jf&E2wzbY`vbr^kxR?`VFvz+Jz@|Phpl1y8Jd2C^eMp zw)v!02D84D_8R-tP_ku4D9|Th}>n zlx3SqF#~xydxeK1zDu3Ge0g_rzspgsO~QV|HYllWsx{tl(#T5ISEE>$(2pa0Zm6m} zj;#79zg#A~ke3iTz#mHwzSeW8gb_CCC_$(CkKM};*J!>wtCa}=zHml4Q-Sm^@H-Y6 zpV2+^^vsCu5I=Cgcp=VYYk21+vcsAZPvRggEl)D}pJ4Mc36rU}Zhmd?j^ZI2N@6_@ z;!9wYt2Mu)8fqMk;2zqk2sAGDHfY&ljRFBel#*mY8N!Ez@&aw=1NspYM=HuJ_%27Upavg3nJ0ti41jnCLS2kSbfKdG1q!WFz`h^@8EG zL1K)+6q{~$&bLeBX#87-*0#0OjTu)^6PUg=(g{+URk$=dJn8DlTIAHjZ&KNr-47^G^C{c{N+BDqGa{2G?x51a zYwqYNC_nz8dV%zW&G`zkgJ&@>i9M{tI0|Rn_oOv$_grOoYQKWG3e`V8!#_Q3o1+0E zYAQ3_-+@}Cw>5anZ}>p6W;gCr%eGxUbDL`8fqA{Ysi;|;MbGAO4E~kM?r2$|zXhND zMlR?D8q5J4>NZ>)KKRsd!~L627r}IHBAaq%v`7D(C3QrIvLd}*>BnVyweTD2^>MN~ ziOF6Mgps29`d9w(3woaUama!{9kTz&i7!WxXy#j)hl&}nT!imE&qQla9)ZjNE{ zIz-im9DVYa=n@+r4_eaB*^*f&kN%_M;mZ}%VgksS;7NZMh!!W!PEhi5lXEtG!o?-! zdN*)2d$mM!M^_C^S^g1Kx?8ZNz4+T$c){SKg>UJKEhiOYMyVw;B8rU9G78*!6U6Q# zbdc)qnf&}Q>+dWUyAw=F9s=*8kedT1vla9WMJ7;Ur6yl0H}U-_Cz1bolV#%Jcd%3C z1CpoN#&zjpyn&PvxiljEVGWQdig?2THE*^`9jj2M2M8jps~~Eusw}##QLqMI(Jfec6~p3++t&+m=)jT6lurf39dQ1q`uaRmc`TN zeZ{mEnM7Um6X=wR{{gCQDgHmcd%$Ys$f3=%d5;+ZqtXe1rO-q%A4z-#+|lFkqN z{m0W?kJ3&!J_j0R;U;Z=&bj{E-&{Wzke%Xt6HrJ?dB~sayuUVC<(v#76G{fvz@pOS z-Ft>$p_(%QsqFCaTS6Y2Gs5mLc?zvq2?>*d`O(_pMpJH@_h7S{@8#Bf98YCBa=BD} zQfG2^^cv`?A&dB^(+q63TXgL8GMgK_8-lr-)2Via9%rS|fNpx?vbK7MAeQk{*5K*= z!#+VwmY}8w=4u^bjpNw$jd}s(*t=J9EMKWP;x$K}BTJY~BHB#7GoQHxjlrByy;~O* zubAYRyd!P-YIaU-`_B(79Kkc<_Mwq2M5PR5(II`Px!iPdiSlkpJSENtx5Mk)mWK*o zTjVmXYx9Thg_I8T>>_#E9+gde^Oy8m@e+8mMIYC^xSbNl99QrrCTV~r?a4%i^?MHA z`CB(wUN3#8LCUZ2Aa9o#>UxH1)$}(Ta-I2ql-cs6_kVG2WgA2P5?8P_UtaPJI49VC&5X4*R59F1USe6?4gMp|k4+RGmyK3Wut+BsuC z!4g|8obwFK8`pe~UiJcg1IZ-ZdFvRRMi542Oo@+D<%Q5Z26{%56EEnAStQW`5 zzDo4lxK;_Qc$$Tzvi$D+Cp7$z{^lPX;&r=#AP#?tEH(H9T9ky+Z4B9%PD*+;>QGTn zU+!sEO2}Kux03VQb#tv#^htdaVkx>Uh$o_1TsD}A)~Shg4O{Kis4VK}1o&C5y7vn0 zK{0EXA^KQRu&EDW!F#VJ#M`kQT;h7qm7JB~njJM(h?Es_80#0ZdD=TAI{+Cj+5bF_ zTbKwhv2V1H-I{OrTdHWE8XBiCY|k1q*Lj5N)ySHy<`lP-9IaD4+!bL4eUeI;l@^#$ zU+Gg=Ze304(q)@y{CsK7Vq^6yJxN^}cThS}Q`|1f?WPfQN$hF_>xh7rO2YZbY~*F} zQN?ac2h7w+jDYloNIo@!SHw{|j)bmsM^ZFqxV?TNp%ozvx`CUG2rc&U`Oo-^kDZIm0$0 zY4t{(joWtrC}Pv5%b0ZMK0s|ng$8kpJ1I$%#sH7q4k@`QEC(rbgGIAfSvg@xy39># zu3Pm$_}`(}??u;iLm9}K>T(y{QuN=GK1>#!)rN(RIX)%=?sb$G3{8=3U9%QW_& zQ(4v+|7b&dD<~^WSlZWcRS8ZuT#`CNRL5@)QL`?-;qna8bxBm99g^ljH* z(IMyd5}x(B&A=m~K?fTy70&n?0ORd@Fc)U3`f4#(F>JvNitxlhSKdBj^PNe zwO6n=v$7=_xv_2?5z-!hVNyAtX-Iy+_|+frUn)UpSc&kaY_aQEgWJJmBD|uV<}(G> z8r|NRy&?ytzjPKEA)9tb@2;!=2y_ZNcg?KVDcvNN?1l>j$P=2|E3 zHMX_%aX!9`A9MxD=Wjrr6!-q&0{>I|_~FfQtFHL7_$fE_XkEZJJZn!B7+*ND$-EJf zZ>5#N)_Ef3LR?A;-;tRpbsb_j%CcKV#8i~j>RGigsrcFRq0#G zz*10KqG4IxK7w@--#e^woy`|O9@2y>#X|y7;y#r8xaRUC@);V##BYgO(~fg*s`q!U zX%t#OM_S6;#hbt64Hd&vFEYb?m5f9k@1*;DZ3}OZh`^XedB~{p_Y{W(`O9&w@O6sJ z%Cx3{5l#^JToSLUFgti} z5#iSDH--p;iuOjiwQ60oHgWglYrwpYFH0+0 zPYj2v^?&?8^+$?*Qj5c0=xGK6r)V-O-W#SWApG!1p9K#`rexnz~w_rN4 zT5$04V;h_;o9i>fcq)pEzV$sgB`jtzGZ4~!vged=gNC^a2G?HeVf0&|Mt zHIZ#j4a63I8D(?Js51vvd&*yoPqZ*HhdnZB<5UWxCkt(O3;D1{XV4a@WIJ;Qevk5X z8KwNuy;-R1U>l2MLJQ|vH_NRf=&T9mr@7|vN9J<~Xq0E3`Emz+)cem}Y1<78q|Vj{ zvqO^Osj;-Bz4o7s8}`Zj?d3>2Wk_319Gs0PDq*ecH7X1BG6M79Eqncy&Ml>!Y#peI zZ64U6`Ib2H=-|>>T|e{tPQS^Ih%W6U#K&Okbl>Z6+lFHczWKb9av$24aD0C5_1j}C zD#SRVxsQem0p;O=M30nNADCoJNREqDhn@=ES7*4fl#uF0=Bnnj9fDGf zh3tku1kGN@C6`B@SjRR`sQ9?%IMLbVt?lsG7g=ZJ?A2MsZM3JYpKkY?gGUDrx8Egm z7JeZ6UcA*)9MR^SbWV7tz3Yh@Q+z7Kq-TMGYAK5*)X}*5ju*pxb|!0X$JW0CBP&-j zUPCh;ZKqBe9BSN#?QcvFzRE-guFPJ1GN?M;sJwt5C0$_}#fUG*sKESzG)1J?>WSBQ zfKp%U>b>ZT-IB5Q?M!e^nK3vkR{Cn=nid-I5e*L>EM?fg7>d0}Wm*MeEe&epWg+84n#LXem-I@M$4?pGojQNa zo(lNEG&z>`;^OtY&DEVw%IB4Dl_yd%1>VzN?&O@>Pa%Lk%v$fIHo=&?5Mtb)Uo$KsC{41M60=?+ zeQM5zP2>WTYd4wMSM}w!RJ|+LDmgrxZ0WQZTpujpPbl2&zo8EIBGu6Och2V64U4N; z-K)C?Zf(2CU2TAyxGHQTHzmU?!0Nb3YM!)ABt}1&56c5a{+Qq*p8GL&%O1%OE$ttP zIxngfzlo=f9D%s2qXr;3?MpTu3tHI0kT&+w&JAzklv?8Ly+^$7Kfd4K)9YVZi~n}{NWN~dj;*cjRQ6@67tcx-DMxVLVu>m zxlt$FSs1RR@N}L}tmFOseX8^-Kc9Ub8R~npxRB)&8cJu2iFPZ$d0S9!FGZ&y+e=k= zx6wDg7D=EM0S7^Qg*{&aio2D8R-fDwz!z#tPRvT&F*fiyo*2^vy;wP#gH1eHR4}&m zw5w29)33yXKD)f!%rM`}W-l!Bo&HewF|(?qlg$O2<8};0KWEOp@j{=1xbkN+D*VLj z($A$6A79z@%X%S(+#3nMSL++?D|z%=l?+%;y5C^+M7IbEV*VxCuSQ&@bmtI?OlUr; zOI$2U$8sBe>u-gP%2tY3NLba8H_XL)*FPpvn`RlU%lsapPnmx566;q@JK3;;Rc>>7 zr8PCFVutk3qqAv?W$TcvaubQI^-Z$s`Hg4lVQj`{|CD$@ici<>k&?)GOTzI(_eE`Z z;r_-^-+`5qFF(?6NxGV^P0sH2g<3}(m^>ThH=rK*X`6L`JFp1-ZPC+M z<5bK^P_q6U4;`ie)$zPd{jFSfNqcMpD+`~qhe^iFM}u6($gU7tCUG{FfSwn9hiJNj z_&bxH$YjYne?!%M^6u8|=La_%3N2zEdFs5be96Y_nSF0lZ^_ls(56U$#&nj_3Lci3 zQJsoj@U1&+y2lM!d9nLZ>PnLiGR>3$DJbXn^bMze`oyN z=l0Xxa|@|K)Xd5yulnG3Y6Oy~R(NGkF*AphNJH~$R*qx5Jh^-*F1&N-f-5IH5`yoX zR=vx3^FsoQyId>l7zdy5ijRssy3!gMe+RR{rz?pvmA*4QNv+_HHA%mr?i6yKIXPF_ zHx3`$+doz4r2m;}dabom#~x!YTw!Or?>}8E7M;3W^R943vY>j!CS2vxEH7RV!G~pi{LfmN$Xkte78ZYAt*3okx%b!vPsXdhbtVcMlp2&IjT?T7=RLSp@k+0^bT(=Jr zGU(vb3s8!T_~20PYHM&Ur&Mk|2tFZF$R|B_zS{! zggix#&W1JwU_aA%+RdmxV%)fU(*2fx@0rGHqx_wy4n?wqr+VVI%S=-iJ-xJYXU%6&smO))DG%(Ucp7Pt3TfA5J zhEsHt>(p3-0zUEniH}z%yQS=T=DV@98to6CpOWGRm zM}+R51H}g)tn}#R;qUS!HWIy~2{nP}N`yKUxDG%g6AdeMOn7q?q*3Y20!jRn)MSqe&-mt z&>`kCUAlzs7`{GZRfiEiE8-WsOB=GLRY6lK1*|-f)+jaCVcBai>-f|ooF8Ktn^+JD zz6&--K**Y0b!DPe>D-b0x3Bi_C^ZZ~@t>tWh5vLnFaNB4^It!{)jkq@f&xgMaPC~< z)h!wVG*8oE6g*6~!FM-evMiG|-f!vKSvFZeJ;)yV)um3G+iNz5H>;V<7C-rUja zX{e*G)jsSEZElkS7pU(@-FRl?vPx>+&5a%#nI3szKRI)eF9ou3S(T4Zn8DWZ^l%QL z=7Ck#LBz*hS7E|y8SIo;L_X~F$bj&T%I6uDb@xIxe~ ze6jZmGauaXCkTF-Kfs+hK9w}u$$G${I2Epw2t>KuU8B9Mxo;m`-Uy;MeOIfF;!kt>$|M$FTb#(C<5@9 zq?}h*g718ifIuj%8r?=^!sWc9?j6%CYwyc?bA6^a1nu$`N~*ZKn{1N~q=pNu-}>lk zcGZPYsz(mZq}rm`%2JxW1ifD{xBtQc=9&J70RaFz8*7D7g=~4@)K10>4yF{ z4z~2+oE&9aPTRzUJrAdE4bPl(s#D#Vqc9LItexPtRyhI!0JCX&xfxTTM0>oq$*i%N zcp5H!?=Sp;%Y-&g~=We!RNx^wa~Dwlp%~q*q-?<3BtmJy0c*u1_SbyO-(OtG=hU)Y%z6 zK6OY}=VA7;@i7a#Gm-)hcR1T4RbwxND2>2&*~ zr%E4{rCeO`;+OYPXuVZ#1dPshGEvlk_`3ZTYPehGW61&C#at7lsGHaQxOTrZ>z0CX z56vO~zKQjJAjT^fvUvt63rD-SgvGh^OSKz@C!UZRMq58j3~Q=2RZ-L_H8)`-v1uq_ zmtnAO8Wrxrd=0dPy%i7B!%UM3Km3S!NyslbPv{Zi9%k?;z4Qm5f5&frf&vctZikP) z+u`D&>d*=)-5 zI{gZf&P2xE-&YH!R4k^No3(XY_Pg41P}mT}ellFImwo#%L^jfxa_d2r-6labo%)si z9#L7t3eY#7aA(ge(TzVz(je&JBampOXL6AO5i_-j6$y{dTW?={y(O0$=h1k7mw(pm z-0vj+GEc323V2>xncVV9q+UHr!UZ3o|FaBG#hHgysof2htz4k}8PTItwU*6W$VQWt zv%6zbFyBJdJ0Z3_#X($L!JQOz{536dNEXQsYL@@HP}{Ft6g4JRd6a*G>V3U=`-a}8 zhf#bTH#oLhL!+gq(047t%pH`l9r$l_mhBW$+(=aUv4%V7T$u~!QYy?I1Y45 ze6uq?xjy`nCsF2;6Q|lG&D+Z8*V{4k)~GSBun>U|PLZ5787bx{oR`x>8)FgGig)y9+LR2Z$_lauZ4q25&-MV}Fe3N>< zitK&4&5+b^qkOu$P}13ZzrHUb{Y^r+!O$hxrCVT9F_y5{oStn^WUMAgo zcD7VSSl59Do*X@?!wg;IJ*XdWR~2>2Bh^QsyiE+{3M#aj+2l`xMGJ_WhJ`Z?`dpzp zc8WGH8qSL|IG#Qc+&P;am71sm5Bh4ow6Z%0*HtXd;6_}3zVue7%U@3*$k#dp(ZVpC z-!QFjm+F+t`cUHSmN4h~C1ua9JjD+DZ8qs2089ZP$FHI=g59e;wN*TUJOGPm7Q{75 zWbSMn9sTsPJO8g}@V{Wix8r{+Q{|qbq4DVCukuy`-7XvfTwE%!&Ge0~D*3e9rD(%k z?Z~cyiKFxDb$D#H46n{>>o~k>t3`w%F7@;0J}^`7Ks5IEf!|hDggXhV-et)|Zr_g4 zrO6Ws9|ty&t7bCkz0v99uRJ-B$x9f08PhV;!#;jNClyR(V40Q%Q<1ev)w*ibi~BBJ zf6tlKT*y>gp7nNWh31B;C5%bkAWY0W)kL>c{{GbT&ETO~@xfY|x0A`@qJ>(H$r(pG3w=2wF{+sHNED(HI&fzvxKRKA*>)2l zY#+08)`(^@dDtHrw9^-)5X`x(yV(wMm#1=Mj3Z2o6`wXYAY0`RQ6-TDMI)1=Kat{Z zS0)Benf%7J|4_$t)>6B!0!85;n3$e#RD%C-+xisaO?dZ-pNb)m?SFti)@V>u%(qQ0 zK+jp=8>%bRu^_1@EH$x5!1@KG$o6fdOzjCDV|UOvoDR|RDV^XS)9~R2P1Wn7H{PXUy0!INZ(j=8lo(AXwNgx6s%3RHN1iUlJ;G~^*K7S*SZ)Wo_zX(VAFJ0j%95? zJCE-7$Z3DD#U0vS=v_F}b)O^U*~~3uS7?x}d+J`lu?{I)j_O75ph&d7;~N#LVQAm6 zT{!`%@>%|-6xVAi50uiKw9Z$<`N9ohAdss)69)u4|XKN7eouoFf*};gfsT7-eM!miy zDpz4ZyvLAq9L1RDh>F0Sz80Bm@vP0Ntu;b9H`YEb+V04U#}(&V_Y8VdI3ox-8-~VN zHNs45GRW3|0Gw>v?QN)j{2bAY$5-&)Bz2@{NnZ^D;2G$_oLzW6g&M`|`=GJm=acxZ z`c7_%Zj0KRbNVREVXp!^#@FxJdqTI1M4}fwP9?v!DN`wfm0rKZ%dV6&58Y)j{^I{r z#F)E&d;nwZ=B#)Gq{cPKdvMjzRTm@Kd@MGK~Vm=v^nI+oyZNO7KA_e%=80ODfUw zCr$!`B@cR~x5J!j*SMFFK|IkX>Bw^H1!eA&j#arz(cCOr+cw$*r&VNg&w=z@g4OC# z`w#2wWWM?|lN!rZ_9R&rw4-IyWxkESI@M~Hcr@1SIf(Ly7mBdxUiWNJ*mYWuId3rD zs9lCcoJly-fevPPRog}TdUme4ruEV`^Rfe%ANw}ncGn9`={GJR;UeM*tTJKxwXL@^ zZ~L9qTByNoqDuq&vJ=?s@4En$Y%Vh}7&@GA^eR8$NNsNDEL>7(8a_2>j20^?Y*e{0 zc~RE>4_Fa2rF^$Dxp=ql{gXJt9^r&d(lxd7E*?|k1JTW02aib zbmaK>GEg)blKNgjU-=z>dPtz&HqQ1$KOUjfGX0XF0V6gWmmTG2dL;OU>$d1K^yP{W zh@8E3i_Wwh@pvHO_33R9T;)e0++fdmdrI~f&id+ERqu~hHxVvjQYW12iHy^frGrhV ziVwo;$vr~PVMFBZEcGlt?cl8^OslZcG07+UKxfZ+5U)Z+smj3|?21g3~2s>U&kXCRJ%y zDMRvz1ac1oNMcpihPgWz8)&Me#7{xDq;_>?w+(rb9H};q2KkFV{N;}GDuZi!g;PwJ z;pJpMIDFKg+bt=tcHtgotW+t#602jeU$bDvrD``fBZ(`mbqMz_eI70TLe4#_eaYuD z0X|d$rO{^38A5WGt+jFZ=fFAqGVnKV4ri|FoR)3O)wLNf1K>Q7%DGO}M0Xb(TWmD= zRToE2GN`r6_c6f_4!Pf-L9M?j2U|knw>G$DZtJ%_&GeZqOT*SZGd#`yJYga^F+F7K zs2#Z%KGdNEaw#{_o)jS>JJaBZ-K1P>;E}U1O=#^^#*u{JLt0BJOCYDl=H6#2DqRxv9Z3xojac?Y7YkgxES#lI#t4T z9iJ{}%c-3!K44@hK4@`yqg!}`dz8Hi>ql`#j11G>#bOE+{vls;&N7xyVmkyh`L60X&3g-v%DHaRKaSDsc z@P^M+V;_Z&Mh8j~6PeH3E@-pe3reSCY{U-<8a(Yvl$nz@>2k?io>(611(Zj`D;lHs zUAj!gUAj{BT)KicShqjCWBc3~UjLFEWjLl5-fiJTq#R_$7FL;;!$TMRO#cWB{f6;+ zt0r-#S!GFLk1ai7I=td+CsR9i+F5i_J^A3kUK-AP8&ZYZ&5gnS_a?cKs*k<>pZQ-u zdw&agl3XRE$ZRxaI7@rzsI%TsWzz4KRM^-pp~Mvx#{tc_kDHG%WU`$IxxJh`ahKWs zn{Wxv$Bs~8H6TZ~`ijl4Vqw^Ef`b6D|D)l=gDH7r#rRWN@X+w`w7*yt(6D{Zb=%LU zlnYc%LC({@6k-$25*C;j8vMMuRj+S=dtxUbEM8o-R=$dYCp%F;uKw_}El{^!N#Sia zxKU0E`vCBSiVMY+g7Ab{3>%6M2Y>2e)4IQ}rc(L@p}n2rd&e@BOR`OBs04d~(bPgp zuD9XReR^Gu+^k8J#3jMZvL+0E)Vy9_A|{2A(tFTvYtMG$m9mS7W8_( zGl$Qc*INV40RP>4*Z~t=^~bZ);+}gibfm=;1$e@1x}Pi_4Cm3FR*7(qHF2=dunV{| zbGxiO@?hq|vLu5OK{i(10_L@?a@b()s$SU>s#H3c!eBCDu__0ywWR+ol35&XSK}#( z1Cj~s1sMO#tkTUNrb@YGRjjlpIH+P_)jE~EA54MXn61{LFB<=NP3e(svR5W|-APcF zk7ci{1NWOywJ4?rkv5eR;zA-UM&Z4h75BFN5h8@yEX~bajHqvyAe?1?V^|Min0t&8 z?#TeE&gL?y99f-IM5zc9*f@UjCm)J_posN*f1rr*cu-T%ITpEf^CRxO%9h)1#Y4?k z-gUj~0rXoX;m6BVtOJs$%KSB#Q~STLN~fBavg_!w_dz(&nt_mr8%4y+gDf5<)vx%a z@}bEr>xFp}a8VcVrF<{DmT2YOEyaEZ_{Yv``lqz_LYNTyd7hVkyX1xK|CDfRZN%^a zcb)ZA4FJ^mvyFRf&NEJXLKK#GZ>U8Zl6!qJ+0kV>73o9@=kk2)Ye_=6vKemQCAL!ZuSW=NF}ezoalH9=MqX3X0+ar z^d8H2{V9d6P_I%!02^WTX17NWo1@$7oR59r*kIhx$b0hshn|=<1aVbW@0Zk$zn!51 zQ@t?GbYLN2ha>^(WJmxt1?wJSzZI;Q27{Gr4s{B4ANtKxTaD_TYtC=IMAMu`t4+*D`1uM4X;LO74`lHL9 z0~sZ{iR0f2)gL6pl6(`yu%S@Iiq+oMe0tIQt|k&SJb)lH8e}d5!yZdjsQ0rpta8zT zUszni7HHTbyGKxwd0%xCiHC8y&h8E_6_pLu4{0#tz1Q$LUUv4UdD(O8r$a@iyNoty zI~r$bJ9;CTVXVQ9hYbMmMrb0TCMklIqOQWiq9YS+R(2koEO%ZNC$x7c?0V84#9|xv ztJ$Z~R{S=FNsDx`YSSfF_hvB-;fZ8~Cck+9Y&7en;bdcU;zB&b^eCjsn|GzI!J(gK zV!!`mJbp@|s^WmjI6Zj= zALB$3e2xe%q@)m>V+d+ld(zZ92V2OUFC)`dzKwG{ifmx~$gr+^C0RBNnW2M_lZmEXPb3;xTWv%qfJ)V_x_&L#D`vdZ%{sDP}#i*Kc35n9r z-ZtLD9Mg01-ty<4WJBN*;6+2LR5}A7Q>Y5{#De5aAD(2mU?X1j;!I&6Hmr6cXQt5* zqS7{Jn=K{tT+(hPFQIW2^++2{sgo6g$AzoM$mZsZ*mgH&t#n6wTuHo&;-iu;mx{?M zTIPV7Nl6&4mZR=vm9vpt4om=ILFj+9npJ`NIX4JMz)+|)N={A&SY$zHrid(JA zyCr^88!_ldrRJD*DOy4@`+@MXSYEmb%XZ2hZ0B8`x@{in)F6waRL?~Dqi(KwhLOE# z9=^9ne<>;Cd35>7kr#%}4cdW$fjoHziXOA>N24Qsz9)qYh+c;fUDf?FYnO7yvSpUJ zUyJJIi3rtnPbOX%kvernHQT_YSX8KX87!w&5!~M`v|HrlV5Tv7Vj*|#^Q=&Op;-!Koy~=LD&ECc~%q0j&{k4Km)GO zz=)};lHhB_V(F_%;^NU;!wZ$%#xHJm$PMtMifgFtQZb~?s5nk2^6Y~vXG`p~H{?Eq zoZ7B$?bYuUa@i_;i6gaDo_inhj};`I-0uaXTdXHRM!~eER=~!BXb-n9j`xO1p${YK zPlVf#H>o3!qyOmXf6WRza1_N6NArD37gQ96ZoCW23I9Lry>(cV?cYB>2@w_W1{G%gh;(;@N{kMXknX`~i2;KVqeg7sq4#Y(AHUD>+{f?x z-|zYFI>xneo#*+k*Xtb@rf6_3pN9R6qHdd$w5|@_mpd`(34!r$_~PNGmNh*>+w}qr z%g}_%3Z~z9hX2-+9*bzJ%JBi*3!%3;+}mjH>5&2IN!MU>izua*vkI%I}!f(Qf_3x)*Hh`a(6y7m?)ypgxW@POz)wklzZ z=y)l9e=p@eIpBt{9bzRi@3ob#j0V^jn&UjnBw=|#Y4fFrc^H)(WxT&3$I<$Y45NR0Ih?=__aCm5sb6)f(H{hG5CZUv*$K z#q^qwe$Re?`+ZR{l4F`6@;I4ezQ>gFPhcCfTV;+glg%4{bLkV$YQ z?5bhL!%Nx!D$qSvPZM8%f<4qoA_0W25pCp|;ABoGo%_#6$_YBQFKBM1Z|C}!1VD!i z$YK5u@&4T>{l|{H$s{@^dR@r@AGf5me$P^WhnoIoTyH=!@rDxAfC_55I<^zC&+0Gd zJ^#1+Y)&wT{$JPtZT++wWq&HGS=Rmrb@;!Zv=WiuS?FzTs{dT~pOoh3XKfFTH%|%h zCX+YG_77I;)ZjO>46^vH4*%b_Edp>^#YA%G-XAb|j@CDUX@Bz%*~@=OdSB|d$omi9 z`nitpSC>_eg_GliY*d{`-k&NyG_${{N92`%o8b>zo}&H@Byjx=5(uZbPJ4IzU#dL7|K_pI$C3c__rK-}|3Ok^6TgK_y3hV$ ziQdfczF7X(3Z#GI4Iv$NEYZz>mT2({$0^0av)^4aA-~;Za&G8f1^UOw^N}F14d&DU z^QGWy#Bclgw{Ex*o`aw`bpNY3KjrVcz4>3o`Gb=E-|fNwSaGr@9TzNl{GcOeDF zIlC3!P#_gW zWB;$m{{LsFYwknjXQ@V?3!M=eJUHC3bwcEd*DA@09VGNLLcOyBlXYzznq^8Y#~@yh zT=cDz57tLZ31~vNmV5bM)#Dup6Xs!mqlqN2n%bYxMCkVt#;%XTCuE~*hWBAAJp=VI z{&+Epp&6e2OPv{rbUchT&8#Q$5fl_6ntJ*$=`ZS49OO-^#EzSjcaBDo23vQ3mU7D7W zb^%+A9|O2u<(zYW*!BMwp{{41`;J9SUKO99^8drVZ?eAO>s0~i6Ad;Y49hQ_h~0Ga z2PVWJ9jpo&7R7jZuJW3EH7Hhg$b@kxbd)PwFsC?pv#yAXSJF`4xI6p{#W@Vt4tpZR z%eqoJx3iNCKq%4hv{?DCAn*Sk_x-c|ImF*VttJ_-|J6UCu8+WD>`Z$(odzIEyv?$Y zzOcNbVL!g_)dBC29t?{H^_oZ@j*LaOw~H0lr?F60-8J4cXiccw=z$2LKhVyzU2H3* zA}}DUA)3EuhyM6%{)khe#DNJKwH~7fc3PL=zfugch+{s15Z|xr$)5O={+JLQ17o9r z*XjUA6ighIC7n24<<$`c-HY)3=$cLmch2zjp}D&rczeQiI}_10(dOv~rdQ*hCfo1(J>C>*SyE}+M@r80YX7oB{XjMkcds` zjj_dz>nl-^NZd!Kz{yF&RCnZVZ;+KxFjVO@1YDSyUhP{ZpN&dEP*f{Kkj-T}4!x9Y zb{D<4og*=3c3-0X?vLLV_54SZ?GONooR~%J*51m%78+KE!dCe4-mi0#MM#;@qY1@ed-Us~?WZl!_YCTDJ|c3T;aG zM8fl&yyRr^%IzM)A0e2p<3g>3m!4r5^hG4vhpKqit~so^zF70JOVpKyDdz)CvW*?q zhJa<-9m9p%y_uR)UfVi7%t4kZ&{@qd78+r_(+5|fEKD4B1I59SEdwkT_F_!`$oDsm zc)|J}8q9py?BM$T{u5M2UY>Gc-Q;arS9BK0cymyc^UT{53DfS68E4MB>*UVG6~*ni z?+pf2N9Al)sj?XTRfGy(CPvix*6Q*?fhgb>2PW#rfJxty_SFm zy4cc6y&nAIC}D5JwFNMIAii|ah8vMP%|B4=J$bW_A zyL}qn?at-@ZOdxu%y&^Onir6rfaQ(iR0{MfPmn}n6X^7 zl{8F=*B&b4@yg)<4Mi0>n7D>IOvOudxD7OQ_#CKj-P7d+h&s#icE=S+FdOT!n)Oj3 zZI|7mbDUNmvu5P+hoHnC&PZIaZrQ{x!;7NAIo0h^RWvazc+w0MF^t-XHF^B zTsUJlgRPC_${4D1Je!rDWZC1b(Kjfr+P1DLlZHzh zKA*YIwpO1bO}w^F;rt?&?^8<9h`6dS@lmiG@e#PtN0S(D23q6^f^`oa8dk}#?FA`? z_KGDirp{N88u+LzQ0=_XO%nR$RL-^Op1|L9f0anlLpW@z5sR86{QRY%tH4R_D~0n# zR;@M-VF|ZS^_kn%5ou^k^y$59Xz50}HNw_TuQJw~*0!7{=-Ve`(SiJj7MXIXQa*H_ z4*h^oVvF-MuGJKCBs8FUQ2zPG=oUK(wVdc}^X}|kHo=GIl&s%u5k$l=sod=T><8A}H6jmZuDA)l91B}6$wxmS zlqx6ulFpEo{T^kK$d3MW3_oKD(d*wR+CF~%6AeuwCaEC&U`wHywdZV8N12;dCBYt~ z%T*UIe<7dRS!L$4i!EP6AjfFOE2ax{y}VZdQ)of}nr_JA(+69-3o^GO^5d?jPyI_E z9dl(cAAUc=mrqU3YcBUbG3$QwZF`fFhqDgJsm@$yWcz$NgnS5tF541K@m{GUM0NfE zlb8v0tdcbF*1gM$tZ4S@?`Ugz=-Fr(F4IVHZ6FT3)?fL@VNxN_=;kzUsk*E&6oXc~ zyq^u}*qvT|RF)oCz%e}W` zEpHW)>Xk7?OL=su8O~B=<`}tlmBI4Y18C*fmukVbZWPgTQt7!*(�uKmzt_Ulqq7 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

  • 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%0Dp*xHxW8XDtEl|zryivgQ2q{Sm0@S| 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 z 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
    $H?^vl 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 HgO%n4AY} zcQ1ft7!)0qH*ha&!6_CxN9WAW@5)?uSx|RSf5Lt^_j;ObI-(l9l(-b4#MgR9`5^jDkg!^|S)N+@Tp{U@!uXA}2T0gzSV#ykaxBK*+dg#r3k z*Vz5$$Bq@uoHvP9TV9??x|w(#%A*_94F{x8{yOt!2TJQuAk(3_&9Y>Lgc12Cf1;q1pugaUo#f~PbQ^lZsy)p0 zLlyRJ`>$)$`o9@Nk3ZksVZ~wj_QtjR>VU}*)#LcO*BE!6E&iv9TV<3Qpn8l@AYD<$ z0i08Io`t4HT&|6|TD1$n36H)d1e9@Y7dreD|1DBWiCdM$wgUa-nMtYnQPlE;B0(=q zH*WI}0V!Eep=8i5enI+*hAGtITjoL%JV{3HP6%jf`Ye^qy53lWtECsZ1B(w(U%8JNd@8jfrjBwylY68xz~Mb>{v(=l`m!x@vcK?e2B$wLa_G z9iae_fQP|>0RjSomy#4!0s;cj00IK$fr9vV2Kf4?`QHJ|Tu4p`2&f?r_R|m?2uKh} zN>oV29r)4*(m+Q&fTtu$9MXpZMORNZ*$7JqJE`q{ z$!`!)LKy%iEcpjNt!?9XLMMII>UsAIccM5;=F68G>%v%Sr;W^CzGsW;O~>o@pYE6J zo6n;UHkT)OwP>OFdIWQGN{d%{`bsbr=yDVV@_cE*6n~n4aXMhR^U0lVQ-9MI1ftbR zP`}S}r(4$*<37(xRlu=VpOP}$;$w^cHkY19Iz`Y#&W68O_kETo_L zE8Gt`P0e+^y@VK1rrvC7wlOpT7s>viU$Kuu_w-^TI7#Eh-umX~=XRA~c2!_HIyyvz zUf6m#I!+OV13f$CJ4J}qI3QKNN94En_c%|SE=NO2g8KS-3mNT7GHdd-N8=M}Q!&t? ze?1<{4EA;Rx|fY8ISYzQ@S%G=+s>ONx|1+>wzj^uI~1O*C}O}&91U1;h<)PGfYtAL zClCLd;*lV*!?)y$tFy*k4N`gA}%dJ{>p^}QM>hW zg&pA!%IVdWDvl-VlgK21en1_+dh|h;M^P<~$*l&Y{xF9X3+|kUE7v}Ky`@T8kOE3q zS9gNnRVG5W%6A!bIi?cqIv(s08-15?=RO(%n2xp?g|=*HKjY{D4SqOfofL0afVDcrXSZU&b#Vk(3IaDwH-*6f6*p%ZNQo2N7X+B-yW`4*-0< z(7yHZ)<)RQ6>nf_uAW6Xj56UPk3-p#aybf?7)Y6XUTC_#kB^U{x_a2ym?RnohSAzW z$zc8ojO$PC413q}`UO-hU}zArMo3wiMK~~stN$0RuZyFGn>yt*6M==LU8uew5jW5J z?$tq=Y$Je>&%ZkiV00JBmY#qo_tc7!8%=^iXV;Q$NbX>LbLtjLXG$YD4UYOSv)q!I+u z-+ZI1KGobJ!U+mmfNjcdm0MYgo4TNuiiSA+G8GH%1^##@97xuLyl+LaM)a}|?u=}c!|Ro6Fo(*_+;G}# zakn~XZCB*HRH^!Z!R_!u<{$zkH91zi@?v6O4oHBhz24?io~@QPkOaZyup^_N0BX{z z0cjeVwfg>iixi(+P+)G_v4GX;##F1*2(7v41(nzLlg(lWe|r-*nse)G%x1rbT zf}2KP3ztiejlGv`b9W~tA(5?^kvoa5emF72It{JrM1*6&U}aq@66hpEPkFk%cNnfr zk%`aB2nipfvVfRMZ#G~y8~!-B*!d>z`6++zBauv=B`{W}Aej-tUmNkIp6bJ8UZ>Lt@KRI#JRW~X5QL&c5B=CCn z2>$TceO;sLdd!e7BBDgq{Zbnel^9rDL?l=&blAORp3>{U;3s~Aiit4#!r}e-e9*}Y zIJ5l2%(x8Q4X~4xite8;8m;$~g8@#({e;>S?fk2t4_}o;+pozfs|zognHtzuo_}Fg z){*qThyEAo!RO*S%wVJ;p`kRW8&%ELSO#}M-Bk#{1lNxZzY5aOGftz3(Z}CWF=g%+ zyGO~V99CNotk|kH{?p+$TNI=}`N35?kxuPd{h)}oJ4{O>F$v5Qj(v?OA{UpihytJW zjaaDUyAx`kL4&ui2XPy|WJ7D}#)G7BaP*VHL;}nWkMlTm=75xgVN89ZgkY`z={plM z8PR+IB_P}1pU%(EPeoPLaJ$Px9bA(XC{zFrSCOG(9*KvKGDm|i0zm*;{R5X z-Cxk*$I>8?L*OFsJEf%*9ips6yu6={K3BA%z^Oj)y(NDz90!PeL9l>T=2rvH`oB3< z)kNU`zGl18m`(S$@aRN#luPgCCi_p74)ycV)5Ei|u~}GKE6e`o_)q+hed(J2&6OfF zRL$tLlGo;G`_h*xbTlM16hq?yoR^o$*78I-(4?=wirUJ0XmUDJ*Za}Q?O^X!pT7K& zKWho;=by`uol`eOJ$826b%>ZMV0r#8YSEDQ9Sd}k55l!}Xpb1a*UpnXe65o<1x06I zOd75FSU_v5Qj7f?(3_a)T#}Ic(>i247LU!Zh81h#Bp(iHx-MS6tEwe?RS;vEfYntE zJON)kE-o(V_xRIO3wL+-%{i{i%TL$8d$`;hTOJG2ef(parw{Cw;H7%6e8d3;N~@B^ zEeZ$Wc~!5e6DL+jl|WSu-O6{PC?rCAJ?~TNPPEUQ8Me1Au8|*RyzMnxq zeTne1L_-^Lz&32?N1R^#u;0Xcl6f4sswKk~CRiT2x}Zu*rKCT?2%jQF%sehQkz8K( zw)P^*+LWm^8UYNU$tz24v@Yg3Tp<(hW^@#o@o`~7n(AulQTSmGVZf;_K$LO#Vj`W$ zlWFupVg2al^0|UOGPw9&-ORSk~H>o(s^+?gk2F^l#X{3n0i7`Ibrg-yzt#=gcxOv`Ku#k5Oc1| zOTDOKAc>(?}>1J5rk>=2vuS!eNWPYK&k#t|Gt29S(Nx{U|0+~ zK_8#5_@s~K_ZiyfYWkcli<|2LoK@`UXjZEWb{d*Jb9DwmIVarb<1}F>T6`AOsl7cz z&b*8W)4Hx`Nvk@5xsD*|Ri^#VTb#q&U%&lZo?bDtBy4D4h|kB9-oBBii~19e-qD}W z^OaXWflm&1(HZ~dA{N#s%xWenKTiRr?o)srw|g8$r}sHmt; zZu2m39XHWE8pV^=yrFSX}3Z>GK$Eo>?+Ij=A>-A(f&XzTf(174 zQ^u?x^v`>ozBsX5OgDv8eR=;GD)#9ap#qe$msj*D3u00!_d6Wk1ZRM}&#}zwNNZ2b z^MrSJ%S?u(?7?9mc7>%z6DNKT1ip0D#qJf~!V+bdh>}hdH{2YahO%yqS|C%*i1hvl z!BjRsz7r-x|Gvi`1w}papLAE#pU`)VBkivuX@f$^U9%=5)T8w!*UJCtl&iD>Sf69* zU~0&2L4p|ve7`E<0~~w2&)R%URUV*WKEQW1o?GnRaMO8X>dS{y4rE}M_Ad$bCZRci zaL``gC#lbb8LpPW1~TIad;D~02*-z2UV0s#dVkY8#r64l*L_40kJmf-TS3o(qAg); zbT=N!{r%NwS_JWcR{xdfw7Es5X@N{bUp)vGlOeyWF!NiFnDh51)Qkz9=!-uBi`kT@ z2!6jp9{Mc*7uMt9&)cZqCpS*iueK zR|Q{pDT`HaiG;yHvd25iz&;OGa#o zOw13L*h?JEdy9;Iz)t3XGPT*tTVt>=G35`opexzo@uIN#s(E9EfYW*7QDg$-C~THR zBwX~$CiB8C!q0bB9#63NLoou$Z)U_~Z5Z@B; z>$YdL2@36OB#<@m{6M>_r9Q)aS>tRD10NrsNSDa{XJm%Xf0afQn29jWP3V`;yhZLS zq>yBN=KI}cA?xP`3!ip!=gnR=4jY&KG|&4+f9?i7L{quw?k~^Hfxyp&In)E8B@P}V z$DLi12thW26$^Y<-4!cwUai&Wd(&#?Jla$C3UvU!=21HKK7s&*=c7Y>ayjFukRk+t zy0NyX1o?y!jmYI#_VLA;q&Gi3(@-7@s+?~uj?p2iF6NE{rk;3+*k=_#z zOk#(%YfzmU!3Yej^6_$`9!Oy}l^!q{hDhu4md)i9O2r4}4h`irMdCnNt248)uu#|} zk$UuoJ|OXLxxivXVZw=-=p^nJ`BxP2w6mbk%v=g*fA!lF*~u8ebZH^)s?G+aD&xJ& zu1&eAZ}{1?THb0}1bH@mbjdtC6!+*KnEc3ez3JS`Ae_~i<*XmP0U|m=h0EsFi!&-N?O$=S5QA5=xPD`7V^dw(jzgMJxhxC#uNp{F20K@+`X}B* zNwgds-5`l{aC^&%fkU-fY7jbBY}uyp^GQ`zIfcU!{?aL1-BiHsvsO4IUUxH%uXqx-yrG3PM1v4`D=0o9+@RL!J_hrpD9-*V(QnVUrYJw-0k`=`W5u&@q zJc>k%y2lHgTUkp=Zuw)qleaXt@dtDt=xE5L)`4Yp)|?VzWClxa@7G z`NPy-e|c5w?d5}2gC6=cCSIz(wMdL7DlAID(hA)3twrWYIydUJdUkU#0?!)&MCnU` z$a7}kQ<`05r!j)hGsRy&Jcubd(!NI-BuUE(gsS$QAx7*i=l&W7^Z2Eyu^C_hE8|BL zks2Sk>(EF0OzqCkRRdLLW^zM#wo^5s`||6JO->q{#R1Z>i5wYNAhj}=7R}4@15XeQ zXB2|2XV#XF_%kvJYkHe8OI!Fg#`Mbzba&#b#oVL_>axsy<>lMnUqxh)&Z^ZthV8zm z+djvvLFlUH*q~}UID3;!Ze6EckA&K`JFXaCPCq6m1y1W{FVG?NA`&|?NH+NaD_4(x zEaq)b#Gb&eN2cmwY zl6Cl`2 zhK9YnvbRetta{`WHMu?+@sF4O`Qwxx){^n`K}Egd9UNCXD(YXN zZWrI>m1q=$uKN)RA8QE=?7M=O^nMnA(9E&ibWxYfO8ms3zr$_3c?y zZAFz+T!z4aILFrNN>E7{uTF8{Yk49Gbpl)eVn}P-%)W3*58Vp4^YbAsZ4e zj5-5yVVFV?iN6}9I%}X)2h)gzguw2^9F{P!^F~{n<*9%34j9<4Nw^$u)zHGRYH)hd zb9TNjh?PGCor_kz5CE3vpwGOhR8-pu<;qr!Rs+OC%`$RF3`BR?ILWwR1CB6^uQHb> zS`Y;`Bgtu365zL=8hz?o3jb7KgaNWu)A#CH@(x;RXAnZ7=Xcq?Yo#fIubFrZJ(ao+ zYK>dG18pAPcSWaUBMF*k&KGzORox7pd|*RcTAQ1HSxrUpO1RlkusPpvG#NCfGtKD& zJ82Wp<%of)veo}$@h_}V8WWYIE_60o$hbSWh0^}$OjgtMS_RgmuWy?@j$Rt;hFHzu zrmpUKo&tM8Q9!>v6{CURk?fUg6|Z?FNa_>yfdl~sO$X2;{wbp*YHiCbZtt3d5c^{OwV^R)8$eCKX zkRsXXSl4=m45bR5Qrt7Vy}eUbDwU!DGnOZGt{wELeWd>O^P&f0v`R$P7WIkeGQk7X$}-o5^fZTy9{P%2E;97DbYQws%ouI0e_0fG3cW77 zznGwoh7Lfv9w9@M%VF88Z@L7rY=*5q0hANK(qJzLwLj>ckf9!I`mk8rd$-bXf)0#9 zO#FQi(X5e}=pPL`oQ{ndfO(@IoaXn%p~A#`KW!CqX?y<+JG2n;aNFOKqtRkPy#2m4 zdwYCQN5V;m0&6B0mN9iNfp{tQTa{03yB7nQ7`VKKY9N*mQc+VSP`(E%4mAw%UW|J5 zt7?Ua@q+b%;@N0s$sJFi3sW`aNTbae++GKM`*qQJ${#-#9{U=^>T8fe>PCo03&G~Rx7CZA(3<50%W1rpMf``XZ z5o%!DOR2Y$#6Jv0Zp8j%hdoFe%XZIQj)PS zBLO1VlIiTAG8j`rUQVDbH=E#$KS*@B0=Ql;mjQpb2xX3C2Xpy8=0xBN>m6XRd=3-B zJhljnS}LHGl}-xs7;{3YZ2$ysSX|)b8UW3RoSoI>Sh=hgg&f_Gwu~r+q^bYc;plm zjff5bjLI!8bF&j0lSyZTvJ;lPmSzukcWP6ChS6;)C`f3*3eT8)$cC397NrO2$5M@Y zUI{ONb;s`E(GA$ArR1mhDy2F%Wdzg*{i_y|B|AoOb@(@{L*|(4?^iP33jc3 z+@E2v&IV|yTMmo)?IiO~xNZ4)$rc5nWF*3%+!;XWinWlSAXCSBmg3f&bV)*rM=)Q( z!J(GqU+Nxa+9Ea6BmYKzHt49b(SriQFW{`$JPBxI6Z)LTp0C$0_M|;}_WlgS0^WE% zZ%IDh^3X$rHlu0K)52#Ojyj+cl^xT($>22ozTF^%%hd+RsMIus;jDqzds+jwwoNL@>tSXaOUCMA3m|EXy_&2l_O198lFI>k~AFdKxWL$3frp? zk@twDziOUTspx8UWeA7EfMNO%-dM0zn9Z4yn_)}EAPYP7gQ)icI7c52b?JsiB-lwV z4h@^IKjvo+S}#|p*VGC5H(RtT9;On4ZV@8-7aqCD0-BhFT38;ZuG|k_p+$#>47R(t zCV~#-PA0#=GJMQ7nrR^A{RL8EjUF+25R9+=235LMfz@Hk9ZR3%X}tLrIDFABZECda zHFCu0`RNeP;0{Sy)Pc2fyrqsvzh$fx|E0DD`;vl_mtgk{)?DAK&5JXa&ZhTdyV8+a zSsQcdq+erjR*Jlwx0A)v^+6zwoUY?{AkK#elRFCsV_;L)Y9y0Nk4vE*j=YjNndP57 zDFTID)|CBqA!nE8Ef{-Klbs5$4}X}{Txs&9{Zm3Sa~r5YTC$;}hfhl1J}t9<`Z*H5 z?0>>%qSn$>cP6EJij|V?HnX(u=J`R8_$*VKgJ>(rI60xFWxLr(xe%tWwx9~t=B0_f zm~Z=X9Fu%LDyW;37LWUXH%IL@wiFQLfOXYQHP8Sp%O>sKp;FGTuEE0oQAl5tpVT12 zsTtT;vg*!8!p9K(!-zDH4~AKTTY9G#90F$eo-BIgE0wFuQs-n*>$8Twy%{;rrm>V> zZIZa(ikLg#(}4WCQbs5Ug#3OW@X6=<_C}d97U@djCLy#nb!OVvh^S=eElFDL(Jtvy z12tYbzmF=^+lr+m5;`Z~*;mkUs zsEr;fSg3_*Mckp8mMx*=%L(ndcNdri@gC!Tl7kqZ$&F88#hqnIj5uqA zGo9S5N+UKPQp?cYl{N{n0H zwe57V3Ab8r76PJFgq=ct);P^*J?fwV zniXZKXRNU@hOf_NTg3eSFdf*4c*gY?pvT&W%Fu$&PlmKb#bG7R4w-aL8sPM&B0-w|TxAsIAMoBf&u^)<5PG@7|7v zT*?j?zl^a=KhH(J??&>v`nm^93W%WxU4A5yQ+D8XN0)gJj}lA>rdnH2)I$ z*9P5_adE;LbO*1_h{mU)t`ncAUJH+f6Z2B$17vfBY4DR-E+#7K>INxr;{xOW#ZD!N zpPW1k*u1+k8%?x1$g?^8L7{&s2=ZcIPmzM>hcGWs0zL4~n1uq8Ll^=61 zO5YqAx|{)#4@YPqm51p}hf1&*goHAvR;0bCYpz1~X?)Nkv|z5nDQGZcj zaiW+VO#K`J(qS}$G7)qtyXWDwjc#oun7`G~l?#DvGL~c0lr(l?kq~nh&Y-Z+7E7BH z|A8!uN-$4J4}-j^F%~}LoGW{+=gU^BZAQWQxY>Aw!k}Yzt33!C>7a|+B$v~!r`z14 z=#c|Rh>y7o{!IT^gIFIu>%Uy@o;e{BIw0K5o)mr@ebZ0J6denUQoYo>vhS4hzaps> zQ^l&N3}jei3%MSdu%MDbPH)Vd0x|vC=kf*JZ$ERJg4>b(>K_P}6u4=7OMDsalAPL{ z1m?Y^5+0-k?D9*eau_)Kfm``=$A`2>KzN@254mC6iKEf7kysiAxL-}q8Y+))eIAWz zF3m4~KQZz~Y&PO}|9tT|$K#4uqEui?;2tOZeA1AzY@SU~CSZD+nh6vdJ&n@K^evbV zecafWja)})*ItOz#6wD`^g(Q|xKh0F>n_JWSvGJe4a?nZ?0Bd4S;0bhUc3fIAr7i0 z5DC!*Bwh}e3&zm0Wq4XWZ3dQKm*V6p2BNT8oY4g>FF|1bXkId585&;~Q`7~Wl$W(P zgmS$`V>vj6Ez`rO%~IE&lR~$++pV9W=a*(1zQzHWdjyDOk>}khxSFIGn}zdyl6gjy z%H16#&4~Z^o(jPZ@vSW_6-O{MF`T-4dw)c`l5y?+l#~$;vx2MH((JFwY#}tr#!)Kk zG)IJ<;4DXw=rv5t?F&_f^AtfDV~M3d=>H5b#2j#@fc?_!R_wLr9w_G_F0o86%_>IGth(c6jm!Ttr!4me8N`_M*IvSvLu zOcDund!xy*MD=?dm$-4Hy`DRp?mn&gMEZg!q|FIGrYRMqm222vs{Q>G5~Yr!)0MP$ zh%BQZ7Uojh+oS7PE9ei$#5Zd zk=bcwh>vb>ngAcQZ29X^+^*H7=xZns&sne4$H@2yEeSci&{FCY@8u+|m{LBWR!0n# zHAYhQw3I`3lOGEEVCi?)3Zr*^88F|ly;1%j|JU%vW?HJ6;9Q~4`t0s91v1b%%C0`_ z?Pk^P!eK{}sE2YfGiNZf{j`%yfv_9}LeD5YNLliFmE6$bc(|$`6cBpx44U=EJ?dg0 z`p)sWtt}r(Ro-)trIh~>w6;jFsjKd>w`aws>`HtP^@(dR748F~N=GntI5ixim6X46 zvF{ZDP&!x$v)I63DiEBDx_u3=#icX?kepm>ZcU4dJvz)E&2!DgMO1lOpZuIrH|QTt z2_d_Ys6H%mHrLLJ$Vh2F8+i@1tfc$%WfIri<9@ox1`#@7CN7E==Gfqrq}fH94s?fq zH#Nedz)K|c(`Uk4WbF4fvJD@(s}D!Ysp^DPY#viat`re3E$m72Ag-F1jy1zKtIlyw zMbMdz^nW|vP+*}u$qKw6OSlXgNM42G+uwy{>kDfSH{5EKq@3Yyo(__K|3)p);EtMC ze#MEn)3V*QN*33)tXyP*SsJ!ycP^kUkB~0Lz7q*iS$g9J`dgk^r8q-cRsB^={+rlO z`u@c5tTwpaRbciBQlks1=QGt|L?UT7UsLHBGoHLh6UCBhHekzKw53AqpUvbSvRokr zmWjj0{F(jTl-&iU6XRHqlD=#nz`uZMh&V!Q;S$}*J5ifflPKwh{}p$1kR;u^Tc#&E zI*hk;xg8l=1bN0Tq@*f-sjmgMB@8Q+r`92kM3;a2q)+=jUtmqx%-VfBmtfze4lNj|6x^_4GVMt|>OBo@dPn!r=Ph+9Z zURt8JqS6!?gHj$y?CBJJFL`Et-o->@q=J@G;1!Q+VeF^U2LHRHl%K)AuSiJcqTBZ; z#5tB{$J4bh4; zA)&J&R%%#BgJ+mNPkf81b|}kl zbG&2wmjux2R^yvVdVy8#APnfe0m^R3lu%2Tu}b>t>S-u=`FPde|5Xu!|619S{>CDA zj5GOn2bBr`K91OCCF3L6h0|3`Wu}u>Yvivp>=pQ0@e071TQ_zB|C9Aj|0Ur!2=GH1 zRdMCMwJmK^VLXn|;O}`oFv{>!+8+)9v5WSk=jEhtuSco@Ty$8-2izEv%d6|5SX)A) zk?Qu<-mt^G6m%*gOABRP=b}|dt}snZZ-nn9UhPqFc0(A zE<%XPXhZP@-?ssvoX(GAl@$aocejIQBAv_zP(-BeY_Zwh;Sbo=VX~)e!c00}a=Ej?Y69Fpx~HkeW`o8Hg=Q*} zBs1C3{d}WV*j%`qGJ!wOp43xRV2BF}sJa|-z4dwi5w-#Cx-TJOX1?DPuudn%1xzn= z026c(^XtBu?yzy{!jq@N1fnOfnVfNx#077wm8RFaysyOhIATuEecsZf8&XD&BvI=e zGO?|gL+lEu+lTgfo@xsdJ2$ifkXjhOQ7>zi0jDq=DF=B>N9SzPx2ihK&BDKf^xxRW z(~Tv<^*3enZ*w=1T2k9V4RkZ_1~XFw8b?e-sQQeyyC4g$7IS*d*ya^9h<5;kCD;n? z*VzV1fB#qGHBuS8)~%VNiwKfrDH$J;phC+eXgOnJR8rNg&zdqUEbj48VyeVUszkkYpgav))}d7k^z7bD-dRVJrGHUkc_G-eBND8Vwr4O68B%Yb&zXF0 zaP0`quU6N+0{A#%X(iU8-YzWQlHtyqp3z58V2iWMewjR9WIZhwX-QF8!VY)y7+5k@``lP_R48~ltcMn=$C2`1O;o2#*c zgXX0EM=G5i_B#1;;fPit-ihErD)#;J0N3Hpn?m;99|g!6IX%MM$X*?GU5eyA12Z=$ zE-N&XvDD7NN!&vfJx?+erl4^Og^O#;;MNA=!*MYw7ytV9)bA(T>q3m$Qk{krZ$|~Jc^0rd#y8)INRMCFem|J@KTo!wZ}wTYtpdHZvJf~!D@y-zFcs)c zbZ9J@4aLWesVe12*Xfq(!NX|={W{R+-` z!j`bVIfd$eLa@oY2QDSuH(yU~@CFeU^x4c_3D0`QHY1RPU9;8Oz*8cJ!x`TWODjsH zrCi=*pfc*!{&`iX+dl@VnbDvoPI3JWB4PC(eZGxd>(6P~N*QIb1A~m|XO7Q?9}*uG zUy;h!g)GLJh?i@j(;IHYp$5{cUb9Jx-ANRkz=?K%0_mpiQmkBJR=)Q5q`@5L?@|U) zvQm<{K1sMBMDKFu#4f2A)g#Wdq`LSbsihEyhHP$EI84~dWT){wu+pJBrc)%b*a{Yj zXXC{dUCH#^z?o|`n{8Qf4>Jo&*Ikb>TQP;Zy_PtK`&TIymE{Bp5#ev$QCw0HK1QJTmNVJHMvBzJvNWQ# zE>Gy3KJTp01iXdSgp7V<%ub9xwdwJWU~MQ#`6V$nT>`5UUdh2tt^9%7m(_O*mj$k` z?!kM1qIx3*XNkJ9o*-GBmlsUjJD+`er=5UnOR&B%>Aky!7s- zuwI=LMH!oX%?GjCU-#(BWiUO(P6UzHq{TZmRIHy|-7A0UqiI*saVKXT^(Ph&Zu9q? z7I>7T15TurOR2s!68)9%8p)mBz<-Sr@ap>i^G%Sve|TC#(2Bat;(3p^s_G0uu^^Zb zn@D0dG6|cZp`$0wvEckO=uKtXknnA z+P~^Aw4djdi;ed&x!HOPSF9V8jq1rUAgx9(L~}c$|9ysx-PZWJ&(|#H(Lf7`kek_! z38biZMO5D$)O(DMu_T8=60~S6n6;*|5RR`DnC#c0n}jwj%^4&H77~~gzcg}D*zrPP zqT`Ul!IFl05$6IV#OoqrwLCG7ZHYh{;snc^`WeIGutKLoC#&8h1Gc=z^FDZ)` z0#CAGP4eO5FE&@wAA#+E^33daBZX4EnBkqBCP453Ua2*CHx!+Qbc`+~yq(}L-4}I8 z--$|eti`L*om2CAHtRS1!jRF|16-v}H=@?~QMS{IOp7^-eUhk_#j!?4WW3Nl6SUk` zhsU+UH9%#SaUQJ)aXLltAq-=rpUd@*(CT5U?}Xae^CEvrHQp+Q9qY(1m03e6^pgGa z;$-A!MU04Ej*V~+>qC11+l|xx5ETLXvmcu{d9aP)K=<}SC$x^Yh z!{EQH4sde;$dx%g*0;6rI!0ZxsN$n`NrrW7rV z`IbR0PRNt#r3wmu-&oRY)iu-VhWu-fl@&jGYmrrPD;)#K>AaQBT6$`g0y+L`^SE-2 zThN~9%?G*!f$?Pl>wPQ`@p|(epQ%Er@_7h(I>Uz;*W}S!!Pcr~D zZli;x9_x?o~J%9>%nhu z9Vst$GJ)`l0_s)oJ^II_@}>DEhDnfmGV_%G-+)ZStJZ-eFDj4#MGx8u5$#MLKStqY z$U#l*nAr0xtwIUE>FfE*ZEwSVMp*P0k?k%F;Ku0a+_qBWD`5O0imd~}`qnH$`tN`w z5V0JZ0eSBzXy3cVC<9%uAN=FG;ga|95;Yl1LPILTO>LoRXMm&0j)Y`(H&%Z!5T^{~ zZE>=SdmH@9{2&!SAO4zs`5a;Oib)H39^O&kdZdywqD2PRX5P#_x6M`yChp%l{D!gw zel>_7TGs_3->pzc37f1_0oi3QEO2F>0oK!MC!w!Yr&DUT!EE}&G$S?V(S3_lR~-R@ z)Ua;!Fzp9}i34}O158eZF8qr`LSsL!%Q*6z$_Ft#COdaG!g@Q_=(H;iE~rIT)<# zdv3P6|7bX~87#uSTL8>OB+z6CGTe1E@5g)94XvV; zE?FmCg|#rD6q^M4A$*J0tJ^OGLJE2z9<`lboVScJ#jT})X6u#wCL&C(H!+waVJ8>n zdl_qH`)}TCeorVN22=c(?0ra&vO)gICh*IiLpWd5JGG-Te>Kg%1- z0o@-jLMQ0q;FgQOgOMYy9#1rTtms)~uf1*^Af#a&k+L#tbpjGHLykkay|Z&l;vE?@ z9SPsceZ!K)s+f7GQ3wgA1=qWr+pKFiUAR$|OQ%I;d@_X7JM6Y_4s-cJNR%YoIyK@m z)C1Cb1%JuP2~=jT?+v@uP*C1Gx91mkDHTMzf4TLJkj4qbPF>38)}c4tDc4*0;&5kO z+y)VTq2;-sTOR&eZ^&3d&Wew2k4D?<_M&Wp5UAGbF%f>B(CDZ-?eldHwp7So?}Wuw zc$(pw^7esjf&)oE6+6Wt$ot~;bvvYNTXi5%4q7;kTdvbd-BO|Iv2}|&({-N?hI#^U zZpuG;RkZkNfc%=r0B{iIX+K2a*DC7LaL$Fl!{S@eod%o7)1st;6W=|Yg&Wi-bN0BQ zwG!V`ZZSd*k zQ7ZbH-(K+dfn=G}NevORCLBE@g~X0Q3auEAC}!b|UTV@L1K$d=WHBQlnaip^77K@g z5tTKeJ44$H%OuYU0Gx!PLO%DUlx9Y~nQC;i!gs#l`Ii(Cz^c~>*@_hmNzja1l`f3iUb(xD>2V}#x|>U1u|6AI-^DLy)&eE-+^uxsm%ySlRVYev z#G=T9mTS6XS{H=R&?GLf>`MSot6th53uW6iCr^6G)fH(K8#7Jup`#IK{+FohvYan^ z;EpZJM2;;2rM0<{mVTpT)3QM<1Tu5?&E=c-2+>bXlAMlM2<(5Y*bCm4n9&W^>~jzC zK5uj-?jHC?UrE-wOiZ#kZSJ-LBLpwh^qJHV^}9q90mMVq1xYnkSp*Ll48(jvuq{{I z;j2)7Rv{gGxOlNmOD4(L0-?9{4l|iumbDMWB5%%U=6QlQ2AP?_>-A5bpmGed<^!Ss zlx=5mFz51!aNzWknyb>Xk%gFx8M>j^jx$AD%#Qs1SyZ$y>R5m|O|l_FC?`Ih6a9`^ zh^n%;&ojesZmTbuk|KDaozeC$9@_B{iOV-h^06riM=!{Bv5AHKRd7`&r7(0Rw-v3$ zHcNj>qcb^UT17JiJ%caQQ3q^_oV!CmnzKfBdRe?nlF`5@BiOi91gE>d6zf^$fe-^S zpDD>BYL7FLEI^usaP@ant6SgJAg;{9Ng}}LF5#g9wg>X z*P@1>ma4{x9p^*-gTg;hI2}rW?-mrboyVdVyS5EB(Hj z{DaPDb%pEqFRqM8gHqa5ek*`yg(efcuSvT-Qn=1t{>3Iy?C-U;wOa(Jq5Y#tW_oIf zkR<{S_cs!H*gT)dEgoF`zfTffSvsO8aoU_HR@lkOmA4XG9C_jsO zzI%(lx9`Sq>;wi-Luh4IDrnNu-QY}Ra9}=UEO{EfgG^<+IcK<%a`WkhY z1G(NmKowLcD-^}w7w&Q(J3vE8N-8(}bMHyoa2x=+D@5@TIiYpUaR+hq{a&=REj1&W zHKL$#^}*w*_~#66|9ekA<9rXoXG>#IlWs0N0mt7iF^V#7&%Hq=T% zi{gJ9>>5%8>E(jVl7d7!yFFbK213!Y4S*qgF?MizYYypIpU_=9a&B?EJmXzf?SF)e|Ngq+cn`oe@#LMc72KL90;w1MNEdy2l?8z3``@g{kpiheKGe_lANLko)|w}6d5-z-C%LKqoA&KD+uPf2 zkK9LHFC_D)&wjoBQJoiD1+7mJvBFn3_0LRI_@P?i8NVE(c?U*_x*QyVcWG_tCub zd(H&^_BUQ-x~6$viztc)B`?$KbCH97kki0Lg{Q1MB8#tsDGn?)fEF+N^r>0k?PjLa zl=5o8`Cpi(XVwAjy%8LC8CZ_L8lcsAb3;#o#F;WKpe=|~HNI!-q`%{+4Ca!Or?g(XxG}%#d zy|8^QF+BrG6zX0?33MH#qkX7Ks^pO$XnP8+N0Ovo*!wyjuRGzWth!~?cXsVF;cGe+ zZR$8QVmdy$X@SQpR(BjjS#}I@yON?H=&?;5T;n7r?0=&Fe(@;&^y?$Pz3dpw{_+fC zK_+)@U`O?t;%NVU%(9yK#9^|M)4$N>0%ubXOg9e^&Y1cNyuBRG4@f*eKSxF*n9k16 zr83Yexh6mbN%tHdcuq+{D~hnpA|WB2AClCj|A?ii{00>+NuRYTqJ@^BM>_9*-_$GpEO;Azw*cL>M`+R>*Ike3hVZy#Cw&&%kw=rXLekFv7%6f6iTWjvi zXFk(Wr{Zb(oqw{6-dft4M%9hpB}UeuOE;a`zaLX zXJxV2-NeM+H=8jgUPK}jNH_0QfMy*j1}w2mSO z-xbB9i{kRZ?e(f#s@vFZO^LwG&~0aNSJ~zE=4Ld%@{fW_-hk^g zWKDNBJfG~^qKaxXC?osn|%tWHF$q9NvH5K8}@>BIn z1T*8KW9`x1ucii&3R&({&7WK=!mG`?=J?J2>!{^#_+ZBS?v zFl#F|*XBIyDG#m8^Nrn2O{|CsjWF?vLehzfGQZ5cENkn8>u8;zs>$XrrtTavgLUno;aB} znb@{%n-kl%C$^mv+qTV#ZQHi_=HAbJf9w0_S!?&+)zzn}>#44K8oeq$LM5zk0gD^G z^{fyy*!6dLA<>Jaun}k**P6V_?^5}e`K5XCF_s18lFCXEYp=bHh5ij0g0dqO5<3ti zdMt<%922Eav!R-?MYlHcd)RzyT-!6?`>JVVrKs}-t4gO?wHX$6m8fQyt;t82HA_)0 zXo&aJ&n$818v!9zI^Hs?CUXW`1nDRhXBl%|*`p=Bm31S}7DK%J_q>{e&Oh>V>wY9s zNjVic3BNroYmM(nskOV1@UFH3M$<$qG#GVfG@OyNm|5qE?)vo;SRS@p$rcT#Han+V zT7)cZgxt=4pcawz4XMZc*?dP%BCjAY3eHEJ#)9JG^@nMZw+3~A1gyl;VxU1C+U~0^==kg+FR2vE z=lz3Df0iCtC|^Xngl?f!BgJ)dso6%sQ*W`ts#j2^?LnOUUxGxM#$ry^rOgegN<6fJH_Vn85bnsf{2m= zC2pI~iCObuQ$@Yge*NZ-s+>@E=H$5~`mSm31?}_r07)^vKh9bvtp=KEKPYid2?spG zrv&$hU36bNY|Z|`BZ*r)WuA@ME)#dKN`7F4E8KPph~hVpG)%~ zTtVsBE}&f3$M_fmYI@))o(E#epTpd`YJPOLp16}HY4WsyJbi{knV7#LOh<^)jPs{u zm?ECQ`x+V=`im{QbJ-u*+$^Hcpdt8PJ6l(NjuLoMAI|#PxpH1*7+ByQ5(ZkK!JcQ)x^~kNcd{;-KVFf{HlqOO z+&Bw3#`B`lN~sY|Dl^NQQKGO}bNsScwzhPi21l|sv|+!H36)OvGlxxyxSjIc9Errz zQ?fHhOi2-A`%sQZ@i^PtZZegC7PULVPD{xmL93uGr4hIpHQMNhuy&^3xT?B}lf}AC z(&BL=q58>82DVGt;Pq8?P`a)^?UfpxciyN@>RG^n z+EOnZA1lc?0}Ed%WHI{7D4W~gOH2-*of+H4$mEab=EgD{!&a+#YEFESQfC%OLUGn= zgO{1r1wVr6vpXE8EGR#L01zbP&t5O7!zkAhr%_+wdAWN!tC!AwNa$Q@Sv;;lqM<4L z$T9FT-9mO`NC!4JcUh~DM36L8Q#o8!-(uvs8ne`^(z3FjB*w~iq~x&r-UB%8k2x(x zU<7`C(o^~Mu)A=NH;7TKuzb{BGN8eg4t|msNIYgIj0{J5WS*#795k!eEe+{qjI(6m zUi-k7XXb~U*xq0VtzBzBq*nDH#G=O@p*ua(t$p6Qz606M)8>EBl4_E#jL-m_*RRYV zr1x1dUW#ZcSwAsZW7RN9oG{b9fGyH@Tv(bwNEfN8~0%xteuuvb4ND(W*tV&sMPBSLy&&`sb$sI?N|%c=@eMuq5p~CeHq<+W>jbWl9xV7Vm@J@p@olJ>- zZ7UsRc&gm^f%n=+t^EY)*2PWl^I}0#IXMu4wo|Le8xxgpSf?{%R;ke$Y#zXEmj+c) z%>51}90ZQ<$FD4QF%isCp746vk0&Ju@=+}f<6pyJ`BTvz?@qQatm2({O15ct=M+qi zO^zAkZ0Bl{AKXRy(V-bAsT1daOW3RnOe^V*E&I$-+hxUm@Dn*7W<>I8fhbcD=jESj8r_?!u*!z);TLkp+mDCB#OK4J_+`~q zUpjeLR2!^_yr+9X7(NBTlw^2FK_}^q+jO|!YSKwg9_q1O(_QTEGN{ibDJi*I1pAk@ z$sFTnrgWFD2-L7JwI2;f6xj2SVPVrc?~sE9Ei<*MyiIw%N{3tx$u;s=*MKeBdDI{{ z(bu3r$v3D;V5>Az2_$Pen*e1nd61?AJP(EzkKS#5Xe4ZdHIsPASO9AVHdBJRe*tLF z@}%t-988l4=A^EklnTuoF;i5mp?Zt!$n+EfDN-U5=Qkrm@LKD%AvAMMwqOG5;H^nZ z@L=D-+ECYPlc&%7%@8>a&A|CeecX3MZVSvaUWVnNPygQE?G_2)FibwfygwN zs>Za~Tn%a+LQmFph%GclMFxKM+AC_wVw6^zgc^VCUS&ml zld$EUGi^%c*Q(aSM4{e^Ur{|X-ul!f&Rk*Uhc@Y!^uyz&#&r8Uv3E6JP&ca4JTHd- z$|yGz)TCSBSlvMwA0cIaaJQ8PPT~a@V;`UT1&b<^6l~_djdikMbKda01Md@xOeRY% zfLz^i`?Kq1!q(v9^?}{-5T@&Op_=kj(BttOqwE2K?-_`Zk+H_}#Q_u)6sEEp2igyp zfZUQC$>T}>VHRjhqK4>G;c1qigIL^or%6gLk6lMM27eR-7E6Fnk4dpzJfQ+wf-i_w z{QW0M9xK-qp+5%!Pj-9+7&K~5Q(l6AjMG;Ru%4tAsA3+=u7LzeB?N<+r48ZlYAa}A zYZ;onynOw(JboR*{PrAzykTDTwBB;&LX~zF}|mbk)H4OGj8OTmwkXhg!$RP z#|!ONPe>&@XIoyl=A*KTkBf>F3#yRWrD>omw}4g2kO#w7*XwP8_vazL!SPfk6mN>$ zCj{R{$0J$pyK$!QnCuVFyvEgL+iXD~1KmGd-5@*xv6{}&tJ`tffN}R~<~5wNN5~w< zjG!3j4-2pFxX2&04FgP5MP(53%48s9ArbNLg2$v_B1Li)h)RRYBNm}J#1BXZiNliE zS(fX>gWF4H^xy#Hm;ZPqARR-Wptr=ZM@6yz-fa@bVYJXAQ~=86lo02)CfgISv0s=C z0ja`8DC-tWQ@1^hWUg2nzh0^1aQ*4B9szdL zJ?0nwOznhWEw{tGV?`YPDO=>N`(q`M>zfr+SNk4yR&i=g1boWJA=jmM`PdLIZ%_a1 z-};yG1+wVvM+F_NisyCJUugJzSA^l>0N3~7q5Kz^RruCiTLuR0@?W~c!rt~PjV|q{ zkKU6GaM~4Zr@YAa`F2$57$V0dxMZbV)ETMHCYeGXy1HU>aI?SZ^BgM1>Zf=kY`xAj zpZD;-N_1=tI_j;kCriz1f{e* zJ4r7m^K-853oDUNw~Kr*-S=>^qOYLgG;2G_pO^9-cs&nFl2XdT8ksZOV$JF*hvJMV z=`}cCFcuNDl(PxV2yFEe`$jw>{SY}y4p1{sk~69b+MG#+4fHXxTi=C@4d^c`#lKgU z{gRsnEHzS-h$71tPe&=47n2N^a^qc32GCH%t_>k1?)dZmW4=pk`67e!%P>k3Q<4*uNfjbCK2&=fD&iOIpTibAUIID=BWC}a&DoIO4 zVzo8sI4DYh8oC<6Onz_4`Oai{d%LBZGJ|3HA^MA_wJC5ZcwtB6MY%?1Jmu(q*LqCi&=2@OtZDERp8FVY}(RWMVV0-*{%M&* zK+q@Ps1S1{CJspqBCb0x6~$&nanm~G1((idt0D~&{kAb$XT)*L0=4Yq-`tzcwCOn@Cj`uiQ;hmYGQgQ?DG#?? za$6_P7tLJM|0E(k-4O_!7Hb{SrDP+q#F@ujig>HY%#3?|qZH~7!SrnoX<0}D2`)J~ zg@}_Au_R?#ioz&bp)ty_39$#vn?25W3f~ZXVq#(e@@!t)NGP$c+%cVfHB{E&1i7Q6 zV@m`!QYEsVgtiWZ#;C_O9+NiB;uCJYRZA=jeUt-nd^L_*Hpuh84cZtx>1XPu1@ni*5kMK+MN|S{VTtK&?0M1 zISXJOfyjieESLB5qwc?7?}u!57PNxKA{ZlV629WRr6BEpu1Q=)!)D)}w`tp=IP}k= zwU=95z`lE}K;-y3z)Af}pSHZQ!nQtDNpM2vTfOc)YTN@UL9FSBP(Y4-vukbHG|Ixo zSJfezR%X+O)wGorMHpw_W;D$EH*xR?gFy43Mif_yWZxe$X+T4yu6GXM5pYq0pGzI5 zRkOleB2dL1F9%*tb>*J}DcK!4<&|RGa&^php`S0qJcSuo>GlLM(!L4R6z8HFneuAM z>d_}q$)saiI=ciMJ`6QWdXadV4GE6x?$fr#;HbBhEwP&;SLzBlk+RF#HeH46ZN9R< zUhq8ku(o=#KktjFvi5?|bmXN&>;5iQY9`@CtZqWQ1IlXK$5^l z;pjuPC^V`WlGr!mei!2=@hkXSJK*4=N|HH~9eh9^)bY#-dMc5-a}Y#EHC`MsSyOVH zQ{N}V6&$f1J=g(w$7;jFvWpw=s7zywC`)xrK*wE$Cm??~Y^wL)Ru6aArT4k?r0am?@> zi67T73U!eli6gVzdWHW@M>j3dMM;2^$@7Po5R#TM<&2t|6b|}uf-v5lNhYL#aT{dA zkeL!@F4r?fM4M_LD6P~q%M)Fb&5M752EyjDm}sH5qtfbP5#IjO{x0Hag#mUI$prk_PszuS75Td~vmSxDi>qv&)+5_~J>}zpW>4_>{L1Hpd^D9Is(l9o`UXbG!TO{7J9I=uOpnBX>RoQT z6SA0fuQgivX-54QGc)j-ADd!wz*0;T;n#5tSXb5a$K{;eLi-N#9pL8jhPxwiCd5pa zP2>UlcrW^6zH36gHjUMrEB9~Xf!ESw&Z4N0iyK1>EJ~H*ZYQ4J?&X?t;DWAam5%!f zNq>KTPC)_a*30CdU|BM&4{z_kMT-mNs#GRBL%1H&HxusLeh~D|Wl>WuUC`@=p2|mI+`wxn;zN0FUt+(BE&DKtxa*cy-%7hVKUFvq&QLNd<5Qe6pxg?f$UF*oTSx z5cb$cXQhop<>Z8wL=+QNWz3R7oJ8z>eN+#uQ&_CWc}xu?R!dUC`^xTo`Vn*1HYu`{ z14Dn@i4;WKBkM0>g``|+vQkGg=Fl8J{LKw(Up3d2-m%`X{_L?dB6SO3pODbnMH;Fj zL{qP`Dra*E@AN1BIpZ_Jj{r-`#0usq8 zS>S9W!#$WhihPh_t|KKVjS5gbJKJNMe(062ZgXCmd^E*NgSYmY-ok;1wq-0nJ8;iD zm~PMP+~LdL>r8S22uX2}2A%A3sIZ)Yq!s}+i$1%$Qk_Djog?J;89Bh8oRN6hERGq` z3&Cj~NykIdAqPWeIwR8EplwBAyEKH}crrb$9@Fi$Cbd3Y8F)0>RX+;km=7|YC(l~Q z*4CuS-e_>oP3NS0i1|AzDl6dK!|<~ifxE=?MVfEGehGQ)>XVfYYc0xl&rdO=rvSWlmvs`nHB8GMWYx+h!Ywr& z)_=(OuF0sN1WGnE)@O#9-!_&i$sq1mEKQlZL=`zyjWGnB)J0wBr`|d~5F11~L1cjO zgcKT?=khKMGoph_PO4U|EP&j{Vc=n2Z7^M{HjCg0pSguKCDu(=W|=w@dCbOa2GR`F zz?c8$uD-Qr3#dvo))TN}ZHH;}L;JylPsh*Xq@E(-yU)AY^+5H2t&a6b&?&a8_KKw_ zw3B zc!lZTURAD6;c^6e**sm+%B`S{+a4yB%MUMJ)A8fV(BpKU>1vfsJ#?cMsGfWkfxWV^ zU5>WddDPYm`cv3<|BwKojI;AYMYsnb2r-0ZYa+R!9Y-hB-Ew-jcGu2t=!eK+0{*+z z=_X^@A)@dXle$?Ex8rlm{x7s1F*?;zJ4A;;ea<31MYF|5K}Ggx^JViB^Eu=GJefnr zHZe|OzRK8d)cl+BfL)J4+fQfuTY;!Fz!*Ukbr%6Bw}ahUiTg@(QN8oK#Flv-9}kua zO|+_%wo|Ousof%nSns2yV-5wjcERS;>%gx%#=cyhu0!B~6q3H_g9sH|VJQVk3;||Q zQE+2irnG%zOO!#7`ZK^GFQ=mp2hoCm(pkO_J$UCKz6@i|m*t^@xH; z4}3wPqlFdxCpSS{mVpp-Iqe0?!fy{Q+ZqAkE3Pp27@_(@MG|cZ2f_UQu)@H(Z!ozo z^Wgpm=Nx3nof`lxCnDa&TDgX;N>#eyl_GETxO8#|SzSQlFv`ovpUGh!cwTa%J)zsf zIXVfI0SyX%vn0#V>ZV+qkb5?**d1a}2yBd4X5w3K?06c7dec`kku_S}D?dElE3@PZ z^;+}blZ3T#Qj^c<@*JFR8oS+I;y`7p@?DKYS}md+M93)q4Z{OFmn%S4IT0X*d+vTP zpDY7c{m;=)3>r(o+(v+cs?(oiLBkdZub{6Tr_T3%cT;(Xfm7`3%Fl6)@!*gzvO@IF zWy5PZObm>~{q>BKH*B(0lmwN~2`)H5AiGAXM2ZvKS7j}MIo{2%wWeZWaVEo%-VHil z;^CzCN~>Y{Psp{^nd;HQj|7US;HS+kzO!QetuNM|y8 z0M=i#5~00MGBcLF;Yb;Z$+09}UjQEps{XGT>z!2Gr{I&HN$|i>tR+VA>;k>T19?TH z9DF#V1q>MNt^~9=H0r-e(6%_pyFD*TjCKgK`zsba&1zm>-(pAeq$roH09-CMiA6;w zFB^29@TGjtpnIMQystAc!@+5k7&w>+Mbn`nFn!!+V&pOY_XZ+Ok(?#=(8o`v=LmbY zL&ve6Z|PqITW?cW!|>ksiYG$XYw;<$Z>l~o$qqXf`5hmx<&fhZKxc4c=@9VcdJzmZ z{sNt$t2+WSt*=(m2{y-QOcXYhLz7-Y*&SZ^`| zX$>Zaf;x6h@a?38u(zk{p4bdd51m2%)3Z}td0M;%&PXCiD@Dy1BSNcLF4Hq*GmLi`4y02UA%8Y+5lMscs znh6ipR)c96PCV*pgvz8G3*4|tZ4ipG^oxy5j7Jm4U|s74Jeg8};IX-)YjDAC7kpmH z0#DUq*o|;&cXt~I6z=$aVx0E!bo>&~Yh!zFyid?=;!fW+%!T>aVJwS`iVn9)-T$&h zfsT3Jg^6_5C;7FV?CA|WY|hP)ZoLk&DTl)oKgDJZM&N7Hi7P)yO5C#(SJo&zUT%W% z?0ZrynOe7QmLRG%K`LF0CT8N5CJAks2bN9`fs0o)@oLd1ce4;~wZ0Y)CoYG0hyb`1 zzm{ehR>@B2}qOYk4(a!bSAiOe2(Q*IIG~T6x#fy9pG_|DTrAdd?;7?%|gYX4*6s~ zS$EXWPF4X&mD?#8_gtld+^>QkG4w;HN>y2P{0xU0AK1yjXHO%d<4Wp_P}lXU^Y%R3 z6Ry^e^Z>s5Gt%>*P$(q{?V5f;{X>jsJH{7`=>TbtvY%%&yf;eS(e>|*Aaq)Ly^4m< zbw|rxZA5_uzDD>9Pt4$QeT=)~BAHD-3uG4jXh?mPg!vV@-|x zg%IrQVOwThmre5iLI32C-{d)tP^Cld2Xm-O`TU`+0^B9CYdK+U-t{0u_T&@lvoQTT z#8%Ru%TA%Jm&fkWJvncI$&L?3o9%e~?14Ia&CCLPgsbup+0cz3JAx)R&yR@H^RoaJ zU@0`ePB|3`w(-CvxW_WtbJr_LiZ|(Q&-Tx+B>i#z#|hq|(lJWgrVswK;HeR!a&K)` zv~}D$*{9Xa+da$5+h4pc>-DBYs-DV5bx&3 z3>WU3?YEc-f1>|}7_Wcgc*_zLR0)lwzN0}ML+(B+4(*r$Y0(?9N0S1MnxxWA3*W+-A)@40?-J|l*5!zESQURDVibicCHs^x-%uSkxr5Qm+x z>|%%vN3DBG@K0823Xtx=)9<1K=84&-JrLJmn5@{#GGV9kEQGO!&FGxF;9c0}V(xr@{gLJe{x@UMl z;hj%JaR7A}dYGxl7694{0ztz(e;#F>!t&Nd++Kr3=h(Bp00hUf0?Y1R{O;PVb=pHs z_OXNVN!eTc^!Dj5HTy5r*4N`Q#+Pv#B>DLs>iIw0^~Ri%wJIrW4Q8Nu0{8@AO%Jzk z`4k2#xKeXD>Xn@cI5Jau6^t~PKv6vgg7`FS>bHa8#8Voy7kjF4PcDyQE{xK_35Rix zv+Pci6*8J|_s7KI>ZGlbH_MkP=r6HTh!{V7f+lIm-T!<%aNc@{H{)4+*J4{?=eE9Gc%OrAatQ-42A|Wo` z-q0@|e2w~r4x~r+8aDVjP>ZnC_W;rDBtc(z{qU6$=A<7fj`o9fTG}dRpyC-PpxE&B zOkTNWvy1y2_imvJxGzl#FIF46qcNvn5^&C+N=O31?DnJ$dM0(NZ1-889@BB3@<(^K zdJEdOg3u1zX(rq;M3c()k^oPAN7$wzT9jxXtfW_4nVO_mjQNWtNMXMp6Y=l;LXqmc zH{_bh99+QtygElopipGiDp>ybKAwN^Mou$mZs&rl3B9!08q`ZmD0xjdkm?uX z%6BukX`d1*;?XqLa(4uqpr0c*)f33Ft2K$r>jd9i20$VT6-?y)3vZh-?w~Q+#W@UV z5^YXgEI^rozZc(ERPTkLruZCDJ+WThd*<1iW9AMZjW4V101UzbL8>t_iJe*#ZD3L( zXUKyljFdCLxqhSQmUGMM*0n%LQmXQ@zbffg&?Y@lnI@&)yxS!JwV3vfJ<>BysA0wx zGN>2RXbEtpibmKljpC0)%mLpogtm5Qs+40*{-%+_8g2X%jbvCHps@uFM>suH#QI7; z$MJ0L*u33J;c%7bs37w*OO**hrBjlHY~B_@IB11tPNav{!F3gTOw!_d|FN zQJoq=^YNZdMg(R{@Ahyl_q_RB7QTj8%GN1HRI7rVKeR&jP79tiT-+LS==#dJU(ww0 zBm~G9>?!lyGVjZVu@H0F?$WBY4UEpx8%Qx$`8eWS&M{YgTesDnlMF&g9p#UTrLEd86rMDM+r^@C#Cob`ss!Ce*|MfK(}u>I1{US zt*hMK>?`^Fa@h~}bUphy;{W1T>d_D=ijP4dpb*Ee8X@Wnsbp%alr6R{N0_uA(mMY~ zx++E|wrj^5Lk=Ced5JIxrC_y=~m}<2w}qDu@p&;J|PQ%_PD9mObNSb8!^OEc^j{tqW_3kqiCX0`hxe*Qr-Z9V^>KC)|*73eK0Drx^q zsOI;D`f5orKE(rkM4~P3#(y+~>Bm7Bo0>+Qy{1joErd*PN!2noX8Kf>I16m;okEo0 z{wJ!Z0#eT+t$@@>(q6We*#0#;$xRHOzSqBPI*PdAgUFB)qXH`|OWBUGq)?x~f9MLu zX*0c&YW^F=B~b!*du@@f$S08aWNc5Q5Ik}mxaORLC} z7av_pD=K~+eM3znWAUl&&~GxlaZS3?lMMdLxgVv_N0qS6?jk@?s0;U%M0>Yi@5dx~ zywfHh8}Tt?o6hC?3YH<NcV?YwAS08Eqq$h#f7V!DzP~-AXyFO>_$1*$htz23;w5ESTv0_Cf0pT`@H>Mn z8B4=xEqGyeeij^B4xrUBOO9I*%i(sKL9DK5G}RO}>uYu_A`&$G=Pyw1Oa5vu&USy~AtzqO9(Cysc0dJ4F_ zw2_dLOI9vd5z!d0yB>HDKnYV0Gt^{?N9ZJ|`W8l`0g`*toqGJH4GCKi@@gz|f z+JN*_(mfY4NR_nHs<{(DZ|+VDj}!+*)X07#H8!vSR8p%1v8GtnpFYk|HB7Z8{Gk-o ze{Bf?78ou>C_Ey%^+!_c77KTe$)1aAUALS;Gpz@SVP)N$UhN8A&0~PRPyKT zzQ&Mmg;rch=rI%^F^f|62{crttR;6v;U{>@U*={f$%|Lmvb+Q%Dg(jj5@Qq+yrVqy zgL{ED<&1QS2Yf4BVLm!)ab##05#;+6I z-A_0Ie(U?hWWmrI9u~Hj=5IdlIFp*ZJOWZw5O*^HR&x*6uY`nAq8AbT3MfiuNEvhD zDkyvz5e^JMs3X7bUR&D)J=80(C2C*C(kc_ajahJ$)rxNoIBIQSZ$?X_EaR*~f=hUp z>R-b>Kuqn0OM5|03#dlT?-Xb<;Z#>^HfBjEc3uL4bFph+qN4H`P#`ZCA^{n^d_*;H z$ZH^OI0&t+HTQF_Uz9WS6FQnrR$-bSwO7C2r3#wD1$C+J+z3?WZGJln5+X!LMnz4K z6J;3oZJ3t6jWaaGFPti(KcBfG$+U97I*4c?#aB3JZjf%Z)&47Viu?pw8^O;w)EDF_gf6cf?l39F$6fWBR35)^QhD&6QB zL=0X0=CRGcKJ=fcPY9p5m$0>riYk`R;~j`1B#J}p?aSb-#3n|xC$c9E*7>&Q)9XPyngOHwzzX)TZsZ^Zl=d+`Nwt_FluMbKNOC#3flty*50>uA4_rJK}HxWHm zuR+mUA53}$EsZ>dFC9&dG<{lAZXZz|s-zY$+OGWEWmyX%?z zLPyM2yXNNW8DB!3KlX`G!K$4}9kpJ!)58B5@SSvn@yn@)>=a+S_PFZO{5)jBOOT?` zzOA0>rsesYe>*-B0SU>-MWN=p!~^JlP=q9N!y{ZQBehD~Lu=8==e-YgOrnIgAY3A=Nm1(oFq6q~w zRynV}q57}zHNyyy$NRVutg^DQgL&xMgMf)YKwKx2r1XD z13Ov#Mu}KQV!H7WSKKG4K{37%sUnduguyZNOC-l0^3V9EJbU53_AxAjCl#P$5fCM@ zc#^H12dkB&{;03XHO8Dl*GD`)88+Aa(bFZsy&Bw z?=Pz7hp?T(oE2{+DDQs&R@+wGq_C)(FdFwNx}u~^YV%aU?R5&wj%I>33AjnM{dID3 z!szE)sF4H#jLrToFWzV=IRcev`($S%WIY z<;=wlyhGS?B#9&li2(or@&;KN)xI~Q2q2)Y;k4G7s2K|j9HQ24564RGkD=_uhWTG7 zLg5*Kpb`5f1!I$Voy6Tw8%NiY*w@o13ghtmCyDO*BZPV-+$%tv$F5TKMFpqLLn7{? zZgE(6`C%QT6Y%7QouAQsz?AzF-{cH8w!OC{y`FdmG0*&Sd5CJ#kSRlEdP$&j+aH=s z6b=V=t%V+TO5QH}k?+08@S`3swsCx(uSW!pYO=+O_vr%$oEL5X;yO=4et#*N2m+gC zP0I&Z`uk>4Jq*I0WHqJ}cm6)&DCs`7UFG3wTI>!Z~3gsgfxmx$c`{%JcZP<5U^B))R?W_oZJ0LJMJpX>P8FbM6MXqcwKui(zUFsM+P*@LHdXM5*|3v5=I!#8y z+7GeqB+6dz7W1}$&v+k`3fX2jySupF(*FAAK;!?|#x((ge87Orys#TG(!tnNHvyUk z=l*r0$_Y;W*?J)F`n~S|F>+>L0Ypg28rQ(Id;gP7KEKx3+8U?bqa5~A*#BdP)DEEQ zw8ae#eEo>vUPP#g@4SHZXN5u;z|r?^${ylmMkcz?LL{iWYX{R z{&OvXVLwdi7=D48(iRmJQ33`qBHinLr~DW+Z+^_ue|fDJQ(BC$6Uvp*TRa)UU8g-$ zK^-VnZkDa>z#SYKQr zbiK0@qlWCY_`W7=4*ex*VQq~H3=C{`X^AW~HMOsF0)}PkfCS~RmzR{?vWF9n*|mv@ zy%QFsU;haf34H6XG`K`#&=PLog1mpTE($-ZK2UHF1Vw7mn$%iGrB!|b^och%toyE;lLg%NXX+dV!&+%|=gR1|m8-MlzG?svU;LJUx8zkLER^rz>pj1keaKS+XLB0urH%cywAz znBqPA<&Y)dzohi>U?gN@s-qD&fb8#*6ZI7mkruEZZ=3i699~Z~D^{%NiRABsx#7)D zkA*9}2{?x(s3s4q#d<%NcI^$&Z#uWa++2ZgReqD?hz!IYpPwg$hyQ%I@p&t|!i!g| za+3HNC8iX0@R5Zi%Yq7OQu#WlD}Gk|sYZGj_M^sY&ib$5tzLJ+`~KEId>jc;`c-TO z$dts;UN+hvm8?^-8a`xnAQIb-ezHilH%?=x4{OF2n{;B~I4=X*3$=`Kj#7Zx?Xi8E6@(@liG z2T@n)*>1NdnUouB6l`}XR!+@< z@N~P;v?xH6b#tkh`)?uy9^llbUlNU^M45Do<3XypPh-;Ehy|=2`G=;}dm#A^o(Oa? zW_ut(D|M`nr(ky8Wif3@_xCU>HB~B!idrdnE^Zqe8TZ|~e`;@)J z6=aEMGwUzGXjHkcX-)DLHOpoe72hpt#8gyL=JgJaj){_V@?J_$K?}$H5FxG60Up3! zSw?kd^u`8G=0uuZDd0fm4|RTO6L6U_Au}UOtm_YZEhl?OPq68g{pSH zZ?5Cs?wCgq$kz))(u2Q6Zd0a?&6&uq^>bz7L0*$1ff&g$wG!qwi$OcE%LF_7HOLel zc@9w<(Offe9-{{nUk&!SMj7f8=4QnqAU5hJ9@Ac>vk3({Y-L1ct#g#x9Q#=MZ zALldbx9ikzFgGzZ9mBVAAXZbdL_0^onam0j^yA{k}fqPV)2}JA|V;p(c}S46!|_KPluv2QpvY z+O2)YwbP2OgQu4zM{%GWg*tk@Gw4=YFp1dD;W>{`;4$Q>WVOnl>9)G(&SMk0G|I^`^6bN@QtI@e_pM+jjrtgTAtvPxp{7GVYo*D!T@F^#A|H9Ki445nLIW23 zd*;8azR+mz2(703bM<)Og~)BkSx;wZ{?=S=s%u}L1Lv*K?mW*6+p#R_w^@zrm0j6c z-;$^9#xdLJF8bdhjJ^x2fFN6pb8Nl{;b+0MIX-+hyRM7lb3o)c^+=GAjhI+5aqoTh zaVi4Dq^U}pvOBnFfxAd)8yYp>aHs%d4=&m1DJC2_Rfus;v5=h)qzF5soP?BOk$9!q zxzO|Kh|G=;dc&J+JmASnm*8c^=|;`7uRO4`$JkR!!rs32n~-XxRI&J%X)ZkKM!E^| zx&d$mnnq~%^Kg4X8Mz#<`xLF)`8$gF1x_rT*B4mpGS_iC1sE^$zQ!FjT2XY4yrnU! zBQM^aJMCTn>ju@wpRiLlh}hpOoP<=ykNJ_G=oc*BQ{D+z8JHJL zuj96NZmgp)#ngtn-dG1goV3d>du@;^(Y2c;W6RkG7-!EiJ6(fyS8GVlZ;_mlF6diY zwpNB4!RTjETM;K~VAiVxua;>?_G|CvCLx?pLjkRSOnGFtS z*`?PkT<}|hz$gVRL`g|I0nr%0Gn`q0b_XN`oldpOX6HBQbYGv)4#=uA<2QR5a#_+e z+}WfRmR4W)%crmteBOK4c6~9tC?wh@D7)|C+Kpt4SjEOOkTm|@SQf&~yxgX-O=Y0kgRKtPR3#4Z% zs>3B9@FtfL>M0o%#>8ovSC68aTic=9pP!}81%)2+3W|V)q|s@`8TWM1JB^>`d$t)Z zq+4D)nP%nbPkT~&yYF*kSIIHF9k3c@)GXz8NJ)f}-m+~SPnR;cN7)|Y7L+DzToWFD zor4gG5SE39xdX{)huZeIji0`+)zGm{v`476eSf#Mrx?;UJQmYx=9T|1s`JP1 zG2c&swe(`jDk+rAQ_Raw=wUPB7>0(R9es!f5~(sdgJ=0ujonW8XR$I|9Ua7CjF#0! z!jz5_!fzrG#bo4FdEmS0K$DN$qAqJ$mn>$p705Yiv;{|FB*Dn63Lyz{t$~{EADqhR zm1TYb_}pPw>8ezK``W+@gJ$v`%*o?*x!}Ym?`Z?kIv#_@+`#%D+;c^M6s|gKcQ(Wa zCEBxLIU#0aqA}@`hbz{M?m41Nt>+YkY*eRB7Te^VLucuA=%s$jUz!>n6RRG^fA8$b z0KgKAPCme_$!oLDU9k%{KOB;T^7H!_zWM=O7k{U;Ki}W@;(cDD zVn&y|KZ`PKY~q6jqHHpp{d35E;G5=M&wAjQ^+5!a9QSk`_ICjCcJPV zqBysiXwgz0Td|&xwLA=D>TwO~c;7)#a8pieVmtwA{5baSq9pt2ESswV%GLLWp3 zBFQNu`3Rr7^K8abx?c4v(!@{&t#I zXEcFm_)HsxE^B1hU^JuRu_l&-IuA$V`F_`2F5Q@$r^6A;+37_(7c&8-Sp_3&=eYHD zuf_zl0W!ZktygSUBbh|K)bJGnhr&%HR1B^RDY1vH|8NIA8|bDh1l$21Ulp^;CuSD0 zS=_TYyGNtY=Sw&IFy6hAw?F?!|%^o)nG#kw4oChZfCFgbHC z7~Jw(+$;F-=Q_y0$zHB2sV5TeU^Deo-AEC$4CcxJp{Kh7rq#|P(3%pV8J06)J^m3CjSg(xAQET+v^L<{EC4;&x-h}QymWA1sOY% z(q4Z}zI$Zvy)MW?=G9hJRdf4N`U`eBP?1*i?V`a>H~#;roe=TQ&M&ZGtK8dztMS>j zA=;OZ&t&!u`5v}}JO(~p7godOw_U9@F~0wNe>^|Oxz%KPlbbv{Js06@AR!FVd-eRt zEVmFfp%21m0cd;W-+t(3$QLb|wGH~#_}pZw9z?~&DSY&a{7^Z&%EH!X{>w7w`9n7=fr_Scbl;+4kGDVaC}NL@gF?a^(%%`8 zw8Ly)`96wtO0R#0JUwmbQ=lE2cMZ65QJN;XR<5I)r8k_dug&v+(t#q{IT*}g8v$G3 z64@PM!=-N~!tar7)hqJ0_(Y`Difv&QMduo_;+4E>$Ho)rz8`DbO;@Gy(gK3&{98Hr z=gLr_nKX#4GtU@==r5XFU;_)?h$V74DuI6A5+NcLS7qsQI5qu$Onn1$rQO=}6WcZ? z&cwED+qP}n$&PJKY}=k_V%whN+vhpwt@?h!uDfcjwY&T3?n^84V%m(nz_DwH-j3Me z>9-FC$iWLozCe|1k&i;z2gB zPdDP!~e_CVArqCV|ZMg-GFa6qDKNBV*X zH4(Gy%GcE9^4(GZ9#bWIJY#GP)rL24k({#PK%sWn>L`@s)Aoe&f6ojaXtuR*i!!uT6Dfmf`C!RM5m zj2tQ?vl}U=CntH#?CCmA(n~GT?3MYROBaH6?dmm&C8-hNu!Xi{bHm@u7R0xUn{JBl zi=~%2>KoEA4eu(o&WYv0Qvzig+I^yEQH3^!Q8+m1hB~sKv$ZvVsj2Ds>1oBgd80BO z^AM05R1KE}y-&sPEkh8UwmbfQn>=Y&*jb)ik5>_~sAAf?6wuLfSwF6}sq#|^S>?>z zq%vw5YpZsu7+m@NeWvE34_Ih*jAw7z(Ri5_&-{(!7d@S}`Ww4A)-en7j$cI&P-kPF z5sb+L)^)~gza@RFyuHk*=qBbPuNCP;Shl(Q8?Kn&q^m>TB-bfYDg7>c=lJi;#gIXs z*9`8JlG)I($yeF>*soak6rO9C4j(%-Y| ziRWX;`X?sy;ckLHY$2LBJiFN+Yl8ns_2+rtmH6%rd1STD_Dc3uv86#wZehpkVC19O zRKt=Xo-p~?2soLDu7+!{XbK#P>!?sz%!Z-ofLR6GNKIn25@N1lv3gZvW49|!dV0J(K z7~&v>>01wgbIi%%Zre-eIFn131s=;VBT&_g1!yKRcUyykSCJYAtDFL8#%C*xb)L5XUXWb9aax?`l9EC}q~Ck)w`z`LghN)?heP zV{-fqgbs6S(z7+-1c%eucg?PCe?^a{3c287Z~qBnhU0giJWM(ySYm95b#}LhFQNO^ zD#n{~*IL#{9O_iS^z4a<>P6^ezZPJ5w-B(?fzZ}1+8R{v#amt#d-@Z%b*4Z5WY9p< zU~suZc2uV}YyhFd9u}&4fpAN+qh^%)eeBL6^YMuVP|$-t=M)4dk~PG zX{UZdmGgU760aFPeri%O?fb3L=ctcS=JKDSpoDdY*K@}9gULqUxABlo)6LHNAL}}h zgT9}=^v*YSY=dXtxqpkTQ&XAOSxAE|NC9WcsaF^3<35Rs?_>4(Dd>QePdU@>^tVCj zzSe}H6MAKmsLEQZK**YZ;xGAVu9va(&y{=y2Y%2%Xq`p-?kTJBJI>rTWy1{=xnD>9 z)kzvX1!NJN)_a+b*lM6&i}giIp}mbW8cGlzg(U))53a1NEQMP8`szy7crH?RD?y?n z!f!Vm$TYk%KJa0K@=1Pfn%%uaL%cjS8mYjD{C$Zzawzs24)Fm0I&KU~xQkn{oSTM< z=^)rLHTq)U9Vkx_N+NGef+ce8eby3eP}HOnQWO8ss{O_Lhj5A8UIjbCC;&;lw%#u3 zg+a69_=#V)e3Yg->j)o^V6sVtFHU~_Ii^OgY0f)HlQ1Ti0F!<~yQ#aQo4%qbf+KX7 zU8P{hF`DT0XSwm5D7_>9oMbe=-l5mc#VW;X2k!teOl8^)@9NG@DZon_zFV&PsfY-a z94G&yU;ik=6^6Wo2sau%aV_nrqY;sOSYWVgXHRCIQiT69jLVg4f|78X#OhYV8nF&-PWyWt_9)ysl*^;OmI_ou+1p ze@9&;4xt$GRS)k)J}yXC*X%U)NDW@+bMNCU62`%y@uE^9E+Jx}`j#`t2Wn>2=J|i= zt<{7waCT@CMezo2C2kf}@J)#t{ z8M^sSevccl%<=sQiQg-MlqyNJ6|YyGcIx4XDBoMg|Mh*H`l_QM^5SjXDmem4E={~= zIY-F_d&X92l%hB)!=QrwW~Xm++sT` zt6oO;ASn(Ju5t-ulz9kt4232Wq$*bVe@8lCpjQCv@8>hfQUXV#VDJZsYfXcnU4s`)b*Zg)QvY zFUIO8e&_Mk1TRpKakb5{fgU<-k<{l~CjRA7mr*L5OUPJd#(TdACUP-wK>GAi`N6b^ zn2m>GsD)PZPr<3$zrbi$T|5x!@cVPb2}cl-t9Sju>mo?t2aHD9RRt#_&(c{DOOwMU z7cVbYlg-H}&0E}FY!cy_iBQRw9gIFsSdrX*l|^Z^j&=WbDsZOC$jb&xxvQ%# zoxXw#Nn98#N@sl!u#xC9Ow%{!w#CIf8AxOkw*r4(gpMTrs&`w~KGvfw&uM;Qn6J!G zsP3=rea^0@E=vq5UPF7k9s(*8H-MVu;qE;F396{yUlLFA@x#$jbLVOLdlEhl)NN%0Ob` zuSgLpJ8fHvON2BN(^_H~Tm#9 z#1BrTdqrRx7OXMFK3SGbCXmk*DSmczhwGR#HwD!+_=^m!lfddue1tNtM&c}0SN&79 zGC~*=c@#0k@}l(O&p8Bf?4J`qEV+hb0%yI#fA5oK4zwamsU&){l6fJuqvbNSyzCw2 zopF2P7fKg8St40mW>|NGc7u;cO{Z11SD$0X+0D~s_Q~N^i~Qj<*nsfgk#PjimuK9L z01rFa3CVW5=oNq2=FcgS47Em6$kP%F_n*FhI3I5IdTf$57jWIwG9#CPIak)18D5p3 zn0T{G25WwfV9Pr+B%A?2bBO0h!hq*8hE!&jp;&MhzxaO#u_EArUUErj;a}PN7z=G9 z2$W`!uBQH+yj|sCS*3MfD5bv)<$-MLas}~dishdra)PpnBW#~=^6JEM-S_iQ2Ki2hJ2!+eh zaSBT00;oHEOu|&f_I3#i*4pc6CS@Wzm_$mCqin=bFzeVfQ9#R)mi|>Brw~A93E_@6 zL{CgbEbSYGd=lX$Jer=PH#5mQ$OUN6p>L*<*7z8!pd*#)zuORoFWfl)2mtG}Rnx;c z9^#Uw17bPl7zpaH-ftC6#`rBvjt@e{_g;d0*vFR3BeVx@NIwTUs;{K0B}hlc&ujTa zh*>%&C$c=>;iQf#-`%;KD%HY9Z+8gKJuG%AV4Ejcwb~r&Qh~9ew-KRPipSDB=6H)! zaPEToO1e}9UgvC5@6pzgcey3&?*_f3Ydt{6#uifpRdyB3Y7sAer_#Td-tY@$t)WU2 zqO@cuWqlzF$*4@dkZYcAPpO24NQe||*YP^vI_zUxOX9nFd_$p8sQeP{w!_%331$M; zqIV$`8*za2?PDVWX$mL^Ry1-wEF>y%zkc7RK9cw^SqL;xQpi8n>WSPRIrPNhN022C z<`e*k1?6;k%%7Pob}#^-8f2Un`ss3Sk~nruy-`OKQ+6(-npjM5w-NPuDB%nR>d{Y3 zPEUU})u+Y?H%RIU`-&oIRW^|OTwg8!G!={Uf9|dV1r_EE!UTuB;(U1sG=fkh;!TBo zCaCw!=wHc~7Io%$k$W?bY@QdhIee4^e|nMuSwB8*)(F#gv>OVlcv_3Qur-?X4YcTBfxk;@k@A6EVbcL%_LSBJ0XJ@CFwJ{kzY(MxPVR zerHwft84mrU<_T4N;ZKvNsCSsAVdaX6|DfDcm14!@< zr7#`evjZ^sW&8n3Qlkq5tzmyD*Qp0%Wxx58>DH77U3PCS@sv27?}GyR<>YxKMVVqf z^&uawpl<3P9F#@-DvwH9?@ax&6e(grqNlAxb7TrF3!_sEj7ef-_y!CmMf@zp;0r z?+2|fa1b9saGe`TIHT5HZnjF#P!x-w(M)Ty4xk^FOdyi~{`1QpqFJ`s`5!5FJOB;U z1_0Gk5I|90*J?Yf7Vtfia=)KM3oYn%;AAS)*JRjvJ|f$7d@U3vB4ocIhs&Zqs!C^r zJkOlUXeUic*d4Au8xVj>%QNjRcYA{4;yPHv0oz2_B8%yD-S4&DREdi+=@FKToOv|g zHj!^wh+F#W9H+a`t+<0RF>#sM$%*qGS2nBvMQwO*@v;WKn}Jt<=@vm1{1_anr6GxPkxio5}J4Xg~Pm!76IxN zv;4F&Q>8gsc5y2dgIpbL-uKN$i1dp5ulqI@c^XX0rN1N1gnh};L;FQ;$o=GkH!r7! zwO0ivmEd2$`OA6uWe_wCd2?7+ewG!5SomHeH5mR8I(zj(%+P#6X_#a}j>*o&jR;3{ zd*o_SsUVz5{NVlC6ohEYFA(ReOux2ZwaEue$!<$9IjzSjQm0ZXN)G`D0ujSh;c7P@ zy_OA&Rsr6V4CHy1btIy16H8`%Vk?O2Y?~rUi%@5Lz@Ila^2EHr^psu&bCOvBF;FY4 z&nNzuHNsL1R)_qH`yZBLTlRBurYpLLF!zkXEsGxYCQ)TiK2F#dz%TM@B{#x3}x;kqHP08m(7oT4uL2e=6*Yn|N#}3eQX0W($7M*=KOBi>uU>79hYh2ARaYVh?_yDfISK zJ-^0T<&n{j{uZ9Nokv!lgO}lGR>D=No2Hjf(79?qL+ zpQ25}sGJnlR8Fkk-c3nPUg2WSXaZ!MQHRt0G4-e0t$>;qA zWPG}*BdJ5y>4EKvD_jY3K>{Ho1aI@iT+Fx75r$6SI_v&huF5L&{*N(ZI`f3IpcrMl z!g5*KWBfi+#txk&Lr@$2KR?Nid&>tg{0#fLd7(&*=dsxuc5L%8to_T#3yDCOf{qCQ zfymQ^ymQMPExVs({R>ORQSkuhnzs#e1jz>8N_-JZjtzkELtG)=Me+}f%@xfdPg%Jm z&8Dg^qaWj%%*l1e;c24V;wCjXSq>`!yAt?d|2ZM?FJZ~sb@Ecpv6Y@+WV)N~x9Ok~%lYz=egxa}^sMGv`gH<2=$2_~c_pJyvIU9cLkNgIP$>30%E zI0(~>aB>P5QT|3W=rk3+IxhXY@h|&U7y88s-^W6`MwE>X$54KCE`aBJ%#(h zdc_Tcr7AZHPs7F@+{Xq&-o5gB=9d-W6U=cS}ok(ssF; zwc{VLDHhUzXh@qs_^TNi8B;)c-V|ux+1)K5)%4|jps=?T1jUd*z7wz?Z1i($$eYK& z`Pj15I5jD<`;2{-YtcxnY`9w?Qum29DUVkfD+z}S>J@?tQrWlC44Vj;0W^nV<%yXW|R!)=};6kD72JCc>kBKdw* zd6{H?ZDlF}Gr*sMZ8F6W<^X@dV97Aj-|lVIeWT9&{l<_YsUG|oCL{efL8A`@0Jev! zJCE*VL87^ZRSt{0niM!PZFWR4eLfvn7E57tK)4^kJEy@Dux6EpF*jyu`_Tyo4p--uC&CfHYw>?F%**#E!}G zW|&+o!etR(OE(1(W%AET<_7J`&l+P#HL}m30G+=9F2em-{JxZ+afA}imrT4herAiQ zX^8YUXdf4cU@!LSB_ybWmUTCESJj74XunH(OC_vcr#IWDziuDa__B-Kc@>CVl+Sbj z!Oo;PUR4xbZuXfUQ3ga4b(rLS?v5-~U44~A{5AG%ecA4yrc1GIh(481%uWkiPn56J zJIAdt%w4|tcQV`WEJ4h}A;El?=oTz^Xf9^4s#&GEqKZk(CzCcG#H(ma!(VWg@Hn66 zrj$YpMmEd%abVD+Ag^Z+e6jzs$A%7Q-M$zHp9^u?ryzrqYfuGJ)LSDnW*rWuZK7b= z65M|f@azO@W%$u7`gtj}ZngFb(?pwCY@5M1G5A{MfBsc*kk1stfr{}r)nBokXUQE2KpszD?z`zC;a{w0LfqkAzC)5*Vly&eM6fI ztpA`5?XazUc4>8ADnI*8_$TV5S!7n%Dxw}0R8pA*)O@7k!WSUm`=RY+y7Rsso%z6y zN^YI;%4CWGYVUtk*;dd4Ta#A!mPl^)JdDM|qc{A?46*Fw=DM8w@O_p1|N`+3W#k;ug zx`s5r#8N#FNYPwq5{=3#7uOi>w6L);^ZH6d@}V(<=JUpfQqhGL!KgEqJbC|%t&t_b zvCG1ZK&sSJrM~E^21vWP06$(N`kd=O?-hIS`G1#?W~7)d&^3Rz;&y-`DFmb_^2$#U z=v1T7HNjoA*G#9I(_{E$NIvs_jmuYtt=cikKt{fQ7(pIJpn)wPmLm5myIdjpt*YBq zq|$}@TK01_1vcRFn*>U|H7lXLl8>`ksEjIOOQsU#AuZ->Cd4fykql?bB+I_eJH?0W zgf4NpiJ{eS4U~HP*N^^7$k5IXfmEJMn+v}Tr>?Nu@|bRLZMl(Ey3k?e<9eMcVY@{r z90i#bMM3TukgY&c`2O^AqaIad!0U`dtvQ;C8JCq3y{~)J)$Cy7dfcMzx=gS5ejiij(TGk$`0vq^6UID2gp!77D{>NvBU z)#}P2czgY#M}f#Q%iWV?w0LohM`)b`?kyV*rhlUn!n=w1Q!l3_e(D=0q&WqC@BFjVa+!3@^+_f zE(o;zIhiI)i81aps}c#-*6C9hLkl^b-ZD|wRisPYY*za78_9TtB z_Is0T=88{QODhV7N=+$=*0`8WQ^qRvwDmuM>?u%SLIg)43WVxR3hk@p+ibz_4@_Kt zH%Y%u94_rKpZV5I{4@KR73MM71bWssctG z8SrHN-+Qb89u5grVqqz(TRi04Q*H2ky#_C*&U!O-XKQ!ch!gm*TPg1K0dJxiC&i5) z-bNz70OqqgJiUzC?cQV7LAD#r!Tn9LpGJQ09(jXdoaAO>ZFc(jLrYH&0|=A77Qk&f z66F5~0DsF+iFAJH&kqNDK1z1vWGP;Db#)CxZ=dTTTbl-PrhiU;`}=C@bEzi~GQxIM zgigdx`acf3z4avQ#DRCWnd2510?wZH$ON6AWPSSJyC{Bu1%7@;N^QI9syap6~a{Fjr;AO-fl!$ILkRu=65jilr zz5Q1rBte!O#N%?gIl@98&$Y2mWHz_5^2QGOYB|tQBLdya2v#KV`Ab+^M<?k{cb@&xjvS&=}*bVh0fCwWttMfODN??X;4KB2aV8j!jtioF zKYJ6+4qBfRNaogZa&q8_J?R zJoIR?w9e&D$E{jiRDQB?bw%%m&OE;Ya7go){I5LWC^B%6V-!o-y7863!N~cz-uIiHYiF5_P3Nc3 zHupL)13_)Z_uU>(DI~Z9`(CCg>FL3E6epyen^~3`O3iw_*5zi!sT35_8R2Q-`67lA zhX-&{uj9}SV_{}iIg5=;_Ed)F_Tmci-5LbJX19<8vDFm0*eBkVn5>Y2ba@*L=AG#Af?qP^pndC}eZe0agPqU$G+=*G~ zY_thzwTC$*-DIL($cLFoy?3UrX%neLIkq475=7gSwD&9`1pGIfCL+`(Tedm*4*VXn zKLuUPhC)N}l8Fg=$nIB&2vQmRu8pMfr7wL=KBj*>&k!endBIv-OYM&v!toc5+A;0# zH);PMqq53sFBpkdpB@+2N$1!9pQU_IF!1=G$H#rDZj)l!^;VPL78~PhyyN2jGiYiN z;R-b0)a*^`zPF2GB5y{`sCo88tsjas%LRl|y>_vzE=?3^h4 zc%;n$vl)kItxsuGJwuAYH|dzUB~Lrag^^ai=t~xP1YzD6=l(bf^6lM4BGqaUmL&_1 z+#Y=+g=3a&irn{-(EIz!IHZftK;QZlr`TKK%jU^EG38&>hE?N9(I&f^aL-AzVUc%$<0+*S2VUJ@;)V&ILH;Z}pg@dA$TqLo#0RE< zYjGixK8VjnavB2u;(=&M8A^IC8ivQK?pP#(ZdJ$+{VI@boTU5`8Dx$>yY8ZF*_q+qQ>4 zrX2o{Act>na)DEcNiT`+r`hks#~@;tjj^H9^;@m%uGX}}Uj&*DafW*0G|*eJ`7*`5 ziaThxm3fb|Jzs)H+k*V_>OJ-YKo~&W!5zD6h&hu zX{bz78@l~;EKoVDL1J-odwT{yrbw;ajc-@bmtWXr)ioHKyufiA%|m?~AQ%2gQiOLy zlw^k9u|1}-9+ekvIsqqKu1O-t?KrLA$H3JPBp$iVkDTcn78pb$wNDQ5@|8Kn%FcC@2$pJWjs*%w=zmh!y?!fCbQifrL$a8w;03xwW5yp@1uF%m06`G9X*$0`TN z%yLO$j5toym1M0x&p5gTk^KHY){NWyB-K6!XF6{(T&`zOEL9QGkzAd}W{{`D@|x<$a_`{6NVVvq!(LJ5v&woQB$dU{1PN#r%x>}NFW<;4x8J9MX@p>iya`tf4@sHU6ie}L6NMG zCA=vpN$vBnSOQIL@d?pYd5icISuAd+M&s}DM>lL^)M69T6deUhofuyUM$(A<2ykH* z8SVVsOf`66{ zEDC`G3Fj%eB^i$>E?g&0+U*HO60@#_-xCQMWb+MdAq%AKJ9AgeO$si^pN||<)GmlC z#Ds*DstlY{ZU2>hya-O(-|m>O)uNQ=_uQ~Jh}}dwfu|cuq|xIZRudSIN(o8gADN5B z&-W#amUGuT)jut7smNRum~s-W&60kW$sP7oj#v8N+?5k7qX9C$>DRV0p1Y|oCPz5! zcem?XI}{p$a3Ig+{hBOmD1J=L8k){Ze!ks;i-vw)=D~qbd*&8|x%MfaSp7f-&;+TR z>R{p$s_iF=SIMfjIzA!~6HVqBiH=pWxy0G#Nciy!t}U)mTCGqF+mmO3=H;@7{@fXO zQo>$AZOg5DEw&JRSnZ=<7x?!Fv;PSOh_gdt6+m@L1KAugCUiS8!^P=@OJir5c(gO~ z;qv-Ja%yk`l)mV6zHA~qxWyF#eiD5)yCg*jtjKaKpQ(A^Ptl&BrPTewF_@VZf{#@x ztsn++`R1zw7nG4nkXK2zT_L&e8iQ(KN7)n=w`Mm$g2zyXC6RfHT7S*U-wb&Y^#!VC zdO&VO`2{X#Yrx~*t|L}i#?awt@|K~X`(HW1y_ALd z)Q+c=kPFaJFjJIToFJ56BE-Cv#3a=q7eL5+AbOyo?K;*L9~*Y)W;s znTA!KYRIW;5MBHLM>Y80Uhd;$^H&lj8lg^LYpaB$E4&Jkh5TZET>BANHL!s)snDq- zbUh|RNS~*n*H*34c3TIpV>IgPYYNSiz2_tj|W%?E0?ordvrokhlCj4PMovAsb!7o7SKZ&@~ z$v0Bz4aG+BhpYpB~uiFy!@So)6I66TfGMt`&ot7HtocqKFJOnuS*z<8kcma8acxX#OQ(a5xbn3lUgFf zyw{qUKyLeNw}{{(U-{yf7=pgC2%Lih)clr6oU>{;TWji=CAtdm#I3zHK1cs9!#c$Mrjl1in!|JUo<^v`dZ( zBC}%{!+Me4%Lua^jShtbk&ZE<(b2k`g9y(+2?lxup{pHE^#I_nr|d!tR{z5%vNb6Vd32=rvP-&Wzzp{C{09f~3N;(924=@l4G6}Mow27}D1 z{7veE`)mB^Hb1lcO>!1~LtP=r7*11#C@RLNMXL%T@jFGZ8dxX6Cx*x`XSNjy60Yf! zSyf6cg3?RX7$++T9t^Q#zcVKDo}gPbCsj1$%P5}GdR%#PnCp|qV@tMaNrs<_tOXX7 z@klmIQ;u~X;Ad#XW{n31NgDSm7Qw6vlMt2YZ~p^1-r&eox_dkc0*I=vBfzZ{zKXyA zXY0`>Yv4sGF!8aMZ#~xy-;rrAjLD+V@JCi8+Y84Gr4UXIQzRe0xsCL{{~F&b=g22Nmc-?QHvP*+&(ME=8&cT)LukaLpO)d;CH!gEC|8nns17Q3cVB zr93ORv|)sOKToH(@%kbaSf;Jvzp~)2kX}x>n{Ks)T!;<~m}*32Rc(%8Np&ee2q2== zaK-!Bnew3hRzr(88plv#O`{oF7niv38{Cf3(mfeGh zWIl*>WH!ipN*4aLq7;&rnN5w^Ejvx&OSs5kM?Dd2-9W+E;*Q$7n3{^dW=W6?ix7vW zLY{e=2^JH$Z9VwYqrZ)G?mRnr22VlXIyh%^MsjSZb45Jlx?bGSi*z^C>%q&?L|l+= zau=-y^e)eSVDsg3X&^{t!kz$ccz6vQ`*GD)VlCWH#F$O zDatx2V74X_%6uW`QguBrGZdZxMHaQN#ii(*pl3)qw7;Q}icHy`k)J)fS(+Yztwi3# z#|Pb%M5$)Rs4yyonQDlDh$u~z!y(mh>CV{~WZ0qm^Qo)7UDLKT`@j+zOh59j8{6+_ zN&lv4eJ;EUS6L+v#^QT@a-SU%`zi?1Mg_NrZcQo4m9tAB&=awvn^?a=%S6CHPvuI* zvm$+(iofQ0%U5&xb=Gn-78Byl$T}pb$4lXXyI5g?DkYA2+HKf(y<=$h-DAc<0-kcxpMPpf=)yEh$iDp!>$35Vo}Pgb|ok!7youSrzjHbT05 zsL2FlH1|EXoh>nzspnxVa485vh5qbkAnCZ1L9zbl(!NETzOrRK{l~h=RLZAOK3cvK z^F*u*Ga4mjrYvgyt7-B9xJC75lx5Bc+-~TY>P$!b80MRN#pYzE zE67OPRzcTL)hu6qW_Zow6yj`6-!M4pr=Lep0GvlpZb${EPS_HBDz_*FSLSwHr7Quu z1jdE4*vFrR6Zhhz^EG|u1ZBOLyJ+CFsk$CtlvhNod44nw%;on*r}Kp~pEm7=W8NNq z4t(4lXb)n(K`|;35jj7W#U&LcR>r`bSk+=}y}c(l zgD+W}8eoB!Cog=)-0aEWVL?;V5~C*AWdkG=1H(;S{F&Ab>(Gb8Zs&Z_k|8uC!uWYu z_WNb?SqNZw9oZiBf|uTsG>*liKQv>T73JZP>dr%1+&k&ggH{3V*U#f0hr+4DH?64& zj9ELOt83nG*Ckj^pY#a?MD-Wiob@BwANrj+HnP`xH_}(I40w9SCxcP)drMh;&#`<_$bd)1iCN_yl{izM_s5G|&fts&A6v1G)f(x3ctFh6ekKmn~oL{pKVm zUpWF^5Pr#pPULIw{MFILqGwj~tN{I|%)S}65GcKDGTzW2zl9rUeymykvs+|g3B&A}YBqK+~*n;EW_S}&@!n9L;^Qh-e?>3W?WKOVd!EOWmo&_!YgO_IVWG}vLLK{BXp z9DkP zS%ftc+}_woAQ_#2WhKTsz!3JSp-r>n)SWclA1KPueIW}yEB?)39G+awDqV-3UsG8I zM&wxkc7BtmnQoQl=kIC@F0Y7saz-RX@!J%v6ecPbGe0{C`UTb}rRZG4z-F*CfhH4> zweT>3uCZ|NI4$6B+^tqz%6-J|Qcv2g{SiFI5`8}Ej*fL`Xqk$LbJ)!hz0iyG;>gfW zbPBAa%4I@FFJ4()4F`@)nz+VBM{(8moYQPf65z`@nKjYOGsQz~5k@y~=x{M$>&7Lg z?}sunDxbD9STnh;Y%t{91=5AUFbd?vI!c-GSx#~DM|vMMA+eW9bJ(sjqXt?_)e#VW zxJa0fd~XKCA=SSvwUEa-I6A#kBEgQ>MP#2~=re3^9_GI3%cakv ztbbi1Nqq-x>gcEEByH-P^e@`-RK7VuCIa8bxRzlpdP=TaKCSGEvdCzxb)Mi7VErf5 zIxBGFlsHvPc%{T199Yn=*a+nKJo7ug2BnD2@>yh$J8KJ}p!z;|2eGY5*I+am{B(of z@#r5%5jm1hD6uJR<7vtV>xurrQ)z*RT=uG))YL?<6~}>a{a#*7TJg@MAgg4nX2Xmn zl`@etqwP**r{>QVm9&=la7D{Jihf7rgk#BwL!h9L`4M+M7$PO@#X4JZ_ytz_J^SZ7 zekr>*+yryr%~&lXZ4Kb%vGvdI@YIJY+ngh$=PNwej7x_`9j^weluLSE}d{mmr z(EdrtlZInMue>F&CUs_4MvO|s)K4c5XZ2;ViVYxqD^4PM^$R8d&pHBlr;$fWwF0Ne z@$@K3QbM~ej4`8BVXE|!z*RU|9P%io{;vx_#bnSirAkCh428_xvEO33?lk;s^`<}J z8)sGURh_2O>>S!tqumb~a>`h~h1iw5-9jr+$PxNa%sXi#wxit3Cyd^2#T!_JkGnx> zjs{K7mUq)QkTYoe4nIzLhH#y~`j-?#w(Ri`n&8>dIAC!T!rvo?S|&DxT4u6XRm=~h zx4BR_Dl1Zs(`z-60>S=Wd^U&>`Z}+*oy$-UHQw!vFRnA^eR&-_&KBFhNHMArW@zCE zzX=}d*~CFI2ru%D?|jCGV{y)yEkDqMz?t*%#TJB$f>EX{sGlM!;2X(c4_-JA+ zBm9JNaDB)icngcZG=DMKjlw<-9##UXzbYzPx`tI9Xfp}n&!&r z4&`6$H$K(J!BAu7l~O9T5kg`ZH#D*3-;?iCn>nn?B*YrH8_?9u3kAAt})~THf0SKOn6M;H`BAg1zXU zB$1Qy&V;EEHfkO5&&&PC6yfesT{s}o5~^r_P|xlt3JYN1tWJ@)k zVq}5z#zvAUcj~Gk0?T^L9~s6XTNy={Y^-)x)YZbrim&F&d-53ee+Xhi7RCMQZ{UrE zZT1+4lQV)TlPsxAp6KYuR%|mh#8)gSN*D5EjB*itqIi-Gb=pMgrn!jr8lHENw-X4= zJldCj%Lobe?kFuU`FxIGu+pWF{B| zM$@JyxX5vkFy@mO_nfcAJR{Sqh)_>+|2wv~$fyhDmLIH=%_!k6N?trvVbP$+R4WD{ zH6a!UXeiwrBo$h);Ju%Ew0B8mw{?FB3XW{0PtzP)sDg{6bZ{ov{bJotdI~=Kr9-Iv zv>IVdArwWaV|sBqo_}$liEckn=_5Jw`{}}p&&r`|D;caoO61yTupddAGAEg?5=!j$ z9w=jdiGk355=aisQ)nZf7GW|>Q=K!DBgx^XW;tk1(L+U&cTW+I+zU$!#WuUx_o z8Uu=Jzk2x+wiXp2g{s2}st~8=7?dqI^Y>wO&!nGFA62v=d=|`v#&eo&|FY3TypAD@ zgd;y864~)lOp&2ey>fCbA3nhV{s8}|ZRYGo7gaPTk~v3tJg0mBMUF5^vBr^C%4pp| zCSnf&?qmO|#=2&R1>Zb@q%`N+ z>R97b+Sm5b&3=?jRBwH^VG0zAV8?+H>?VVCgX<)i#St50VoY86sDf&OakB>{Bs=l! zi+hlo5|2izN+0E-Jypi+VKEGOLF?T);x#x{S9fDYLV&caM4bHk5p1WVv6`V5<`>j; zbHO0KOPW+awvl-}$RytxBqCMpTNKrw?DD2Bk1T^F216>B5g%}|+k=|EF{;%<@Sp9; zVBDw&lSqgdiV$-iA(6r&eQ(rcwPuL=(@phJ8uMGV_4Hw?w*?vdOUyOHS{26n4>2}UBx4#mDRF7x zJaIBU(MG5x#T2A49KZ|TcnZ0cf{1yXVSK5~cn9~PATRcyV(R`XlT*>dU_7LD6a`9T zzR4IaVh<%u@_f9V$npNbzUR}Llk!?jW+Lzis21|pg4RV~6=n_xPU_VK{}a;59^ukAuS%y<;63ZHKkd>X?E3GL~LljhHG6T*cTsy z7;@)@^yDjY(v_KF?=f^p!M+cI5Agi#X~Tkv+SaRS?5Z1`RB`>cvdStx0$Ys?mSXul3en~ofG)}%|7%q zhRM^(Vc3}zWz;QY&TzC2c$m?hqSAG4n39S$j?SQ#xtvZWf|8>V{NQFkF84BsC^4lC zI@m>3dPry{c?y`E@Svyh77DY|&Ei+E%3}WRX{f;9n8&CI{doyj?w}WhV zmy)81NH&elqmGi5MtZYJ(zJ4|YwNWkU}UU*cxw=+YWv`&IDVI79w*bHuqQbRd2tbV zHY18B<1zf8VgOwXOCib9Mi;elj*`xFGRiSLInOJRHa{XHA{-*L+bOQxOXlms#*}TG|(l!@%SmH4{Fh#4spqzysQ#isHjjKfsg|G&vDdvRRAf&Z*8x+#HxR>tHol zg*zP@UajNYax+Nm+!W%-WQWpoa+bkB$0^P9dd5-HJC17JCw<@WqPZ!i|JT)SJe3rN z1TxV&bU$uIk-Zykwd3^bmoY(ATZks$J&L3cv9yaa@rDAP)%;ZC>?kr_fd_+tM;`d6 zm@LCsJ%qs!Gp)8Zl93BUi1rr6{0cU68rX*Yd-G!8A#7{G?R*ziOs&jebv!Wydui+) zMG1h^Es9TQ4E?Bb`KWbtU4%-=kmT##rXd_ij5Nk{``O09gn8WR7&463O~x=1VbNwC zTmn2pL)$Ris;s1xg8?=d!d3`-QA{C}O^MZ&ib`a}MWUB3&g%2hMH`}ENh}RRJ|mGC zWJ~}_`m}EeR>3UQr-;m3&13jcMIYX+9meE1rA!PRptwwmN3-6dHioFae51}yrfLRH zr$=L}E0RY03^>Vqf|-J3Q~iEQ<;tSw@K2TfINMFa%VznAVF=d`!Sav`u0dM1*HAi@ zA2W}i{_>aj*)RSHH)`wPV>}*zVAe3>xtU1`Q*QViUacQA4CuXJ(OeKyzFHAVYskc= zk+}sp=%Hqo89bP05>k!ix^qC>*0cyiZ1Fka5(cvWp_MiDm~!XuKLq zrXquQ+)rjSiUw;Lu_W+RQ+X-*8z;iVkgNpjO1M-%_0H?{L)c0tCXp1`c;~HP5x{)$ zv~>z6p_{`6GOrVq6n=#j5Co>oVRm)G;7?(opsW5qtkm|su8YC>w9|up67#p;dK1~c zE@Zn>QTNenxP)kA6qRAywjIdJ$S~<8#1vlapTxT@V|ckRo@$KcTMz+Pe#j2$9=A~X zCH{8lqna18=c;#89Y%ahBCvF#7%3K+kBVLorLoJqlP?E>aIU$dHdLqJ+z6&YOjO(0 zEH1VU<5+40V#)khk4lO>g_lZPC`n*S8jhR#E@q~QwuC>a7(!Y2Gzw@ytfFoUHZ58H zZ&ip#g2wI{TxcS5 z#q>nUp*5A$*-ruN8}wbN^32eN3w}ZPDwyG)0y;h-^rtgUE!7-?nfFmy9fh{ z)flEdpTCvQP=Pa-7TLfJkg>XY>L$V%JavS~-F~PHdrxdz`sh9XmIO?5)!(i?4);XZ zCVJqJW3Ut`PBuH*P?sy3>N{QGIMX(Q;)K+tv~0Oo%r&XaIz6*g)l4FJs0HWWdDXpE;2MH(!!YPWX4F*Zgz07QFNY7M&V^LUlZJf$hVjxf+Av~?ahkQ z5yM7A1eY#H^-1Ydx>_2MFgMQRo;l_O>90xkP)r{m2iHs|>Kpk?Y7rT-X=KsyOmKI3 z=W(T;QauJDO^jw-7c!P9Br*r-tu{gRlTMo<-z9BeS{}P%0RM zth5wH38wU}w+?4ty^fD#lbH)`9}ex=O(Xaioa!3IMUL&^jF?3>eX3KS+!*lT9GQ*@ zGOay1Egx?|>~}F`5smbjF4L&xGa0k(P1-VT&4|Y{ zxp4-r2{wGLc@TT{6eE*~YZVe>wW7X9a}r5+1M9H>&*tTacN|{%)y`N4n9h}!LO3!#8nx_;|s<56B4?IoH*j2!V&A`5oQ;`v{ zRDRj{=@?!*DOc#I_8FxW+DY53qcmQ=%otgdd{+m6rPA^hs(9=#i^&=7AI5J_HN!{7 zDUwNw%l8)Fg&&20xJ-}5LE5#YG8m?h_Fk7xSK`Gj*$8EvsG>7UcQQp_{avE@|Rq7Nn>8~3+Iv8=q4KZ?B}%-YYBX)x&+oy6rnFP_Sb zVQiIqcSetV*zUnRz4tDE^eUd)mV*SR6Af)$_~{S7kLO-~1zQ=5YL-k)66;Tmp|=J% z9uFt|(8L7oYo_p8RX?WUs6ym*V~|H^#H8r=Bq?HfS{$AwA<|YJcpxNih5@Sm+AA;P znVeK^XiKOxpBKZnjX~qCF?_>QUoJ*BZI?JFY1BV~%d{;zH0v|!mswJq3DdrCp;J}} za~m>JK1W)_Qt*gDHJDNb3q^R76wEn4gEtt);9DhehVioQul6m1-!MFlTVzO{qgZVw zAZU*NoOkDKF(w8lW~A6J{;j^H(7iZ~OyP4W;fSM3G;+oZcW);Kt16M{9igXaG4{|f zN-&DRtB$o4F*xUYycle_1yAK!e188HOp@6Vj)i5ZU$+$IVN1arhDSzm_53?bpK%Lc zeEExbCOZ-DwhmFH6^>$OgdzM=l_@01`*iPDT91QdCgUR5< zl#8`U0TFS9o@j_^hrhKJpMpu(wxcc>0b520%|U8BdCxsb zh7U=k+xzYTFOHN)VUUvKIWpNINa}Y8nHrtKEkdoot>0P;!I|Zt{nxY!uG!MrjT_gm zp{uPPpLf?Fy!Zs0SmT6R4VX=GPdHDc6zTw_CCO@s^% zFuEBy7lKjW!>B{^b&}qPpS*b$lS;14H8(_u0!azKQX z2kzj;%Y*BA+7jOC9z+6D8HEPiTMPa+!!wTsgC!y^QNK7~|E9pxd}0JX=@`L|V<1nqO9RumSyPX>v%kXgWUiu^#z&H$Ek$`q863jtU;hLh2cN~sBZt`UM<2-5<()P-~7c*?>b|x{FLgXuaqPqouOhd5MY;H>@hZusilqAfz)?#d+8-4Lv_-H2cUQZY<(G&T?AM`JinL+DFq&*4N{1EwOQab(9X zv}GnBa;yn%_aLq`jo`%+dLOW?Hm16-Q&A_SduMJnVfOr6czIVL@glFWJH%AKO)^wI zFNXU0{RwDl@4_#B_#d(V#OH8y=We>M593?gQ{W`w7ejlE(w6P=K+K7Uhxi}#OyKFP zczn_`h7Z{0^SMmO&H99PFS(*tM#($K6Tr5B_pbPNS_y>rsRBbGsF$C#_DZ*UOLWTZ3P!yG-LIIAS8!Pe)QsNTM`C9J%QwmO1ISVH}~|Up#-i2vi7@cgL`?9S;9I`h#srfz7P= z+hVSMbgcvN^%qbSMy7W*90{&?oZOp;cEaGPYoeOw6lTJiYi?p3mDjEybfgDmsSGf= zJ0HcgMSR>!L0J~Qn4VLAsALjxnmY{W>DX|JgS z)v~oRu}2m<6V13#adFWYbNlC)_8IMOPNkC3iE<4^bgiwS%g_T!aTFX`$&b65dQp~_ zx`rAy^CSMm@n_$;ilOFS9!jarV08G;f9(ju@={Eyr2p+lAK_|U7x!?+hfGbt@BHpD zgsc#ef3x=Vk!G;OxJU;+#?AW1t?TIR>BX+yyHJ#yjRX?$?8pgx+Ce*-qWDEBp1{G- zCOt$-@so@7m^kw*ys|xu3{yN4Nitp%7nDvXi7pquyw`yVCW9&LJ zHAUjOLY;xg;BRdNhf*T(QTs4*Cf?p0OHa)GmPe|=kd##!}!{kB*UDpCh6exp!CI!){lOT@06yot<_`Rh{05#Jk6hs z#*bai}+Q&BtldH(|%2Atp5HUyviuly;SSYPL3g^pd3ez96`%K7)}$` zrB$nG(2V+L2d zhGMnxw15$FD%I-g=3$&njl4^(t>+@htSTB#RZAPLoIlGb*}Z7*yoD=tn5c4GBte*k zm&{XI$1Pmz8^`4fS1{LCZJPKsRnZ4L-PkeOiGD^7Ke}fpPv$Wgpv3STC634M!Q5-z zN_F|e>z#-tb5#;Lf@uvni`L{E=X+Xe3i2}3Fh+*-jdy=(qO~8%N=8aa8J8JT#qc1o zSs4)1k#+tPL1tCCTsLFiw7{O7 zB&D|6*L8^22}+VaB~#YkA6TNP7Ci9GPF#BTnlTU1{wi zg+CQ!bB){i?bkNj4>jpBx^T0;iwCa=MDVaa z!2Fag%r3Bp_wq@Z+ zdKjAB9+XVaqMY>qsYQZM8B{iLR>S&&X9Gfo#h>@o(Ze(Vo} zJR9f9tPpjS_At#38H1Zu)s*y|hHGjF&lYFF6`zUr-hP~U^&fCPs|3#+e;QA7eim>X zYZ;jDeHxwT)0^)=MjRbMBzF>VATzQIJYrL1oA)}$e~*b7=9j)%Bt(qWJWt~_Ev>k4 zmdu^I9XoTAkhZ4?d6P8=EyzS+dLBYa%x0JdCEv@G8U-21$|}URsva{3=gaeu)isOc z=018?jpLJ#KEM^P6Ho2ij~hJ^C`pV)8VwqkV+Jke>IXNv5L@SGu4c55mrPR4Gp(7l z)Fix^Qwph5#YBrJ8VV)-=VMre1`%b=m%yTRXzW>ZV+pPTp9|J+8E5Nb71_Ntl9~S5 z``3&L*h|U8^>a1Y&AfS;`DxZ;LH$-YKfT_B*RM6BpEhZwy9@5Z%UT=Md`eDFMCq=4 znsc-vgom*hN~(4qE@MCa$R49=@VAVH|9(q9QfMpnES-X)4aQ!C_sn585K5tU zwbOLqvzzGmreLsqRI@ZUH&dhH}I0;)G zC12+*U&GMYIL@B=2r-^M9AO0V^uz>AN5x<~DjJEDupP~f$Hki;B9bMSY_L^A;wG2&59LLPWMs+2a&AcFseTplxxCD2su!DZ^PL;` z@9U4FnBfOJS<{s6(b2%zrD>N~y=XkUX~_U;+P4tL;a zQ6^H8OAQQOGSBHL$@qM7B3e3o@cNJcBVxAf$DfXmprAMd&rk~0MVpXcS9y({*1_y} z6Mt)gE-VI$>*Bo@4`ODgDM^eX&UM>wKQ%+xDjJ({krFF0R=abPk-fLX-1m`)m{1(V zi5w~ngQYo5{3xfGB&rs3Bb9*grVts4Tz5`#>y7Suyz%2J@T8Y<9lnS^JCws#7Z)u@ zItJp0*V++Ndme?M!#ubU;Dz}SIJPsym!w(Klsfu|pP41n3(8gv?iRQ3c>W~}y&(+?0Yc)kcz1dr9HNa4GaYo#Dg|;|VB?F!^}Unxy@y?r%i7 zbgK>j=g-bynDKWMSagbO|L7O?Jy28opWcCkWS*v};+$aQc^7RD=efaYfBH|aUBX9~ z8_>)7Hb)7}E8lt=C+-8@ljjG zhKbUhI@)Os@Lnt#xJRWZM`9{%uCfX#VQ%d=dt9tDhJuS+_}K5=%u`v;{E@e)4wd>< z_MLfDeaqD3Q7W5)!5SN*iX|ll!^4ahLNB!L?rx-~ryGWA>B8&n>Ojwh({!ItMLwl7 z5fL=1=3rTbTgcx|WAqmehhSuM6g91FsBMVFtC4#VCjCfY;i4X9D29Kz!-@2`J=&v1 zN6bGn+?3UJ;0ernRa?bjZVn`c)D=%+z&(tx$`M@u@O8N7!%^Z4!?(&)XfsvB_an?H z+L9dYC@e4%ok^x?>F9N%`sO+2`^v_b4{cwzEvwBt-ytZ;Ovm4!y2N0ZefZB04;qiD-+04L$uhkEy>YSof=;_YuMy=`c zj-r7Qm#V53s(1W0Qxh2^;4}NlY%a!~?A`il<8os726pdGM@HIq;)~K1sR6k_=J*{> zsbAo@-08#OUvrd*#Dz^Gp)VG@XmB3Ez9iMt$UZI}aT)9j$1`GL6bV%^*j|ul)P+09 zu(Zsy(>{sB!idoq*QubX#nS_L`s7~Bg)W9;nrgQQGI(n(ng@q>Y&BCu`=gm|cd?xQ z+ICZF`pUGAlB;1v(6(T_{ue{K=kO$VuH!=8H3M$+)QgokfLsnaojTM<0f(tI4w&3Gl$FF|CPZp=e^EEIZsiH5V%lzWA~u7GemRE(PhgoNjuS>YIB#{H zUj1Mb_}-)TTav3`+6|q1{W9igA2&x^my@p?LTJ+3z1i-k&r<(Xk;!=bVjcIWS>)}= z!?Q2!HB5F{K`O(cxX{o!h-s?IlG9yCVO~4g&Td4hYUwrmk<$KzlL_gek@#9|pq7Kj ztWVx3rqr0{CWi8vF#Egqh#7iQ)wcH0zBJsZ@Q2CJxoNXCM`l5X>-7{J;G`xzK%1*@ z28|t&dXf8U2(=87&R(K4aF|TU7$^U}XLq9PNLf%5a~pLi`={LynX%W1_s^u$c0l;pwSR64?20+IiiE#d?(s4snQm`JY=CR`|C1VBKEaw!dCV&1x$# zG}?~ipL+)LlwkGNoI^xPI-mZ5V9^TQz0a)SOQOFSg6?2RKSnr3RulfvJPaQ(!_Pq<&{nrwnI*h38 zd+2T3Wte&A^C#fTbYhH2x1$P6Fi)FD=W{2l3JrrkZbWytFWvqjb|^NIM!tqIx_y~H z1cx79>$ki43StGaVlS8SQwgbYFgI z3+;IaF~I(>xcQ(}J z0nwo7L>s}uT*_F?^EB^2y>dI|eQR?G{H^x|ll8s06{)8D3ryR!m=Q5of$y&dpTAB9 z`=okg@jF_${&ubQtozn=F{9RReH#tZ!sci_JInrA1FUP&jQym~(h^FwAuGc)r5O&Y zX`?wFDpoyyJXws&!rKO){%aN-*7FNb+=kEkTi=1t1pd}ZO(6;V*Y4gTEJE+c=bh&q zbO8+~1Dn4d>u>A6X=jyx^ql6KBPJSA3;102 z@g=a{eume5aa27}g(mMt6(0@XwUG-u7CgFc!DM~wnpISN9M@HB01ScevLXZLo#z+U zL6q$0?v%iH{P-qOQ6E{fK2&5kVeq+d-9J`-_;met9cpuxVvR?9T;BQsU>(foi>l>OT@@XJRZy=rt;pek`RDG6eUxM`swS*?<4@doj`OHWC>zDGyRK zZazA7T)EziA+8taLU3Evd5|in|MJ_<;J38F>SMo(cjhl5;t$fU^{!@@)ZaZci}>6N zdk{{>;BwaxT$Eh7*!KtRpVdy_w}vj7%yJC-G(}SmF<%LkNSgD~9sV-#l{Nhqb2UOW z?v>^qj5%X*^FobL;f=F?AGiDRATn42NOMASa*9F*gQq3T?-b{TB!dqkbzD=&H|QaY z{%%n9Yp*sjaj|#6a`sniug(9YRAXITT}IV7N_C+O*ryo_M@*1Z2}46e6!jLH4W_=n z-q?KUzBcI6(o(t+Q;pZb_&Ov`lBkK{%g)Y5V`HP)jK$=Pv5joH$4kvQSX+z4tZaDr zTW#d#=B@~`+ELvi?1DuT%|&m;kr4*kq`I`dy&V}epck{*)YN3|OVX!y3JVL3^s2SB z)xaLX>!WQ=a1w4t5h8oghlmP%%9XeMMXuo8CbLNv3-4;--KFl z^!D}|oCr^XV|;uZ8Yg`Vw6%-Uec##cX9=+*$dV0(_ z3qGl!B_Y+vdS5sdK7>>COSn@X1#>hRPCctSG)AgZcu~Ew7hI_fGGszORnK93*4@&A z)TDG8@w-j`-TYR2nqO*9uxi}(Td)Xz!P(2_lG!iK+c<9AIwTCxX<~wbZ$rYONl?7V z$;mPI)t+G1dr3)j5}dnQD1!4Anp7 zqEuTcv`HH7>qoe=8$~Mt_6T2}CGpBH%SI##m6s9;P$ieeY!MRp$ppeXGKP14c@ExT z4-zTyIr-&7>+db=6vK0n9(2RWt;{UpLoN-qBN>(@kc|>S4JP3{&xq-L^fH^FI_=~) zoEiCeb@+Ilftj~ zkXT9sk9}b;CTqLk<~WuyrI9&-t+OdsNpp}neE7yCj8SS7mF6;1IaMc|X&tIi%GHdqlHZR8@Bx~ENB_eCT`NOVn1g*J4(uWvCudQZ=2 z^VSA$5gk2CDX}3mB2;2V^z3SjOH77{x0n*EKC^JRT1EU+r-+-r^{g095mF0g5tOtv zin}@CCE*ww9XIVMg0l#=&*w!UnMc*3cLbB_6Qv13 z@9K-{6oa7lH6|J#)oJxx420mba3|QU`Jj6A(L2JYu8V0A(;!AgMfGSy5k3Y625vKq ztKm-XYD^{3EG#Hs466x)JK?~BOE9WFwP)eex+fgP#5ic2O|du|8YRp=ogm3*jgtwL z9hDdz;a~5HNfo0Yra^dEtqAv;>l#OWG_N%;#Hi|9V`sskzlB>dh1PZ5)BD1`zJ+sr zgge2ZF)S)BGIi;ia%u`6UNVFknOUZ8;e4f{x-14)@2MTZrlP)C>!P2Glb%z5bWOMr zjH+AL)whw+G4qb_E;X6fh29g+h5upp#pOysFXymt%4bwti>E$&OA|}Ypl?6w0TR$c| zRB`db6qzmU!-489>$wO0))z$C6N%( z)W)F=TtyR6%##STHgFL;5m}31=vlol34?xDG6}OGn%vMuv_)w2UN4!4Xxd#(vz`u~ zoW+EQAc;7wMo2^~RHtANkraUtQzB+cFo{TL0jUl>E8?MhBJ>tRP*G7~m_Nay6Qab# z^2`|~!6EB_4oYLh9Ed>_gQ0%tU5jbEJxMgvxJjA#T??~LQVuajYER!HWa_{0rr+wP z`lxHdlj;>irndBq-j|d}Fsol;s3b8_KZR%2A!4WJBWMh7Z1DKIufNa0Y1SC)v0{q( z2hG2zRljhjI@CYGr#4iVU=nP)XTfU0F9Iu^>bh_ze2AH`aICSH#8dqczBCTjcnJS$ zL-*CrYNdrzAmKQiFmzIK63KoGPijx~sea*0^GC4hx?mQ51e@mE0B!1`=@H67<)$|2 zcg5zuqkgFmf=_Vh9l@k=5)SX0bF7b*-Ue4~-Mo3zysNe}27$N}K2&s1AC0YWY|TgO zef2|q)VtOk6CCn#)jH5~f=}Z9y#tFr`8c-1F}LyCV_@M@-%I;;r~W(lBz+5`hvI%pAGegz z3Fi1VBr#(AH@KO$I9Q9p3{5Q zJ>lFx9=uN&`i5v1$$pu_HkPY@X@3ISw)*XV&kvu!GXKBsfqq=NR)PA~j=;+s@_W;$ z2sfg4B05sVXoJ>A8?gwIh@CcYZT@0#RCG=EMfgM;tWvnh+1NJXS) z^t=L+MscH_&MiPZPy5c)G{Z3Iox6x#Kqs}qTXl+Ps6N3Usep)y;I*VZ7I9XcA}E4c z#82<5KiXu9O3N@^OSMOA9MW?0Fui3fA}QsG%g8i!s~>7p?^(p%0wgl4wl43{gRYJ-@>Dw7Yr1Giy zWW1_Kh8h@iB{OH23!#n$Q9q5?P`1ko8Zyh z)mU0>>bmZ$Sd6v4^}hNLPuNDK3Z!RkZdRr_1X*LKc0{ita`R0f*m$m~2qyjB__MPC zH#q-Lk~vM{o|lux5HTJm;SM+JGMVYFPB2xG`jWvEN3j$DPKJkpF@u>QU>3*tL*w_t zSN1cD1m`7f-CR$VQY~MGetM}%B9zWL4l;P~%sdmpGg`SyBHvRiJKa0%&;cd{$zg#zJ3Ys21az@=gfjM= zd5`t84(pyXf`<}{0pfU1k`2=~;hGg(VLU9cog~&1RhEj3-C2zKP3bp@bKKEljPIkp z6%%_$@;yeuTLc$lD5IEgF*PN%o%)+QEuR)k#`*7idlfmYWsk2LYSSz35B9` z8sJ{W`d|FkF^s5!&^aW9l7S^I(g|}oztf1Xr}&(_e$!ZA3PZBz(^!h2Au#|hrK4Ip zR>xU~8Am=B&VI@!DW)_PU(P#07&*plTlHIGl|Z=k{MyG#G8T>-;Y#9I6%t;@?i?f@ zDnz$zyNJuwxhWnJ=`qh36Op+Ic=@}}z^k_TrpD^P!Z=!E6)%`q7^~z3oM;@6F3h16 z;>^c!&QTs!wpUZz0tX#1oK%4-l*=B@Umxf1TE;3mpl$zHu|M=g);=egv@eWsFDs^z2xo@>E#%gJ?2!=&ObU&~?i@0mD1in8<6~`cLmqN(+#Bt`2F@kminUjzO0u2)*D6F!d(WcU3_5)mSOR07}C-+_45-y*y!7VP>hm;>P!VO9}gvq~VY<9U6Q zOI8Nib7Ldiya|)Uxa^aWcu-xYKF<@r5RQq32i0ZOW3?~Ig;YWo17|%Oh*RsD1&j4< zU0*te7S62u*7M7KtB>mC9N~;-uvH`S=6I_F;zWO2^#!(P;oi&5E`~<(Vy;w#Lz1<- z=B3qtt1k2K!arh4<^#N{gu_5QSYvD9F0c+=v&J^?oxtB#TdLQ|wJ^wUjiJ&YaYC5e zF=X1+d*Q{SIi^Cm<}{Z4d(KDo)WV5X@K`YUAN2pL^`a8kb|5opjgN4l!;@9yxG_(r zONSsytW*N~7(>bL41+j^kOB6$V7>VWeAA0EipJy0Pq%YNxmgDqvmD}ftM(<11rg1U zzO6EkZHxZCb6vm6t$VDa)V!~&szYU=o_pLYTj{;REW;#=X^$eoJjNJ!{&IKyE7q}E z+k~^o71-B>>h;C<7S|d09P`8m^v#bq^OC86M+WnKcOAMMSP$1c_g}^Bi{iSyeebTe z1K#7kt&8v#SYNV}zxzE4E9-7c1h9xXmOlA+ z|AH~)VvSTsL}Dp1S$6}Q_{9mv*p~uI${W2bZ!xxPd$T_ zKmAvCzpz19+~5BX82RuWO!agkrerJE2<;3iubAlhQP~B|S4K$(Kb{*`5XU}+edXJ5 zG3;i=jB_spt|BZT&bBzPIAFb)YMq3mDW{-a3$Z~iAUKURHloi}GV z-@5qc^YYd{@>kxKzmm2UlHD`=P~VO zY$P&!ky*KjKYU`*bGKhu#}7$)CGpf=Xi3Hc8N_u|dDkmuE(`VmoQZ+a-Ya6V8H=Uj z-K_9E2+lOl8WZc#^B{F?ws)mvk%ZVf%xpIJR)R<4p~H3{KcYFf+(B-oI@Wq!nh(`2 z9I0LZ(Ri(I+t1yFfrzwBGBy>M>1pIRueS^{Qx3{*?4rIvKFSYQuA}jaxFjWsD^9QqpCQ$G{(9izdg6G1A4E&mN z-_?gR2H5z;_u;L(!Z>8~G-cm>EtRbA6e2V3U0(?8+Gr33@2&G>B0fTxlj`3MB)Fjr zDKR@n`?{tZg!>(Yr({qy$J~$R+D*=}Pt2H%SDwYht#d{V<+*YOvxD8lQw^E?Glt2U zm)<1^MXK(327H|){>C}CB2pHoVi7LF88gmv=@h2BnmJzW@LYWNuIGXP%7#{Mvk@Gn4-kIi8(08C%k42y6K51$ANLL>_vyr)L3r4juEC5D}}XOpCV9_@54agX?&eY*PxjTC>93~nRsdz7_cln2)_ z;$((+XeJ)U=%gZB$-cp1(+$}f3J+skC(TSUf7?cF13TH<+h_1-wJC<6kJ(QIqx!8x z>?*Rq?CN7E4UTIovqR|MOC5q4&k2UbkXQ2%$3=T>2W@WEC)tL!b@iF|C+P6f#Ic4QM48UnJdAt5zN(ceS54`gv)g}*w?1}x)Hl=H#}4m#%|wFMyrEz_Fchl zX4U$pyE_rT{{$wgZy49}2nHARb$1|^!6K)+>9W4}@bd3-Va##Eh}-upB@1+6_R)nt zkD(XH96Zc2-N#TGM?Oy`uZ;vQ6%n*!^IWG?il_3ZoFe!r5sIaB!$V1xW9u%AG6A#W zz;T4pVBVETqi1>uDc+QiHUinq!#KheLMrjj1gf~4X4CR;1B;=Q#7B=sZ4Pma5}za~ z%G9LU++=+btTIPtNQ`$>{&qy=6;d+Sb>CIbQmPVn_;X}92aTb>q%i*a=%Lr!dC&Uh zxmij=6tk1r>6uu2ZhX{igd0V8=O|4KCu6D9RFOPn%(#0QJamHBT;^I-K2s=B${4%j zDQ?l+tH}Vy9ef58wG{}9r38z1Qgc)Z8&x6g?H;tulOTqY$%-z@zXx9c06+jqL_t*B zPl;|a;Tc#|rHH~TaT0g%c}x%Xkr|^DC_5iBgNvVA^pgF@VhnISUcP>dD%Uv7i(#Nz zKPfpCgIv#@G-yvwPGUme4jM$0IZ^lyhAv5_MET&ZGDG0%>l#s7Qj7sQw#0BfCNMqM zq<0*bZd4$FW(R#tos__oJ`n5PgA{4d!vfFR+FecmUcwr)dS zGOu%gx_YCEfqLbTF@O=KR~x3MtL(HI=;`QUF5Mo^*{sw%D(>L-(Vv{Uk+=_`8A%L{ z+I>8P4l)RB8S{l+udJf?c^S&7&TZ}NCBw+RaL*hie3HJ#FfG|E%{6W^$L<&prscE) zb~)+kOQyM+VTz)o>1;%VdF8mp_oTu;M`x=f?$b?VOv{WR$AH5UPV>%6DV@`UNC>>GzC!C9 zr$Yh>rR+|YV;qbWi;(J`B@*_(Bl92`V(KLBj|XMhhy}A_!$197#2$a1hSY`Ys@6wI zp0B z?;@GnER(6eLYT^FWMYPCa}rV8+<^nTcT#OXj+-@2RP`%hW(3CRsg}v0p+o#0A05Pe z6vLO0_s+{>Tq`mo8&#C%tFp41c2sh7;z5tb=a~vuLI!beY65LNZj(GdjKmyqp=9L+Q_=XoDC_hINvvY%xhy4K3zSn&c#7%PbjDG=A^y z;~`JR`gA}_W>}NXu5Q{nIw6UjQjQ(oyAw4vwe%{a!xi`B2r^jlG*fX?0v1nZvc9R6 zX{{J%kO$!%Wknm&rA<@kQWc@iU~QVAu>r9$U}NBM!ocIqU=5S0sA*&}`y5J)WhY2) z)r=$tWM;U4G5$S5hNG;wkluqnR5vs;S819FALAe~&(BK7ElNO?y;GQG!LlvdUAAr8 zwr!)!Hvh71+tpRoW!tuG+qQ45wa@;}y^r^0KINA)Gb1xHX3P;|2vKMj-eQv#n@ajc zGB93nSzonn71e;6MhN|!vW)U*;NyVF^$We}n4M{Og>{tHrt>A5v92T*r zoXBe!6|Qcx=+`(nKJFd;TeR2+<05^!PNP}`NP)$zC%ME znqg>^9mxyw4v;a!fbSd2EA#99$vu7T8O`kD4K>jgig`3Socj^lQlvwZUhSXOo#0{h zKh+r~HnT^VqD>|-6)Hr=C8tCk9hs8p!WEhsVRWi=QXIN@xMP&soU;6Mtdq|sYTp#!+*sTq0l7YkC0UmkP}-ql1y?;_u9i70%# z{dPXqbLZ3`y=h+5-C;d%ZS;Ca0kugMnn|Ih*3o;~4UXh1Lrr;-_tkRNl%>5KSK=v~ z_89W8Yh=6h{Ld>_Flv76*fS(x&v-Kvy@8ti(GSl*u-hLh8^haLf3*r2zUmd;I#+kn zIQa`a>ah04TNy=qfRv zvyCe)9y5O}w6(q(LkSkC41<5V-ONNI;0jJ$Jj`M7@1(D|nBPCO&Bf@Sq%9*cC1Pu^ zsQpZdec@ewv)u0X*Y-E0X3+Wf>-cwu;i*?d;%V>fY;;zK_F01`1K;QasRbnrH-leG z5Q(u#QQqE~i5L~!V4k-pBP(MF0G%$s#+rJ_qGny}I@%2kHrsS%H|xRJcy3bf_r`_c z&pP=<|HcM}`5qSTBH9qI76NC3lIP-)AMXt~<3y$Bg+qOxqKgFw>l13i{~QOuf+CkB zdK~q=`#|ikkQtwej!H!BV5srYSw3DURVG_G{`!2l%Zsm5otnoyq-7^=R#KT4v6}^s zaz+y_-~}0kO!5H5$ z%${_K}v<@f5wP8}+80N6uWL|u9E z4EJU!8!b>a&!@$9=$VrMrw-1V>iabT5ibmr6A;otrA}oR;Q6Foisu)Xo zOCcM#UkgX?U0WmVXh2*p%MJ7cVwlybtakVD))(0)^c(VqfHhZv4h-1kJ1%nJ93{<$$G|J z#4v#fqrmn($fKO9o7!8n|Ltrl<1=>1fSl^^Y~wN#A`>+{CqgDR=Q@JI z&F_0g+?Ir35(yG=CP9tSWdZ|7AQw5?-LklHWQIcM2@3j4b`v&F7v55!(CTgJNEPnv zS;H=G5CW@fDGR&aYha;G&6mvabDD9qnw?->$Uqw9)FPswqt8Q32lj)*?Ol+Y%`Rlc z7=sDOnkwxU!Li@tGcvh2p*TuOVRjo~Sls5Bo8lx^nt+Z!=|U6IMhMV|EXdE38D#;yMOXdAOy*S`F!`8wG z_f9EgJ~3S105UxiZlI3Fx-he&t7~s;pVVb-iL(hTmP<8eDf{tFy1Q+(nU7*wP5X+P(Z7K@S zFHk0e#?F*cF`cKPnOQBB2ci2bIFZBm3ut3siWVw=}Vrp8>1gDJ9>vS-2hfkypF!SK;DE9g=N!8eIVtb^d-AezXCM2?q|a}`8Dxgw_2 zfy|SX9PI}NIJ)FGvA{|Y>i*K^PDQcRwK<@QX}H52YX=7ocQN>@Ko(uOtf0f#A*T41 z4^TYY=v2736MppVMh47Zf+2*b8o0fBW#&f$s#pf`e7SDsm`!N_j|sB22t1o?@*1phDCLS&CFy#dq>%y0RLv_qb$1Dn z@*r@GLaeO}Fvw(?t$!>AF3|k3%aJ5$9CUO$x^fsbbLNq_Cgq?aT(>*Yq$i zA{#O|p2~)Jgxd?eXMf3=Hm!jrk3@tn5ISTW7um<^r*mFKJ^oRCL%CfU?ZmZ zV94nI++b{Ac$_dKvqs!C#{cN2{4w38zdm1#dQxclzKpD&Xa2X*e-5wP2u2NNMQD_L zJ0~{q{|y;-ZioFQ^?Cn)H17#v)F6yNvqb-&Zg}!AYMy(@opvs5`D-yW+K$)wR_i{C?*KwQw6JUl9`aKC)^)EKp@t+v!cp4%axo!;g7)AWHnxr27CpCjv;Vx#S zyu*43z{15fL2&UEj-}+gv|asgSfj5AV~!sc8OiLaZ*E>x!`rsv|dHGf#F%h znCYdA5H!S{@U>3<%lsoq2y0=a80OplKOxbM3=Nrl1;8lIJ|1c^r zmjq}EtU*l$7!W)9dB&&Be+}nP{u_Aw(sx|P6UpA-d3LBLG0gv`(LXd5JUUNicckK^ zO|$<@JLvaiV1kC``wk0o^Ew&w(?$*B&5NPHxt66+IY@SIz5>pg1PNTMfs)k!YZx%P z$sekoyB8M~g8t)&9!QD?&#OZ{$o{`qb0WXvKMThUgAL*o2|Hsnx z!#za?H9t588I921-rjXX=jL@ApYx1}$IsP*$&mjO6#Z{!HB4XuKPokj%GBEy78bqO zb{z(IaaVUQxBEj351-H5;?~v`;ZXF#ilB7fN9krYfa9rT>iX;d4MhJNV6lPm8NvLZ zQl)L9-zXaTQ)smqSXhjs4hAJUUym}~4wKby)~u>`2hsIdlq#yK=p^=%v$Cv#GX8*> zz(+`fis@icSa&*u)zgg&xG+B{Zz&oW7@UjF=RXHAKQdx`qD(!s9=qM8r_aMe@c#i3 z2_`h=1IY^#G>OrKq}c#(&wUQELNrzT>JOmD;9&OF9mYcF;(5q&2-;qi6A}_;C~rGa z#fd_yXeIO-93H0UrvKqg3W$k;`+>1%2I?p&A=TB_!@hXPE3PmzGY8J%w!{5rJ#&7+ zY^);k_fJLSVPRwU&lZT!&dm7zpuH07r4uTveICn8s;h^WyPjB8)YY-cq_O{w9UPD- zDJcaY;c8-+XqS;PLW{+>7xk%t1jhY&jSfHr^>A^CLFye9-TlD-*NqoDyhDQlvUUEL z@sXSoc^=q9s;+tH-L75|cNzf~<)a-rGQc5%OWnV)K_lnf+&k{7H$f$UvuVT1&XO}G zhY*$TUIaX-G{k}sY6+kf4MpO`#_%+uy{3JRO2dfm{jBmo5A<$1xf0AF-rA9YS++hV z;PDm?Ti3!tL6f%9u{sr8_OtJv+dT&7fAJR_f4W?UWhNDq+4nh_A;jTy1o8bk_Kiu^ z^?(cx4mOpa6SSMo;Wf9k6f!g<>U!V220OH`*;rXw{;$t@V5p(QsIXaY62wQfF-|}W zGsod}nb79;dZ~F`5;H?ZB)4fHlJXB4ZR^gtjxM3bsL`~yX=)4FpM+Zfvy(wy&*@zN zyPHlYqv}lbW)I2bg%>p`L(E5n)GW5ik+qkqq48L0rc3KRTqeEkZ{p+umHXsO#LkAt ztxf6QtoC8EXy9G_vV&z?0kYhwTloxQq^HD174pu=%O7eUWN_E1m3E3HIMU=5B=T<5 zw^5$6cvX$wROnn4LVij9gNzHIL?>2LRW-q&y%eA3|K|B2(UgtK?EX6M9{T!xpWOJ) z?0&^QiL13*ru*o{|L6r~_LJUi{BHV>$D1AO`6*^f$+tTl^*Qx^xBKC5@9|sEh_S;X z%TrmfS;D}JaN>v>FtN8p0v}=FnQ%;*NKTB}WR(hXq=0o4-3o{JVAyThZj$?VgfVo3 zkUo1-V?V+2WYA`W06?BkYg>&e5mxEu0}`Dpo%a2@7vnl~;<~-4pU$tVo5OkQEB!)2 zCJi?i6#P9lK7KpJeZAwk{f_q|DHnalfRV5){!5lE>_11n0ueYfq4y8*h5Uoj{eEKF zIhK${sSR@7Rk*+u70FyT2#ux^4rZ3!L8?IvjyeY^7JR*gqx0xyWYCSoK%Anxic}FX zTDP)-3-(6M21!fTbAn=Z@G!V|rAPZ6><1y3bYVrsgxAA6wBAcVm(1%^bN5eyqb(*m zHls3q$4x*jaN`yDdHdUu>H^iRtpz~ihu6wi*S@j zaV=n)@4!SeG|W9i`y~o6D}}nCzAfbGN-q{7z9S>kH<~!T5u>*i7N49d-<)4{J ze=wPaO7H13$OUpQUjC}XM?dqk~m7EbY*3gwZCOAaWRTsWl`RJ?hXK9x+~{iiO3MK|FYZ-d^0mJ`U|a+ zCH_qsxWA^X8?}`5k@_|$&|XPRio9HqyoC;xvQ4*sia4v1jx}Gld_G(9m$l|Vjg9SM zpNc#4P6jqvi;wlCsi-d#u%~*PZ4(ipU5EaFk1Yrin3>{}(rT=c{r7dnwGUBK^aGS! zw!Ju*loM0E#nF$8y-UjMhMsJ+CYk$<@Bl!roT<5b)M^9R288ReUx$|P6{mRNiiR>M zUk9(mVT4RY7Tx)<62)E7RCUpD(a{$q0i?GHn^S>nZW^DBeTUUW2{k#L%grh%W#l!v zU9shiUrVwg*VG~s3v0JDi{}>=zFt?0SAVX?!6+EE*Zyp2o?=E9FR=K3YM-up>ZE2z z^PR_2K`f`_wJ*xm9EU80ykTj~<>OLBN%zEvtf5xTItT!SNinQs0m4Q%1Xcn~R%6PrCgRmaUcf7-y7lw*e!@2x1WR8!N=svzNuIPGwD$IDsg=jI6ZT?;!L zIB?1X{?^XE&EPC(qxc-cdRHS!jvh8*rz&W4fa;JWSdf4nPwVtdVlUetp27YzGtRqP z6V-0Wi~x}vOLf%D&k-!cMeFT&1Y{V# zelnx^u`ll%1XwPMOF0>MzwQdvtOHCoqPBQQ2eIQP5_`LSKe$gQC&PzEP8343)9LlB zj;kY1a=z@ADq}p$?H%*KBNAnuhB&-G+W7`9JZP(^Ycm8j)!uPUA;v;N$~DBh!{p`) zYH6`o>As+B0{54+_$)H~0#buPUQ&xqzUtD&#?Y@ zh%+v%`k}3{3?-~~IlMBpfq^0Ry*l5Ik!JC^g5E3dx40crCCoD+_Lsij>wRE}$Knew z9#XHgJtGu}dETzGZx`*$QOI@PTRFkJA~11=!1MDN{i~zBM_ZgPndJ0Zj9+47`9FRYczrMGeSp*}(gDKUJ}0;P(v$pC)~qm| zCiCj6po$^wkZj1cGPuK+6?C^P{vH$08#;u5q(BC88n^ zH%@$YZ#I3?^$uE}Cx`v3C%Ulua$~cAbG8tpva1XJU50!bqr%8nxgD?sLqfoU=i?*S z?;LDJ*gLjVBGPWaR!d9t-mQp~@HDjFwHO9wd-W2%U*`XEYN*GIU%>g(npPw#26_RG zepV%-%$+3jn*3T!wh7am$QYIZhn zh1Hp;R*+7+4b0`{W>`ez&|>7VB5GdVgb1F39}nPz!J`t-$=d}+F&<20u$ThK(bEiD zsjeQu;_|SM{0|*H*eSfao+@mzbTHdfUW*gwTpd6$E4OlkEY(|PcIVNRl{oiU!v?S7 zPe$xBoKM)ngph_xX^ZzhoCgJk&#RWF{^hx#rx|~pvXSCQ6NYI8#2E7?fHhcm)qKQM z^hqk8Q>)n>n^hFuAP>Ro{!F%Fs{=Q68h<#MnpdNKG-_?g5Dpx@N&?AF#T-QZ-lKyyi+ z$zd>-9a}#8&KH~CEO7WA5FXM%jgFuvc2(k9R>y1%oC~!tI!k->2f&1|{SX8BHiETcv#`r*sd>Zq-)i zy=|cpKM*|99Da{SGu`ow7<5PdQLBK=+QAfq51xHIJEzyh-s(HnovY3&I zRO_9SJ3S)|8CF)5PGvJw?>W-48dSkI34J_;^tR-mTJl~Yvp!(^2krW}wMP48g)ecY zJ^*7TCZvZJ_e&~|cd*++J1<<@bA(}e`iOg_xYXn-k<{rC6n=7^mf$CV(96u;z8{rT z?8)|8c-rmy)Fnjn=%871yKzr zrA~N|H5R6!Na^uUUZY({Z1RGB0qrD_K#t`Y*< zkSqd484>;AG$LQL0AG_WI9Rb5yf8SO1F(zMWUCQbG(?7Bp29Mx(&;_UX05NFXlBHE zWzWc>q{VKDt6GL;gQMCJW~jAnw-K~u?XO$j_ZW$8@4rS6tw#NeJjs;@1G9cx3#2$- z+MEfCI6gU9kTw}^l@d+6bQh?@5)(^OnIxD$krYj<>8fX~(Mr+voGN3@L!SkMk&9^v zbSpS=L0gBz8wtHyyD&y9T4QTCp~ETb?@|~QXhVYw<)ru@!<)JCYW?-4$B0ww39hJ& zKW{Un#R@GJMNgMJIRD6bspV%uVw8{zmc=QAOl^#yu}VlEia)b9nv;^;v^yQahUKz? zIJW{?PB@^7C8ZjwWoTzv%$Af9E-&%@NV!4+MpaeRw*+Z|)dRP}qSsvsBGd@IQG%h4 z5iYPYn2jc9uw*ql>u`!=b9=&~XDG;sS#4!U=>9-y$zxZkFHm4nVi))qQandAQgUMy_z_Nlet>P%!4%|=_v=lQA%Uu{LNx@8Iy}_8#D?lgVL~^|8 zk&z8h3l&1#nkN2UjCxCbw__6B1$tduS&4GHTOHxEEuzZrk);j)zdppA8tj?;8<&-V9~hufEbD4NK;$n(os?>;*E``(o=UK0BsV?@&YXr z#1!S5!UvzyYM9cd+^crnmJOV$CPxM@4JX6B&zQL3bTSOs9A3@7w73}co}eYJt-Tnl zz{BcW-Ff>)ffDP-z=lt+Q?ROQo0+dUP>>nYx}L_CS#N!S7zn~V6kz7-&2eQEij0Jb ziMj9{_Z_n{);K~hR%r4h!fd+I6)txO^?DW|KXR_E7_J>B%i*kuZY;)&U zEi;2c!puumpVRsOIM6NOWgCpl7$!gg?_D|(1kZDk^gC*gxYjEjpjESkPLFVer;_st6hZ@ZZxEW43>_aETv^;tjBGXQhdHRl^51OUZ1_feA*jH{>g8bI-K1rq=Zz@Q+v%7(;`HhRgacq}gF^VvCc$Dw1 z*TFe+B0jrJDB>71soODET?R?CdSbK_xRyObBazm%=>2lEV3m?1GU0(S8NH9xsg&n2 zG;hqweTU_z`zFS@+8ui13_aE)@hCJoD{a}SN*slL+M>Vz71g4dl(Ww_tOc1!OSeuP z=2ev?9Q|Of{Uo^Qy$>^Q%1%=ye;X6a=3Q1+x+M!4MsX$-vGXEfVNp<&*1m@GQqXDk zH7ZA&TmEW)3#qX{A4Uw$F3xdBTP{`o)9HfCj)cdea6?h#V&*jA9|Z%|)Ug~2kK6kd zec}1bW(E;0)qQ_>d3EcU?KjG_e?n2Yy zoXknFHeyIM<8A5MCl;&1+_EEE;vc;MK$%(B^OC&;GIHlnweSx#i)iP{^T-_q-B_Ui zena>;uGSP>g?199Ea9dPFx`K3r!XS@7mWs}x%DW6&lv61 z6ITli?*u-U>0iIY#B|C3jgSar{2Z^D&y!#Q$)jMJ8j=N{&jbKjj0=+MV-^5zGw&LS zxrJK6pL2e1i{?X$kxllUuscH#KW;sk&N7n+2zSuHP-4ocBQ2Br8GW=2KPtkLUK4E;QkVC@}#;8K=2z%53XAfadE;%~DJ{RbBgHyL0LY_+NME z^I2Jy#V6{C^pd8PoARk&wWqALXi_AbR%{4I7bjMyH}rl{C2-2;c=nPexf?5**BA?> z)*So${}$Cp+EFA_@WVCvsn!#Az)QRjGEZ*+0|&qUysj?j#Y^-MrKP_d8Q5uR6f%+s zj6mYzMGCCE($&dBs0jjB5~|Hhk=!EvR5|FD%(;dGnin;5-8|ZW}zw!$!sAZKN1PWjNQHY$0Ee zaF@ehsj#3De~%^9lM#}W+bu22x#p#ODfXr)K&#LB@D-3A7fc*`qt}=6iLmprP>Vru zQ2e1>RULzqSBNhhv70qjofo`W-~MVcKugI8Q{7S1`Zav^%>RljLlvk3cc%#e!WyLj(-qeQMFTIO``4Y^MXr~!dw&3BZ@+q5W zIcNRHK(iL(>ML<0d1bEm5ttk%?acus{YLS;k?Ue$nCb783aY6)Z&_2KgmyvgJNS27 zCeMDkv)k+We#@WJCmvRWBFJtxc?Jy%Hf4eMx#t;XqBasrC(i>cNIh>xpYo0M3E*f^ zw7wGTL7z_?oV!rQ-QniQncLcv#F|(R{S5~onDA!+M+*g$z6zxOj3)8O(e`@nCJ7i+ zH#SHG71Yh6NIX|+(3s*gzvQh)tMP(f(msV&#UDQ1AzGuHDod)=Dy4c>I((k+SvzX4 z5I`!(G{kSJEMItzozzI(1}oyj7<)5*koL}_$onUKa=UnJXAL4L><8AsLXM3N&%5VrUCtOG z7S>iQ95I7=MKr|sza1;~NexS?H6R}f`$S6Ra)x+cVEsjx|Bw6hrc}pAoht3>;Kp|z z;P5_0(L0Xu|I9NIj*Z__P4+rAG z9Tr;S>xvxR-TQ&c_nXJQB9O3SQTS5>GZW+S_>xvy zC%%kEc({}g+rJf3+wEiJTTVeUudkRb7SQ!aTSYx7`w(;hF$4q!7?YWNvUX#86iht9Y65UP%xEG)mZ)vz|{pM_XqG|37yIS{+~e-V88`| zR_M1lKWkTSj!uBVtdl=Y|GGyTWUf|j2?_zWg+dAjK}}jdZfrT#&W*De`m&=Jb=^l; z;?3kXQQxfeoo9@d*`8~}& z1S0OGU|QeZ9XFp+rV!w@iFeYEOo<7V(3HQBcawJ~V~+v#Z+CbXXS6zfSfpd$r7buw z?FO^oPDe;Y5ejBq>Z*~lh7lYdF9>8^Ld95K9)5mug>W94{HO9#QAQparhG_^hY3s~41z7mt>~>0Qq54gl( zl{?*-(9(G(83p=d`4UewKCssv_c2WFpBHBQMpR)Wp#N?jm-RwrY{g^oNR_Pd;qdt? zjH}U;JGF_^RQJ57+Q(Ya2ERk$cVrYGs>ayfx;BE!lSdk<0ZAwz34xU%kkZ&8p$bB< zfizxqDaeS6v`iD8nZQ{mk1VCO+lK8;kQ)%IRh+~JSP_ltH zd`X`V76PVN*iFFdySAr+<=(%B7CDpH)5M7A5Rvau$5!Hy%4&D9o0)IfX3Hua01CP5UAt#F{E?7pD+Qx;r3T*ji8JtW@h5< zJ|uL~)6q$X-7bqWg+uyt-2&i8x#pH46IT6iU-g>{8q6y|+3h00g|EO;V6|F(BG&%1K z9iC4d7WZCesL@c4^(OsEsk_vR$#w4kar<_*1kEnd$&1At!{s z{OBKOC!E@h!*w*4RW-szINfQtsfluiMkq#>4?SVEu)11$fpFNYuiN>&<>_`>n0j-R zX}5P;oNLNgAZD^m0dXA=N*a(N;{>3s!x*n}DjMt=MX*^c;u%C-8XJhiszldua*55O zS0leqhh$65fDT+Bbq*2Ih|45%3eL}Enhj+l*%+=*e>uAT3M1ee@LU$ZS4W$d;232l z2c_BGd2p5eI~=6WG;@eI(fBeXMsZa*Lu90O)!*2dkg!WbVE1>@}w7Y$H>!bB{r!0UI zRksGNHrox3`gf%{3712Ju!$o}WVVR}N$ApMA;}RcAk6KS}U~J2Gf;zX{qnlmLWH~Ws zyO(m>{73XKnPJv}=0u?muT&E;+mDNzaV#l;k|W74d<*jeGN<``Pd8nJ)Yj=m_b_hm zaf$1n0TjSS9R=1hxaii-V;|Kpn(idrOIO z1Ag{P6 zkTEX4F-e)(%=0cC$RFdg|1S#@;qJh^d*lV^r)Ni5q9`Zhgp&MSt70#$i##)p|-vr3)VVfQQX zbqgtlr9nO%MacO|x>Apgi+rXQz;Iy(hDJQ|AiprviX8R+W2BKRf=3xw{$j$zEj{Jg z{1|p(!-Di0OyU{Fc0ujFk3#)c@rnJL;OWC!V)2=+&FDjF^}VIV`x=FQqdtr+E_)Dp zzIT`mtIRYE_FSwPF0v50K8aVz&KC#^#E??MInQg~gtVutk zK&iMhW_i2e;#?dd4>dMAoz|gWWW0Bdb?Nvs0jkt@x3lEr`UZxFz}Is!15Q$$r6^ta z?R$eawXqCqGSD+vP%#C855r}m6II2hb9+7JpSXD2P~L0%E6wg5mPSUy(yQ@ETC@oKCyCQoNtB8;fk-F<~$jdEH5jsP?45t~JFZ6bZX6sqI zQ@$E0Fp%;T9p$B5mZM{0JMei^Vv+sgU)g4wB2kqi09qQ1&A9o}1I!htAC7;&bD>nY zBhX8;gbC#?u%8o2F#=V2OdyUiqh2sGsJ7>Mff)lxr{}bDfA4lKFls6!j{JxiWw!uI zrBA1p)S(eGd16q>g(`kUy|KAFI5_;?*&nN+;yIFFK3 z#Str`j<%M<5*Xa8EKe^xh-w`35X)V6wGJ)QOFmGyo_wIT+TOL?x^5Zrl4-J}g{44V zxZ_)R$LAu!((84&#?q^;;iI=1`@|pX9vNXO1Jplx=y-F%xxmwOzVx+tad0X;mFnY7 zVd(nw@g&;xNYP;$m=3gu!6j~TObfO<^wvAP$5}K9=qZh29DMWLttRvav5;}m*@a{k z76vs^Y$S#Cup6mDAdG2abMcW(qN9rZhJqiK8yi$${vJueH+_mBzG+o*yo$j-`IMu0 z6rh<+=csO=kf<&{o-f~aUVC5bb}i_E`;>~*97;#Xw8=_PVonq-dEugS? z4K7!g29<{||Ii6-@R7c<5nXMGTb3UdE4_$1KfmlR6%WeUY4l|D2E_v>sBAw`ihP9PKx zZrP>CadExp63c`-@Cv(Pbk`3U3IBz%{b^xUMuu26^5s~6Wqfv)4jZE95>{M7b1HE;##icY) zg7cGJ&AdjRwJ^-C3dFs^MqNSFk|Q5ziWmD2U>Esd^8CS;I_8ac+KNdsY=u)RvF<#A zg@mz3wO@>xIUf!|tv z6av1Yj%-kBX&RKz#fL=xd9w*`qG<1?LRuFE_9^B#&#t$wpVjZRQg^RPdgKi%huv|? z5WM|#;=25>z==HNPfG2i0Zx9T;a**%Vd{xw0d?uVdWiyM30d*v?SCLDu>GAODWO;- z36^P>0LIp)bm79<8R3vytTUNc^3e%_H}BiuUmX^fgTvAvi+!a3$tU2!!-d(|5q!Bl zo5hQ7&^sKU4Kp|(ASWhr;5RikB5u%X_72^7N8k^r#O$vsqG|uNM-?U<#|Rkd3)K)R zmXoY2kI3NKyU4RT+VzX(T$}1x_j>?>hFUJ92$23e31KI0e&xo1MmtlE&m+&`hVH?I zaK4CO;&pbjWxGxRs)wuXRD@Dr2BERny=0Cn;?F6D7?wLR;$3qm`XKE_*7s0Am5ri+ z{3zCt7>h2)PW)wxp736Y!K($_Kc`ZX2n_G9H>n?BZRs}YB~~=gF}1La4b1yPL9up- zDa;hih6()x)8WQ3Auh_1VhMnki@vu2OMRtL`Hd3$&I>V*f7G+z<1cU=2>vtq1?Jn1 z@AmF@Zm;+CZ8g5`n_zkhMDKvVG)no^%tT(0PJzGT-umVTmGyL$Qiezf0--y@mq%>3 zU3ubcU(eF-u;^;8xN&RnI>5%SFVt=vippJwe(E;e=6v}w4wRQ(mAlLOSD(-Hna*z( zX_yU_ftJ6rE^G%Ex9BQlB!*H3O6MD7hR#R+5Ga&C z8b$sl+)oV5N&db5!>SBpBQF&)JUbX1U8-o_kXe>9`Y89Tb#~K9mUE0P?cYEMT?G+< z-^?x`ZhUN34=qGw{(6!j6Bx^u=ep;M?Up+uf=>Qji*&WC*zu9ggi;~nH!gyl z3-RTe`@7YpC_z92hBC1_e!FW~#(AVOHE83{mU3juik;8e^Wx!kclufGhcCr>hIaE^ zCXWbuqeMdfuw3+xU$i^IFuT%nl}`U+xq7m@gn(FPW+tk@l1{rzUPBVr076puGatxe zaQV;o`h>se&$lt5et4U#LOkfG4vr)!vUE)@2=X}uqec#i{$?n?PZ)WQ8&F_i;K|8} zfUxXeL^GoT(XFji;Nk)EObTCwXk_@)!3~MS{ZLu^2)10-Nx1< zUrGiU+qQt|t^Mg?KSS)P_MG-W)n3YnOKL_GorOiBXN|SA{Cs60p-bEh?ftOn01dvU3MSpGim(-ig)OA6jhcebwR9ZwCON zSK7~eXp3DEB)<7zg7n|;NH}xj4pi~UIKV)&2$-0qJ2yHVZt)|BqH#`~`3CUGey9+a zyMX_ueQx)9@)2r`f#~Sy#KgqF=H};738l!CBqQ&~sH^|x=L1!Dy_E$Vbh%#ZlB(zF zLqNi%K$zv(bD{1EpQJ$nkDNCW8fw+nQIyk&iOd)?Cx$l6usI-RU(Vb>`gHjm@yClX zPZJ~{rx|k@!eA2*BiDc_eb1-6b8O896f*-149fCa(RQ^MI5fUyGCFLd$z;1KY3 zrhR(EnuGL=Gt4w?!G9Lo$ZW4K1Ka;i+TPK;=J zJF+yS4W2;B%@)l|8hMEOg)q33<^f<5*c8-knr)VMc}JQ5?+N+Kvxp6We}-M=(0}8Y7u@^ z%?dKHqnfvPqkh1~sv1Pj7+2SWq4>CaVs5`QL8WIlwIgBMa|8|4n0&tWyNAanxg9?H zI61-x(X-P6%$}}wQ3Mg#j@CS{H(h7#aDNz(yQ2J4xLds1QT1N$(39xYx4ZlSsa1x5 zeSe*^+p1~bGR^NfwASHG?ef9EXy(N-?L$xVO3y5=f``c*T?>8U@%cb3MQAZpZGh+` z!3B!*2Y3C$sbz6)$AI1Pyn#sQx~;7FVBHN_Ij3T9``}P%lNewuj2q&(FY@X;OgJ$y zh%8zEezN;U^L-Ha4f^?2(;Yo7$BL4H-<|9W2Pfrpuyue#Q!u?660{KNLGpUWW4l_$ zqrH(dL<(fhh$^XE5W7BxV?VnIlB8BQ;qtp8h-4@EAQOB|wsALH$T@(JuMQ^_30YNfV& z6n$R9i9YOAP`J2zimodrX^LdKQ5Fz6t?sJ6-N|by=s>CKeMoAE?Fei&vpcXGdpqTc zZ$vu(kA!Ob%Df3cU|*%vz>B9E_pg z>(d1<@58azfCydP5wTJ|LOlRJ%L&y1c3zx$q;3aD&DWQI%j2AOP*J5Tbo_#YAYKb7 zl3}%5)DOw`5ncUe`ui5=jT^sfYJ~iMxd5Ib({-$%osti1(~8`%JWwylS!F%1j=C(S z9==l}%umil#$Tiv{+Uw1y&ZIX22#6yPSfqwFI$;$aI^SI6Z}epmSHyk|0CMGmIlxM8TSgK(3+2$;$ig=a?h)5ye=Z?;7 za`>%$gaZ%S8xkW}q0@*18a%#(b=KG0FRs|-NK3>Kg!_az*eE<~e6|IOAOn0_pAvs+ ztHn=+y;kcZ%Q?1GC7gBGl^OK6Wm$bofCkw0jwwMwQzzUf6q_>K;o-ABudXft8{Z}7 z`NV++D-tv?*9T%erIR7GvS())e8>D;=$rc+Dwa%YwD;7|@XEe*`gh|j$a*$Z3$U|O zmv8BvO)n_TC@zKE1rlspQW8se*3ERQ`z_wZ@kgiPzVH_?a5D;#uEl3;Tpn)@PcMon zv^tQTF}h?Axf9beJ*DH#wO*3Htsms)#V`~#RA8EoKnk8feO!uK@cTcrU+($8d_@GNV*1d-9{v(y7HVzN0RE7zNQxR|1JJoS2hs{(HzM5!oN>nZhi{}%db8>xXfgNNPG@5Lo)3WmaA`@0!8Nu&huG}h^YCi(*3lvN^+pChZzDa7i0_Kri9~qTKx3V zJS4b=G~SXO2a)k5dpku%4hj3ye0(XJ8v)%WsL>aPjofq8k)+rpo`SyVawBNq#TT%26@^-et=1E44UK;fCECa%ByWhMz!`)k-*LRPNl%6mOoF@Ii^ zVrRJhi9axEz@dbsx18tEY( zK7G2FSY>cfy|PijPIHQnw?uQh6+nJK+JV54esOVeT9z^IYr#qC_9Tf6jMX8(HS?3eHSr zWu=0NCB6@Wg_V$y5b}k2vM0;$vHaTCwUiV{w8jWip4;TuJ0>CQ&M>IWCIK;h4TUO0;u8!?h`o1ssxJ>+Kh=pLIxg5{vq`$H)|g;Sd~ordOp^3vK7}i#J+_ga zDVm{h33DLKfybQ#)33(!(7TsjdI{Cl)r#6xOof{^ZBjy!MZk)Si&O02Vm@qdZ&!q@ zfBBbxfgmRT{O3Q%)~#D{`}S=}xU@tgN@S1EhCWwPWp^rd3BHZrBI*|LP5Fnr_LT5qZ%bqRjeL=BBNDR&bY`~txwOQU0vBcPRRcc$VG{83|2;pyKkh0W?jT(SwL znTPQz>(yLy6Y<-Pt*;d#wZQz420}E5)An;FVkZ6X>*q`hsSLDYQ#7gvda;cQv-hpj zDEh`0c(mSoJeRuUKKNidCN&k*PpM0yzNWmNQd@Kc9D4d3K|o3AYem=#;q?Pr8-h)$ zcTzjZO@WtKSku-QAca2uPaGQoUi#2!K6+>3|3er0IS|O$@M@BwOZ^%(f01y|hlLM? zpPI%G`T7|O+N7Uz;g?E7thJLh1R*AV)$Xz>X%7Dp=0KPOVGe|f0}C!-$)YD@q5V3%v8Ys)~;QvEP^7u_;6xEu^^8x z?9(jn6pkFHs$s9~hHLC9qOzZuHeHU;^e|m29BOYs5(TTnG?)EmW)UO8XEu=uZT~ayuL@061ME6AmOz; z;ZcX?aq-bMp_N&G_3_I0IqQmeq155KpHtSO8uvYNyQkQQOt{e3&p^h;gv$1_nI zniXTFRwn%~S^!Dr{N*oy`5rQ}fQrg-5u{{77N=6NeT!qMXtPpNQOrWM(U zEJ;%YR2>~+F#)tsw370gYmo&@UV-#8Foha6Db_??N&c=SYMxwOgtyh@4mXGJ6}>7^*e}w&nN5U>_Wyb z+}93kN>X9sOGOjCdImqm>Dri&|Aar1>o8ox90+sZ^TmNFR>Aq}r1)GdTeeIQrbJuy zc_?F_+=jEc7tz17o7$M^St>$R3c<_fvrLYJo6oi$sGFLUv95z$@FQVN+68T7@L{bF z)VF{?&d`T#&}qj_`iQ-lSpY%He^kXwq-fjeY8dxS9k%3kkHXP^2JYcIOq=u-lKKcR zvmO} zG*7-)Ko>0XliV$Ru-#~eyLSYROAU*h+W93QiR)9X8%#$`{A*_IokOGm(uaM{SgUK{y+l%y%y&3t4pI%;AUPHt^21rg$_<_8Q(AG4mCLY)%H z=cQx*Vkkc3^hY6}+Io&cXH3V2#Jf06WQdm@?J6ZO!JjH?F>vhhp`oj@6LATN(9*>3 zE4_5_FqxTtrN2-4FG8z9Z%-GDG_eo#b~8Eh2r>vcVKL9I#@P681|&a8WBG-0v_!buuzjk}y1CWs+|TI@os=wevl_eMm`7M||9U z46vEnTulGFdpcojX@;SgnsKj#$nEt^J(d7{Qar|LYp4V_!k8=W9gB(TM@$RvyRG^* z9aAktz7HNgMWb4}@lWR51^Pn8GRyQgcWr=?7*S3-7mG8hKWF9Q;$nRE8KDm7ApZ2z zPtV$+)@rpXPR!!7B_92uDB@@uth2C+sUlQn!}yB{LVZQ*5*~!Y|3n~d2 znM7LswLX1~;*>7V zgMsvO`kKal^h8q{Xg{fYLoCt14O2MS&t_~)MWfUu&xSuoNfj3<{pws8))P&rnn z{RM4eeJZ9@ks|j}ioa(~`6Gxo85?pBf_(<0i2?dHeb7>m%E3Nlnat4fnGEGKAaqUl z4A}cm!QOj<`SPqpV$Y+1uckj>4aPd&Cva#yK}6~6$!ADt3N!*J2-f*MRi0a4K#$L7 zG>`y-b}sz4t7{dx`gTR75=2r{Re?c*{Ni45=?wn+U;P+sw`^q+TbU6lm@ZkZJEMJL8{o}QP6!u!LoQJcs6~m0)clWo!THg#^aw=TSRp>i+0TC1| z^$aQte&$|)oA-#C7`t*3LsxInN_7F6^a4aMrOi({S5IM?0gw{cmdCIU(NJt>HT zzTJ-GJ{;wwRd=Nw9=j)q8YZ49kM;sHZDRBM?y+}rVXk`MsIQL?9Gt@s4Re7_S)?)1 zSc$on1E_6m1Ru3FD1j0Fu917G)rDq*;jjKcj|qDEu*-of{oOd;*%IhwAv@1Yjj5!! zF~qD>ge$37tzxQVXDi&@Z*a%n8?v_Mvm)C_AKp3e0ZgVy9QxoLRMoejrKSq+e|QM? zsWAHHlOWceTUw5FtIObYjL*$(Vu>9(dBTWv`UH0$Y7a6DCOT~2 z$0?eK@b2Wb_7SJDLkpS^KNnExp_H9pDdFU*MaGI))VT){WsR5+jYl9)-uJdcH5k(K z-jAf64;`ig3S|+NZ!YY5J*`r2NU=nYGOJTpln+(rfE(S%ho_M>neprVeQe578FLBakQ%$U(6m)hvcJQKJ9}xG*|Q!5kCzP z#<@Mt${3qi`GoHxJejrQ8d}cHXz3rHi=$0mv^u&m#`{}0GQ@ixg$~;&MA%nT`13ud z6RMik*NOMjZR6%a5asnLN?jgD7YxyB7`>X$-=lm9M}bBE4 zZ3?w(8&|JDO;r_2c5lVDts5vr)xo`amBQC0%gS))P7UfCo0!a+kUVbAL#^#FMn+-n zhE3>eZ9;oj52AC^A8~JjZ{FE-2R(-mBJqpgfyQKnh4-obfBq%nzy7;OUb+U|KlvXR zZCCQ>yXT64mCgx6gsAxVc;%>= zapWZk?-F4sAfqxdmzS60-FM%`%P+sI2w=}V^Nf-tTC`sxY+0h2l#{y+*r@uCp~`j+ zbEiCf0$!?2R z^>sZ2{UqI81Hhej7ZS}LPA<$7SVF;Qwn`n+qG<3Kov1$F2>YQ5c)5czE=fk`(?$5j z2Nf7T(uIg)QK&bPCT$vqBKq)ZVFJbo==w=d2O6CtM2?TaYQ*6EzrKl1=G}YYd*w(Y z(!1bd&7~-SuUa*Q<}s{%G8ISEUHG(;GnGy(%4or z&Z~F88tFl1#0q2|x&genn!Da^Si64)x2Y5#SaXr4Pry4&Ec{YR4l#~`D>BYRRV$_$ zf5pxF^=4}u8v3m$yV(aL%>{}3DsaB75%C%)F54*3-|{kPt)29%@J#U-nr;uklERcK zOsp+RBV}VA0Q+QEs%auQ`)&h{{J4^?4r(N%8qwsAMM5NZ`yMrJRobA^RnUK>8anGW zCR%=x_P=51DFhxrQ;DR!6rAlKQa^Xt%bCMdg!kS-75?$ZU8ud-&0Kjly!fSb0?f|- zArM}PNlTsqFHLP~CUYJoZ9i$Kz|rbxg zcnhw96VS!3Ca5U2DC#@RkN7EuRXM2W(IGiyHIm~^c(Zy8XAhL3W4IX^pADhl|5}E; z82V+Y?wj)cjg3cnEGjk`tCp7F#K}`gPKZHTRvuE~Eoi9g!rIjERT(VLJoArIq1(m%Jhyy$)Fr|`P;7&E-g{?!Ky(-ZUJ2Fbr`sMi5pup zlRYQTt(ni+)fy&VcV50me@<#*W2VPS^w;$T7qDa!7yIPU(2ycH$anFH$j{GLd=11u zYdN!OicoRq&K)IZp`_H=v112r+_-^#`}Qd*b(~xXybQTEb~9HTg&?)e&S_NPO*c#X zuzY;I?-xLL|&?vi=Y-dnuB!o)8cwQ>!SGK&>7QqrWP*338<-csWQ6oqwB*+ zSrU!@#t1C+q~QAPQS{yF!ipUPV=Xq(bmT#oa};TJB5+(xhFMX#b+Hd>w-Ze_29Q(w zAa2*}2=t)8#ep~e^HpYNr$*>S17fpuuu)USq%%zFtVheB3%#GVAYccw5+~E6Iph8wr<(I7K~gVU>#6>$OiK-CV?E)&>QODj51?Oo@;sJ})9X z%T1*|g%nXW&Wd`hE*!XR#|ZCp|EEsu>tf_yQ5Rf^YIq`F!p*TINYF)NOMwa(TBwnH zy9FP=(F{jQG>X5z3A;Nhuw+95RJjx&r@6V39!dP-bR6diX%mK(RLlG zSdZ1FMZ-IzuqHPnb7>+HGh>lzz5+KjGdo&(ar8XAR@K+2n179Tkas zoNJ~pA|p229g)-^62X5CyA0`vn%75CW8oOM!Cl)WR5+I6liFeQR1f1Ih0txb7_9ip za>P(LE=W}BLmReHMrW@ha$TXr&SaL)lukv--e1`G$4XI<@i)HmhYedIDuC; zXimJ$mqc#9kWm05c{Ek2p@}BhNB~i8#BOwJps{%=SPmlT+-X!koryhJdYmDE=$Ww; z*!n8){moqHyT}_p(*}JK^r^9Ey4p`IWk1UIx zUfw%t0lw^e=1D$6Dy-SCg@Q8q&wIA-*=LoOJu8?XoWD!Tm^tF^v$m|Hgd0`|qN0K~ ztISt-ViVKw%u~-mLk*#k&x+Mr%6Wm$V&r%VEa}q{(j7&|eGN68MJ40?dhIvTm5r!u zCKpqGg5#44DZl%F5Ic{S4X&3eV!@eszqA$#4YKZ0kk^=_ADI9jTwfOMY-8Da=n9rW zMeV&>7rfuy)HB*V^+6s)F%L=_oQadIq|A{b=MppsMFW zebb44LM0hh-T0Zk2}50abW}%Ry-ZoCQaQ25Ju%3P$GH+++B(qZRAE zvJRCU$)L!CHkBDG61YGQS)gNTpSn0B3R#E7&EL_?YEMncQp-~0MinA4Dt%TWgNz>; zYx43Hue}XweHt2jfdBeVFY0=Av`DriJ6VHNQ#wi_iqVw68UJw7j-t3kR1Z>!x!sAK z8ApS$V(%bNQtrIumv?#C-(#MF}F6%Ik z{_s2;9Wl6>5P{sSW#C2>E4HU`_}}mALxcoyKzLS9jZ^|PlEX|56x&;iOw}+-6V~EX zJT+AJlegx`E01nJy@dG;s!OgB~BB@tRu)D(4)tqMikdCinkaZcH-2V zwJ6z`3jG8#W;b!ivKVpJJT?qF7v`wD&)#HG&vv(?lK5l>jlu3Vuq8H5v9fs~;r6fg{ZOG*Yl{)h{oZH$YM8qo|R_L+)o5!4uR zQPVheOh05q(wa0pUoKiddQc3E;?Pg38LI5UlfSi;>ippGlw3{^@>V3^sqawhNUhcC z?OC!xx>rW~F3=~V3a3-oV8ya5RCEs`wknEkcA@il6HT$~Q=b-@>q}r_0&AoGISOY3 z&=}HifBL&u-K@U|!hBQfdq{{%#?98fxLr8{PnruB{x;L8$nqzImq=xbrW4KBHgp#0 zxdxm#U_v$}>=XM<*s?zrIT0D?jY>om&8~5UF-p!mch?}JOX8-atBQ`Xg-nlBNkMCf z8;8^a26xab<{=WMB2Q3gsMZ=`jmkjlh)j5$sIThBt-3h$=$!b>PGKN18>cd&p|zW^ z$4~?P=vB1a^09aMDmd3T@bbdC;Cl|1-K9 zsA;yj((J%D(_3+==?D_KSEHd}C0t93kdt&oyX2ulVRhzxTxT%!qa zp6bUdu|w#y_MKfbS9umvn&o9p3e)KJkk8g z=61zS|4yG0$+eAsSr^{@6uOcZsl`c$e(W4H9}MAk#4@y4wJ^t6@ZN2jQ8^knm*`Ot z9~m?qGhJ}H<2p{$kv*orAEQ01v3f-TDtm2sq2>(o8XD2ln2YW+-MINzr%<&FsQZwD zLsc)X)10@Sc?#Q~cHot-=2B}ohO+1tNF-)fAZ1fh8a`uG-LmNTd+6{YT={Y?owmiJ zs%i}`GwJl+aup6nMPt=k=Dd7*DQ=${LVnT!t|qo(cPc&Es8PGYF%`4NjHerhu;rUe zs6jH)+&PS9doPOgaqv357#nfUN{ASxDN|3WZ;*a+F*nsXnVN@&=rNRjQibULQ50Q@ z!qt8G$l~C>(CESrlNEVgW?c97p+tKf>3JJ5U^621r>*oWvtr;2(fHPXTo27a3UfW0 z;MRJ5-Bws9Cc&MlSu?WniR4Ti?`XyoDVeZP*n7U5fe21D)|VCI?M^rT`Em`?4-TOr zss}HZA4QX;9;dF-3n)Dm*DSH{bdonQ27K-J%h99vBD0LUr*H{#Ak2X<2j-ar3o2lV zPt4nIzpX?D78DdHK%=wipMhGgCDCTI9k`Cpb`#zozK*Z{X+8{btEoMidM6xcTjKXE z&fn*L{sB%L)T8i)-6(!B6T=uo-Cz&mxsa(NH{h$r1nkSmL@YHxBYhnds?;dlNMJ}w z1nqI**7YGeO7~FH(ScRFEhygX^QZ`vl84VzX`(TxufofvG59f^kE^xGs6TJRXk`nM zA{drd4k45jU9CjfK znHC-T&0g#_CEZPgjb1RtM8B(j%;D)(Ktq9q2?1$)l2UQ~Rs-73j^b$9Fk(`RkYq1H`t?@m z+ui8Qccajfibhze$x4CFX`{m`AMgj2X~B>a@^i&BJKN1>$cYJ880J8j1JiOqlnO@r zsrs<4raO5-1uQY~3EYDCU&(|bK2@_RMw<2=E+X$T3Q;%UM*eaaoc%|b$hDr%tgoQW z=0Ku8lFqX;FNPD_7b_zze0bv`zc700(<^D{D(J_NOIF0TJ7ABs!;q1MM9oTUG8H0% z3b^=uA`7?+Vah6F*!Xw^#;{`$*SniwEr>wQ=47O%7IU#&KC!7eeHW9{O$vJ3%hPbN z)r2R@orJB;MqH=qQk;V|qm}4?uNxkX3D$~Xm|rc0 z?Ku~o+qfEyMs!hdE^9{t z1-#7v6JG#VEHVA_M`z!1Bhz;twwoJQ#1k(Q0b=grvSio!3>7?4l9s9;Jt7`+(bjlz%Kzk--^L(p%^ z$Cj-Wt{Jr8qM1%bAE+wp0HUZV8X3DqpkHb=+lJ6gpicoWs9|JbumYBjw%s)rK2vKG zQ0Y)HK*NDJ*6&*7Mv0*Sr|58>LK!}ZK8PAmJ3$zS&?Aw9Jxr`z9|5zim0|kj__x2> zi66Xv5}gbrc>BW&+{zurC1W3oO);n5`{u%cEP+7EUd1sF689o%tWK# z{{;|k<#YKM8%soK))3U@c=TwVz_IEMPWm?F(=qtzj6A|Dh}aZ(5dljqI6F%{cz=}{ zaW@Rm=M3Vhizo2YEio|kF_e|2z9))+lQkkF((DnLqcp&Dgbe$4;y_0Yj`dx`#%LQh z{?;Zul}VdM2+JyBLlqM=&%khE10AKSh=XJw8bv~O1Ug4@nSN+F^iMXz9n*{ieIZ`J zOhrt|Uh#X2lWN=JK^ z6My)F?KpL<8TKoL6{w;1vB!kS#tdY

    G^-CaAO5VP%^JBWKBcI@C>d+eY8M1T`_h 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%0An`_lz z+wL(Lf#-|z9NptM`*S{?)ozwd!JC*sP=$QH&hT>=i8W;1mTLqddtu&bp$<{}=*hhM z@O*`LOdY6rHWVdV7ajLQD1-bG(k;Bu7P$|rjJ4E`3pMHop zhJ0vh3{l`f4TNxxnjDon=R#YaK)-wB;-{Y3!~jc$7KSTv&t}YF6s&v@ZDb2fOEZYK zzhop|l(Sj68fT~T(~Ctpod&5X9E=087^!Z^UE%Dn66*%RdJu!{@;#J1EgQN;x=+dT z^;?&S;MQ3hi3kF5D^ZMp<85`WB@^setl5KBJU#P>0JqkUGIXUS#Kb0L%v#$~oK5uN z0!_>LY;u-e6ldk^<~mgOuWrlcHlJm?%a8lZ)NiVC#4Xk+lrlTiitX@tY*Z_L{e#;* z>GJNHyC-#S6i#Q{D#Kw=g|gErLIwN0dG154*gL2Qcv87^`x1H!t#jQO(uN&>59w^4 z%gJKCoEBfRak;oGmfy;+wO&VfwF-D7Bl=t`y+vY4SBS77&Qez1yFsMc&B6Qb5Gp{!Z=z<6?11;Wr0m=NAB zlbH}}0fO>N*kf&NuCcj=!~3Q4b<g5b*>RY+NK428|f!mcRF9K zveRO5RZ+5niyuTx!eH{ZJMnJ2M2vRF^$6Y(#Dz^K7OW*~chdDpELbG!Z5y>bqF!U8 z7Re2faF62FDTYX+q)53iK6W0gYZoz`DhT5#Kvms;*gV#9Fa#XRHbliVoC@keVJszpgO_1BiP6DT=7- z<7k~ihI|SVy*(fl=;ZrKDgEqP`j!>AF@3*3#Bh9dyKOuDI+g5h(~i1Qo8kLL`<7{~0e8{^r45+=DzRE1ArLX=QrLE2Cgez|miEZQO%tCy2HQ^`MjzrW%O4tBmJy;{csl1Y zH&zps(vx+lQsH2^QrCET!1f>sml~Wl#B(s(wmPD-#dJuQ3*^?pw;7fTCFa@TDKL}U zUChH@CgyG_!MUtruQd?G=^=W%_EH0R=_OEKCM8fwPP9St`9^}r%3NA%ZAwDt`>BC= z<`cVQruUTWS+LoI&YB0nX>-EV-%7t2y8QfkQQl<5a(oh$Ml?>3!Ku3tGjtbhb{C2D zk}-%a@H-$8HIVFNIzPR@w@_UaL>ev+DGK5~OH*wl-um3w^Tl!2uB>va4kyRpcmtcj z$r)H1B-rqNB|_YDPfGXPAHICM5;~_*rLO87JBw%!{J(b%X^m2^5T1j%2Q%+EBy>oVHyF`qhPOFJ} z%pJYjqm9HUc?fsevyBAe+vh(<FV4SE>0BqB(JA+3G)?O(qAl@X35NzR9l2;v$eFfP1ZkYmOy(Ye?HHtK}>Z9Z)Xtl|h(D zk?|2k9lOoBRpIB|FD_rFQb6Cy*MYA`843e*L|az*gW-pJ%m+#P-xQe0>L z&WrbM!$&1Au(RO_ZQ2hr`7Ilkk?wjQ&Kh-Cs*z+Ul)&6El{*7abr1xm1eqOX(+T9L zTH{{%DAjNcTGf!XVTW!He$QKV`Ek++FXNtj!e$h#?8t70|_iK>{V z)hsurJ*;f^cbg?*fhDISB67_|E594%*^b`(-*9(xX3x2Ix8~V%GUpac=4FuB@yy!)DO(3{~oq;)WWv%~aGs0-L#1`jovorkE>qUy#%mSpF8 z-*$-@{hJb`IxB1H)xN8%sP?};$Y>n@A!2~~^%u9k_p5U^Yp(CnToXc-G%lbF6PBg4 z9}ZjJ+w63|g+2F(Be1KHXAV$f_pN%Jiq!4HZk%1DLu<7tPH(c)VtV$qoKCZ|n|j%R zs@&!bbEBOh=B^Rzsb_iwuN&J|IHlh^HuygB9eQ|q+G0u>;wg; z!)qWaeBupNclV~-C1L@qk7b*G9LG^Ha5UhK!z~0*8Tj%-H>R-OwG2aBh?k|waSB2!7@JFd z?h3I=J5?hAfrQ{q?C%;ujmq6&?LJ2!N73cUN4-dqkCGZfRLQlLt`{^yQIar|eE)H) zv%Q`r^z9M$x*YBcIG)9>31(n4Z3S{?3+W`4Gt9SugDbLPwwljy3YCu@3ZX7TLNHbn zJ3BLfl~`I+@R77_7`pG6abZ-w5&vlI6YZT)FaIN&5v@LMC^Q&uxO;oFB!^EZPwC44 zPDYJ;R?`}gl7kI&4AHVt^;az&`rbZzb{?NzWYhWe@-m#Fs#H#~?5K4giT_}ksMskT z5t&<4pQ5^Bt}*BIVa+xE?e*y8wz>Z|C$00cskvWp*tz1=ncrx^5~Q|VClIwC^;~23 z=wpSAqiEXH?S7r);k2cM;q4_o4m~Ya<8lGJ&Q9l3{JNipjT8#|B2CU)`<9v`QFn!y z7bOboo7`o>bdnA?N*#IRRcGn&Pk*@CoodqR&Uy&PlCVPGxk0Ul2#g$&s(nD|aMx^7 zE{(@!wFMyBFt}CAL@RHH1LthvVe$Ehs-c|Y`!{~e5 zLsa~y7f)jyjMc{tepqlWs57+=XLu;M#--5S9>1!%YaZNLfV~mnEkop02mwI zcgrkge;fCxcUFP`UnYx6-pK2{5V^&)ea>jB3*MqLK8w;@DApxKEXEJa+$%rZAOxVq zZk>;zQ?$+S{Na_GM{3MAed(TJ6e7*3RyJYRW*sJ}q>hG#a(UNVhwFbv8=D6O?Rz-U`z z-0d#=NduHv%*j-c`(@PJ3UP4=(_2*mS|;2Bsoz^tn{V2sVgKyMd&U>1SD zJ}JkuiyEInRy$DW?T*-dy~R#wUsEuqlk4njQF+}U zQ$;O27F7^abe}crFB8jD35`l&(u7*;jqD{M^@AYgw~?FP{HL3gdh?$tNhzH(&fwO# z^~Z+6`(Ic~4y;(PUv`sw#4$8-3x6WGrVoRZU$^{?`_(N3C~uejNE9e%a5aVtmjN;4Pkg*i!n(nvNmpEp^0vIEf`z7U})mCjf#oQ%heHYpm< zk6C)sJ@Xh$4R|QHD-d#+VU{&ZU%N%gS_!<)CX#h}ZfE~o6^r8A&8#-Y5+6e$#~&q} zI>)>2A~6YPZm_GzFm+$vlIG;d;yvk&Ka9r!-a_HEg}sd5+|**1V;U1 zrZjn05rJe>TI-nkrvNBx$~_opn`E=I$32Wa`J64vNo}0vty5Py?a>kAt`U;~0{>5K zuDl%cM*1ncO;OgE_!0HVJ(pI)M`*xhrK(lOW%Y4G2PtC$1(}6Iao|YSp$8%3FXz+i z6)d)lZn0Mvse6_&S6HJG4(kei+g;P~TO=d>4W#oHZmt)T?7TP!XopE3!O#uo*ofHK z1v+a)hi=gkvAH!nSVak0Tboj)Ihp|TOK;7(pR4GOr?Q=MHq8RdXcSCQFX_>xx828*_AR?M;0g<+NATyIgV_uVjbX#83 z+hj5+=sJMm*jqjO4RuE7#S_neEjN-Pn|DvmI#5Ao?FY_2pv*l5b` z!scB_2{so}OV<}_R2tO)(}cR^_abb*wU!8$kHN34!DNG1-kLUbHj<3jVp?7-i`m&C zn|vu|r{i)~Matx^C7ig=StMmq?g5H7ERY!zFVK<5b2ur12*`{ zibz}clhwx!O)QqdmB>1CWhpjENHB~ex1Kp$-EV@%HGrg?=`jn9AtKi48OxjXO8g!6 z3R=rE2s+QQuj9!obg&c$lW-Jd&uwed$`-2)w0Li&7^{F$xGm&@ir!*Fce&T0g%o;< z4S|DoCgZsdwsA5Zk_YJRXdg$z#7ecBI`F*+4Q;LDLEJWL0NG|%TU@KRjr+OQa*~~2 zpA?HS6a=IALV*hryho_&UJG$oi8XOU3@>#qY~MaoxTWo`jSPp+T{C@Ne~jNnKepst zt-@CB4Kg*jSlB7!}F%7hL?V;@%MnDyvDKaGY)i>I8u>-88b-3Mj3q7a4V&f*J zfa)U9l~^ao$)s?jV$Uc2fl&eU-$uoz$ezQRxB!pf*iux~1#W+vNR51kJP4ML9ViuR`@{N|0y-;WhH@ zJBPLYDs^ZpaQY*`a#2&DuGKHO9-0uMv{Erk$o6UjK4O;9-~y9BhB*;TPz&S$fEwp`6u zD<3kN(hcKdP0r>($p@jH~)0w(Kr80 ziAOm$5=eI*m$f+#*x@OD@q6gQ+8Rd$r!~d)VQF*$8t!mP+7hVFoU0Gnlwx{l{(y&qI?30seI0OoTYOJz%}GO?@ND!FoqM&v~hF@;4mc> z+9uQ%_ZVRI4K3YMiFvMCXX3!=mYO~8MuoS91=FcKDnOlNBl2<@-cSxU-%UQnzOp^DI&M;~|F#1opbt zq5*?xn~>^kBE4h{hdZB6z_l#OZ}TtnkQGf#C5VnJGv2)t=B-k9F9zpw3AmWMl8Zg~ zn?mtJ2&4AoZ+`kPdi`rOc~N~Fon=Lk6vl-+rC70CDNRU%yZS!(o36Dy6fal9$=b~+ z-co$?c9Pt2dpS8B7v(hjGh1FxR^uSIm_rDhYw)%_xFY#e=XQyty6Z%p9miH-qscyI ze&FmmP7cVq?lbe_x3_N2@i)h1Hs>5wu8gLhq%q5JC^DA`@)Y06%n#3MVs5s^4Qt40 z>~V~%kCt^2jkK_?{ay4*KcY^>dXld*03aD$L~k`%`=}Ep6|ga+hZ$5 zh?{lr+*zr^RKlI18$WSgL}{JH^{T=Y*5DNIeFx$ULwWZd-=3-vjqlQ2GdN z&A(*Nf|m;%lg~j3peDBQQu4O7zxn>JYOBc`k3ASip@P))GtG{TZr83@xwR zgM#|;?dZclH!%I^IN|E!hDxQBRJfwbm3j-{G({EX(Nj=ekBfN zURx~f?4ut)2X!2a%WRolp2BxIz7B(IoDOJ2u4p~ob|)qd^>vc zCR$UiK5jrFf$J4qFk3Q5NuYKepR&;yNytcJhAw{q>s@ za($DX!-aDeCY-d+&22kn=L@H^M2u37`aleB&N?D%yo||p$k-V7f%J@*O>!I^MznLA zE5W34WUDAqxusfJxjVxs0GW!7N*u;+?a+<;>8iy5zgHil@O#zNsn1O= zITdbLimzL3l&}e%`j1()*gN)^BaDvC8j|B$Gxzls5R9yizvpZtor`oepHAmlHORw@ zU0Gg@^-+A+n7j7i)mtVi+)qXl6}axjLc$m$Uqr5gh7ElcOnQIY zWdz9Xgy!vo96XcidInI@T9W!&)zz&Mwj!wv|lyWlTR+ z;!6UXvU1(IsnJ~{MmnMud0wd+>8Kk^P_m)(DG$oN5E{>tCeS z;aW<}i*}u1)eWHmGBy)&SS!iM*+Kez=E>#crpRutgDD(JR+m+30q@=Gk^U;tc1DXF z3PzI|@SN?wARcZaYz%_$ejdHssyV*<*@0k_nj>~xN#b`Hs~ql=NHKW4EP3yIW2j1{ z?;RvbQ#1Ju4T!Z|A-yg3xwo)`tB?BDm6>YNM}-@Ql~#HnRV+7#YL;+;{2to+x8~ED zXMGUkRXr@N1J|mPyhS*5yT4u@G=Me1HF45<-hFnXw@4J)0);1tbjIjhm2>z`pRI1L z$`L%|Vm>Rb;q5+yoAAha7ZsQDi|f@*aZ`SIcD0xz1-k}zqIXZ$85Hc@_Y%FG{=-v( z{KwM-RS%5FST&T@X@oIU5?xoBgBOEAm)6rww`FyEeIem<-n|bx<$Yb#ODcdKdA>-1 z#`UX#=$08i-X7Dr4Ht`I3HRCsDrwymv(VogcAKDv(1NCRsKz-!{z@_Oo>bVBuB~Xe z-}?V_>q}yqT0&8M0H$ryv&E48>f`A7j~irHg_^rRsXlHHJ||Xk>2$?Vyhw3jwAd{( zGKj2J>i+k_-P_tm1iv-;$id0AHCSvKQc-BInY!m}qnG!t#^KFp*Pj;?9552b=}_vxFS+Bgd*|7cpOZ*a?+2EUXnO!RFcsMa~|20d+c^-<)OR;_`AnI}7qu9ESyC zADzl=cdCQ8O0=w_M#9FLP&<`%tT9JcZthw2`OT}#{+86gMslr9m~xhInM@ie``uK1 zHii_#bysD}f!fysY^`Bmb<4Jtg|=Jl1^dPPCPSs9^D%gqnQ-HvtT4_w%9rPQHFqxf$lbu|ZRTGMfH)U|97(7;0t$Ny#njb6^i-x5@ zc_^kGH@ltweQ0&d?N4sFfVx8JA5&Z)1hCu~PcXLfih>_zrn(c$x_j#-Oy(Y11VUCR zuCx;LKwP7`t)@`loh>ByYp%xg%VL==%E_ueO9ThoB6G>+scgWwhw@j7RZy9MU%5~{ z^_i=2T4HdvQJ-24Hm&?K>eSve^=rbFk-#-cxIA4HD6`6PzMJRp_-i??eZ&IJBh1ta zps}8*C0e*f{x;I{vZzU0Op93t(d|WTeimG34ZbKK%C(7%qi935yG%@|SsHAf68ioE zMh!SM5Rg2C>ti2@GE^3fs~R=tgrtGk$XMkTW)a}RT74uiA3>tbGpHD(yK77jREG&* zb_aM^cAA}BpI+2BPDI|0pGRTD_Hmcn-t3rynYT<#{fJqVP_%YG zq+reUAxbknQ$#4+`$N=QH&3QDxiXeo;SBhaIowH2l6LQRks|V}B?j-B2ufo>y-&fi z5Gk7pwYsHL<839GAqpEk2|L}}HO9K#pd>;kkk4<8rg5;K2O&lO1I~;DQM6)9gd#`PH zzZoI-+#~R-HJLUfX!nS{(A>AC<}9?V5&k$MgY z96!f4bk@jVs71qaa60f#3VxSi&k)U8tqrxFo&phE$VW`U_YN@0e+^u^^i6ghe99Ic zu)l?5@E|j5dWOmeMWAeg^P|BHVimQOO5d!K>#opr#pJnWbdMUjOsj)TsqCwd3)p)X z$KJcPLF)z#f;s95sFoqXG9R|s^}h2%uIVISCI?L422feghXzyJbyvLG!#(;$o9=}Q zduwu2spWU|a_$;Y7B3wUbo3!$>$IMT((OQZy%@MY{yh4$ZF2eOG`W0gY;wVqV2V57 zf)}tPf@q!~KD|%JwwH0S?qS7hgs?G6tWa`ig=2p~VPK*gK2DpithbN!kg!-x=Go$U zb~?}gTx3B&SgBZ7*TU3kcQMfeXOS3Iq^!iJl7F(QRK`EvIp{C|B@&)8b}+y^5waG_4a%2TN zS9_qjy8~`rRA3d}x?@hPsfaJf&1}T>yx-)8YXGrmFO^oh$I*L%*{?mBrY#Lz-Zqj0 zzHvD@D{m*CFIVN~Vs^6}-^{YB$yHdsuXs;53ow_R(;V&^(Wxc`J57zPBe98D2G`hn z)o(BW?qHYQcOqXkbc$%F@q*<_OD^ng@Af#UW$qEju$HP9xyODB->f$pJhG(@=j~#5 z;r+J%`Aab^7nAJb`lMLa#OdJ2Qxt8+5wo2goxe&HUlMx=;N9YBA!9@KmvZ6!wm!-} z)?LBii#*KG*wiPC;quq#E+y^P=T8$TX>gNJL~21d<1#hah!zralgH_^xZk(1pCLgT zYl%QLDwj3*jGz!F>r{x~E&Yq$PI`r_m)FZ8yM*JcsTWXuD27Z`nuy;9^0l*0y$%3T zw?c(>L)m>gqvEMdt8Kkve(2_?<_u<+q0sQ<2~J$LHl_GYvZJXn-{TwDLnno6A1Rm} zR6Z+!#3qQf&Bbwl1HGX7ZG3%xRxTj8ot#Y|qCLM}EQ<5faWFxI5}xB+IPAD=&1<%k zU7SUt!$ZsnF4@|Ude!{uDi+oQ5BDd3UZsJlqCeOO`TgS+j+F@muZHem%R65%Qn>GvO=`(1yq7(Cy2f$f`= zzyPK|S-)0LWPUU1Bzi1IdYMAe=Hmpm$zQ;JI*2!>5vy9nMvV-ac@5C8W__EMR)2pF z{l?f9*VAly3SZ|Ze8`q->>1?NGxkq8?ZGz|18ADMq^8~TtvNn zB&TRs#q_*bWq9{IK_#QG+9-2n%eSLX ze?&8|)yEALMhY)|>QoqY4goA@hpsU8AEf0SQv@b8Et|nnQnSs?C@rv))}cGwee`Q{ zn2%@KX|b#oGb+^%X5er5Uy~S#M*5tBb?VTuBS|pNPledky?cuwa)?o`?M=KLx{w6V z!9g)D9qn>>DZ>dKnB20z7GC${lAKOsu(;2bgV1a@h$1bcSG}$5Wq9&g_O+N^)J9ps zp)+uZs59GHcE(#I1}Nlk3v8F{d%L4nCd|1yxQc7q?eEpc(Qoli``_Abk&Z^&26bnX$suN&mJ}s9GK5e;fF>6H8%i7A zO0kYWt}zG2jBJlGEgxFctvSHFcZuKTN*m3bUV8wYB1*E9QsTpkFufy+KnNV7(Zo`A z?X@r_h`VI&5E;|?5a2e&lgq^&>!DD4C`LM_g0B@0SOAPDZh@; zea@AXqD~4uM#pU1tgGigjy`Vhbd`$fnuOhWr-N@u*-Ajop^Zu-Dir=DW?gxv5&>$I zVmfrYY>1KdU=Jx;yN;ZV^sC)ZPRHdmTg}gBlUdk33(pEh16P*B5m-$gZnI1*iNXo? zPf6XRYFcY)CuZngqm&-LmvNWZTmuxjlA=PJOKcMmxtK%W2KU*+=N@2E{5WiN-80#B z=Q&tRTVBQ4K))j2Z8!SlOI_BRN+e-G04m{E=T0Gil~}AOZuO4q+N0|xv6{Qn>Tm)P z>xbAAqy))1^P@nMF@1%H zpA?tbGP^tl7eBrZQz{VIlIm~KdEk`0Moh+6su6|ls-z4hBXVdd&-U!(>$h(6o!j5g z+zh&OTIpqB_Gxm8L#-jN%^ zsY*}~eB@IlJhO?xyz5kn!C>woX?^hni*4)Ib+*_G=gU?3rJQBU%gJgSU|d)n8kFPc zIcfsBSX1A7LmI_js*ZFB9qdSo+>oa3_rx}cw8r=&BfXhR_WFm>i=Vch+G&xfK8}XM z65?K6T^qL|FAO|@pn(7HzeU2co#fCtP5XBk#Mf}OyFcIC<4#eFJN71Ee7Y)T*~tX( zT}&_Uep{TJT~CW|lW$ouh0m|U@}NbY2RxlgZVPSzy}MAX_QCClz&B2vvVWwb=>Qp? zhM4)@P4~!+;)c4q_X=Lo1l$cdM9h4(n4evr_LhS2jwYqnFnCLEXp`H{qqaJOvx(j5 zn>A)|%w+jByH&mSk-n##P1)&h3y*$|Ac>H2?P5&imJtc=F7$Rx3v#@vrT*rFXX-Jb)U%OTd9$@5}crb^(z{sQ>%yD4OR;O3Jpn~X(ZJYhn_?cVq%R=u)9{R z!R;=3-7kwNPN#r4^Yk>3*`*9#E!a|wS*|`D8*iD|-I7V1gHD93HR~=*h>G#iuP3pl zT?6slaW9kc=WKAMe>{&m)9T~s^ii7=oP}16k-u}MI%i5*p28m;w70jum8@ zg3Bpi@zzf6?B1L3@c zmsqNxJtqmHybqVDZAizuNgyX3+Z_MW+z?Kbla2*bP=ZiK5;V8>S~%S!SI#@%R)9Sa ze_1p8I{>29wQ_#8yG+%ATaS~t$_hBT#d03%;^)M?wYLR@hWRs7C_mmuDK>y%2Ic=v5nsRS&#+wT26B>Tzo3+&(~TNR6PdNBz=%1~a1^PE;Q-1>yD{z|bFFT~_1 z%`9~))74Tvbga6Y<@)Kv=%25i#+rz$j~jZWxF(8u!(S-8U5&N$u)|;W%5wG2FqY-1 zsh$o#Z!|RDb-W3d)0TsEwvkS8{k$k<7jO&A!0*k@v$IL@%?A^_RTcPW1<%sG6W?7V zmem1g4VPg~d3y>rVFZjMdT0i0;*-U2hl5{!c^V@CRUbE81{s*3JNU&?_=q4Y;5eLs z^eq#F9I;Sr&sfb_8fxlh48E+7dU;4$_f%SuVgO-DHdMY`L1x%8UoVBoOZ8 zjAEBb=TOvJB!)~Z>~Pp~7>d?{OgM$1f!8?lrQ6+35o6#6LEZRKz>D|LgYEY+^2I%= z2jRs+^IQjmXeVu0akkO33u-Yg7H8RNJSnF^juW}?6dn+jiYe{PJP($MHqBFPW)`G2 z<*Z9ju$KJD-1L6!!d-Yc0x(IebR z`L;IxZ+F?R<79F=p2O$aRe|SnQ7={M+}LDRLA*?Pw?wR}Az>d_dTS!O*Fsin>Qgcf z+)4cEC%13w)lW|o`nF6?Afz!`I%2{&Ld_i7f$lXq>YiWBk=7XJ1Iu)~*18Ti!C=}7 z56%XX6Dn6Fe3E^gEa#s;`+zaDs(w`2SJk<+@2?Vr4XQ8F+=}!D{0Q4-05!H<(0Tr9 z^uson^8D2nIzKe!QXu#gRZoZ0)S+`iG|@DnspA1-XM2cALFnKjhc)Bf^y0TsX1sm$ z)Hqz0SL5uWMD@HQYeCvF3AM7K%B^kxpF+tfkCg2GEs z^X=u$$XszrQQQ8p={C7X6hTcYMSDLEC$P#5!>mOH#@|4{iGx^vgG<{yJDq2%)Z$Dc>9wsmNCbo8snmOY+J0jB1LavTD7DM<=P`Z4n^y4~9T zUufIw3zlgsiFvz7&QV}L-{hv4WwXh}d|IEjfYU;;S_&r6nH=e^5mT|iVTH!eQq;+i za_GRY=^nKm;qKj|nnt(_oogl-cSiDAol6T3km9`d7!~%tL%9bNfkkb0(4cpyzz#QT zMcF#F-Pu5Ti|b-uwd9;GCRgBho`zgSN~_1Ptxl(HK#;petUN3j{DOy;y@?xI)7{N; z2bX(Kk?Zb&H-p^tw^m}@>Uv`1TM zkJoY#U~1i;2WHz=G;p?<+HbHtov&8ec)plJyc;kt;UZJ?lGffQB2RWtL(H`1UlNr0FZNdf#g(mW@UMcLwKt((_uOJ$ zCsiS7PpO^2Qa9>lEkmLGEhNh$-GH0OE{o~Sa$FlLOTg>pI%lLaTAU?fWBjN^xqK$? zrOXiNJ=L5ZbV^Fob43yMYV_7Ym_yup+n6wgYXfFWxudcI-y?x*97!lS4AOO)y8pcl z>D$^xa`9ov5$zrh)>#=axwa8}&K7!QWxf_Tntcgh!D3OHICiJ-0+&kJU8liYC02}( zd?YQr^P6NEQuR}WVuz3y?5v^k`lBa$?~K!IB)l-N3+>1XVkGZkx9#&))nK9PNLIbV%$va7PV2-z@9qh<{U>~WSnC_ftTAI2m!_k15&71vrKcsFj7hZqSn*|u-jH@ z!gi183N6#=WI3N@^V#IvbvTk26~ImPcFB3?_}E({Huy=}5h|uC*38v0>@lg*!)`PY zR9LFFj5h)=Y6E9;P(iZ3SsnLqBDlFnPwO6)uLGl8SN&L<*Yh^gb4pWjgLVG6@EBD# zr$VCuTKcH>h&S|?iE6QE+>fv^FVank!J0u zb!2b}$ti{Rd-n>-c8OSpgmKJY5Zx&JxA{#v2i97)yBX>L0x$R2LJZ??{?o1aSMy(X zRs6Aiz(|8rw4E`BS`xLpZaKs)vdj0dmjcVytYTQNkz$Wblk-rvq2I8Uek*T>$xy!l z^sb6(Sj^{gezBS?SGCdhj6j?KQ3f0k4Y)W>-N6y1LVuZ9YcMAx%w}_%)M51ih8QMv zU%mVfSHt4ve>~l-VZl{y6`|7Mvw{n<;EHx5_EEN8c}E`sXI+W#sIy2zIHa^BJNxT( zm0cAV*Ea>GewO1&08@w$z*Gdu6ZvwHJM4CeSk?#os(B7~oV1~9f6m9V>||Pui`eY7 zTm5WW7q>s`@U{9wHe{6UI~yFnDZ@Dg(hji|?r3oTCB}q6)=Y`x&0vdu2f?HD7{%sU zPRgZuaP1l&DjP9v+M;>y?IGE_el2HbH`%oKx+rI-p;RIR3(+Wg+MR;#u2J`>q#EwX za!Z>sPN`%g6sLZuWFx?)Lppb{*-SdOxxhzqnnoZdHbR1x$nTzOfSe&y}GgG`EA2ls2C32!_b zm`_{ZhO>`O(dli+)t}|(&x`UV8_z#~zAVDY5k%zF!V@!_1LFJP%UdeOJV2>qoS;DN zS)UwUO8~spi#QeFMH3YO?t}0)L`7}xXc}U%5=V$WrrM-?FtH?zVbxGnLd>C9uAxyT zRVKY{^eUeGS>l~DE3Q^PS`6GTnaVXbkBF|pp|?nM;wK$R29CGZ`PAfxgfR6i>M`8V zkMG_4n5zoVtkcGFAqkPnnX*FRRf%=7ght_q>xSHOjDae>0eFw%pn?6aNvU8ztz$U1 z8%Yo9zD$d=$>n5`O>c^eajl1+p-!o-S{X(6iiNjIEH{F51(QpCubWmw55J*xuG=v< zJ#_dsWJEhK`{WJR|<28$sw*1iwSuPqPa z?BgCyzSClMmYrpn<@8I~>PuxVR1U8T##={bq-9X zO%2i6Lq9dd0)9evd3rYa0zeC(#F1r(UHcq7Z+B%2f0oe z|Mzz;Po@%<**Pl(-gky`cLcmqU;|8;za2@vehpg2wF7*UgrZ%i^iM3i(crO zUY{1(Rk667tcuw@Ko^p`@itEK9z0QZk*KP?91)%qLK0mSm*SyMh=y>{ErL7YVsjB3 z0v&6OP~1BGz(gtd{t|i(AF40&&NqU$s7l2VyBY$EUw1Wt$+e2sZ?`xkaa-`5^J*3v z=`6$OEfQmv3R#hAByCA0@*@KDA$0rqtoET}D`lKDRBo%H&{=yItd>q-A=CA34%6ezUo0?WT>NO<~o@%!ot6A4kFa=pVO&DD5*S%fierO8Nfwh6p8I@cP4Wg7b9!5qz=gnua`5s&)dbZXu_AN{<= z>>Ee@_vc2Ew8;e{nmCw6dOa1IFm)tFse|j(xaQIax%=$b4}r2~lA$H;XxU%yq*v&B zQO;)NYMd>~$@zFSEdyCot>OJ5kxkzf#M>33v!1GKGI0k@@19NG*i_7HLO{IV!bi)~ zH9+@u9J_uW~Ybg=v)+wOrA#yjr>jC2qv}k^< z1EaQENEVm6n~t*@PZrBy3_QFda>a7wd(h7C^cIQAs4AQYU}X)VJ3C986sDvdT2J+U z57-bEzj+f4i>r^LLQ*;>LR0S4E-8Gicx|<2x3bLybFB5Bgpmv1q$*M-n>FO2@(T5HnQLM$cwalDxz7QfpvY*F%YJ)lzi!kxWcoUN4JTHZG@O zc?I4Oxq{b*WpK^uRS5Ix>W2|HzC!OM^4K zw@Mr;8c9nWZ5oZ!ZgI?T01l0moW z*jUb|^Dj5GmJN6TFaqyplgsWGNOzGK5do*l!Hz|ngem987&nXqySIAZ-oWlAy>CHt zW(hM+bCWeW-1}jFhb5@?3?sdRi6uj$T<-y=aEHdY;pXsG3V^eTov;Wd4$r@oi_4oZ zghUboW@M{@;Jq$n?m|)3ZVsS^mvER_sZ}MUILHvR7)0KGaPyV#oz{rPd?f_*00$FD z;tPgD?hib|X}zt!bGbJM6$465&}`UxUtpf=dI8u-tNitL3+cM{d*DGvu7mAhmIKgfkEqH3yg0lpg=spvS4MEz+IPIlTi5{h~wN_qFk%dq} zX$`me$D6V6&M=0cgU?(FYh zt>o%mK=Kxfb)gedNrVvHQ@YncP;lfTd3%lR4_Bw?%^yz_bc*`)%sz5;Ue7X8GxkHb zwFjWs1cSQ8%X$0gr515k%qFPITP)zK4VW#+H^r-S-o3}&S))O{p5hge)$I z!wHDPIz0aYVyJuZqnj3d@nb?-5H3>+?otpLZuM4Jt_+UUI&w~8v(Nn!J>A2NdBPe4 zWoS?6oAbJk4feD{(SE&$Eo>cWH8xsg`cQ0Ry%B9A0)d1zjiXDl&?R%-wpKD}Op$@+Sy+C|-+jU=Z?O1L4H zv+Q&Z*Sc9y*y7mGWb>-H)+>?dEmU`HW<;>LBDdV6jysY>99whc`Hya5@wpQ&Hj6_r z*rU?c?K{vpfndpSq8@Ljx_f{T3|XA}tCgVYFfn0hw`->dM$_!{ygl@2DmWb%3kblo zGCNrmXE*f;N7$wb|A(_Zd3R|DcadnSM2slE?^NnIuS2WI`1l7VGWKRvO*pyBRleC` zvHG~->IPR83CPl zD$e~LFV6kmghGqTWbo}exk~t!iKvYjIo^!u!Df27h7*JA1DoGhL(@h$u%$o8-()hX z!RcKri`m&Cn-<@$R~I$SO~T6<(GRwU-ALu)ZDr z6j#Olsj=38Gc1Uej^Ycv`XxgSGXE>+;<`o>!EjU$ZRl~;Avo6V7frC0&9dD|uaNcI zxR_+$#*_1+5-oFKiy9XqxA-DyE%dcYp1F%eb>R(;gP^kMnpsPw61!VS;V$N9KrYxEklB2MWAv@7=Tv8=%L3h?0bau_I&qS>>I{w1}48wn}W@?O382c*z@}M z`R1%igNYJ&Mc^B}F1CA*@Yr1>n)Q)z8HSs1lXi8A-V4UYT=Itm)BDK5ASHSWUyl;q z2wzxG87rLosb#s)1e|L^TK194!FXm9L3xxtb3_Hi07#o|Sl$Y9XN&0-O^k}mVwqje zVW-QoMj(af0_RUH&e`tQ`QtAYBasq{LaCaONbk=w%Bitr=q`2t0b*$U#hbqJOVace zieH6h!Xc5;95%x(N$5f!xYK7j2&=|D-qZrhpe^S$)7}U~kd{=ew~h23AGm=oZnBe` zi}{!3MUYoAsMMV^$>CPp_44Vi(J+t&D|50*C9T#}ZpG27kDoq_UcTPCIj60m`nak3 zsEm}33=6zx@y#v{Elt1IDAhf{lzZWzgqy%#*Ine*ciuWEWxatOrAIK5#rY&#j_0#l zvxBZQ*1(lRT+{<)E*nHt!! zZ_%K>46`~lAmtEI9I^|&F(~bTOTpl^&cJxKxWqBgTuEy9_ZXB0N1RkM8D8(9X55>` zC)&h}3pa9~+usU2=}k7BmS4;1^d@krfOcyD^cM9GyW-4Sq>i#mB~idjOw+x%R4(|? zk!ydS`RRESo1dDdMq^7Gy)_myYQKwrL-n-c2`IC69|X!SR)lIuo@T$NwSSvD@dPRo#&fK^m{WuSmasyDFH3MDK zRU1if;YQL+{TGw*F-fl>t&Xswu+@N}$kS=Zc}XN(?7Vk61Nec`qJKNLH^@ zJUG4U_n$_;Y;{`P2}{2;>a;+3DFxMBZEA|x#UqF%@G}34cs18rlDyjB%^5Y6tTQ}d zhi!0m_K^(N)%;>rEVAPI1c18;wT~d=$u-_MbCpOVZ%}!0)~P3TaB>t*+JY@x2q&Gy{k~3YthT!S$pxh~W=ZoxXoe~ExY%mg$+wS+k?GklgsYjBJsK9J}FLrv>bj8Kc6PJ3> z&tJcHdmmprW&P$M5Hv^UNt}^rT0lT#1W8e|e%uW7z&K)nB${hMZ-GC2(})j+b)Oa3 zT(cYXHn4}W^k>(rRXC@YVRUV9g0O+;x;3nAABz?&RL82tOcPPL(v4#wYV}CN4zF(= zL*LtbsHt>g5ylLNH zEpe*1m3|`|%Efs($rd-ox1v6>0b8RX#D*J94@!-*Mm=^F$O952m&%!H23B$o?zuip zW%q5dpP#$?!3_z~*YSjCa}Phwm671LoN5El6=#&z!^~k5qT7x2N{YItl>(t*`7^$8 zZrGj8xbdIA7jEvT+u8Y|JfGJ(95Le~P`Fg0JV)mU(qEqGV}N<=&bGTu2F*;+%DneK?xdRY7oc-uMZSDv^4L#pGU8^ z^WxwA?6|F_dGYXmWZG&%9RdqSi6KL%I&A)OuK}QUhDjxYq4DHf?V2|YX442Je-HOA zdoM31t8s9T5~Lc8Qqj^>t0-?uewWL55vW*S^j3EwBl`dFK3tgKp;*fBJ{RQD1$^s zdc&W;N-X0j)JUMPgOhQDM<^Fpi^;MK+xm=>yIX>WEzND7t--H3A*AcqS_gA+A*C~@ zLBUmp9$Hw&+gLBaxo5iH0C5n&)eL>Dbgg7Ff5qQqI^MpGug}lQ#aVedIh)+fvh(Z3 zqBuVt7eVA`dCmyOK0(HMHRky%)h}z+TnhM(#6E;8;3ZmjjSo(@;=Y~{Uc^>2E9urV zY6K}~Dutf;$aO0M8%Zj~4bG#k;bR@8R!OaRadOF`A%av8UGBU9~=xZF(M#YM759z-1Vp?1;v$IL1r##L+Pm7QN zin@y$UJNwdYep&q?jrSwm0}f9N*oH5dSg_aADK{=RFZQdSGOeB9Jv~}q;SCnaqd&Dt+SF3a%S5P9f`ZfI;tgbnJ_4e4y7hYa3i|i84uSW31Xt$rgT?Uq$(sV`w#zpYR#+~r)Wn(j ztaBVTOH$xD2>&{H|9hccZ!IH&;;7o%fN9kb4C^8V7+o9f+Sx-o^Ru|b*1sYSy@TqRHX>l{ZUPXsK56>WLdXyLf z-+yvFq}u|~=pivYf~(_J?hw8yz#}<&$8BuG`;AlGlTW%c4o%;z8T@9TSqo>(-$pMt zxfujK%g)MgXpO?G=%W)??yko z+5qdcd#xpv?GA<$GKF_MgaVZDJS=ObL)Kj*7WFcURRhJvuA*ku0j%uMI*095 zOO#@Z-z}TvWB_rTa0A^o}hSvKoe+Sdb#|Kl zIUmnz{7;;Ih|2oiN9t}@h#`k^oJ?f&j!`ma#R9(a_HI2P6BI!YK1(L{Zn zA0pcBB<}4JQ3j3}5sZ~-qCf@Q!;cKsodOluU%PdWUVm+)dt^D<9CgRT$eiOOdMggm zmo$t(g?GLYpw-4{A9)0YXYK2I8yH+Gt!BHy9-R~|^XWOiZN4WtlbsuvyhR#n6@=%+ z@}ygvRlA4OACZds>Zeh~Kdno|R3A5VxKkmmcBjA)9OGr#VLAhcxz%lt^`ZN@(9AdD z+p1~UeYn9yS9e)J)cO^|{{UwUHK9nw>0vZr&`83gK!byw%!0NHZ<$!po>%u&BWi6+ z_nvPLkM-mb!_s;Vx9=j^3s0hj*`zdSrN70AP8gQ<9gMaQ>?DHScx%+aa)&jD+<~-d zT3Wb`e!>%Q&CKT6>7tyRkL%(SSZ|ghH@y^n{Z(SDQ=HQX??Y>9HT}zCGK-b+rR9gf zXz&!#tK#o&b)lLyx|2r(wk-_y%X25$`TvvmZQX4fS=N80SKfiC`-N|I>`pw69k=CV z`pX+6(IPF1)FLIjm0$mz0~thBp#T;Ef|T67=F+2?si26naqfF-F7aQxmo!FgUx!su zg-oY9SEw!1zwPIp5+g2Te8Ma|IcckmZvRcl{nJwAv1W8drTrc-hR|PrbrJf@uL%f+ zAWAcezM!VG07Frhk`(>3F^V~R{|*Nz>9`h?(gGZppeY2&mO`dgfGNDfL8vfpS6BDp zm^kVZlibQ&45k^{D(eaV;cdYvgX9apZ)I;gZazfC+~jS!u;j$ zHO$LDw=^BKWp&FD17gXwWQ{E>rfs=icp`el)?Xofz99sOu6@OVVOShKDRpZ)N=x1y2b7k!!*|!Kuf^hFwOlodyu6&Cr>Mm+pw;P~5~Y>0$UrB!?c~^} zQqtWV1A}EQqJ`W2x3M5kH4uY&%pC9q*M=Rpt$6@?efI^$qTcA#>X=*{p;=bLZ)hN$ zgi`f2lDnB-?l0$evkWYMIS=81+&Z{DfCJ2ln^lpzkbg{!GFVvb!V=B)Sw@Zwry5I+ zk#HtGTMTA@oJ~rX*Bl=x{~Qf+2^Jotb=Htk+){9AQu-s$TI4sdjTkh!l|~7!=}sDt z1J0&~u&8Fr!TP#bft{Nqr=;I0muIWR&7=7R{!8Z+Ysbvw1Gs^mLt=#=PH|;SQ?ci| zv6Ybp$PtCpcC8%$^P|f@`cJ1j*~&jEb*>HZG@7VHktWJh_(z}j%5nYPpA7N>d#{p9 z*|GEJU*s_AzSu5B0URVFpmY$KesEOGJCeuT*vQW4(ZXlxsBlB>t_lK8{No;@GTj2M90SHyA-ugQzsIKr`APfN$9q#;EQXLG`YfK1erR zE>R5>^62Sxu?SbA7-!|P;H&4I?yVx#jmRCvh# zMUMqSCUPlDk5|u{(p*cMHdOQM_b)v2iD8<7`?mzuZJt0f*g#ap^F}&2iTx|4PNvSU z!Cfx0>(zQWf0!<>S3xR>o5d1|bn-AKsbv z=am94`~G#*%f4?T$q+1uz>Pg7MBk%TiiwK&FJP5&Z6gBPJ=ppWm@5XDs5EE5_PRW= zbCGmy!q4mJ<#av2xQ3|q{vv1-Vmky?z%A0z1tD$Q_;?eY{wYy?88abB0ooiuZSO&bolPrhN%Ktwexqj+aV>Rd6MjQD#y z{&otOZ7lvXWbVNJ2}9zl&W1&|dX0BXv?EBtjptyM`}QpCaj5#!dlpD=8Yk3f-x$W` zpg>8`x@Q63SS3-X_rxx7?4E`D>LbWJ2~}Iu?6)nilMGR^rStFF|MxC3jB4>>b$6G|R_hf6!+!_4CBan^OmRtX zx?=Z?*nFGda8*dNRBEWp2-{6jeBw|S9P6*2qK@^~wqZ9&ZaAQkJAD+xQR<$llT#Ou z73#WgKLW=FO~)xi-2e;QVl3+v-Ei(V2&I^l7K>t;!INDVo2H-DrsOb4o`;J&+WM4O z;LGIW2yOZfvfv5YaR;gYbnPGi{KD&MI^MFK2LK1ZxfRansTMh8osf#^6NkB@?H{{u zIOZK2`^O`X4m9k#;^yETDslcTlFL5lYq&x7E&DPBZ}_D#Hz1HDM8kiA^G@9IZ<#pt zPKp&;34S$lZQ5oB_Rxl-Mm2edpO!XUA0;Z4qnsgkG&bP(!oV#>i0b)E!?`AsQkorK z87@ReRRjX_>nhJW*GONOD&VwiRxCEt#UcQyM0$|i81UNt*9qN2qE!BDA`PTcG=;EA zGd=ojTqh${4*?C%a&4{D4!m%LOPVCl*8^NfAf$3%TgR1d$}7_;FMZt4jSF9PTNxq>nMw;AP6G**vEH5kZ<0Cwt$YD;ih6 zpL}@xQ>>3){<+0>QA?EDQM4i#mKehmSTlyBYqMJ1-@#!U=VF7P<-W|+qUh;#+ZqPG zRix=mB4{@>x8cp$N^0dlH-?nAA6%ro z{g8qb1))1Ux4UagNDiNG4X)|@;=ZU@#200i7&GDv&2zi9ZaO@VcZ>8!`D0E0 z8Zx9{br$k8iMg5rtoDV7dqxu=rJxL9xgkjjl7jo6G(qaI@gOaxze>njgSX_!BM`kO z2$ns~49R_ODW&+a=e+_;tvm{tOFLS;I}F&wgXCzog1=_B1%}8WFAGB^Qj-e}fF4u| zbPtLV_M)~7&n-78NHUODoD@lYDtQ({b0*zE5@uu)xx>>$k^9bKUI*)zl9G$g&=!xg!Q#1JIPPJl8E6~8u}BgP|2ePfM( zbZH%Z_-*q3!xl~D7HhR5@S&||MRP@rAx703tv1(!a(?WM)`O}YdG9eP+c^Ryb!fj; zKbUu@?fDl;E_pwI@5t7xn_}5q&7l(Kp=}QT4YII7-pD&C+L#hpePq%MU%i9O@D#G| zsk?P=yrA$+(i$v0gwAT!S}P@Ca-_qBJa#`d*z?o z7SJi&-QnmnG8fh=o@^q?3H7FPASI-0hx*6*3z2F z1+0lujl)(yJlm~n7qJkwp+!BqsBQxg)c_>e-Htht>K@6BHKg1GATBe^*)OL78=$c{ zQib3!W^Z7+XG8_u`Gm+^G8@@2-$eK6xH-~v@%IOa7HZzQxneo^v2(Z>*^3R8+|j{h z(!!|XXp2jkcY7< zH3A$s5*@RUcQc*O!8@d>bEHwUUT_EzXh$3S81xOTJ?u{(J$>nqX}FS-D&f&J*qm#v zv_0;{?4J_*9atL2p?;UUV zjF<+P;1kMn&fA8g_L#s&nShf=i0y^WSHHU;d-Zz)$T&Pb!5t8Xi3t3ep~{}7&Uw_~ zd(S!|n2h$xNAzO>9JWIxT{`XF6_R0D?Rno6o6Y=Yz6=@>5|YVMpc8`Dz5$|pMpVF- zmt#tt4rU0W=EOSEgUG}79y;c^V$3)qUhte2!cCsASo-YQ!(6+GAU1Vf<|w6^07X@4 z2F$fn>9)S#ps@6=cv!5~*|(xunc?MAX_A}%N+<3iv8oJJsQ5uG>xTDM$FaS=C{#pq z^EeEEk*AAx826uL7NnfebR}`iy*HIsS3OpXG5!M_q&!m_NCd}58f&?bmK~9OB?LxQ zpHUrpoBl=i80x%V+!f30e7?*!#p34szb(!$?-#}2^S`rV0e`;_XyYL=z+EHMH0#gG z>m3q9E+aU~C6(#aNYO$yz3$;r*&>AU@sG)GHD!vs3HMto`xx@$2o#;()@iKCrGTtU z+1=`2hs-ArqO(`OrU-sgm1++-LKE0#wFD5i z-Y(BMBD&*XCQO0LkB}C1it-67Pn>ur)8+p8e)6g&sdk0KUbT``%Uq~OaXx3;&Jd{( z!l&+Qj7pd5nnbKr+fZFeEY*$!Ru3N)Qo%GkS1aoKB_kCu`T1_O%)Uz-h0Eqd<@l8F zrMyN$iivJ zahLUm2d3UTN-e35p4bJpx!phN7?SZXk_?j7VtSP=S6}CMo9lV7uZIK?@E`_N+|v*e zQGj+2iB7|iva7kPteP^{%~e9X3m# z5r}^NbKkD{q-2%J;_ah&z5q{EeN}a|OZ*!qDymGu-)+G0t(Nn@@2`UvCPR4^C{WRDEuHfLSmJAqaA;;vQv3t zLe24+s_R!DL1kmwX7pN5)8@C>BOMD<-aXPwrI;D67Pm9V5vQBwJXk%HB)8aM$@QT1 zUFVpnoDsy!B@i}>S#FqO+>szdNpY*05cbr94&$bXu1UmF z#KwlyXx3qhI?#c&RN>>Pyi6YAfy`Q736}g@{l#a2T8ueGKOK z-UH#UUVF1XuM=D-H#z6b6AZNFC^A(lL4M`A4}`n65ku@rBtQd9Y_~UbM+oa(WYCB} zReQZ(!^;d;`r(6uBx$+sO~2$E5uFg1C}W`93Gt@;j4bdU)qTdW_uE_7Q~vfg#Z$^0 z;xlE-`u_J~Dvnb2dwc7Z9KZ~Edrycl-TL~o^Qolzt^?a?_F@%1kSp+c*rh_ z#pO3hA+yVehRhKXNMiAp;QT;ufpf;*1&c_kJe?WXm)@ZH%alQL z@QadLs+_7177U4yMkJ7>J^LwG&pu+FF{-07<``^xKktfTiOf@Bat6^a5-E~Ip_52M#6PCl zG*s|`$GdQM6txj(>fN3EVNNXuqBrj+FB}a`r{waYb&3rG6DF*~kD*1b3Bc$$v{1L} z)#d%g@O3EnwM0mCJvX$*Dp=I*jdcGK!-V&W^>vKnlTvVmI8;Lkq>f!6DLq=; z4S8oowSWXFRw=665n{0;KYl@^r82oMt0%WVLV$Ceo?oQ(q*xo(R8tvAmlV*~NOkxm$f+AqUU=r^Z5qwiqjdkLzDr^iGL2 z0ffZ(Qb;?zwa!ce*Tj=;t-pLRd0G3dmyQJ2%T~ckf<)~?xWz|!EGlIZuha8yt-I!v z6g8f5rmTUeiV)FsQB`WY>lYPEl0Pcfb2qQ~wD$EsCBIe_rKkuL@ zADf&&5G`Fz%f7G|Bob#HXO$@x+h@PI&er8@YwyjATykDB|0@>q&ET)hVuxA3TqYo5JVbLb2?d_Yhi4XUi$&V+Sm;T_7&cE)hKM4#Qdpv(-(p$pBWXfDrl+kAjBigQM6&RRgIj&pS(p-ev+ zcExCO(do&_u)q8`c~S33xUGX1Z95X&=7vLDYwMjR_*t119QP#tJ7m~BYl%g+QK8w< zN4|ZKRPY5u?3(y?E|NZ~^|t@;?!UoZ|2#xKh=B-QGVY)=FS%f^!7g zcCJP+Wsk8;-?AFfuaZM$9a|##DAD+@<7%@UU}e{RMKPSD5FN$R z7fHv-mnkZqui?L}=9}zdFSzNtJ(&F5YsKq$H9!3P*}z^^U6}6RCyQ8%U^Dzr+}x8e4it z@jDF*t`_0JfV#-loVz6FUd8fqJ^co$*XQZ|=587&C^KTp32l_MU|jaj!2DxkVB!>; zAmHZHb1=b1@3yX-a^<=KBA=Fxb*W4``ylg zboJ!COAOEr`&KL#57`EOg7rG2EyUG$f;=&d_E+9>4~ey{F&IVSeLk2$NgDP97x@y& zl|KG4dHMTKF{+pH&n?SB40{dA5s|lg`hbT*@hOw~RBQ8Gz|K$kArI z8t={x2US`wX2p6j-DI=Xd2xR=0O~*$zxyd%E<&PIq`^pSGDL_F-9uuTo8%K_a-&&_ zG9YR(93v3zR0sUyY*MnEHCNorKSwdikOog%S5gW7>6$|r`ivC<>vtCcT0<^<^o%Yv z*zKk}?<8(Mts zc!Z+vNLeePsG#rwMv1z{0$*dUiQ#JZK-qJrWpa(?kRk6lR4*ZpwtYR(A*AbFF}+-K zF~fq;gR1?B>7f>G`Z5c>;N5bn} zaFF|6z#o^F*=2S!U3_iuupxbpRHzq__m_?FPl-8kybnY*omv);tQKl)vH5m63$Ksy zDW#7=c`gjEoh%h1*H&7?b`$L%yk;~s?seZ%1XHPu6bGskg@(B$qfnh*(YZppS1cB# zKIo>nxCl7&8G!&@ASDUOdGE%&e@YA=l1&KGii`GHZ6U~sr%PKx(^r2*L(}rlErlG* zEY6JzCpd+#AtgticNvbD`n^RElgih7oG>%AZsymsV!p_(SL@~c zA)<+GAE`(!NhSbok;HZnip{)GRoWYImLSgWH}IA=n+$Ac@qkH4Qxaxu(X!?u zbTkFMJM5ugeFaI|b#}2{-CqRt%tyT^+*itVqJnj77vYpJ_c2ru$+MgYWSA4OBWRwtLgd2yeUdvqL5I_o7{U~$TsrNq&wb|A#Vy-ux+U!uv69FQ&(XMS581-*4 zOqIU4!L`9`J)K7u>P3#k!MN_PdiO2dL!!Jcc0xohtld$>6jrJy(35C^;h%9B{@LnJ zA?6aA3R|mT>@Y=6_btXyB?)KTNXR4iT}c|Jbr2YKtpuSuiC*eErboPs z`KHL0t8c}12rimSnxl@|5O6t%L@DmeX$AP8rOeCFm=?rwd-# zCA%GFR8fz}lOjnWG8LY1$JI>#dHZu_&406;{Y#zwU}p% z>DP-{q&|u~+>|`-adb1pbT0&Y$FyXb3@36`*o^-?UreKWwkARuGscW}^#CnZ97hJi zt>U!HKv4LQ5^Ef#KrD=EA`Ion;8+Tq<<9*EaxT^HFoH1%mkEV*Ps!c8>IbUQG>o^F zX6d9|a_+GQlGe*&ak=Y0MX@Hy~QLQ27VT9Y~zvxuI$q2w2B4vsD5j~w?Xuw;p zi4Ju6R~Uq@;&!!ItTHNnTv^C6G`Lukhn)-G5$-~jdrqub$TTiKYPB<)LuaQoZPqQ1 zz5UQ*iydE-)PkuxWz!^wc#>IpTt31BrflxJi=gNv%twLMR?D|wHeGE$=N`ibD2w|w z3Myn5i((zrMillf1g4F&_q?=wMwASRPY90uvI8&_YH^G`qamT?+h5#Whqu4{l(6f- zaw(~h%A+BqmPwgHpZoknOV>ssm^IQ^%Z0Q@6hR4qQBhEU{dF=e)z?TCj=z~-%nHEg z=lSyDI_%=1M2E@^_~Py+Ugz|tdq{M~%uGtb7iW0$cDe%l`JcOo+vx<}-+Hwy?jhJ& z7B|xgnEd)`o^56;cz&c_#!5hgnOBn&Z!7J6g_c5%!))OeYFe2sL@7~jDX+(EH2nG& ze&1&Qo*Tn)ymFvl?V7ad^E-r(_Z`)JMsPg)N~-UiRJS?+Ttyhv z;#Aw?Ia{E;_aq(s0|W$+P7T(YoEff9IxbuTCwforMh*>WEd0)%s=SfTdu^&R-9}#OA)il*ILoTnwdd;0DfQ7u3-k?=_|sxdKsQ_PpKQE?$7b=A>Ct*fUvP&tUh zTc?UqXYkbMTnMFQN@;b}IdSKzhaC`i-*Nt zvN2T(p#{w?{&R+SGxwZWCsN@0a84L)Ag{Q+jRDVc+bj%?vZL|+0a_x;mvQB!Rs{-t zWmIvYrOSfI6!^4LL$1E)p@rk?w;PKdqZ4dn_WJ{)u3Q;dR973(xx^s6E$7#(MKRCL z?=OocQ7;oYvSLb|+r-tVmhjO%DBAmH6Y%iVkk05)L5h1iqTUa0-Km)mj>K*2)C}Ou z5<`?rGm1P!(nxKNJ2i8F5Yc^25$Nn8Pj*0V(ZEEj+>44%wP@!e$xDP)rSzuQZ00xf zWjJ(JDpvCxlfnMvFYX~xy(Mt9xH74St~E(x#@^EHzqj<})#Sye+LgVkp;rF6r8r_W zsr?xIN|rE|qHOluca}V}=maJ?nsA_xg)M)f>7dZ|ZZT}vVKrN3=Zj(%aFhxO>A3>f z!j*-cC9KQ`5k*=Z9Y>@7~o;^w%2M<)2$R z8bm|>;f|idSD#rzAWHf#s(gBu6^mW_FYu32rfI-!OF~0BCJ($z4*CpSt*2M;lV^}n zMtDr&^ObWjEo`**{S>%o#7a1X;_{XxVjuFwU^NlJuh{4Vb4kw?E%p5F_9%b;J)uVl zKN)AXoLqG%*p%YseCuge6I1Vhka>gJE+R1Qzhd0eS^GfP%EELPe4HyJN6_E(chO4$Mm2_+eB!3WpR2wWg zX~lI4ga7j!CU6ZPxwUz^@{o^*iY@>Qa>ocyb;Ch0-8OSBF5tJHHVAQW@LuM+)PWq- z`SebTwLUrWjUdBl)2m)?Vwh#po_Mz1f4(-zzKTP(jlqMH+z45!m~Jyr31JmYi*Uzv ztJ|9%dKjU8`@=e_N2B=gU{UR*fJJt7Tb)a$>o_i^*PCK_S*){Lc$E*UyVcjM`r~@_ zH2|zBr{*aV;nB`X*Ij&b{zDGpUF6{KbqERR|#YH7PTF4S$iwDZS7iezQU zd+dz28j8c!bhlt!4=^4@BGr3=1Cz)D)n7x~-A1gkgIe6X#_nRzcm2lu^Yc}h4Q{LE7wQoyy+<#1t-!xYd(m-CAkfBuq0zNm9$G&(Qq z&W0;ulSq#b37&(}<#_KfsZcsDO+a9^Rf7?%rYneauCQ}oDhwF!va8i9mL)(A3pvuQLa-nVHEDm4^l1VQnQn9V+<*z{`~vo-*xfE?LGdxb=z6yoFnnJbn2)I zg}`^0Zhnj^s%u3N2=^uW7)kpnL{!MhA`9;${@0!gYYx3O)1 z3P<;l=xCq7C|QZ-zDG-Wl~ZwI@wTL)^k3t(n_t^}ry{uk2f`gOaZEad)&SGpt;pwC zU-jO83MNlXs~X^;!X(&Z=XhUz#X+^32T0qptNG>M5#~quUSKVrF$lo=L)AMaHbuZm zIsHIw=e)Y+VmFiVU`Fw%V|?Z9UpWJ`?fX|MX9jW+r>kK_4$&%>_Mh9Vy7!7=acY$Q zdqldphGAALJYXVS9ew8($$sq1v{+`hb4dAG7yMOj!AuFyRZuK}FKi-6+%uZ)OreyV zgpAh8NL@2KUtkit4!s)u)BkbeDc9&T#vu0k=gEs&y6yGPHN;+YNVgHf1b4GS{D#tm z37e7Yo55`l>)l*qc>3Ng0LOQrc1)~#*Gr$f>0Z6U(vIXM6D;Ec#Du+LVid-Y@;+QP zh&cM_33Gbte&R4a;lJKZetEeC^fttaKSBll#Svu!J8lw`N<_{qz?3z#n z-9s3ZN6INfXl>)yj^3kx&17GEUEIyq56f%@L4l8OIJ+b;urjBtcg@H@CAy3vaGKtv zQ-_$;<9yq8opF{@Ny(i4qDAR=W{8x}xg_hp;#jELS7dG^ z9o4|1^pEy!qGUXJ?M{Uyk2v zo#R9XYD1M9Axenc%QnI>`UsoV;{FZ}I|%2E`vN1diW0P)u(r{#>}nf{cMNEHcN|E( zv6TmvZwi*cx6>(Xn}Nq7AwClUJ{QiV-4~ ze{NaHWm0;)7Y1GuAt*I-RIQnz%{cePL_j3DGMZR=GNt=J1cr=YkC|HFrou4Tl+$i|}IF;;9tNK{UZbpY1C$soY47SpS2 zx%xW4+g#7XO(BB>H?-{Q>;6ik-YHGIT1;34b{Ne8>GDkqYw6Rcl*=IQ_3oHl>p6c|m%QH>GkEdm({i}ME0WS& z3S|6O0gYVx{ET}>4Dnpy7J-&>SAjHbXlBgn=pSb;pM|?a-^yo!itN@Z>5RhQ0*sUv za;f7^n;ot?>b|rHo|>KT#7QSWTj6haHQKq=J zuXGQI%~5lMT`I**WAN;DJ-xeo$QH%J>i#ZHSfQWBYHj05TO8lsnu|!;#Q|wnIPE*d zxTZ?&Ug{fl2rYK!Lr+=Pwh;?%`wxYVBy-`zWxE%sJBm5p9S4EEp z+;S8MFgfx&c1pwT+P8JjiK<{o>~QM6#z-G`o5V4+ppwT$`*aXhE`&5Ff3fwE1e;yp zL4NRwQTM$^keWU*dblJsF!=2rlIX0gI@cHm#zk>Czsc6wdU`VrR8$2mc~;9TxeJQr z4sg_`x+lamzL}m7_+OKT#&_EcnUJcvSva;5TZ@l$Nc&wM*-F|kaQ}!|>e4$go=a=B zOdz5-WN3QOK{4+=#@t_nKDcG%<#3n^EO)ClquO`-{97bbr!DR;itM&n-^}ldkhx#* z98yaS(Q*oU;%=-yBPu8(ke89Wq@(4leR{H`SFr zNGN*TQL*i<2FhR5uQ39jCd>XQ=PW&&PLUDyuQ$k7ov$F7&c3b|56cEmi_NK`sMui! z_1)cbVh#%%ny5WM()Q$wn@c5PEWbwU-7B_(H~4lxR}_)2CcoFyo32R4?;X>d@NJcZ z*1dUabHcUJDeDTOu>7Xp{{Wi`u3f|&U}HvR+?h`w3){&x-M&QY-=G&rzw7_biZz7s z+1F`t5%A(OQf}Orr2PTyuV38kc8K0FQ7#x9>dq}6PGxb70_Z@ZijTj$J&KPGQAIn2 z49-pw&0MT%6i2Z-rTzb7a8$Azb7h6QWcDjV+pIb(83`Aqr zQg@bA7-4A&jqez(`t%>*Ak#Rtfy5e$RA^zi61%5Q4_C7Zfl+NLm9)a`g;3`r=|mQ* zX*Rw5R;(`rwn8RU4qpgl1xl2)k6_a|BgS9B3_dWIjhbiIW_5ca$w+h7W~_o}(i656 zc^rtkMV?lO!fymIsy2?(wBQDq5-g>oI7&*n->+~0oVwN$3sW1MqN7(<1B6t`C0Jn> zkA-uKK^34|_`S31#r)ciW$DyTW^iF;GRj^<$2WhsIk4reHW-fvIzg zL7-Z%&Zq0URrVDe+6P51JldrAyegq7L~N)0HiJ^_}e-bL55 zUnZYw;)yc{pr6`^Cy)zRXw-(;?r~U_E6KG?SpTBRn=Ub!9qGp7yG)#100Ruac$qF%VNV23}b)P(nnV=zo5?mk?I>Y4O5K(!s+ z5AP1iS>)yF{tAAf?AvTQ#S&VON-~@%M?njP|GjrM=^qo_+n1=RAZSxQZRcDnGo$mv z>@#@!%gf1Gy%k(Wrdu$!K#rQ6b7cT_Tm3?CGTK56mqLjD%m+{1mmdM2k;Ymsq&-S` zwQ2EHAZxnFX1qHL3S^7L^gji>%5`=%U2pDuJmS_XlHp*;EIKDkccqB_NwF3rFBim= zTYZg=8~i7Fu_PD!7=v`u%ZY?;!RkprgUaYb&4Os^ODx`Gyd_f>6 zO5ThlSqJBgnD1e_91_<%CRQ$sHG~B1BP;Mg|4>$+m@Gc^$zz!O=SR2h_)jM(Yp*-v zA}25ZRijeiMsAYC?XkvLT7H3pjC0oJ69aRjPkzc?K!B$2C`Y61@_o()hZRY{bXJRp z?DKpvzrC0>rH&Y}rN}*#gNS;)Q=)EBOpq+!ozs3Cr)X|3$zyEXe*cHZAlZjCl;+Yx z^rIa=X>+0^(mfqDiL385)L(92SW=z;2*r|ysa6X~vU8E$xya7J>1xmKOL2p14XaHs zF{a@lt>8c533`undWSTzq9;O4WXW|o%sG}kg@W#01ss;L4e@?|oJ~H}>PIf+%cnN= zBW`m+I1|n=C#5LwNDZ^Q7aE?w_jB!IP#NF)tar#cXwP=HT{ui}_PXC_WuN!Md3>%2>iQ_!yebMEe5nVHa>tMHvq~c3zc8pvu0bcJXFJDD{+RL_4 z6P$b(ka7^GX#hWv#mFjQY3S+V%YBa#d^PAg$6qoCjknqb(yWsd$+<>y6MQ|LFK5O2 zGW&eLUN>S$gOxRg^uS1u)jN#zkBNCIX(z8GG6R0Wx@e`{l%qT-L?W6|Y55%?Wnoeh=d5jUTCSEE!Gcd(2zv$dyK&)9w zvutKlWWf)|S#tPXGt4o2S2dj@qCE^ckq~2ZyJPN4bG19$I~g6*n>d|ddq>dZa3O&d zUoIAjH8zF!`rv+Xs5^AuV+2tRX_my)ZJb_$XVY6HB-J5O=3OtD=j^fmIV%>M>0%K& zNdS8p30ufN`t$Gl$HZ1=DMx}fMnZh`l9bk#AICfP)r>~|`8q`P_~%J|t1Th};mth2s-Z6^MbYB+PI= z$N4hv<;SWt1J-KCku(b-QL%)AMRt`%om&oS#BaV%?-p2z-V~(*Oz{v1Hc^EOgBsjB zK6ZcMPyd)`8v{~jtYnCoBt-To2-IlG)8lDFe1C)%C;9ec)JeW=6>Mj@G?FNn{u-Sm z{7drV3JJ!pI8+gB`z~W3l!P;G9ywKxqt@9l;;Kha+vnQ+Yb2AKJub3mo9udibG}~P zUj+<=R1;haRCEBli+e_tAe6$7>=Q5b4^f$o2q~R{+@&i_{o`!%v0fr_JN6&jmWVj~ zLf{ApG23}Ht#c_LG)t-8{0L#HXDTUK<`J0a1AJ85d$vOc$-hQ&qzeD@db+$QSJE%; z?}Al5+#kdpDCC)8T|n)c%k~awBDLhCktP?mxi;HPMrgrmp9&e_+mDkEziqMi)|nM8 z|J*`-R`Q%FkN%TWC6naipD`Js_s*01h+{g((9kQ_Sbi7V5a-=uJU(r#8eo9Tb8CA$ zOYf8z2r0u-lyNJj-T5L1J3S&jM0-;B@efyb<)gE8)Gm?)zk*SmI=kvt-jlM!3*jyK9i*v(4gKS?` zo9XQ=yUB`+;yfsT3R)Iuh01m3*846gK=+*3b_FrGL#a)pt+;cTqh;{MTJfX+yX*O* zspYSecmJ+a%U^3imw#@dKcmDb=4kI4nJdcR_t2+V#Mt|HILJCiZBQwdom0*a1Q4qd zP_W;wRSoBU$*#9jhPlLLjYi~)#nCyhEBmhc6bNFp?9o|Bzh^&>1^o zfp!R*|2T77m~N4_y@g40%ZOCk8LuC@|3mn)*=_yF;(<0~=l_&S0W)f>AkdWi@r>lI}Q{}0gLLl5e zZK0=^AKiKNmrkX(bzU8QKcR^6SOLHxXjcB|zeDKBvy>Qo8*9tsQX~fWs74M5Moev~ zu6Kn&z@`x55aa684}ES>pkwrzQiQN9b#Bd>!u1eAz)oDk!nxXH=eSga(F(1L}v-X@L#n;u^SBk z)uB*4r04V872iDLh{eGThOA`b)t+;KAtb6UY}f9Je~aX~z?_s$&^eE06B zgi%3Am?%}aNw#&M7XDQ3d7dbVO}+m?U|X9_1h#@%VU=cf|8d@N%E&Q?ij_eVlpIc z$LB`qQ%pYl-Hn6K9MSRCI2g66D15cS1G~yNTtg)MwD+|SoT%1T6M?hj%4lNgt~~XC zm1G|%6<$>bRhNH>-qKl<#G`|>-})}yd;h4xwdV;0MB)661s6vM~Zu^Q9We)Ug@^?=bcXJuL=wpGX+?0a_$_GxOj{_@h*_;F?H zx-@o&bJuQl%_dfjvYcrync?h7$N)94RMGwEj=rsb$#gz4 zTn|`ZW~=OC^>zBtEF_mZ>kKDAh7^+PQ(`Lu%pe_;ak<$COjlS>D}IHB(j(N&E@!kg^cL~t&d z?7OS_)vUM)N>}A9s9NOCwhhwQ)@%R8gU3bcTnhGyUi}(~l|6 z6v_M{0CZ%Rwak?;mWYI$_JB>+p>0+7#T+!&?aAaG*ka}OOb2&^e}`nZ2hYDOE>WoK zvRGU<@>7BR|X{yG;hhHbJYK?^t&S?Lu zHjM?G8zq!8<~6MNFN2D$fk%Lln1La52BQ_lG`!~d(ubvcL=2XK;v?H#$|ngU4NCE` z{n>z#hWEcrUe_U}D>3xCEyUy!QVY$AGyi7125rJe=OLo-J-T(_# zEf^)ygJLOHhozh;L1Be=AY3<#5@sEkl23ic_3^Or~zb3h#P)B3;i$U?#Uz0yx zY@t|&rByBFMLQI&CW-^@9Cs)*s$d>jp254@AU;3$y~V=LRQi+yg`Ev+-IDnU)j73S zUt-X<_|0(%X{b};Drr3P#C=tDErPxF+4@HHor}iw%h2Qe7P zB%&_v!@PrHRZ)0qij*zH>(4jEEXgt0`ieL&^oL(P)r4OYkR)WTtun-Eno~k@Z3F{* zJ1UrpcAn>SS-tu-Jry4nn&?)ylC&=$`xi-841&{Ece97=c3NDAlitjtv`J1SHr)Fw z2KmP{fx;(5VB#s=S?^vGrMhtap#}6s=gmpR$YlCA!1LoL9LdiLMwTRw@!H z)*}t{;G8C=2#RZRh>Vp^C0UokG&d2Sm?+oVk1o_)>4UCB&1gfpaX0{IZV6LKx!SYj zUw7Yrau9mLN$UnGD(Po1$##T#w@hD(x}73Izs)y|P68wyxWl1x(aAi!E0J@KiHQYC zI*}T_M?AHDqV+Kfkvoed@BTe`^RL>?{oBFbzuLQV1}9To$sh21f+=Pb2FRXloy2{K zF(20$aUNaYz&G9Prh@L+!1peZ4xekdLI$`7_tsD{kmUvx#r}K$U0(l`m?A7hzS88x zB+@{(ZXa=SYDMPW+edF+c^ieVQXCE60l*pHIhl0AQSuCw~t)2iD9-e%XwO# z*uYXnl|#CwJ-tf~$_k6c^mDrT-3ITJrnh7hVX&KJ z8iX5-d{Ds;ex!Ub2FUk+P0A+u_fbx#7E}JYWt3AZ!?cqGQYv%Ktm3DTLKx~5-Io7)!fj^zM=F7_X+_6XzLaLH)$$9BZ!-;r8C$bI*u%2ADvaND}ZO zHy}df?pf%u-Q9uOZ-OC%m@v-VmzKHJR?(DAyC>H)sNdi-$kzgsu0RFm)zwaLu9yz0 zYJB9T*lgy2uT|iMuu-IPi}>!nB;*|uZM>O@ME+K1_Um@Kf}iw%?jCNZ6L`Pt)v~z1 z+x*Y6xS3AAtO}$_zq*<)&sTS|;^u#D*DIWXXbK7F6UU#ut`Ut#0m3y?xyNwP##GL1 zuE6z4UdN+W=3wKJ856RkT1pHVjNz`5Oy8d(c*5_)IB?c!{Ry{#UB z?p#N5u9#d^U98sAWd@=CDu_ZMrhpI`KSZS{Snr;qe@v9Vm}6Y6O*lW+z_e1$IQ00; z0sTri^2;EL2yS8NXwpn7jH1z)Gs=xJJZg)gPrV^{x* z$@sd3kKCfj;J>U_A^8M@XGET4e45_)au11dL~)H|friVJJq2ka!_y-aL_2pC`izWe zc;lQ~>-OF$q#1-udSqJgL+vVf?=BX)#yaZpiLpbr)P0++x(T*xS5_*KIt5KZW830?6m*i`*9#!Hto|S}vsBn+vJ$l22frRZ<65(zzy3Um~5sYzooz z=QaG7)qIm(ET-$P4X-1yY9n)j)767`%<5BOlVbQE7Q8Nv`JJpqm_naedZzJ&Ef6aO z-T6$nbg4j}my0#L`NOs+)IGjChP{h!b+<)>pba;za7vH&u7F z!%@4bUXb&&n_3s-08Li-+H4FzxCFe|^VNm%-e3e=d+5R(NN_E*-7QrL*i9FwmvfDw z&9na$@T%4*IzHXZE@t=FKD@xy3X?O5Q)#`+7TzJTQ4_}CN)QK&gE0DWE}l1|Umu@n zP>Dj2l6|Wxfe73-A`uHAz?0 z>8zFVf#hIq8vf-)EL1aid?Rvd z1JwBpES+pd&KXU22i{ptxXGnZt$0IX6`rEiatge?^>+2%Chh8xoG`6~mo7pIsX0Hk zjOYPoT--Mp!P`?4H499-3L(2xTKp>}hmfmp(`9y5tk?6^-Cf|%gv_b3rEYNl?K}UJ z=zt4H?=19Qj2j=)Vzuy_k`{?5Il1MWpMEWBc_2HWZ^O^=*2 z9++6ddzDEAn{ioj1LNJU+!E2gvhLp@T^(#XUzYMyDtZ4+0@0mkKV*Z5>o{6m1lm{Gf6S?(22&b^DY4NS zE^$Q|lGe_41Vz5or`eDA=q~JeOiFG2Kipq1C2P`le*s=PipXOx{+ab7yjPf1uRL+r zJ+$k}tD%K;O|>|;98|L0%%73oY4ojVM|>eoeaIlq~&v#-VG;r=eMfskdq^LDm<_$$tS4lWP_+ zzk6&=%@7LJvLNm1^m~^`4qZP#tS(pU?BO2r@cH#Dge9_cX5E4BJj?myaTY7>e|9rD2SpGSNOht1pjWCjJ zM@v!gRtUo7sWZvujSnsGS6f9&SMZbqe<4z~n57*HzTO4XyBA*{;Fp+g7RA@>@B7Qu z*8sCL*Bl4)sOjCpaL_$t%LxtM@mM5Cy?X@XsW76Qg-YhdpF#l zSn9TAl)M~ohi4<$B<+iA?~rB{Nn*(vEL2%LFhW*@@ROIB`UTMc`@vnx`ri*f?Ow`4 z;zUA-ppGs*0oQE>f!Og!kDxuXiAB&2m8Mg=>JUfOpaB?cd)3Oj;okCSEBHTNOdClr zgD0UlJdX>~y-QTyDNS#U#kL8`EfSq7G|0dg9c9>{OJuO$EDt=sAr84W#qD#V8BOr5 zhb#vlR%XzBhe?&;aWmA=ZmUsMFq?L-=-nY1LEANt4AssWJ`ouoB`=8ylDn6&MGyCs zSlx&zbm-vqQ>7~yCnw(e*ezYr2Vo3SPo-ELyjmPOkOB~om-k){fKP9T5t0!<(%NvfZ&yt9iqxWBi zZGpUbKl!U(Om?eBf3=b&!l@8;Sy?+o3-+PGACd&!-5+8L#5I$c?`+H^j7|j-fTJ2L zmtCD0?-uDf<$85KUEgIF_iOll1LY@%O<2K@I9c{~o!%j_rDQ@&VOplrn2MLh^5P-; zf=|4jPupmUrHKrj9~P_oKV%HEpMG^KzMmZN(bkGDL{)|;BOM-b_}s(unusU{Lx!l+ zu@JZZ5aII;;2`#FCpsa$swIy#p~hEB1(o2`})*Q*hk16!0{? zD=+>jQ4(Q=>|IQ!Vg2c=l(8>HN2i`xGdfR)l{Bh@-OyiF$8~jJ$dQS zN;>mIFI#CPNe=m?qz+FAAXr+WxJXc09HYs($1iYzhKOq)5e)CaL4K&+Fdq|D&Iy*+ z9<_RxNY6PhX6yOpZgo3D)nOFLxoi;lgY6>|CZzc+QP(uq_i#^XLR3tcMzv&4_L@?N zwK6q3u_#XO?Xf;3UJGdoWnL?jG2}H@DHBJ}e0$6@n`G~My7`0#mMZTHHrtMD?~=Xd zdcX5#{m%T)sj8lv#xI08?&OaqKf-e<@jEtymSG>Tt(Cvw-HqCvr z!!Ls-K3xpZzj$)vza+_x6Rh}ZYM|pgM$!Jd^p2g2Bx7`X z`3>0=7WYA&ih-*aIb_zNcP8te5uLo}@CnQzw%cd&{!y;Sj4gSv*J!;1xi?9Wlkn}e zTsu;7Nc;nSktO7)&wa9f`_?09i_YMVnVtrAzE%1$-NWS(L9itw|qCwcaf z3fQEiv>#p@p!kkhw7gC}lll^a5c_4dncmK_yJEQv$%o4B5`0d|FgbDdC?3=LC&lKE za4J~j#;{aA6ROEEbRv_8@|>Ek8=ba9`Xb0%nwL7H1_EaNAi{TqqX#C^pP*d_09 zA24wY&AVp#>hP7`J(8QKN!=F4k#dZe|7m&$ss1UkA$B4rMCH=e7CFD)z}whtGBBmZ z!(BvXMDx)FB^%EWgWJbH+>MftfBcjreaDDJ^4BddrM9@Gjbtasm}RduMWS~cIL}_c z&RCI^TWOTwn(nPH(sw2=Fybl#I2spDZ>ns2jR&@m= zk?3Z9Oi9A`smr(rMdckFmgJP+3Qd2C zS?`n>8JHCC70tESiyt#Gc_gVEdljtrXwh$Hlak%!5wX8Hh%NuzqIapw+1h%zR)IZe zQBE8E=%YoRUBp@;M;}WF(XgdWke#}C&Mnee`ig1xWqLDj?vPm&JVjN-^a@W)#^{|C zB~DP-U$=~ON^}`Pc8|B8f}#)QD(e*#Pp-068;?VPRK~3JI01#^g|TNy(dWIvSm4^A z3Oez0Kxo=kodyi7lfR(8WHP=k7RCMLe45RQ`PFh7Mzj`1pixO7r@Z$@n0H95m%+sZ z{}0j&GD?iT>Abrb)1!AGaD=+-7jBC&s18LqVJVU4vnU>BklX`G0}KZmd`Cc-R9e@xd-wD z^1%ARTJk(+g2v7BS|?}(&81{YyL8SaeT3rtC=v#BEylasK(^WXoyKCpr=~U;TKdl9 z&A;KGe#2eyuvo3LZ$*P;)@U#d2w(~RQ@Z@xE_qk~qyT~fm4)CkIKoSL8;!^I-=xpd zaCD?kplGwl6%OP(xVczMfxRO#_Cr?(6*e4kFQ8h!l#41}gx^MG&|Zd{ukzRe6Ur@g^t8W?*vT z%0upMI<@meD%9x+4}yv_&VRr@P7^gYaW-k6whVv z*;4P2CSVCp-BGx)-7#9aTcX5hdt$Ej{t6~Pzjw<%ZtJ3baS8{-1$_JK6w#2}3JzcS z1oo`wtzZ&ZPEv*Fl&r2Hlqw$#Cfg2d?}q6kJh#Qy=^{IyE*_db7;{tP92Gie{W~50 zDKSuUjbxg{?q3aRTdOj9>~)U)9N_=X3y^eHoj^id#!&$eco8B$k*AatX~LcsjPZ+Hauk=%|MaU`~Z zifYgtOs^fE-Ytd^3(PN<(}(Qp{%$^9ucslkfWXQjQXk;XSntp|I3|W#_~f9ze1kka z!kK;y9qIC)-QpR4j*sU2+{z9saAKhRSM3=|E)s{~4p@ENUTa7V)_Yko7iT#no01v6 zvj}^@eT{~p)@14J)mZ;316QS{*({qbuNFap7P1=nmW*KFonM@BZy>PnD79&h06a8=}#}v3lEBf~{Dw8)?sPTqk(=hN zxf(9xWte{Q99f-d<%{?_n7%7p~oNnh`67umK}*p-sc(-ma&2cMsX3cv#)v#hkCD z@<=Vw#-qew`Npf+zDcRsLLNy4W5yZP16VT2!TTmudq(xNu{$5OG3vhj7$zI!b)z;$ z1B0*Vp25c217Gh3g92Z8b9bx7JX=h^Ud*P;>s8=q%K;)tZaK+i=XgRrxfdg+b5Du+ zSVl_$Z5B}u>Yh&E;)w_d?Hpcs``X={eCw2Zy7cn6)toq~Cs>PAOu~(JPv1S`;RVkm zA{ZUOy)%yI3~{oh`Vbw{MBXLS^@OH4T?fBM5rDPq+7gJ&?JiE|c6E6FjHcsc6KRlK zkF@Rp`#=Q0Og1_uGC_KJWVwSs&RjAbcbdJEOovm-T|P*eBfT2_>zT?O1TQcGtSE)t zs5(D^%~lN#*(wPgULqMd=d0y%KFz*lm-ox_qQQrbBM+opv<%q#HzsUP9i_UUaypeAnWlHe zbUoTB1o!joa&^95eO)a!*Yg0~3co$5Fin!R4O+^#-bt~+cS&)(&Dev;Us^48`{NVK zU+%l(B_YcMQ}sr0;a8PZW8wC{1IezL#E^XKxt|6=s)sj~1l z($*1rM8Pr(2?K*!-3c#B>ZJc$Z8bfBzf8-|X+%{Hn1u{kY1F zY2cFoHEX z(bnju#Ox2of)&_B1hiHu4(Ym}>KHsCO)ylG2VisU*{XMk1IZF3+n@5#fumIG4jr^A)gt+YG0fF- zr_$zH3k#m+#~(WI%qIo9r%p>lOjZ1LtX1nhykz=T%1r@3?|pW&nyrJR6bEukiakAa z_P{?W*6)C9n$pAd4xU z$wVLxp|jD%Qbvw9wA;W-#WB(@sux})y`XdtuQNMe+$=)Hc z0e3;lM(uw7IJz7vj@k{~Cr19`%#D%VE@@XM#}G!hg(G8fxS+EZ>dAPp|Mf7MX5(Zy#%KBH4oHJt0Rl#wM zQ5!j2JkRp6C;SEo=Y9IW$-8=q<&#rbde_P?YjUfMksiM+Tu2ik)NZIgZ{fVaI8v}W z>cn4wg=*r#^7cNAe}Q2@Efxq$_|3t|PB*jb)z@GI7eaN4#GS<8gANIV{ga}#CxP@< zMv0-U3rdUTM$B>aF4L$LUU=)CFH+V$xz2?!QaZ$6RzNIF%WbqDo?5{(k67KfF{nGb zuuuaUTOn!Du>j-UBe^vEUB0Wxz7>n>hJcr}rAPzC@eSU8wbMT)Ht$C*d>$b{;QNl| z60@5$`e}^jet7G4YCgP8>C}MTTLqu&x>I9wEv1zyS?M#L%=IiH0?JzL>uC^SHgHnK z#l*BxP=}Wsw4r^uS}wEC*>t{{hP$Q6v}qt_=lK8%6z7cSw5~<?oqr z18K;5(4PpB8%Zc}7GgBqOA(XAbNgd3k-63~pyP8mZyNxl^0lm0SvtH#dRh2xwz?@c z*=6=+wG26H8B_2@p;(+oPWrx34UUPSl|RZTX*QhvgcH?l#vUggP9;G3c;>ctK05WL z*47TwkjGN1L|qLwxN%{1Qcw2z6QH;@GN|ZuK(fFFJgP!4m|z!Botx||1eZhi+uSw7 ziu+|qD#qby748wRU9(DErC|S**y<>QZ;Z+Xp`JWZwwbQKPS?)AZDvQY#FZL#dKshC zhmS_jzfRuPF#hms4db_MFy<<^Mnd`~J*5artvOZUc)uUv07!Q2C>6=4n~7>*s~R5$ z>+RZ8b?%tl?3qoM>xXOxKj-H2yfJ}+k_3Pr%)m`=9y0HcC?ku-Y8zaxQ-X|1Ha3TR zi^kX=XOpwI4(D0NHYt@{yYoy&xq#GJ#HJv0`$NHyt zh25cQl~F>3n%!KWxLLHfEs?~v%KHaKpMY)$)gLL<2(Cv3Ou^ohrk zS`y5cA17~XNzIbYXuIUymSDooD3`)nc{3u{goC{#fNzupGxh!l8DFT)CW6){rGFd3 zXdBJ4cJgcgg6V1JWwD$iN$&j`-e@R-3vo5Y6c|ZB%`nML|ESnP9OI9&uX`1W+SX*i zuA4FKDe6RBt1_=VLWWmKgbW69O>V5RbsH6_u&kDr?4~pNAy#EvQ;9WYqI~u7>B0jN z2sW@%Y15OAuBv~R-Kc#`LchVY&x@Pv0=zI7$s#BgaRT9PPRsUgCkaF6)V_C01F!I{ zVde0nu*sBx@Oh;t7xC;fVq|l!z&p6|@hH@4nM^79JV#bQ@AXD7CYXi)jb?WL0p9*B z4W3a~J`rrH6?iRjeCEKZ*olB_|{pKO!y9NFXs-!P}AOe zq}-N6NT?G?yT@ib#|QjlqT>T_ANWm7jM*#dr>G%gZ;>U5O_yT;O)Qmvj$#Q?1}dnl zg91s0f6@I*gHKjppN2;LfGLgS9rHEeoYqa>Yu2!2&r z?hA}%RSoK(v3a>XgRR&Hz-GFVDd!5w#s16tVhOR`8pVR}#sSSUYM-D63ZlBVm-0@D zPL5OX%DK>cZFfX!np)E*&+pt;(|qN!$dec?UaOeE;(=z?q5u?^#y=lqkuFK{XFZ zX4`9=jSe4;OtFq%$&4ZN{V%S!bk#MxY9}b?!JK-ffp@9kW;}sF_Tc%Qf5V}iBHOn) z%wZm`3fZvZstriHW=*}D^n%!9U2?UUUS-8yLq4+{SckZYNjX42(?2CfSs-mm_wUk( zM2jSx$zx2Wwbn^KeVqJRjMtnv}{0&#zA6zN`p%lAGrT zEZ~PmT2&aqSh_d>oO>jPoYTwfYW@}8PJk0g0x4xV?lt#Uxbshm;e_!Cp*T(B1e;5E z##?0HYNTmAVLEJJnzsFiM=SO(yo&vcG_NC=mfVR8k>VEsBsD!Ujg@=1fsm=+TS~My zZmAbUDH_J719&5)p~U|d&q7waNZZi;xle(UQUaiI$K|z z0CLWV6*{Cqk!j({@wCE6F@EYHlTLKKdGGe1-8y6Y=8?=f5v6{PtKFeRnxxLtM3?(o z4_p2iCztZ=e7l&yJLJ*5E2d9~Tovnw?6!EgTZJ3-3cdjfTiz_^{oR#!N>oBwOyI7D z^3F*}ZsalYq?T#OpS{-C&q=K>hBTSRm37oM*M=EIk6cI`J`L%;rU-r-av9^tbD?!s z@f_Gmr*Lt7jeR(s?$`6b=d0{uHeG~N!ve>-Y>v`aqCc6qcS@|!h23uW9;k-Wc%S(x z&h61sq~7yW0J{J8Itse~*ER*o41O_*x4y%0Xvfl&wb>tHe#$kKn5!e2Ye5YYN2GFU zfTThz*kM=a%(=-hEr40EUQ9RH?Rt8#x?kV<5Z1VNAW^Xl38(r(*gqxa>6pbtpOOZI zcT# zF>-2Y^45mk+mEh#<68$>?dpvTKAuK9IvViLr$mTjmq-uMuJhhvEP#A!I#Z!#SH6mL z$%uQGOvcw@wVp1s&1^mY+Q1hTSfw=_>DqeZ%RMB9FHUg5UF+r^&Q2Y1aPPYr(vGJi z{`%A8?9VOCUVo}#R{puA(?)7UvSpvuJt(@QF3~pO z(DX?!Y1k9fa6C}M5HkiX2y=_BJeP_n1;+WDhrqlS9Yf$AyQoJJVDte{IYuzO&eihz zl7kRhRa@56`PJ-h(c~0WNXwra$S?!`2tmX?@N^G~IZZ_{nw5$HWN zg{KB2s=;Wm$j-s&`jW}j%dHT_GP|7qJ-c5w=AkhllI4zIP6tfR_{T)o#>IrPT#>zm z72|zGB_kqkr|2hHxxAnKnvU&Hf9N+FTon1+eM5!v}Ps z4SZDdZL&*`&AUo6TGy*9NEpwvi&^pc^EB8CLgrsaM2_qe{VO=`AyJf)k}p{6_Lc+H ze0R%XSf!=~QSbg=6j9}$Tb!YylBt@Pp5ljB36(;Y@`PFn?t6(KqcPDouKZ|Vh}B{_ zm_;Wb>KhDNo%=E^mf7bu{Fl{ylU+dK_I35pEOs)E`6UXa_UEYfkBN5ZEGou((uMsL zTbSY}4oCZoxx9Jhm0_H1+4i|@3Na~In8SHXY)+J{c-0I{^iOhzv}?t*pXNAs<kK z)?U#|fSGmmHk@mu5^%y5mc`{mwz*qRuZu-k-+`!wN%Y(#@0~QdXT)l+1cG~{(&*Us zXmZ8dr!Zi%qrdp>or}VE?@~}$N&C`;efI2LoYYx!Fe zdfTCwuhZ!)~}3Csh%zc4FR*|+|})Z-u@j2!MUW9 z*<7#Zx2ucUbs!N;AKCG9#sucNKP3$d#CH9?W14W56QZ%GEEpNqL%|^ej=JGboSm(` zy>j-uyW@QJ`%k-foNe_kK6_^lU@OI)h7j95Atfx|1?IVWWR|qOqgnTi7^x$Cpt#Jn@>#O_ zY62@`kDx0$MD+LLAMQ@($3K4By^|?;&H=#OSwbO}*d+1MA4BrjHIoRUA)+-Jeh{{I zHMyr~sgH}w4TJ4*n^?#ep6)Ne~ZR6F5@^~ft@4UImu8}g<}JL^$AUADy(ly zk`ou2Jw33{^cX}R1KjM-kZIPibUC@+w8E0)Mp?goL*VxUyMcfG@NU*KkO(Ln8aCrM zQhh{JTby8f?XdJNksKbw7w>91&#u?=YjB?dFg3|3JPLfZb#Hb8_l&65nLhG=Qy?LNfV$_rSdO7)vjsTbLsc zu?N;$Rcp|EI-Og6kwM|;ditO2Td|l;=OM2Z(-1S;oWehaC)R1&G=1HZqN%6E(F*QL zghrTK4gPw?&~Mxm8Bc1SQ1hKI-n7#}M2eR+z?vMKzpP zQU&n;ARLxhICd$CS ztiu=rmXJ2r{xrLg-iu8})+xz)8U|mf?1+v6sdvjkIpml7%Xv9YyIIZyiV-GBjueNv zOx*O0r;yGuQKcP%t8CKR&is+t1R>#5?4h`QT*7jICTK|%i=GL|UCtzZrRmZAQ9pG6JnA0o|BYlF)ps01|AcD}Zz^F$h+-#Z|G)&X=M1 zoWb&i;JQ2_X-M5!RbyJ~;LWh<(Pc@n}@-Jm;p=N3;+-lY^zFom!TVn*c@ zPbAZniv&)&rwlsxMaM$L=sNQ8LdAylSD+-OQ%K6WAD-|nuRI}Z9XoEKm3&(E{(aN${T9frcWAUUdR^h+v4z`uO&)@ENiG$ZYj zJ~UT^P!;H&b7La2J(NDsjvop1UB5;6hyzgX8B+}P1N0Ai#^Ek@HbvYnGA{25$)%x- zyZh_{eEXuIVW0sJsO_Db&Z*VTc-uK6=Fl0(e!1XsN5(DA%@g5Y-%7^y(i z_KmyUGon)j1P89Q+_HFiUaa74Y}xy;2N^m~eY_Z8KmB*|{y!VQe)?|>*z(UU`&iN{ z4soH&4k8J+BBeTYsKt+#UtljB1GSBGmWK~Gw;mv)TK=$IW9!~MhGP?ljo`~|;U8oG zk+geCl(({s<&AKe1RkdpGI;y*dnATwE=C@^?b&$57#hEPnv~KdO;*|R&uyazNJXQZ zH7u%fODtCj3zEajR?f^%?2ZFJ7ynr!wAc}2ixn&wry|3Jt;c(BPZ~`vuqCwlSYi)x*4!6 z*@ydC=3E;j%-bZP+T@yZ1zFDa(e`J*Ea@7@ek0w!eV+gpmBR$X>l_@aZ;>oDyAc-p zR;=&gQyGwnP%K734rEZ(d!T%tds1w=9X>Z0Cr~RlpD7J;y>UOzDezUC=Qmd}3o#I=p&I`G(nLLo9LkSf*TQN5e&g_!m{J1efI zt7S;j&fs4H?*Kvq)t~LoJtUTnvXVA|%cf3rchQKNi161aBGKEcLf|le`51MWzqBcQ zVOXn}(6$zzrDfHhGsS=Gs*wB6le@KJ7H304ubM8VTh`0D#n$BVfuMa|+%DIbv+V2L z>h7xe9&*PrnJbgyRDHJ!bZ3p$JtR74q>0b>aL*E<)X z|9Y2zP@I<#l3QnI+6vUYQIaKaLLYJUYtNBwZ84q2phE?=K1iyiFEGN+d8Yafy9;Kn zFX4qX4my=8zcob&uX5(P}Nj`CviC9``kklFjUMY_5==JDV@PEwPs=TVf?~ z4+OP_C}+Bm63Zzk+edbPoSjY2d{VGG`o49DnQF)v46?I~Ti>Er!29TZ@8-9~B0HTe zvUM@Pe*ABX)APG|@%QZSteC^!@6LUcBVP)~EpfP>=nZrKl$cxQ1X(;K6Wu#yT#r4< z&_+7)ugR}pY8*O*vE`pz94I`qA;dUKD@fX}8AMypZ)vQ4MX{*$(EHB~!>pzXxNe^+ z@NY2yOV`EfD!anDtssUi%k`*gZF6wdX?SU=_V`CdCkVxaQ25xZ_VHflzkU4L7T4$S znLVGLHr*mS1m(yMPuP-czKj=V+b4f@ZY9@lLlcs$+!7&!%*Gh!Tf zoR(UHs;Ng*+}y+}K9)on4aO7Zdw7T#1mC=vloR(45Pb8ZhG6;UHjY1xSG)zJi@3nM##qD!INE@NV(_VkpuBIG>7No? zh~WlnR*IY5MZn`8Guzk2U-JHK+JIa_DuZEge?5b!B?NyciT{x7Hqc?Ob{%#P2*7eHgv zgXxg?@~@Fx*KJ+(wz)RB5V=U)d27jA>tkXCUBNJzP^8)KOz^;DblIRCTz<~M8U99`^Bd9yDLcC|~8}CUvyr=j4`^Y@Og9eM?r3Mlt zx0n~Fa(K1Kb!|>*q7d?DJ7Fvrge6hw!J9cm;@QoY_u}K^j~Z?-KGtyiqhsY;;8)zE z4Z6$goMC?0R|uG3fOf!~vIg;qI3~ z=Ss`@d6v4p8Kal=&xuj16Ar;ct|)J9W8ie17WT-gWIHw9&imFRmsXd{T#k5wlv>af zm-e)}9Nrs@V9Q8jEf>;06)MVxWp7AeZHH){cgysl^xI;7QQT&z*>l=t-9lM5&J;CELp1f$A;9({wlv~4Vx>&<^Fovv=P<+thT`aUEuz|kS4b1k8KHy}h>n<8L2%6LKQ{r3P@ z*KA^y)V>nZ<8aja7^-qqu-C36)wy6g56N^@QjFbR&KhbbSmPB~w9R#IaxwReCYCim zGkmysb26w+K#xNb_ayZ5dZ>E=1f>*|JF*Da;nv0;JO$mafS&svpGKP^u-%Fx1dOL0 zLEbHfv1wi|uZwkdiF;e&vKD`sBeEnn{ZZu}(u5U*PX(sUOv=G+MaCm-#V4}?{qlEj z>iqYVz!d`|?tzdpk~7N|#}X zo6hmlzREg$R~S5pKo;IkuG?*$MgOE&`4#7TO%6BgoFZ2=vfTVc%CE2L!8*76`l@ZP zjzKJ=s3C4ApI|5d`Bh%)mzPp`J*K8*!=x)F5Zbl4?A>s{?0F~Js6qBjlcPM1Nvz?t z^zpruVrUZr2T8ObySMV0A=^1>57)~7;)z*)NfEOIe`gfuSYX}ceOOU9ny2&@pLZ+Y zd-*YM*I%5ZXE#4I`^wvaopmA7xyANA$OHU}`Sfay5+vD8@om2RHaok_Hh&A3BpK&8 zX29rBRcG&@DD?+LbulJwTJ^@^nTX2Iax!*HWQV7VLUwnO9s$3fwN^`aAqxjwiO~tQ z)loP=cKa3fLj`j=pTofIJT9R`iDBLDk+c2>;Kk%T)tzh8$e zAUK%ES&piwR0Nah{_H^4GKhalGqp5GYJvnc%$dk}eBg(v5&wUBu#hNo4~?+Dk03OZ z@@y?J?u)n47`Oa$%R)0T;7^?WEif5L8KXLZiC`4mrrv)KnWbwR5yT#ajj+0GaTu0-%+Q-J0N_THd+m!(vDRu|0;v<^K~^npRQ(S zSK0dZZUt`odl0vxcZKwpO4MlSUr_ariP60>GrtUr{X8Yfw8TcKG^pRr!Wl^&oUd7tg;$a$WPPxV>E6FS6Uq zMC=|3aD=sES6}u;e)HznDE7)fN0%4@XN(Bz z?)qbkURc7}lV+{je?y`+ozAfFFcq2*EgJ@N+YvB&cSt5=t@OPvXXTWG%Vr}Uszlc2 zd{8UGJ17QQrXjM(iPQtqxssH_CKO^u?N#*7^j^H0y#INF-WSd=P5I{-dKLDSt+T}W%EGzwYgD0oVG zcTxOPqFj<`$vYRP?iO?_P6f>+rkhT-X=Tol>CPl@T|MtX zJ|q)PN>P>K(aI+}`Q=^Zn$-n+>l2bamg~wE16yl6yFUs~rC;DC(0W zgu7#OdUp5)_Oo%aF`o#u84-jME0o;I>3kSu2Z*YGO}iBNygQ~dm0V*7Xgbf<+2!)) zYPM)F-LX>1lhLw--5cKiF|nO$)JS4*-{A{m9P*qeyfF4*^6GW8Q(OMIrBh3+BGwt8 zFFUpHN1G5rKl_C-*Ek~ZO{a(67av}TiE6OI(2msByTzbrdI8S(K0CWxt!BYai(v3s zhj2h3ZAuqdyC!hGL!zA=Ie~AObg7}Y)AZw)GGE13%#Q7i)1SQs&mZ1I@%*9HALC*@ zr`(}+B$1^nEW{a)@F^ZTO`-H z<93%^)qty^jB9MM6=(3n1Z7~XsBx^S;ddyJq%YF!@lJ_~rcnG|S=BzVi(~Z4@TStx zAt!cs<>3<~2jo#*&rX106Wp47W&?-bD;m;S*as5`K+$l9O7(>1nJ(gRudj2N2;0A9e?T|2##hYx9^nxysEW4e$3;uvb)|HpM& z~&_P7;R=cfBDth#SE8Es?oeKgJb5pf;b zKHen;;q78Iy?|dgJIfGxjV(%xwOL*=CeUvFx=ugkof0dkqEaS&!XuOf-D>Kn?DAC9 z)c^P}dH;R`z(3q|t@mxY7t1A8-0MY(+;U@%kHC@D)ZKR;ix#8Gc4OkOVd@)IyADcb z{~CjkxRGrxuGaUiKWSX4OkP|8%dN;fx(CQ^^h=DK|n;Nus! z!}#$_LWdDT98CyS4zB>9&oE(GbDs4%4FkCEFd188vV1gbw@SpM?xtc15 zT@OWhspIKJK0HKAWclIG zXk=Obxy7;BayYT^EN9y@w2__KdK7QwzTOz(qAJT{i+eO}doyTbI#xZryQKH- z9!K2H?pE*#yADv6n};V6iG!js6_5IiXaq^inO7_J!lNUlX|8fSnUU}Wnw_^Fyll`3 zM%(95S__bb9(~r=v#YF zfagjms#HA@u1U@z+ds1V9IYzjzTyb-8cp@lSE-t|U8RGJcJvOsdn7MDUlptAB3s;p z1HJGeR`T^&tj9tS+!tWpA+b#=F0mA-Tm^xy<+{akg~GA7mj#5>=WWZ7%tm?&huwyZ zKWGf3FFv~2qbpL^o;?!WhGfE3=|NQ|t2O7L>@ua6s^hIgw*C;|^9|UC^z0}W12>xJ z2N7p=(NmF2+Kyg^e~n}xiA{3<0DS`FY534&QEUK{64cqT68|(mN#<0&_aSua<2n zZ1tIhF(i_Gj#1PZFzQlPd77gx<)2#w2Q0+5N(kX*rWBGhO}3Ma{1Brqu9-wo8db_0 zaeS?TjmpiEt`ya~#GuO1`fPc7n-%k0_&)lmMY3qD1uKOg^`CmqwfLt*QOhP2@^e>M zx$9G2eP}MG*TpL4drP58)f5HUFLrl+#1;tu5$EV?m4>Az=Uf@<=xiyGYip(9B&2VK zznJ4W-L{`0c)B4J1g`Z&z>M6Rnpn!Vc-;L!xdE7}+N3%}M!Xvgn;aw$}Z;_x89>KB1(T!RIlQeRyI7t# z*jyPUDAHa|rj!0Gd)_Irt!5l#hyNR!NT1$H0>U8Rc)A7OP7aWlZzn(3a|bWq)-e6K zZSDZf17+@zmuge$Ww}<68KrbSpE(DJXErHy-eXdLG=NkqBy=oRdN&-z0n*+&WjHMX z@fcHiVri;{tIIhj#sGr6 zQak+394wKg@aT=(INjWIzlC4-^~Q=unre#^I7S>we#^J&YMBa5s*5MYxx_w{@`|hJ zD%5zkr3NOJqfLL35ciPSl7-Yb6=T@0b9h3MLj&*CBb^XDk~%0EYaBG?aC#0skG z(3Rx`zPyHn_1qt87SDa}Nzv^grWZnkuZU;C(za(aq;O+>$T#OBl)OgT5ID> zt0Ojfv)}TA7H?fsN%oc_Ya#>yslrpDIn)Yy4K5Hav^ioqx9w*LA8%j_bz@$!#I!*Ta?CPQ19A1he7lGCub4hv_$VB7lNIxM z*k83Ww~*?}Ty&1bmok8@S*UYJY$c4t_lo3(l5V*Zc?j3rv3&gRpQ6jh|89$U4aB#y z9Cvr>Kmb1?Q^cQ#muu@~$~`O~yKgDx9UB~YqYohXmbp<~@8soh?l5ehWVX7P&9hl{ zaktJcR)XOZ}&TU(9-`nsY^I+ z|Kp^!grkuUUAz4c!|?Koq>yRsv;Psf;XriNZ!)E5IyUc3V7%4*tL7c^uihPYpru*{ z4MoN+GTl*)ZI(o#f=ICGof2y*3Oa$%S};DGh6?3ppE3>Au3}vrzN<__s8JV7jmCX0 za~ux2gK|*0mJz{XU(xlxQm_FSDnAD%*VS-zt}w{aotJWWXUo%Rz(1u_j?&(!H`^%y zyRAXto)gnkN4X;;$YXnw`oakw$=H)1q8g|K1~I8KSL?>4t#h>!zUYi_;Y|3TrUhyi z$b>rVkD~@TIwV|Rr$7-W5j?$H!+Tk;GqAP!{cVI^hx6^j1q0*R#xu0}*;jEt`>M^)N=Whz zGo|2MH8YERt=2$Dd(adyddGp3RrTvkZhVXw)cWRI`BC1{==W|goO$Qw5^giQ33*ou zARp-wWP0e4JO6|vkQz8|JpEM)VfrrX0mr7$2%knI#CK7bKcoKz#{|0-K$N4t9x?QfC%5Mxs+=Ydl z+#+XI8f+qz9>F=W?I@~oEK(8OT>*9IATSG$FnU-M*|*rg7fXA%7U%XlKCh59~Y#VE?Qb2sDUPj9=um=>o<`aunqeE>+OddmA zRlzJ6Zr6yobIGm5Al354#dKB7&$FBCtXKu2krZAEj>sZ=tO{x}yR|p`lVbC!@aP;H zJdFlNyoF!#@N079^~RJA|NH;A8;&mXco%1~5U77s*Fz0Fl46$G1INAl?(n-WItIkl z`I*DOFtq=wh69GzHF)Y=F`1tS&^OP%7xTY;2x?L4$qJI2#BM_zfbKa>_}K|lSavdc zi+9}~12dw=CTi^;|GxRvlQRD`0gIgGoKengy|RG><^WHYA`$uQ<6qY_Vt{REERUMD z25_hc!8_cdcY{G$>rHV77|kB#YJyl88Gsl(9!HAx-XyR7DJ{YQ45y3qUPvgJ)<+g# z9!Ns@;^X99tuE&dguiQ3mlKe`O8B5VTOJg0DXz8BcDsB1F?c9lLrQYQ#~cH1V58Jb9EWNx}c?~o|tIh~+Houzx4i+dDkJTfu!e&*sn zdi2bWXKW94NnS2Lx})VZH$+;YkEEM?oVhs9vO3GYPhu=C#9A%Z*fFT?U2zb9$3|A< z{O?QnBAiaILS+&7xyq>{#teL7h7^kZlVaPG5xw?`UK}o(3jsePzI7CQ0jAY=&tI5l{8S}zb#A|EDVC$V2 z>osHGUqp@2A_1m90?B}9D-mGVvwT~JV)xir^$}8q&1i<51AFyFcG&hRR#(~8bUqK5 zKo~?|NLP!}C?pN0v6%<=lqer8pGcK!mkh+CGW7qa2McHmmN^}p2R8N5V)*>+Wb)s- zJoMX1jnDtKm51b6B9h!=U2m z9R9dC&(5>!>HJ&B(OR-Kvj_h5uq(3T2!VG}%&RdvVGs@oGq^K?(*?#R;Oi-OM&5py z{OjFMv1O6+&oP)PmUBjGo*YSXV!5(ndrkJo=!&>TlpL2HaZV^iSCw$uF6eug90dK@ zw_=fMJH`& z7dmIsT1DihUW8;a%n+*+h}3@+#Mg!tLA+pASf!bL8vD-yu&PKHjJI>}x4z+^I&X2a zoX?lw7JRfLeI^7T7XDvfuscV@h6A}oz9LE6^3`THG(lMCxWWhEonL&6dgm7%M0Q3p zVjLxRt#iV4T4K7-AbPLD2k!fg<(rLBgmix9aYzU}d*8HIyTpXND{kc=cqr(8E9TSH zeRjJ<>AtX^0$yLJyzKO{L6f=uNl}6z3%LYJt|V=9V(1Kc-q>6O37ecaCtoAXo0D%t z7=%;Y7z*F~&0K;;S#ir`N@@04ZgP5WI4R~Gm+2?8>}oTOst$?*?+ydA*=dF!wc`4; zxSQXG*{sbqI9~=2M?2e?osq3~N-VY&98+^|f!gnbH?^eg*wkD81GKob_diEn+WWQ* zPaMls!g5C~&xl-cjej`?mz{IJK|alWhcQq!SXRfa5ruZUQF6AOfunPWL7=*tE*8_< z%j_}~ZAU#Xcqm5r!1;FXpqLkv3|C{Q7Q@%a3^hm26^E>k{rR(7z5Vm&lj_P`@|~)Kbk4s;di$|hoUf+ev%j*h)4TQUbRL2UH^0GtEwa)k z@=ZqO1A=p6ns;1Ju&-pq0L{CSV^Yc|TvzSXy!-N}JJwF{9;_#J(HADa`# z!B=iq*Lwb%ceUBX3OPh`EvR8)XR5oAD7r#8ZNg&N;VHda4hoAG)7d=xzFeMvFIMM1 z)KQL4v6Aza^iDLrLt=R*5fca!JkFrO)ALj+xqYQ1WC<1;grlebeH73`D zv!jg$9cez^wVfE$8*8Csvswmtsh3`4$A*}9i(wk?m($tRWp;hH{=2xjELPe2^6qLG z@F_5o+Of&^AA#(d?tj{AMVt$G z!}U;sDZkBJq;U2WHmWtMd8Y5I3a#^qnjMRt95x|*E_iX|v`Yf(;* zz&D~dPl_4WxwsYwstl5OrRKcpdSGSXAdGda;#iIld> zDAlCheuaJ2lpYN!we@nu*`Nlxs__M|-z_Dj>XPZz;>GN0IWO+B)!kL`ZMMF||2Z5K z!XZxq4^y5VObSWD9k^H8l@b5z9}-)-MxiB}TP2f*gy3KNk0Y0bQ>frSxdaL?9c{i= z0tKe9mf-be4ANCm!csYTfLxP4c&4Fr%+ct!h{kFKWlFAh&pyQZ|jSqE+% zQcjA~pHwTZ<&VFj?b$~JwieZBv=UV9x~A552Q>i2X5`3rawj;K7{GjTjeMNbdG=Sf zzMkD)1_3ZH2cf7@x$5+?9pSHgL~LW5D;&t7itK{b*b*AiM_xHidh8g8-@I^#?ccok zY5TA}YPoW5Au_IMI0XlHtVzo3?XHwMZe~6-$XDtzIQ^Sz`i4w9^$bO%)F+NH*81CrB`WG3t z0#M9vFrNWe{k^#^o>L89ex%v&od`Q;G~ufz)Z+9GGkj09*$FagPkLSaor`Rjw6`7E z3=GOB!|t_KCU*T*yqLf@ zGt3OI(1rrsz1vN}F|i6XQxhq3-t0HE4L)&lkb2hk>86(-CM7XhvusuVxkYl6Sfhx; zQD)#5Qj|!OFlgKZh=-YO^4??2b4GW;$M&2J8?IEdNk>h}zsj&V;pOVOSY)@C#YJOK zxa7n~;$MTR2EDzfcS@|C3tt5Z!2@MU4W6=PtLc$R7}Df^cWujxa$ZzW!iE7g(;!9)QBk#F!6v)fu+AmZCoKv%EjztCyKF4KY0R5*g}ZoZ z$c!!PIETcFPgG1OHnUVGU7#l9_-tk|0Dk(}ooM>xtfRJ0G=cMzmP$>1y=`rkrU^~f zeLBCrkO|grFoLY8g2WMl<(qWXoB`|VDg-$<9OMXB1vu{c%_T&d)AeE&C{9p@`#kV) zNQ%}!k@QZ9t&-zrpUf4rJ8#XjHE1k*9)c6ylZl_}0T zn&@?#9|8ZAD4ztKNC*U7ve8~WA9%G-iK=Xup3jR{llSj`igDkUe~t=2*<1-(N{81Z zqmXWCl@vQa_nwbyHYvXTn8l+8kgD<#?;<+$Za8eC?socZy2#ewi>8J*U-~qrVu?<(S zr8$@{{B}P+j6Ji6z_`H~n&_~5&R#UIP`PAAJE~LO9d;n7c%%RoL7A8697P%-d4~T? z^SUj3gx*O}ax{k95S-KII^Fp?R){i;KaFAI$LEV-@ZIalt3NjwETu~;8pA)^(qI&8 zll5)@wpoeLHbtpz+%>z+HTPSCa$kLFrhLRzfCeTuxa8fWYxN}uInc+=yy7aNWC7{B z%`I+JonvEWTePgBj@_|s+qP}nwr#s(r(@f;ZQDu5y6-;cemVbPuDQk>RrM6nQ>`>- z_z;KpKGt3DNtJL@ini;~@}qBR2vnD4L{fI$N`nr=;8Nf*ZJ1io)(e`n7%FL$5yX8Y z;@(G^&XZ|hO-GwY4mG@x#;~7Tz0ULiEq5e|4UIZi`!jZyr2~8<94mvenM!fH=FUn= zqRu+`K1?f%DPM0SQQfDrwDJfts7IysK!iYLHD?Duj_v&jYXGE15mCwLa0N_c6f6i$ zgEdZn`vJV+#ivV0$Mnju=3BjU0HtM|@B|uW*vG*FZ;>uU;-tv{gha_m>Fu`M^PI6a zc=#8joj#Y6B}gM8k#g8qF7bNsiY?;}c}l*>T~Z@0?@HM(MZT7mp=YQb`aCjx z|K0q%=tfFC08vl~+8)CXigwyeE|*Gx>@aO?5T5bMH^}}Go_Ma}%^RUH6D{LPj60>Z zQu0-Ot>aqP`2{cuzWIXd7e4)K(x|QlanzsCq%?|p*lY5}toBx$5+ zj&!ZFmcSWHOP)Cp`t@zj4(WUQ+W3rWmq=Y2TUlny`OTGrQJBk$-ts|aY**3Wz*!R| zGU!JwUhFaY8t)!yBJQHRHQji-xPHAWSO$y_^^rPC z8^}2vFa00jrm<7P#=)!eI#Y>NX~0Ci z@oz11pTq?jS#=Fvgu~EpRpsEEWo^7Gubz(tJHaBt%nsJS7qWCS0x?~kN+pT)K`EYbQ;DMlxsG1}^0+-QeXMV& zF^ZGmnx{JuPI>32mHG*B7f)*idmW1K6N6D&EI1;5qIA{|Dx=O`x$d>0poy4dYkvfX zL$Ud}S#%ww&+En`?$F^Htg(?Tz(J{@>p2wbVwZXhabogv!-gpM6dg?{p==x5u!KV< z4kO!)EF|E4K9JxXDTvY0PE*sk*;!Z*L8IVx7bsNhemD(??z)qcvX#Wx)llwKmA1CN ztar8P?`)4`I%w5_vhHKWFRa8xv-kHlg+(CqWiDv}-a`fvW7VW-_Pfw{&A8~DkA9squu?BT$R~^ZuKmsAlEjg|GdUYoo}nKPA!YaJSa$ooP6L5a_-E$t8neF3Z?D} zzunvh`amDI))D~9R}|&hv(?w@bqkRI zV(SG%P$Ag*E#nfZz*c=Q)xhBT^?@!UruNCSUV{dG{qx2KjR5w6Pr`|k{&Lze}ac6qEULD;9_TA7tG zrpntEai~~8GF*A(jm4nn3x)#an;s2a!^go%|DdO;Y#MQBB4fJ@PDmUoYmRUs%sbjL z2&%mKOuklpwR9Fk=z8#{?0gcZ<}avR)jLf&1sabu<%}KdIMRUFukHC?)}W1mm0n%N z4C&W9+Bokm#7P(?xpPX7K`G2N>8iUMt!{SUtNhJq0S*|+Ay`TH1rI=aoCj`R%2 zGnTuc9t+OL5e35wV1Qb+_Cp|cc6Yv-vG&<^El2Ia5S|o;f zbV;Y=_xsaTv)G~3-u_@;4N97^LRs2Qj!Q|gcrph{`a!MSQOkN#QaEHain0JT<$E|} zQTE%JjuSFs6~l>Mitu@J^Rg~ea=zQBU4;VDLi2WRo}WyNS+T-!AYNpVyuB$!ywpp| za`5YOSXKRJz2CI5gNq$Q7nv>x4xh4$0qW1T@=brcJtxR?o8Ju5iwD+-{+k3t7o8d8 zY1;WiQsd?E^|7xTGi^-}DmPBLpqW_E&)HV}W&ZQaOoVJ8VR+Gl`c;R7xi&SOiUW5` zoykIQ^FJ)U<@X7@+I{899wuZU$^B(MNjVIqPMqjd?x$~W3~@&|;;?m4c~17aI?E5o z&3fX!Z6eI%<*K#whYy!#y>I$}5`uO^L=j=IoR0SmrQc6-Q57@$#cnk^>#NTas**+V z8;s#8v+K)_$~`r@xYkWBh-MKK$H%$m7#H1*DqArb*Q_zFMJYBeWmr1Ck%n(O4O_}N z=)3BR!lR@h}oO2u(o z*L~~9@KTk^c7;OrUrPhZLT{~ZX=Zqf&r9kG_zT#~ONF60!7@{yF&-EcYo8__wQ7~R z(0Izz5-K?dhOvTwm(cRkG(BfmdfGQG`s3EMqiNj}XU~Og_-42#{zJV>@^|K??=js? zdkouPSY{D7Ahstsucf`oK`sLF&Zi5u-@qF}D)D&8w9bht$ee& zxX{5Pv>*{p>-xEmr&}ljHesjgyMl_*j`I+~^Rc=5+Eujh$sCoul#fJW3{M&OA+)d~c2}TQc8-GqgPP%o@Da zL;L9v*6-pag(fkQSXU-Sw`luKjnm$3otx`kWhc(aLo=-J!6iC`@9hxKE))lxwJ@4e%-adx6neY?gmX1yk`PTo|04a6ijwEBd(vBrNz$M-ijYtLL z4&((+bdpT%xv_tj@H2I8A1lYhy^x+87Xx1BCctH#Whqwa@VVnok^eM>*ZqJG^^84j zxnl^bPQP|BS1Rtd|K7E$G?{XXoB*Jp_s`&iq0DqB^ML@Ewnb_Qybykto0UK#tdMq_Vjf1%tS*)G%UNW5prvWUe$4) zy{%jrQ)@#cBiE*^;!~G3>L0QZeV5hJ^nikHtlUq=rzxH4Z|>!q%xpaQl*`40(q1Q3 z8i5rvUm^Vi{9HG7fh7)>5pL>Yv1ceuO5IUza!FlmpN+oiK6ag&vs zK04k^XQ7rnYb$+v!&y&7Lhl_RQlU~!TY1($5npYjWzXMMg5W;a;A@XFAUsj+D275wD*fk#*i52*qkP4 z;7~3DlI>>+69tlK$b^;{gdbM-YW9b`=POStHIB3)Fz0ngNMrCZ4C0a zyNMIuh6UDtusf3BL4N&!gF>QwQ|*1)y!8U|m}7M5`uion>WPXFrsj~5Z@(`c03HXU zdi`!3c`$pHUZ%rR%NPY6D@odU;~fpT0h2d z)kq|6bvWm$wiH)%`F8hc7xjn#V`oKp;ib9$a{R>Y>d)0-=APzbV zCsAcMT&d&$8f_DA-HTmDUPBvmgRsg^!J?E)F}tRudM^jX*wWlchz7a&W@f>T@zNi< zC|#1|hWwT+?_xbQ*`3vbzd5NbEBm)$`5<4|6KtJ&$(!4Ay}A5>-lmvTm5<4C4I;Cu z7_`{N@WaiPBZc(3svBz#dmD%&HB>5n{hy?ch)uSa7{kq_~S5x7I!aVzDnAsp{zS8Y*9 zpMpgt7hgkfX`~pT-?q4XmeS6HG)E=jr2-q~qGP_jgUHi^7PPP6y@^bWxY9K{sI3rX z%Mx1Kvh5nO^mpjb`Qgl4uO?0Y1LrtMS&1W#AgS8w0X&wsampRI0pS~+A1rUIHCcDo zmDa)j#ETs#D@z9OclFKuuPZq(BgwkE5#7?e1C>08F_qT28|?!GwXHolJ34acm>#{$ zL?*<_VbwMLFRt@)X>%+1q%5vnX^1E6AznY0nm>;4IO74}!+n$Lsi{Fb{{K z^|X)%9T8qz91Kex1mj3#$cFx#=fxCu){V%3Z9!u)w8^H`@cy1+(TYU%(BGh5yREMB zgEXG~6_Re$x!$N*c)dB&@F#`sTR6CAxibRzfIg=-v$zN6AuJedloA0Q^l}p+S>LMn zG7kA`flC{v7v7|%W`QMX8kyKODr9mn7)J+U?hWaA#QD{L45?47yk)fNoUKohwAH|W z(*qXYzFsw*X3K_$wgyWN4YLzW4)G-AdDa+ErK5`!Nhh3T7T;*9y_OKn$lh!ZllSTF z^kA)9{AC~849I92duKWdZ<~6jVv9-rD#3R)UGwcmvcWYx;AOb5DvWozXZ38w;2?47 z$@bSZi$1qX^9}xqX4n;3XweC%cehS=Ez6oAoL^hnJK_3#j#KaYU$YBC#T)O+Eq2Ot zv1SWyphf3B4lV7tdvlSqcGB$z4lZ&bH2^*c6=BR5W<`Yj48SW$SUqH%;fBM{*y&l) z_}e%z$MSPxV>k`#$a8TK0wOQXANbuH!!FGNfBL}TD2AKR_=W(naXp*!w@!#*A8hiw z!&4=8Qrpff5}CPr)`X-il01Gny%owmb9aFj)d1yFL>5KmC`C0&0ukmZEjJgZ7{_s_ zZTH-xyOHV|@U)(N=R#Z~@g3A8P9`d>CgoTDFYh;7Ocs(~4XzT|l~W~HL4em3#z{uD zL@f2f;OHuAk-V?Z*UQU|%gpVqzf{Idef#p1l$QLdMGmzGOKOAs+vn)2E_S2=3l}$f ztmMlny|9PMuo^=jT|U!h?)+#i8;8 zPx&IBHu3V?0Tt`E6n;Z6^K6%>oi}iUw({f3s{Q?=rhgqck1@`xfT>lmR}t}E+2+21 zRQI1;l;dv!5ZFNW&#}&-nm~jQ^LL2X$azv8m;cEEB>|3VeP-R)HRvI1h3*3Ok< z7#qf|AMRM37+<3MM{f+ms#79XUHpj27RYF@YmKqtP~RwF@WZ-2cSpx8p?^?x&;m6{ zx9VCdZ4>yu!dogPS`pc%*@6mO9-_~Cb7#tRSas(H-WD{WYf*FF?R8U?+U>0&+^kTdGNI!% zU*Kx=MDZgtDwkS2@tRrIStUurq83NjUpO&_)l@s9<($ zyzl10z$;9#3V%FrK0=WpF_gg8`jb%fbwTJZlm0FWH9~v55^z33*zaWFooz|TCA=l@ zaF*@bApJHRA~ibVIk8_olnOMXcuh|vXT~P{@Y*HP&x;dkP^%ChhOD4aQY%uGN@y+5 zn&=O7EBvK!dRkL&tj~GkXm!wVuEh8>n`B-9^!Z`Q1XwSf`r;+{GReDosC-ZoW2A9o zqRbpW88jA~;aa_6aE_*k#w!#jv&rY%gL2CKsdN_eZ;k6iM9=k&yg%6(gru8%bRSb+ zf6TEZ;U+;jn#kzb@TyhIIl82ngiZsdM8SL2HHr(e3rne${1i8`_Gb7?B4wHPaj0iD z#`Z-uGa1nSg+w>pTFv0MQhe0JK0@rUl2*~ZK^N4ajr-P<8e#(f4D zq^r}TZQ3)weBDv)G>p##@Qgmbm7xG%#sy;H??NA>R24CLP`rysMz0*7+%Cs8c)nE% z-^CHPd|0!Rpib`mffFU|X@3W?+CHG9iT3ae4~sQFRMy~r*X6+MN}FH%gDktA_qJ}i z(`62OuE7TaCo$(Zc*7)W=0!|mGnBHQmL_qh;GbalYa#PnF|z$Tos%HrSK+TDU*Rp1 zULH?cloL8V_<+6jn;U$H`Hs<($m!l#YcNpxeSO;4A0 zxJ6S3jVsiv&zhY58ms0dE;49Q3Wo@lOUOZ47Bv@J^9#$V)vnh^w!QK*=P#v~!#fLJ z=vqe?WsKL$`I4p4tV%c;B9LKl@twq?RYcNF@n3`7@E2}$r;E`xzRj82G_!Pr0cyd_ z?BMA~Cgv*}JIapo5zAqTTCl$wgfO31u4h0M7wmR#KHpx(M>{q?9&cGG_*>MxHET+U zHlVZ>CHoP}EkP(=*7es9-OTUsk}uncou|NCI&%!!x<(lmK-;FP+Ggz1(B0wS-BB>e z$B@#ZzZ-=B-9r|PGWLpnqLob)PalJ`(aQrGkD*zRkNwG*7|?hUm53V)u>W&{JLbUaEd{SnZ zQ;bJBpkQD-`|hIx2s{0#U=U9w3&N+ERa{P^E@NA{jYAJimXV@IY0`r(y0}3xC=j?J z6Hd?0_^uAqWMP-&rEDuA%Br)?6-Cw;+f2F+HrQpQg6Fm{BT39@5*3(^*?`ydcR9=N zu-Tf9aKdZ`n2!r26BvmH_=Mt8UL9%C^VVbw(eh7cZ3Y=I)SFVa2@gb2H*bbtgbdk%o05>qdw_3d9dgl^Z;t>s3IA6K9H{g-+1@JAwbuW zQPo;8XuA%0rsJgW?#@Jazr6BMgU`@0(?1>dOc*+FD4sE$0Ui3#q1>+MT!yL-Vi-c0 zI^Y7kOq1jeyPCzqXX0@H=u) zQ@dd^g#(M`ZEQN9(9s27Pj9TgEulg$W^ko2X+nVO^Dulq_i3na%fHJqn}G{R^*FlU zrqc`wfTCIb>YnYPJyj=MPYOVU<19${3t$bq%|-y{WHJ@+MdBc7WA$!q5UZC%u=(x& zjBW?fUM_C77y#c4cqFohrr3NK+#}52KhaQ-mh#z^a0#feo&u|F{&GDH8xM}lKt`{8 zyu$JuP;~_Fl?s+Yu|B>lZolr8zsv>{vN6Uw>rd5nU%gro=e|Y7kFNY93ay6n;~Oq- zhR@0z>35x0P`>yXi;B0FK#E~6DUK^A!P%<_;#jj&mz`=iK-icE+=yQO%X>hrWa7HU zP?CN>ynHVSXFw1w^G+*ERhHOMO$TdCdz+`EiL)QJO~)#L9HSR4i>gNDPVqb$xrmlG zhVF3v3F)?awoWSFNtmv|v#P3=OUdjG>C1q{t7{8KCvmFb7@9>BmUgGmB|4FgNvIxyI`Kek7uGbOGK#{Z5nvEmII3g zUFM-3RPd-d9lC}`8_qmmYLIaehXIvfV2a$$9cJ_$LPhbieY$p2lF*Z>sNkv;cjcVG zN~b8Eno2ABhre4Aq;T#kovcF$#TL5S!e3iLRp3X@YFvB$P7j#yS1Kzq~PccS$x^s#PUEop` z21rwlm9hYV97>L%V>bV=_X%V)?9vo8*#66ck#l>gCBfU9cEw z#J(xtn;Zx%kIhVsTNb_%6LI5;LeZ@c_v) zVZRscFQ+j$-ICTQY{pD88BUi`wP?k@vn-};0qC}Ozq5tFMbF=2D+wZb1Nk|yQcY7= z1LEtQ=}sXk;rR!z7N9E~8ui8zc#0L{t6+=J3k1ZUj8cE**R`pWH1Zn%))q)w^vxHM zcoC%#O?_FVBU4{o644-M!ARk|QRgBIyMnJfCB$6aVvqXz$z(VVm2*P$>yIJ;d%L|M zn%kpx{rvNWIztL0!D+R*) z+kT|6j)xZSq_HXiTs#?%U`7|_J*L-xWMS*VBvTYgjwmT`-!LiyWIAy3oO^Ktbo#{2 z{G9*ffGD9i0!_l6o^tr$LOPv2o6FtBM>;-1{d$>HMNDQ(Vtbt*iRUm5;Pzzq)K(YQ z=}&2`UPc0;#14inm0O1$Z!ZZdVd%eQHpK?8ZMqA|5%Jh)8zp`p8UO-{GdMS2p2UDNW)1 zJJUS3M5?P!x*4EI>8v-~A-LD`oH2Sa`?APR{3z=yd|1W(>eD4%+*$JG(w>oH&OVvt zAPbV@64)iwqMX;l+_9C7h>cocLezgI5w0YpygL*HdP_O7w;Z01X(S{|(_m<;gHnvT zbTP=*LA;91!K~Cf0_lRqOiav8J!{5}MXcr`8^eJvag&{c{zz%HmqTB=e?$K{DLb=} zqZ0DD#aSepp%lbPIj>ixU}cltq_UXk&r*i~ zL|hQCYa@y0ntD)Y;@7HW-xjTJ-$=IyIK4~N1mi$_6%KbH{NXKc!X<7JtXIckPt>F< zo~QX9IQqXlA!83SfRfjnN`BqFo_A*8HlgD%CR-0$(g6NC#SlE{%bHpFdI(rRP^RC( zr^m^peFBjU+YDx%uJ=m6IDN1>16w{Cb?^Pd2Ayb=mwS^Z05ELY3ABJTfD2_2+sz$>`&b71 z%uC$eQUmpPR zV%G0@0~>6_XQwoUGf!yv25zG7e^w9QU*KtZTVx*}Xc|<>Ft(9S#72QC!XXUr#qH=X z(=f+cYGCW~veuQrt#FJg>YfvwCI^sb|KpQITYtj*%ujb0EJ&l$NguPN%w`xP?0^{d zipt*GLhxDPx@cBmbM(pBZ(|?+Wl>7{o4}$`G zX`pV^Cr)-0dHC{+|K|kFjqfK-VQrsmRf?gN2xh*7NNG(tzUHcv^{i)nMrt}R^P=Eh ztuIOU?T>q;3pB9_eMd*uwv2lJ4aaAtvj|7Yo&4tdFUwH{2Z^SU38^@c^%XG7BjXLb zT|eBc@creZp?yP#!oFlSJaCT!G3uF|FUKP&l%!s4DpkyUb!gVTN< z|2vZ(j-ls10kU4aOD75^83(XkK?1pU7^Bw1+wi^nM_5vj6^mPcAJt4CviJyFeTBPP z#=nI1Jvn|^bpJ_+Y$h8crK)m{ixOnN5@>lgZy4)Sq9>q8Ihm=%a+8|d1QxCcZq`A= z;t>b;#<^EvIv!`Q^%PFSuy5!-G?E7ODcH?E++H2%+w^8`?e^EI_&)RBWsH#kNr z#$22E#0$mOaJ9csi8<5Js&$E=mK;8OllM5-b*Rn5e`Hxa z!$rcENt9@igurbgMuR8I8u4yYp0`y)Ru=eb!j*O3Yq-h>oid1I>~H<~AD|b#%&!Nt2k~jLkKsh!x1v~CK#$gzh1livFGxB{i1fbSL6fI^%oiJ?u(6p| z)+r??0-b_zG&W(=9j!Ro+OQMX-yNVjX6(aXC|#C_{tpoMth@mXReVGpZv=JY1uc=F zWmC}?U{A${1hPI27&4A#RW*Yi%*NHRV5!zp5ee|y!AOV&c-AH~U+>W#hTtH5Z4Xd_nDB2x%iAApT2r`(K#gjBnT0sA5; z#w@@6t$pcl6)R1;sLstNe)Qodmj_(Gb4|w_Ldi3y<~ChA2N;Ml(oEfZ;!3=yPBH0) z_R9uvpJPt+m~{N-iU#PJi~vS<3T{FUF_79oPxDneyW3qNk0EiN7p)~%TUzi(@a7>$ z(m5=Gt$z>PDgE8t@X9>dIl88ojmPIKE=zz|MlSKFMaJgMUM0X-@h=y}2p-B#@>a5v zkcs%QxCyJr$7z%NM$f_eLxiZAAbmlzQ~Z`NmV_;E?J*qD=8lFG#JaDkfBXEJ8rR!t zmyn0e3l5i<=RYiY2s{RHmMEw02#4s)R`GB05p@|wol8L0`lIe#$T>8ZYM zg5Ni5$taY4s)JF?=HXC3?rZJIk3{-nV_I>;5-?gVNQ}){mW4Rr-W!E?+8wsa)s>Ha z>`QN0=+ElG8Gv2*r2n>)_{UVS zH*YdSGHGfbruUPg@ex`HRn)%Ez3f9=6HjH9IrKP60CSdc70J%4-@?k9I)!?u#zE7q zf(cYwl4*w^D}L_R2 zL(%SwG%ZXUTj8fFB_q5F>6fp0ncFa|;+*L5SLey^etgiU8@4cDMt_bqv*z>^L-{SIEnA=q5W$)YZ>Wq2_2;t~j3J#QO4BUTq z3o!8rmm~4Yw|CN0Wuk4(MEjADRDVudejGx)C1|olW#O-QCgrT`r8OGKn*6t#=e+&j zSttvh+AeNGngB~iA+4fc4~VOT)qQ~RaoKI9!&fahY|-1hmJ%deC3Ty(kgRSRn#F)j zSF*%8+5`)}E^K+2MO)_d(o{GfD@mJBD$|kI0)LmE@}yotL;FN3L07UTRc-V5S6+me z#cU*~&>y#nnmY+C=%}B2VdnsEHKagOWwPrGq5`-&mEd0ndAe~k?M6&ywfk=k2VHIO zY=2T`Z1o!S7?*#oJ}2tDgkT^69c#3J7~6oSv9mLJ2x<98OwIa7q@|5+W|~dddUn~C z{29O_CLG9m7IZQZBuLz4ZEb96&Hg^rwRX0LUaxZq-5d|-CdF*T? z>ZDWyoDQRU*dU2eUo4&0Y0V#k1zwVhfP(rqkqikNMyiqcsrj~M&~;-v@i83=ctVA1 z=+tRaJK>VH0rJg2mtA`>r&!loV=Ly+XFX0%hBi6OnD?OZ;3n0^LnpPCcpgKt9AjTJ z-dcn(a-MR}@o?i#gkk%gc!4zhV2XzBovCX|$&ZGMYo1EF5=mp;84`nfekIZ6C$j2W3eUu~S zrh1vE)cOuLN`Q9V7{8NXo#9?xHZMqdwN2{j^x@{|s$JD^aMRS5Sv>&EW(E8pu>t?n z{PNo3F7eycjY#1iExB7>$^fFit$C35d&)p9e><<6yGv>FXq+!NErsJq7wv_eMd}f_ zKaP~)Y(r91fw=5%(7&pdL~D-RC*9bkA1e)k_kFVHM0$!Qe+43!y8K};a2G^)sLfY@ ziCKRntr@7`4&1`8&I>rU|A>8H0`w0R=QcvI%??M4{ZV2mq|7;vPsI=xoyv0&XZDO2 z4I{YxhWmwzL22(+iRT4XL-Rj5w7sk(p{Zi^5+vz?wSGTQ042|+C01K!7F~rcXg_QD z-}5tH7W&I%=ca~66)mSoW6!mtRzMrIWbpx~`G~^d%y`|_K|};^Lz~0Z%tvghE@;H? zL~M0@Frr9Ui~hA=0ALqY!>NwR=B-6zw&>{w^K&OSE-63hM;J z?{&vM()>Zn&Jh$1&E)qhS)$%qOwl8pRJl@;#YG-b4f;~lZ?N9THOpf9C-WGpix{;lufAAz>fCE$zl#AWNT1X=Z9zH)$l6&)(09?=$|Cl%7?A! zdQ#03-e2oFXyi8QpgcZaB^FR;>^C)Sr3diT`HwH~5~rC$g(c&tthqfgPc9Kg7#lgf zKaA%{JBkl#ohsFBiq{2b#D`%*)vjTnh|!gz*pb9~n>5bR`~TC&HlA+HnKP$?QxTIl z$Vrbb%~u}2I{*%@i`WDrMpvlaB0~&QWRrssq?dx{V4Qe#;Onsc&QvKe&PGo@kRpZg z09Vte)={QHVpBeYn7wznz5z!7??(jC8r5*BTF_0*uAd!8h-j!hLzkKlASxQCOJ5cZ z2ysL4ufAW}aPcF2)rqy>M}R97QDyM{7P$(T+xu&Q5Syxu7Bkw&{rd7HEY;v^>4x!a zl=1#FSd6pd)3;PBS5W-vj9p4`za+AsT$RCk(I?ICZ4qm$C)41L%`9Pyacou_=Yn$8 zZ4Ij|7p!9c&ig_A!PTw3D+ihv*3Zm?`(W}^!{1@vv~;omAapll$NZ^q0;DB3KXG8b z3f29Uy%(||7+-F8saqK7PX;6<`K|JNp$tRyP5+na75EjChND9vq7c zXB;hPKCXy%aeY(AxQBpkV-pFNPvxz zRQO9=RCUpVl2>F32zU^}H9Ue~k)lfE%LVp>1-dR~`T`5)XdlcWi|PJ#ixpP4GXhmI zz7cN;XhdwSKsa-}SK0~b*ri=#sua;7cb8T!8mN$B(iX~xG9jb+$14F4GaMwKolz8E zISG0!HT{&Ttd}Nv>h;!#H0C^7)k7M}+(N7*q~f(P-|XD%0~h|PP?XQWp3k(lJBLsV-!xN-G#YHxM zaP%+h7;35OWDRO-@s)fnV}JmZ2+{n?+x0(>j$$d~QE>Pgg>#?q{0Qee_W5K|Us2rm zPb}{aaD%%s&V-7x-o!KQChto}F0PC@rmX?hlZ}&g`*fD$>zXrZiE?~(HH5}LDHtI8 zi-ekXw%CLk71G5kY`O=GBuZLa2b=0U2@jQdNs!ExA(?iAK;#RU#*$J`vsipw(n|2q24b&M6#_l>-GwWpZy&`cZ*>BQ?xcAggBBmUB{H?um8Yt|GSzl(v9D^w6`gVc|^Bh9;oGv#FDNH`4ZSl#O$9Yuct_(7v1 zNU@3Q&-B4QbRI#LKOdeC=Pz7;KH9@H0SzlAa#(aYd|=W}a5pn}SqxKv(NL3i8$BDk zhOzUqKvCTjXHBK^_dmM&V2>+P;5fS+*~UdxN58zU<_VCH`6Q=}!UGro5I~{!zqOK# zxg=L(^AfynU$W!KyQ!PpAwz3%2`S(NIoD(u>gwgq7tdVg#VTv$`nr@pa!G)VZ)W21 z5Rn3mqFj?@6T;||8$L=~eKPu-ihCMpTEACL7#9G6!>GfS`T3X~_b3zjxGqskRN(fI z9EtCm$=nkm6!v-K%p^?nkKki}h6*m+T+FE3n#}4e3%OG%t=r z4tb|ydmB96BD~RQ^sr)}xzC$}o*pQ}(n^|$H41mPlS&S#!-WL?lm}T z-Hb=dW#1So)cE@hxFHZOuuE%C(I2rtf8{{^^Nv+?yirW9P_467jGBeKKXRwhK}A1vD`DV7XUQ{ z{#^uPKsJ)fwH>06=nG->>Nl;?dwy>$o{tA*YZ;zzr)i#CVkqo43Dkslh9w*j|BR#d zI%?UMr(-!WQ8Zjo6N5xu=LfjmCEQF_8!IP`*hYQhhp+rP+Mu88s>fLeC3|c^Yqq)Z zZz$_E3GDDVI3zA2+MC|Ta8s{|Pw;zX^j0@j@OzieytnIXC7MXomU#-stb_=@n;`a~ zaIJ^7e20-DMA<9i)>tgpe1}tk%~n}o|D);82Kx^_JU{SpYs*GoI&@-$@(~h`57%`g zoF-7<0v)wswG%+Zoodp?%iON`<9q>r=IhpOB7ieEH3cnOZW7bZ6*6Tp7%zI|)+b8~ zC^ePhr#(D_*dV?)REcE@=yp^3wS-SKAr3>* zddIhSy!_~%iUY2w_QbaTtYfRjd0a5#vl1vhD`zK1m(^vWF8!OKde*B`=QQSTQ?p2q zBW?JDhlB*(h(6Q#=>Gk~;8A)9_+^W-pJin~G>I9Z800h#9zx|l0+}G=dHbVBn_D6> zXME?!)nI;9)c%ijS(uw|px|AVSmaD2b4=7Arl(lKL0&2tu?qQ0kd}t~XHnsOeWpYz zHfCj?+cXMhIf5$22A6V3P;OqKh0XDYz=@HSPmov|vrS?#EIH3%Z-k|i9>UK^& zmmC$AktuP$Etf`pmo&W4!}PHYUuXLtGxp}x|I>8wcJxcH{-|P3V#pu zcYZ0~qIDZ+O#}!zL7$rMrd>Mts0Tj@>*&EVJ)Ous%SSS;J9dT6yBK&$5n6DD?D*c| zJZ+C3opOo$p7#AaUEw55gc*o*EHnb6+G3GRxcGDWH`lS)&Am{ylsE1o?C)Q*oB4Mx z&Bu!@*oX2mz~Rc-mZwjvWMFA=;9Dp<^NBdpb``Nn%(BGMC9YQ8HnICf98bS7PuIC9 zOn|X~_o{ipREx?1kRVLS0ugyJ zylq*Z39jK|P|VtHB%Fczscba(Z;YYZiIkfK1NHZ2q>PxXSP{d=vMjf}pR6P|l5z_Q z!J3C~Cbiv@bF#V1t~M;=k^%@Qzg%%_ruU$fta6+;jD6q-WMb@$7u--Exn|G1m}!Eiz7_ zK|7lYHH2g4fVifGEdtL_D+DFa3!GaEL*B@ckHyme1Mxr(zg26*bPddVcN|u2UEQ5c zv+J`nfZiPbkj-X6mjokVfdnji2<(Dmq7$`rLQF2L?F61p7^5A92>PWr)c!JYs2yCE zaD@+0=vZpa4>KL>YWxfamivZMoYKe?vrWUS2GO_7yw;aUuh}eSXO~O(jWTeh;P`{G z4FVV`-AaYFb-v3pxnrD~O#q95Z^OC|>gIa;hYOMG6vv)|0@e&+0cxl}(4cpY-I*63y z_PPpqJ7)*e^>(d0m<+rfmt_%Ulelq6@kIh@-qS6rxGymRt*El{*e&|Nb~id&-BOUw zJ<@fwifj0hGWaj6Whi!lQbH2)1PDWWZ&P}QL>Va6gu+A1o#=PseF|a4b`6oI+^2Z` zCJx9qZQ&=_!LAkIFdfBdQ|Fv!ZkG#<^oMuFoJC zxm_+Y$oi06HYl`c_-qSXj_c{(t$pv1C^ZP3a7cdDPK(lUXltsskJ~(1Xuth1dG$Kl z!zlmU!tP@&Gg|RYW(g0e1QR$b@Z&?2TTU{*qa<2liz4-r zl0E8Q|LqM4L{*^x7I7dYcb@cg!t|6;#9rLzwJdi*N%F$U9C&=kzgtg@%j(^wrk11A z$%a;27EMJPove40WKa1mn`eJ!%SBeq+PLvA%4t$j5LBD)`yJjXv3`V5lS03GuLX~W z2$D{Pccu^7WV4aBA^!wD3bAT!J{x>E{>wT3Sj)cb9&izb|xcBmz;YC{dJY zuE@dKg&{V|P!o`pbRA>jLh5N!^e$O<3Igwx*jh7_ zSOC$IwRSJKITZJL3|#NuxJo7Ooo;-iQVG|&)`nO|VF-C7B_o_BEJHr6-k|rIQWC<3 zIqm^HS!kVG7UdRC=3k?qE)Xgltj{z2ZTeQ*kOJ3UNNrN&G4!D$h=@X`VJgNwC`#dh z+JCuXym>6fg%bSf|0CtG33b9JY-nVhyp1+8ijNy0$2n!vsiRs64`T^Q8GsqSl?^73J=V`j51|ggVDRDM>iI@FkG9&%}J9}O43|d10#TUQj{Or z;CLN1O+}g7@Hf>*ZY%DjwR-c}?Ipf($dj9Ui4y)GO}R_v${2V;LSzD&>!6w3fV5WL z`;A44H7)1FMW%6<`$MxYr?$c5TKSW!EAG|cUoB?YH9W>FyP0k_tL1W)ZEjb$w>}tg z+Cb;%veSSV>GM}d#9Sej6Jo&wG*Y^5|HI?x;R0VlDMryyA0>M1<^H{&F$UF>x0AP( z=+B9>GxfGn^asUfxwWJUP&J3-51DoNZsN!>vcE20#UO-NmFW!XTsvxaxj-rFonVJ; zuG6_da)IU?GQjKtg4kuq_sWFLjmRm(grx@+qDS~_jpa`X;~H60i$*ezL|-D-zsv?aS^+5<7ob)-_3TDqJXTI7&U z(x07a&U@#vuHd1C+Cw`pCse_}+WHjEC6X~VTP$YFY?GZ%uWG#K;E5SlVpV$n7$drI zPl@?KT2yZdWqU`i4PmPV7x6U0*0%2buanRJsu1cdTofNS?fF~4r;}bn9z=y9GDWui zh%xJ+0jp~SQ7@b56TU z^EhWjy`#lxTEiT)K7>GZHRsW3kstryhH!IVs#V2NNu5X{xBE;KnH?zM${wN*U#(qK z7wg%Cuin-ZNbLgi+%iP9Hs75a^pv$aU(bGIe`eoicbnVUBJ_30$%Ilx@MEqRynGCPYp}u{)lLE;NBhkIq=2o|BAWu>|(aw1nrgLsSL>_+a&|L zi~Za`DM~F@aN=pp+kN>sU<`>F^tVM2Vo_=^F6-@^ci=FPli1Dd3qA=JJ1F$&v^oG}*l;HVUHm z`xXZA;gzLCU|mz-8@<$a|zjOwX{%9dyCWcDLmZ>}2F0D#Z zm45cwvTGc%$XXK4xRH=DAExqE1H^VFNwjFXd$&lRN&0hjxy-&zPv_H6Sp*B!90kRA z_swhPj973i2=;lkpsCaakmQVACQhO)*mpPqf*dP^)P%XD%hpPz4$XcwEOUYT4pW+; z<9amTWUKwh))>^eK)*5f!pW_&@8JJd>ww|P=3F5M7ge3NxSS)RMI|#4Dp#%~^kYB# zdOBZ5^|hpY8f-n~12%xo*;{^#!6wuCf+-;XqR*|3V@9u%Vo!GDun zxbz^g)Z=`*hVQ;TEmWEuLO3h+@fylDdy7<>Tv8?>|FLdvD8Me2InLz!9^b$q93YjA z#FE3PNc-sA1OY%w|EWnciI0DiUXgC$Q|Ghnbh_Eh!rc{B?3&`vsp&i#;hqtryu*+k z3{&bJ4b*}Jgiw8S1+9h->AU|od0#DczWaX_Sl>4;bsESrrAAHyX9QjurZr7iQ+e(k zQr9k$I;10$#|B6!H#@=R+8FelJM3FuJzJwrY!Kvf2&f2>KldTu@eYYn=a4MeEGw5f9{%e+foU#ySnZV0#wK?x#S7%Z^*jM0L%pLYl;D+CNbBTBM#@v zLi5}fZCYHJf016U?E7MRKEIx?v&|*El0{7?9pYf5kwpy=+k=#=4FMq;^U^BXe*U=)=F?E+DgfF0-NNxYbD#8 z4qLf#-+m00L~|{uVd9A}NY*e>MxS7kZFN@XmV?lVEauDQ?6TIjKsq2@Y@PKW%yJKj z?N6i9C5|VHWX@%6cT0JU-nj5&J6@&8b}(Gv6OO_;%aLpOnTuGtFEFKRG5VUMZ?oHU z&bG*Ncy~yS6gRiCo6FfUyS-ekmo>U_cnomFNoAitJTlgP zSh4biX&HcB;r!~bD?X0;LHKDkf-86Wtw;)pOz9W?EYmWTwZt4_ZHj$-CanM=TQQK9 zId%UU>5X|XqxHo+n}44!Yf-5skJGhd3y#mE+3>0UJY_YnT z{gq7@vy1gSoIO+ef%`|mAJ{ou^iPQqH$v@FguYdSH|fD+{{*BG5@%|znM+o{jFEa=^bPbOL)Y|?eyyIewwY8 z^UdY_A2;h2<`lJcNy6-Lt1Ek7AsTq@FFP)9fS+@?+IALHBYBGC>(X?Du7$LLE1&%g_~9C$?NqrrIjDu6-pP~%`22NH$n>H_-2CxRYZss zv7YBXZ{wOx1kO)P!7c<+>BW_5Y4Uql+==JyBo1nqPp`8x6lqnV1cz@D_(pyT ze7ZIg!)I+!ZroLn02zcx!;%=1#psnuPC64za>M zfSq2SD-j!%V@4b~A>QNRqlK*hH~IYKm)JC2@p04Wt2UB45(!u%7T{!L0)gHr({%fN z3xi4EJs47J$oxcx6GCv6xCi^)rGfW&$zHg>ncgk3AG7)GUqLC173-Xg^P0%XzTyhb zLD5MfIUzhZnk8y0a4yH*sPz8)X!quY8w`JWkq`_Q^dJ&FKW$;IQ?c(m8d@yLqjIQuSo;Fnd#JYg=t}Zqh3>yqI0jm-9>qfW<6Tz+V*C3cC6=|CAX0 zO(Efq2AHOO_fVxd+)U37fx9k@8*p1in51@FkFm&eBQ=t6JZFJB?`=lVb$Efvnh|fS zEiHpS{x#BNKJKs*Iy=uW`3s~ZE&RmhnxYm$S0p({G^{xZlN*sf$HO_R&+!b8qO@6_ zy-671L8&y%0THDp7m~7+F}deC&f~u2Cjl?tthXr`YZ>P8?$EE2Ia^=M?z8W!#Z@?l z%7n;Op*=!cJy-L%xO+lu&zExu<#XP<%g;FB&$P=AsQu%86t#aes?{-g@7z#_RYS`h zb;=0<`KRylyJi#14WqNLM-+hdQB=B4u-LXOVdskJiR0C34&O!gV|oRzF(^=Smc#E1 zs?pLOi;mtYF+?+h(X^%e%4I>iFm}r@SuX3-dp8>W^gb~fWtLOz4Blw?l_x}}P%J)Y zxh(gc$KaU0bUYNhVqobd;+Sm71HD@$2dnLKH4LpH$AGFwNz*$d7P2xiDXuC9*|<_v zA0jF2xpDR74>#0x*Fl;GUqx;WWQPt3s(~lAhRY)rY!1C|<=ILyQb(`a1R&Wi8|#+T z(!0qXgjDTteIPf_QTMq|sm47e*10EQB2BKD1K1jm29FHT43ENSDdvS&ig}UZ{B*8_ zwbE6hL+8gy($wjIrI@~L2lwS9wH+E}(1t9%1V&lzSn;+&7w;au(!P&2V!UU12&vK`;M6$>{PcG6dnJJN$x$r-y-@&5=R`3} z94aWvNN$v6^6$Z{xV4RbLFbU3%tOSM)Z4VSADnw6x6&V54JJtOG=@02An+7zh}@-l z;c z{`BN*u3bbB*@K_Bs|>4$hO!w5HrF;E>f9lna^q}udz;-%*VDi5mz%3#T?)cmtMX!O zjkR)}woQY2heR=1NCPN0ri2HWt#8)z%`A&ghN=2o*a$u`e2N&_KL2a-Th)Ot6ptVO zm*1K?@Ys#gRue}6(r`#4z`kgLK6(F`vyx|xU9sn~fAu<(p)_`$7TR%{r?slRIrr!k zg+A;ft`@V4?0R}NUDrDl@Hhmkt+Y;*(G-Wm+nq1NK81HqOz9Y0HMM?cu#?x*lI*KV|GE1_*J@gU{6rcRA(+Zs6HK;E zl-aptI-}|Q>?*sw+rTRgcAl)rk)&M0zq{s@&Jj_LDuyxxk~IWo-dPwEL_@WT*JO?O*1Qkp#PWuup$C$HaZ!RTtR z6(2|ARSgd&1$THiAXv?*k(4HY@#k1Jat$eh+}iTPG1)c(SXB)CEqg}Z{nB0G-DWde zEV4zmUZI$AP}NbG)_{9W4{#gGI_^QS%_3Uxw`yxsIf~&;J$a7eF1r*W7laez>{1wl zUma3j?JndzQ;y>5?MINQgkVAvEB0pAABPDiz(m>M2YYPWT5_(~DH|=@i1A5p%X5)y zxr0W0SMjwvCCY^*3kGeG*z0ffz|zRE$>)-uD~8xFf4J)yZg0PF9Yc^@Qei2R&aR*p zQc04~e;mcPre1##E%C}MV)1ZI-gMN(d=CbtBnJHHtrS(&^CwbNwM~g5EgmxDL3q`j zA>2D877|kmzb8HvcP(59W9w|jM~!=9`1|9fJ6rRI!|LBWTLX4oQ1v>qH9E&;IZyGJ zLuQ%-?_zi_Itg4yC-3)-zwCP$+rnV%U9#7>z@Mwl?B+7NnxR~m4@=}gx7eYEu)5cZ zymwH{OL97qGUuvEJu1W{WF3)&bmaMf81z2=?n3Y5?>B>V#UfxZLy~AkA%g}Cc1@t%Gh#$6Top`-?rdkR zRc;R=h#f=88!riZlad5+lN-y8p;&~fROzjioQp$DqzpC%?Y^7{P>#dy5ZGkdnzn7a z)!s$=ZOIlhURSflA{>J@7!XnkfAvag+;d_A6U|v?$s%-j$Cs{Ub}nuaq{&) z(NcZ!@d!LD&v@<5Gl^KF*M047oOYUzlhWORb+##1I9Kc^XuX);ozJr6{0vg4d8lIn z=^UhV5Te5G5b54S_fCn9keLZ5xgaVwq*+U%q}aXE-gD?=`-jKi`0}&cIdhxbZJjd) zks@)`ba`%=GL-X!E&};?>*WpI_Z9>xo8|y`#)5K0lXO{RBGWsi?hqxUvJ**gz^O^0bNe42yDkg-&WnZ0+vz&L z_$!n+V~ig{yL!Kei~;l2$H|8mzr@IrijSM*29?y5lWJRt=-gs|jO?C1DV}4L;gdbS zhXEE~U8{*fnHeK2{PX5;f`b8Aw!7-QMIGC_M$dBn5C54Iqu3AF{qP?LyYHG~WTadp?o>7|YAb4v!qhupuiSmn5nKvp zg;kIrs3$Pq85(}MtxMXJe!UBhrXPU?3?_33*4s5-s&-y1es&ItvBp3)fOqG^a4C99&{7rni7+jGZEj~g0u5p5z=3Hx|xhD&36pqCttkaKCAWHuN z2B-|V2GT2~9FqCT$3+>Tg88*^Zaeo#pPjkSmKWI~`;i6Y75Im9lqrQDkJeG@Hu4JZ zkf<^!K`uA#DuZ^Enqa)%GkHo<6TiQo{Q7l^%-{DiZR= zXD>D3nn$c=n<~*g;3Pr-ifuuMxAb4UYa|D=5W&t@x7lVErigHoL^+zgI}^TpMr`7M zstLB4xK3RMG)nAdwiqU2ZQb|Vn*<-3O@ySX8r(4|7t|_k>2BZm9QXaa*Be9CVdq2x zb1pp{*i+kZfOCUE=Bi~_hQTJQh9njlF*>8nJ0&(#&CEoCxw&h%wK9wlW2;>^VChvH zOU<1Lq`>2Z$tvyBBv(|RoWXONfpgzW3?PaUMH$4)~b-?m<0^ERD#>%V3&mBC{J6zpji_lI3y|y0pK>dB&_CoHnZ#L5`la-4_y#; z4YVN#azVj^#NhM##1ol5Nq~>y@UjSz#A)m)mcw&#WskgiUcd3sJo43Rk036(f<9{5 zq-N}8*#wNNRl1?N#t<{wm#f9~gZ0(12r+0eRTtDvWD%F9&DnUzL<^V(t3Z~RBuOOr zqyOg+yn+dONH2byysT7bU;I|#?`4zfEH088>505solDJ0Qe*vD>LGcrI08II1fhUC zC3mm54mcPSn)f64TIdG7d-OscxWx5+_IHXE}`{pXx(x8guxQs|}g||B=gm+3Exw>dr zTDT0^dnmQJ-vF<0Y?|!7pRplZ{7|`DH(UJB=x#-BDYwQ6cP&mz2~AUGVU9SKI&lBN zGo4tv2`HjqencHC`VA4YRnwI%1lry;(%TO|?oLlv8FpkBp~IzMBDxSB?arR<9a4v_ z!H6Bh4Q+c)p=vhz&PL}k(_ddtK7821^Vio7JU=wKS(ziTgqBWO)DZBxDnVi5xeuAT zRuS{B2j{a7kg)CHw{3lRm*}@abqC+xCOcijyYL~(a|;1IQ@QS3Bz2C64T-}wh{peY zK(ES#92=^GcvXmwKYxiv$Hm7D(J@$O#f4^y1p~r#!raYIspZ2Ufr(NNRHvdnB|ZYAHu1Qh;d>_f}w#lQH_dP z%Y&F>EBdx>M*=PjA6my{@o@u78fB0hF-IfR=EgA2pY3*}_gW(;tL9MmBh?sZ2iY_6 zvV~GiC^j>0IM?gtKxd1^YzZ;$l9*IDz-COI!XBFlh} zrE)VGEVdcq-WAg)bI!rFo@YNU=eNOZP9c$l#W0QIww-;ccSr1Kh_qlNZ$_>c=+@;2I}UbEEZ`+D|(vyklqmubTzoe!`wFH-3Gq= z%_aj2S=?jPQRi&i?QF(f+pRrfL$hMv(Kb$UX*Je9E0SxGOQ{7;jviETFnY)SBsY(5 zI~M149d{cg$_tHu%LUis!MqD5e!HG$SF7dudU|^wx-cqPj)D^Kq}?#+91xv@ zvp6ztBXe-E(Hn%HRS~7@Q3l}JCT~8ycb(U#_X*AmUa+Lbr?h}Dg=>?b6ZkymZrt~q z++i4Z;>|VZM^vFjwNATLci3a!=nhb|THbwI&+C=Qf-M89o(ji2x`u}SDKT|Q5nex~TZg6jPB$eYhoN)>wR_DZ8txQ4{^SMiUx@Hq|l(of)Bk$dZSSqJ- zY)jSCzhn>L-m}Z;8h%2voAvB$b+-;DSc~d6GK2TgX>kvUE*DBHyc1!E7^Z_4`{b1i z+h*-ves&$R%jwwYn31@XNkXbA0D!wuSf5FN`%f`y=NeI~qkaNCju2Gk*bW$O>vCds z!9)e7i@W>mV!A$GhHR<|m7EH_yqvYq>@>&4{u#046tij6UEK@T&3b4m!Zd#9A=%dP zos)k~URIUVlYdsoec4n=388mugIKRFr&!;-;oQ7MoB>s_&6J z!AjDrk1jCXLTw{3na-`?TsnhwG}nd;k;1j{qzg&j%Z|mzHCpnclEBqauq`Du@0s{l z>`9C>Kc8L0bIr2N?d;ohdB3^5UuHM+n;Jzq*bL>Q&~>9G@T#esm%$-Xp>KmlYUVaf z_MU_-$dol5duYA$BtVPl;Enf09X3+6Rx^;k?KUpEL7Fe zuvGx2Ez{}VHF^#6tQND2YknKkX3Jo_ffWw~ z!8^p|IBUQkLAVuBPkSXdz*_Mu&|A?A_TXy;EZ25yDL1pRsCx8NC*U zbTWGJcaYucUthb0V3!i1xeyFrrs3M{slxXwi3TTY?B8j<+BKaRc5A%Mqfak}h}lZ| zwAF;YYou?sET-r4>-jp{T*7Nxgk@l=bA>cW$eq%vs?{>d%DUX%nYDvH;rhW3ts zv0tOC-M!R#)c6-g4JxpDq6RH9#ey=<9I#sWy;q70o#0-7iul*Fln74iJYl28zacWp z?K3dHwsAz~3dtDV%+?pP`|SH_QESt1@bHiv;R>AS>RR11Vr&P3PLQg_rBAO-IPkH% zFEJp!`*rfqPg@|p`?Ug6@o~emddO5{6o;?#bZyKLwZUjDvEXwJ>5g1qL2hfn&5}0XWbQYr6UgtbuP(% z{?Fu(O3C@NBOm!klaez>Jv2kAi9Y-e1?Ti{FnjOXOw5&qbGYdd=Sb5N-t`wep7m-ep_6)wy9m z_4f62^H6BIUENQYwL+5t6T&?YWa{m%1m>L*bL|4<%W^45&sbd=J9cHbb1?qq<>cR0 zf$7c53e*2?EHGKfi>)UYf$_KzG^rZ=%;Ry-E|N;X<7y;@SSVXJU~_Fg+qpw}YxU15 z9G9Kmon0;h$xNgmlaFdmM0JIve@YaRYJxl%QhJm6wcT{OJ2&ndd@DYM^9f!Z<#+65;%O-J2Qm6!;gS4)0%+FI6q~)xRpteQB!Y3W2ZKa98b* zq8KgX;2NGC)us0$BOpo_Q9np(7n=6gAA*fFg3P~TI*-_NIiD@E)9HF0Dig^9!MGUrk1lQ)!aPToe#H^s*dqk4*2 zltU4Yu7X7xq!j;nsLis5Z(tA)S(#4++>$G!iKT4MG1`%;HUX$ABIp*@BkzXk&|WQ< z*|%&4QSBm}u@yK)Sag9Bw?ShxX4M(7F$2mb#qxTM2c?nWRz_07BQf0WOPs(B5&|mD z$<|>SgEKx#rp(I@?l6ZUx%J*-EL%+1Dj6^W^{uy@rju>?qIZv8`Qpvx^g6q}3wduD zL*f*UgMPeqxui8s^iHXx3a-F#c#PSa0_VCkXt>Ck=Pcuc=FYqhdufF%kFtt zoM0~sG<>^aqQPFMA`CK@r`**Tw14SZOiD{*e1ZfYCKc;n%W#o*iS$xvN%D7rOeR70 z$O}nOTy~+I2Z_8xV%yh(5iaulTs37Na@k zhE|}m$Xra6N&(e?ZmzFib6-x(uhshcjVa-Po&CTlxAg5T9Xs~|Rn6cVBtaIf9lcGVHFY>!#|b%xJ+(}WlsA(cMN>Q!Pt{=*B`bA5P` z=D8TohU;qg3OpC56l*WX@mvR{3aJdFXMwZK<(Y57aP|-ByjM(BiZ}( zYV|#k=@K@_4HNLXIpdwvIscRxY`Mi5Pvg#w@8-%ofW~_g8Q!PYlXsN{^e2}Vq)`K! z<-$;um9^eXtI?V#2y6}6_8VSS!F`=EkVWOQMx>vt8S$3yqZMJ!CDH}5*2~RphL%5D zZ_X~S=jWjVMEM4RQ+Bd*XTdup#yrUtIPRQC+jsq#YN?)J#WQU+`SZUfZz}ir+38KZ zX%Q3R1b+RU-UQM)Ne*FYf_r@KtI3|}q?9|4J!>AIsZ99LYTKABol7Po`+)*vo-JnI zqXZyGH;=N31Rp7}NE4ZW@sEimev-fiAzIMM@+c6#kFENgAdiBpjFon*x60V09Sb25 zA;xPzXn5PiFr6|z`YZ)fyf+-dU{`I~jwO|vS#S4?Z41P_J0vHLH!}bo{I+dY-@f_i zg7BDH_zSS!d3Dh}Bc_@MKMJh)`A_XB2qSinbsli4I|jPnJn4hqQlt-_T7P~(O}*+B zM}YOj8ufw6my9_^w5;`eH|#foJzcLB+3D)ECR2nQAyyPRWK<@WHyc{_{!uYZBIPvA zrEVYh6k3kG#@{gS`RT1E`SmsdUL3Wi2$k;iG=rE)qmjAdquHSuSV@S za;jH1&k{IbBW=KOuF-SibGpnfvYS=$mTtqzGKyRs3^|-lp1Q>poA~sOi4kSM4*@5> z?s-VUP)qhC;fLUI44)$gtS&;Z41z_AO(&17Tr2od=g06{-VJ-9%zd2^lpRA2wr0p> z?uACwMrz^QB)!{qm0iy+09e;&kk4M;)nq-8{04qQF<9l@%PRgcG5sB;vCl8K(;

    =VGk6M@LZ&mJ!E!q297If~0WE42d!CZar0C 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%0DHl$-xk(38C5P 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%0DSrTzyVnu%mXsFiD9!@eo&#KUv%OZ}szRtZwaSqn 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

    kgT3UwUAZmuVrBGR?TdF^yaUMzjBh37u;k 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

    )1x106Zh>0H?e;EAtkXkIaQcM*OH)^SX-@7 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�vh@4(izI*F3~$E)}mkxXY?ec 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�R`(Ck)!b;7GQ8$S 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ช-Wq$dW2`z#xl)Alccv0$pSE)?9&BiyW%GN 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∋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%0AGuYovf``=Yya?Dn`2i3RpNPX-ar487%(}< zt#&HR&=F=%noFgJ7I123kMBV<%^0VSSenX>GDd8V4xjnxvS$-9JVsek#;k~hNT>#v z!Q#3Q>D*$N#99F{;E&ldL;2CLH(oA~OMC&me}~RJB$jm%iW3~h9V_eRB{MWa!8u-E zyq$ckPhHXEmNBiQ(-l{eYLOzv@+_&x+!q`JoQ7x+0&Qxx_R;p(6%P!%%HwDk#inkV7dS(tYeBn!zlS7l&M__eX!tuLWhV)dmSXJsMhnZ(hqrEt zSF>~7o%aHquVnEqpsb)W}$+ydDlN1bOi^y1Y zhaK0rTMPB7?inNkB(_HC91Uy<2zl8*8poj8aOUy$xy2;~m9k?b~)iJuU;XHnN8KZ#Hvg_jebbj{Z{?dnmMi!Y| zKnlkbfzYyg{U#S+5?|7dcnmd!n>?%SnmS=u|#|byryuH=X2I&MkHzVlGj3b#^|3 zVDKjJHGp!B>x%-rZ$n__pA?(eV5}TnmtyC+!YE~z?C1nW(b2o|c1 zBEhRefgp2Z!A6fIE4%aeu$KXj+GHZAjkc&q-AE0=QuW->4!g!UoNH`{ZM9qTpfQ;h zmyxN%-Nm6}Q-|Axp{YP+FCtk0*aj7X(ocaFJqEs)pWQN|E85de0i<)I2{G=NzRbB% z+@#F=?z8eyU2EW=NBtg?eBYClXa*DOa*WOuhsizyjBX07DP~`%%gdYD`lhiGo*PK# zkp^1zg`RUnlt}@iX#=qVO%bDmIF4>_YmckB-YHi1;{D`B&9UHC@?W%y)v=ryNY0%Y z)xfu<6{80p65gL!o%dd2IE*g698-YRv-8T;p|y4LFVuHTPXlkyXEzraKxr|%3|$?8 zM-q9tC^aNJ^$u!+&P;@uNQz~;9R;(5itqp(N6BZKp4QtBZhhsgL)Oq)U*Q&4)T}c^ zEVxjHlkG@+&Wc*DNks6fB~{cit;~~fn?6jcMO4+nGUQ({J)NA+=hH>DJiAziOQ%%k zn&GcTV!Z}l{%jFsk@Xo3kTN=v9A{;SOIhCT84cIl1&#q>xY>}N$e_Y(I8cGCGmQQ1B z4qt~4#Wuy9NYC6mrHMp4VG37`e9q=gjFdHb`VJ+R(|Cv&@IJhC3!&}^SZg5^-;@^0 zh1jUPq){DS(!0d&Y2o>gi()bRGQDi% zg_e#|aWcK}2d|=pPfqDrfL_F5DvP_O;9AOdCAY{|TEQkUaJ_Z2K_V=l{5A z&=GlqyY_x1}zGl*Ar~_Hu`BU@su8?IQ-#=$iVdY?mP}HoUbRvd8{4lKtqz zs>3Xs-2q6~7Y(grEXwknTJ-FR4ACuW$KFXX%`IWEy=GjApH7Vh!);T^?!W>i@BZu3 zLzn-!jUF0TTP)6U*ULsoJteeO;0~UxzJm7xV=#&el#B?YhUsoviMCz5&c8)^#iqDk z&gaX9E*9>(U=bFgbW}*|p9*@%L}${Fj4W3!+e2}Em93|%yXngL$Hy?IxH?xNKc9Yy zjLRHg33mH)#lZIR^W?Oi)OLqOPg^IoHIglI?M!N0nQLu0&W~;d+rxwG*}J9Qe=kJN zwOvFo*_e?Tw>8)RLp=u5tr=9`VbJjCV>@=8UCyq)td_UmLKQCfVa_E_M{3KaMSV<^ z-dQ5Myk@%&vRTECJjIUpIv2F)0?wm{uP&R&Zmnnw{VwL+rW-OcD3vTT($iH z*4wrH;ap{q17BZESKpV*^K5;+df=sYei6#vcS$D2Sns7P?~oS3GDy~#)r08{DP!gd z^Bwjec;a9$N>foP3~c%^oNFR=1Jpks-=Sw65zID-G)5hx4dGBNh@jPNkr}J5klu_b zR`cv)x|sb42uLCK#-&UF4?z;QvEnhccTkj#tilD!L7&JnS}1tM`9R9V(RHcv%U@nQb~akQrU)+H5v=ZxaDlZr~z za$wx?d>W;1Bu6REXT+oJy`1D`$k>6WZ;>@)VY@bie~)1-p|i7#Vmi+t)?Zu{tMh=N z15$Gcih1d2ZEvPf|CA^V4o7McL6e7ln2OLD?jJ!(6FucFW7A)iAGfg^5`%x$BseOU z`mplTdmZNSUSR}T4Tk#B<)<5#yJ1=DqB-=gu@gi6db!A!5F_4(wH)|S$r(Hghj_JH zkf@sx+dU=LBcY{owlQp%7%|c#0kdq*0E{f|-u7%Uz`c1t`CM=GyR6usTQ~Yu&SaUn z374mhGATtuQ*x9(N$UOg(kH2HBc)Gr2nxgy6dOsRZqZBUA_FCfrkCqtalXpt#ohG& zGMo$`xTHz7%KOu7I7h_h0WcYbSXT`%wMZexPUr?yTHe2Q^SSr0Q}VfC95~Ou(&8FN zEJ|%K*^gRk@u5)7)Pc=)jTtx>NZ)we4Ami%_WXXiScZHYSfb@DhrcQ7FBj&W5-Woe z$U|)|$xh-Dv2g?VX+1JIPG2wk>eJ-Kn+Db9@h>1!jMDq?wd+(OXyPgk&^+on& zxi~LECN6GJ0T~}+2qklHOiVWii)sW?I?^#!5NX_uubcDXf1bSC|59>OnrqE)f4W|t z<~ck8qbbYN!*kR9>E_h0B?gd*DhbdD<|!2L|dw~Csjpq0rsNg&%Y|>+D4Lp z8(o5@fr(0n5o~YEj9hh(USQo+k#O*5b)H?!%J10oX&4KulF}Ley}wWMj*0a^B}e83 zBK0nbW<$By}O?Ek*&+q>hu8Tn41J*5j57IhE#2TCg>(066 zY;apf$p{h9{v+UF8(cm1L zC5G)=7V{ahcV%k`glE?c0xt#*yBs1`xe5^L6Fb-K)W}qVcS=kn0hLf}ZloI4Z8;d< z^MHQJ>1P+Sr=JrrTb7EHaz}S91XRLm`4?!WxYiLt><$!}dz^I$aj~5!+PlV}thK8} zT1MJhmm-x7TPk2PUF%=Y6_SVWZi@N0;wHPgT^C=9`)T0rEcQWh z6c9q>{_&}MNOW+BO(0{AXM)ilBjitGi!3KJ5qrd%@KdS@R}S3|qtYBb>l>$i=)Twp zrlK1rW9}aZwp?X$m`j3wQ3hMz)CMGNiVl>`E(Rn{6k`KB;&YP zC`}u|Wa`j5m!cU*9-1GZrSWm{a#D(iG>Mwak6YEu6(OQ_W0s;;uQ4>C2=m;h(p|fV zAhWTTIc^=M0fnk!mIJVt8Q(!}WFACV_k5GfsbABvN)Mp3$b5&D@oF+AfK*2LIjM>2#( z)u=%8YY#@ftE6+vt}lwkV!6n^7xT+$Fjdo4df8ziq`UNjYG4%QqLpl@9JDQjXsV9P zQn`Is*@7HcAXU{O75db!3(yzB1k;Z*MYfb#ME|&9UR%8oA^n4Zo z9|wXs%S~=Ni?en98Bw@&4~aD*1WaX}UHwYuj>#_fu2|3Jvus}cC|2PJK-ropS@~=( zhB;jCq!vXliUSO6sG=7!hoI=`9S#5X!Br3W?Ze-;tA{9>8zH2iwcs;VGMAXJB}i62 z_h{I)jaX}B!=rULdY=X`Dyl4Ewn=+c7a8O(7sc{&ncWvxfZEH@TQcmV<=DJow0|?x zJ0-S%OgPGKTDFq}L5yBji)IVu3DL{GI(7Nc%YWR)k1mkt#So=8l_tY;sR&D={CMUQ z2A*led~JhMeSGTY5E9iIv=$w06z?9%{`Al3*RQMTeO9b5z6ARo3}^aq1t@2oY+RiM zCFhJ-8wE!J1-J{|owj~|_yVikCpKfiAr3qOi){1BqBW&|P5x1{QNH=2XZ6aJ2EL*=ks6daBZYB#62K|WfLEj*905v(q(t9lHNL9Jyd?L&KAWi z82*tK|9qT8qP>ML-7{i~lGLDHCnY>B`*ePzW4_bc(btrBc)A!!-@S9Yr|;e+bWb_* z$5O7S(k@{LLuOUForHZ9|GC?@u$PU=+ES7WyGipy{oH7PjjC#EJGPkpJM1zZv~94R zA?%TIs2rN_9pQSX#Kvf;!tp|?Vv^F)oe_8;+b7tM%uDy?<)kE|dyHtEN%r#N5xS($ zak0dE`w;*(mbDUt*pa9t13Xk!A~46U@mc4F!}gg=;(@bbbq$wqj?_W~Zs4cG!UM|0 z0f!a>S^ub5cSUNvl2kD&$u7bVrRmtaC&`2#fKaCq>LRpLA{O#Z;t~unh;_k{$^>Sf z=S=wFzVn!;Y)smYx>nh=_G%6g46LiA;#^{vIlzlW_O-nCi( zlqTGCscK7dDp@$kel@*W&Cc+joqv1`nD93+UtM1{I-NuxV$wGK0b6>VPFuz8b+(JL z^IRxgcd7&0l6c*6o-(EI@F05*Xm|P&_KGERCj%B>4Xp?Rr8bR4gzNHBI!td zoHWX=m)~v!F=xghw#I@nJTwXXqfhtI9nHF@M3pWLrptne0IS=%Jof7c%Re**t@p1d zC$Ik&(=;eQjuv!~!3BQdUF9FCb7B>f>IkZqZD83!%yRRVlIt@grhN_D+)laSU13;Q zc{9D6F0xg&fXmH;qAKAzcv{RZrRa+p?~qtQRl?u!U*KfGtiYk@ae5C5^w^<<-#-DV zk92ipad!`rloTS!=RPRl8b$=AQKf;gS11EKY{#j0iF8MHb$d}eB)oRHFMPN+kl1IY-{*65U6@c9qL zx(1TuM8_rC2|-b{Akp&L;ptr>T@U*FJ5noun|)a~sL)Y$4>#Sx_|*VzW%raQwX(pK zP;1pLDPjA*i6MuegWTZ>V<>&~+HFO;wCJs^NJVm^8DZ4cDtU_Kl7U$!ObLwQLU;QX z_QR;Wv6cu@A*{ESi;|V`VBN?NCe;=S7-A=Ba($6>XZm$jEH1P2DfW;SL0X7yQASLT zG&0@eb=#%}>Qka=p}<*QZ#d5JXjthp~{wn;OE3mv zJzyJDdL`6Ocw$~}5Ro`P!WvR>WYK|noNQ#;3-m?YXAuU4h6j=i7z@c`k z_1Niaf6ly*laqhcKGjheDL-y$l~`exzYi4~cIo>1J1vuzYzn}0}WJ7H8E zc|K_8E3~A$j&zWl?zTz?!NUk##o)CI#-Tn6emSLLJVsHf&sVXR>Qrr65sb$-M3YDt z##s;zz*c!`syb@R-W^BN5UMym;d%R09r>rk7Dl<55DGtNVlN}R%0%={p47-L2H3CS z0rso5lCyxkmnp5BViqAe!vUo2Y6(BZ#I9#3DZYE;&TRu7)f|%P&^Ylgk)HWp7q|25 z`*e2G5Rk^%3iyTLi39a9K85;>=8UeGFo`LFFwGg=t75i@jrwV!kIa%1JYWoje|(yp z)-JXjEvlqUT3xKorLas=Zk>9Rl8h&5+m1Q|=v;NbW4f*ZL{QgYnLe^4pNEI4vRn=k zw@vAK7fkL0b#-acPAs;4;Ws-CmGNm@_nc^#mg0DhFhfbGai-wtDQ=su{5W}EmyKUI zDen8$vN3K___{&{-KViAk^8grPkVL|3x69++avqQ01ee*3)oy|Z??Wex|h7q7T+@P zlUYEd04JGJQ(m&ZQLJ-BtjEI$PI|D2_{sHZdUJE1&5Qfx?M=*Ef?;l_AKJ@ceB)7K zfcx#k6X$(T9DT<*Sj-Mx31T)i1H&1)F%CaPo|9?ZMOF3Z!UvdI!s>8ty& zEGu+wO<6LAjAKY(=^Ye>QK{)?sRN_NCZ>$AbL|&6El_#$F$$G8ZG%7@+>`Y=2@K0i zt`PX^kWkqJHa0J2uen%1XoU7yEk(*M>MZXLgS^dUadWY{UtsBSwP-2UQJ4!tp_aq;>d}VA4fwy zWDaKVKMuc#$TblvL9}%^lGe-l?F}5Zj^A)7xHc~{=6F(B)%Ud*;+t=UE!)AU?%iMz zwEisMPsob%;;J#_%F2x(z^?-2C&qGZ%f{|Wu}N1dkz|j$x_4bOSXZ;Ni()#@z7&_! zRqNOs1mZ^?n~Of@zT!fW3vCE@^nNTa*R^nUIh>gjsx;>#&CIoZ58>kt8JKg8D1z#v zjOH{TRHbQUj@Ui{>)d1zy2CCX{M2v=Zn?~D@A`;;N^BrU$ccpCMiI9A8`Vf@ni<(h z1L-XVkbl$>rdt5{M_Ys`749E%wjqf`!e4F(-2WM_NV>0TNI_$ttdD_-Rz*ZGm99w{ z=N{v6nqy)JjvQ&Sa>z}4hnoH|v1LiZa3tCrByXtw7<-JY?BgGkf7g!c;~zC<{@uDn zMRQ{yRd7Z|EzLD0CaFsQgt9XC#UureW3Lo946@SW0psXeS9GqCUa=@vI6tz?;Kbs7 znO$Y@R)QwAM&cYu6y-K{#?FCH_mEgOj4|8~k$YN;k~X0(cz{8&-WyY=AKlpT)M=cx z$Bq_RsEl%FLm`_WiXLg>_~7eOt`((5i^pqrhq$U>Zo3MT-W8)TU)-1fzk%ZN^m1J+ z&Q~ZeaC>t(3wIxx%_%L%%^_;{F}?#`fOksF1v2=R61kECwS3Z8IG(bQkJ}V?^1{}p zxFCRSDyUD9W3?#z^Eu}wrw_8> zQIkkE7wP2%=LA@1nC_M&(YZ9r8w+hreB=K*Dw2y<9;;o|w!i^HWJe_gz?+yDz9I^* zG-WwspP6LQ&P$aP7YA=Jg1B@Nj{{LWhK5}YVuOLTpf0>*^7I&-w!FEx&#tG%Ww0G3 zcrK9H4l~}~$)tBk6I*;D6!u_*m8pGl$_P8e*5dYN`RV^B@7ucDHnOb$%B;KtUH1#$ ze2eWkcKh=s-IF&+q9sNYsYOcmD8K$Y2NH;?LIErS1SvULla(~Pr;H-b=DF|vX7c6F zI-Iu;h4dQH_jz$PyP84rcvoCrECX#ihO*HlHyH7D?gLL( ztK}+QJavy~KomSQBRHkVX>&evJ-sRx7zy9bV$+$-MB0U;OlJlU5(D0^pIjE4U)_D* zw$=o0a~nh4;TL2wQ(EId^l@i1n>XI$WM=T%W8RS(2(}d=>L7><&AbAfX>Iz2SJ>(m zAKci#z=yA9rW0Lu}Nh zJ|pH+St-6w+>Q5Md$pXYCPU+4L)*S2)v#Vl0U7Zv`kSt3rXRsQah)qjJ zTbAX$lVUX>sW5inTnvEqp|l42@5_IfysdXSysl&GPKU^?tY=r1$(0t!Beh-N{E36s zGl~dko1?A=5E^JeVtWGXT_d?lw7y*zi|k@L5Bnwx+&nx4H+gR^Rp*Ep6z@53nB0k+ zF&+Y2Zky}#k1GUz@yuPRf8kIcx31Kq5hyLaNdSwZ9R@X8fBq2Ivyligk0EE}!=f5N z2lML!rgMwr2zW6&UCyWAFjuo_c3rHIsBxLCZVYVy00)eo2gfu4TS{_a zfhtK~4gpvvfcz&haXU@cFg| zOF7I=A{rl$smJots}Z@1$*t=nBIkfU&565+ED7V}&?7y2>$7;TH3l<9iK3{|zN4*;wB;t$oCa>*cq>VjYA%#U+MbbQWW9xRw>xWg9R za>@AiF@huOmOuY>^2$-@__apit5&Ktfz%p`klHI+nJZz9Joa+PbPC>6D&oguklT&l+;X*UjMcwitA zP)BFgM_2G@fTJP-;k2Vk>Rlx{=UjiE-puifUKihIH|xvdE_ADufj!)>VUynT4E`yx z?x=+L02#M<>SVedpH64{Q2NJr?ofKEle2Xw9bPw;1{XdykkdI4f{2vT>pmmc{SKwO z?=S^R+H84`>85n)lW)vMWul^+m1)mstLMo75EKiEt^NRqHs$@u@ z3ODR}`!n~DmSG>l@K?QaiBYQ2=k8jz6rX>ZynkOOea=XE`Ekp54(E!yN;3xD78PmZ zIr{|H9<~(SSCrCd7?t%cw8<)2Q(aSW-VM^*@@Ej}on;rZ`Bh`chN5sB{*A@ea13q- zZ{;7;goi{o3l5qv8K<;C4<%G2zT1Dk)dCJ@h1Uf~`wFkh6(Nu_)j}=C=GHPs*kS9E zLxJJGoCq*#k?+GvjfPfPlhQYUGp#m|ce#B7$~9vN zi-=FZukKn;ta=$Gt2!bNMu@2@f&{y5@A7$newq{19_7y;X*P`#AYhcN<)q#V;Lt;F!O0cbAcs z_G6UV-fei&D#L+o3~W5?Q)W1TM#YW~=GX3%y{jbGSI%$mvU7mwqM=u+1u~HfNKASQ z3cF`Sm;5OvKHxTLT;A{OGzVUo9yynL_=97x`ux9>kN>-Y)#v}MVO4(IGTI^`OLq&A zDBoh>w^x}%6e4R@@A_hcLRa@~9lrwU8)r49!gS}Fef|8sLe_Fs{$Ho_;_ha-$O?Er zs|J%dZvQKqL->=*;~m*_a?Xg(T=TNqPfT~)&EZ?X&Q4ULj5g_Kj!xLteC`+~KfHF+ z$PdmkMQa)<;0ZLRs93g1Be6DM38XQ{8Ou(-|9#y(hMvBcfz%r5>B)ZGD9ua!#e$V`@3VVmeTid~m zPb46J-D2?5^8-YR?8feMiw9sGb)oxrTY2blaI9w@aKO! z@p79CurB+;7VEhiI18Rjt;s)tN;R;Nl*;e{mZlousM1i{vC!yWWDsgkrmF=OkBaP~ zSgmI3?5|Z8z}FbekaG>mGU-1T?w!(f)C@&JAb12@+zS~U6>RkBnt^O|&tJI+e*P)} z!JOw*3hF5Y!=EO=3&CIi5IQ>7RF0n{hv=wCBL(Z~?Ra!t68>~&hKtd8a$BT!<9vm zRn)i|(q-{aYNAg~I4enk`ObWh#w2ih9EuO}YYTBGSE&n~5i^A`$HaMQ(5V4A! z6Rri>KA-TE`5?X59s!<~kce8Ql{pXxR>R;cRvpvD!r|Q_8G84Mjz6Y17t__rH0W?4MJ3Ec# z$1U{#*60lphs6c}Dt08)i0&Wa;3Rd<7qExC(lwKqW7Jf`tGCpMLya8yz^LlFMs?J6 zy-TD|`*kg`Ax)reOlv$34cluR2{LdUf2<%#9~$oa7qe^=xm^9LhDm z{V@6P`!6xtx$@%{ZDR>xm#wLAjLn7N@JYht-c$CB-dm3$FFIO~G!?X8&xj`0RnBp4 zF{qsLqnOX{vNe1Qt5vuMRVwpf%?N$~`|m+{r^F^>IW4s-&3@$UI7<)}c+7Hkfafo7 zqImw&R^<^oms(hFTnM$&jNnxLQ+QupLrOySajBaFY;9=ixFJHL@p_fiYw!I+4 za!H9a?oJ8MwbE%kbUlFDI)hYSY|spn`!bVyp2q}UXx*D7$&NhKyI^{t3oiyjnTsMj zUCq`v%Wq4pw*`{Qr6>t4skUT)7waApr34_TH>5<9)2fZc!_e)+@_PwzJ6JmU@F}ZY zaSnHPX5JzDkrW9@x3@clFYPYOxC+Za;axgEKcvT zzp~TY)oK=0dKhM=n9jmKNaxgF7d?)DO02t4I%Q0ry4N0c!cgBRYmZ+)yVV(2MxeDi zBLvn0w06=%oht)QOX$O{6z^f{(S1Xy@EB9FJT%J+9=c{i-vTVcis3;%nwg`40Y5DbleBeZI|iNos~CTD*0CBQFRU#w=|8)I$UmhzKKGI+K` zc7j+@#XBZe!^GJjBqQO&BU>f;*t9r9Lf7~Ib(6@FjA~mF3C19_F`U*SITWW+;X{&u z$fqB=y7rL--H|iTCN4G(l6P?Kc-KfCJiWs2Y60Hy+w|t9x!{3B6gdA%2XUc#r$kq| z?1W%3s!a!{F#`@RWi@Y_8j3O<2jUW~OV-!#~- znBDFIkBhzM|2uj9+Xj2j9m;|7;}+~$_?6cV-7r$g8*6pS0Qh6Z-sb(ru*Wg-7F^TE zksSsGU(soS$#nv+zT%*|%wNlCc9BgN=ku^hAw;eqZOtj^3{*Q?6wVp3fmCTHv{b+w z9;H$)6@TPwj_+Pg-qil_ozs$k)9N3=QWUE@hBW8I8r+)t`NLGtK$4y4*jzgSE-FWf z=GQfk>fB@)UZ>x_t)_QbvA#G7B$FY9Vfb8nh-$KTNNgkyX)ZZfVRLDtrD4ylI)20c z!|TbjT1wSr|9I9WrOL5jjvf0tOGNcIYBVPaZ2V8MVeh`)l%B?@OHrXcZ&>G4N4MU) z!9Z;r2u`!h>~yufJq>A#5zCV2NW4W!|9*vkOl&@eNZjzUqK#&!aX|>Y#{>klmHP{Qowtj->=~L%-bZsLB*v9(P0eCe+Ol(BngzY5ouP-vzKsMv>b7Jr(1-Fog ztqc1{HPb~|(pAb_b2|{V3|`+6=`^}mEMB^ZbyXON| zv7TK-5Nj1qJ}5!eA+!UUfT%i+U~}#Hp?8PmLh9Y^>Mpxo!-X4L{Jb;(h^cbM0yetz zGOB+{l#i7lsXO?EUDgz_qG}X71Tk{@sv^X!FWyFD*7D;h?qsekV_Me~RPakJ!QM!U zT-#ILRrFqcatCqr(oAUeRcs5!*2(i)UnRYZ_}~=3EsI9w)a2#FkK%c%9C(XMbPtLW zy9)gAH*O!};r(9~vqhXa!)#wc+)FX0dV*-9@RLVY<4Ah6O9sF@)j~T!GXf<(jtw;D zn)}@bcHeGN7h}{~OlZ@atkHDne0x_&M%LMFv6yD(E7Wnr8wYw(`hFo9gP#5bZr&*| z0yjqR!HK(;)SoJYThXk^JUXh34{qS;I>6SzQ}WyrLb);Z9F0=B6nuO4@Mqx4@a!bH zx-+^MKnRgd-Bff`c)Y6&N*9ZHvB=J|>t*?JZ^9Wkl%k`!>WFh5gXT~DlVSu@OyYEc z<#ae-GL?GloN)&_;8@!DBAzz3dQ`|z1S7&4N1l<(TtM8$*>&_df3-*5SXhnjvZIAVT0pBo#SkQ21{a=Cml_?F*F_66T_pq0d zp4y;dK6i(ao`VeMHDFfZ9jv%(+{d|PGTu)wN-~b?i|HzxFITgW^9t!A3_Oe0x#*wz zdZ)yKW~_#RvAWuK)zr!Lb(C^WkV7;<{fCIb^8J5Z2kWkav^&^xQUw31hkU>q^sxy! zHkaHt`D*=kBk-$51GZ{_>{C%TuV$gNNJcKaw43F8md&T%PcNp6%Vp?K zA$m5s%yoZNy!wbJSF)W@os-?Fys=?EdF;%zx2px{KK~Sj?(??s_Huf`VE3kud|7TK zv&JS+X+3dQ>zPdqvW7{FLLgs%1ndPqhAJ$}t`yX}-!N6J)$QptyE;8B7H5!~tg~4_ z6v^oQd?HE*+1{iE{wcAZtSsjlg*&ucIrt2$Z+>?Z(Sg?D$dn?@M~ngZ>t{E0b*b=L zQ&(nkW&ptsuZY3aN~1SEEL&^zj)Ugr-M1ZsXLP>kcsra82yAlL4tML_aS%kWi`#j& zKD|Z0^y}r12JOf}Do6JnWCs7;(4-b3%Ev@?u!|%9_-^v%>juZJ7*P3f3qKGg$`Xed zmX@PfLj#KUCW8 zu_xzu8mDU_^3Yt!?F8-zr=D&;cQjsp+*dMsoOn4vQZr)~LhOP^LSrFbpFKq=1&1&e$T1AXNTPke35K#}BK z!>_-s`TQ(^l2Ogj9w5eT;-Z@9S6#H4-c5SNxm9oWWVxEHv+v9K-6EWG z0@Faf4rEwjG;vL}=@$J{qT_^W!r+HW?`4w?qQ1w!Nrx(#PBYe3$!u%JG7aAl;mVy3 z)(}-uMrFb-&QGyS=bB0czwo;ztb(7iEj$kULvI5i)zT{%Vdr3CeT_j$>O(|3ho@do zgQ^npOF&XV%V@hlk-T?GjB-VC-14NTXN)@r_Mba)&WO4;Jz*?YY-qoeQp%bQk;fE_esOX3>PrgFNN&OO z2(2f1kz86?K~wf!o_a9q8b>S`C4x|5g_2wO-}e}e`jDt8-dRUO#Jfm3I&UtPSH(J8 zO=pb-aNMWCjtr!&{kKY;Gg>AQ%9&-e3o;|6Rb$N|;?1OIYY8 zatXf2kC!R91+7(robD5kmp!{kX=;v6lO2Ge^2uOyU74(Ni9tU3ejDy8J6XZY2ykji z&WMFy5w(r^p?%sfI3z0GDN4o)CWdRXFv7;hhwP&OHV}_Ix!xhi^55F#2kCv;6igEZD;D z0^ub&u#{XeeGIS4DyeR0VRN1wa*EL+{F~=T(OsnFKea$y1po`vYXo?loBmRoxq})=#75& zjHXk+r`|{DT9!(d3rWl&x4zoRa$k5H)-O^xtc5Nahm_l+Bs7->8*|5A`x=Ka*L%e= z7&fT=MlaQ?tY*~jL1P&H@Otv>)ds_^ns)hd6vIepZK!f*;4S6aHg-*@wPpG?u)x%X-QM3s z_>2$e?uqQ$n1=L5_EVe+;8RtmtmzoP^KLMx&imK$Vv(KCr;BjL2Yxg}PEAgAP~lA% z?{&|JjS4V^0fDB}o3{;hdU2b0e5$UN6-daCNH661p=F!opyk}6eJe7xE8@PQ zB%q8c02-KN1r#uku139cgP}9(ElSs1<|zAHinMg6dF^vG{u!|%4`=0cwPLMcdFUM4 zW^#8Bv>;u;=U<|90iWAk6QuN3loGm|aTov)O(>{7E~I$x=P`6V8a7#X4{ZlGhj)z~ z79oojfaAw(4&Pv?mW$J?IXsF?6ikQ>bZ?G`H8lvNl{Dv)#u|j#{UlSPy2-~5`5KQ9 zbuceoh7Ff9y_I2utK4v5wF4R45C;q~ArDKr9J}HmcjLax#{eSVcB^_KZ;#9T8w`uf zAR=C87sY%%ori;Bn&mvFNWRVbHw)cEqQdSJGY7&|+A>seb*4mA9%y{5B|TRRfA3yT zKEL}VCJ$789F?q>d^4d5EK`-C#S!`TQHE zN3vT6b#NJrV**h$h7c&9`wBW5C5ZtY;_EBFDj!G5Uy`q@RTyFSs1S_ppOnc%m+ zcD|@n&NwqBL2u-#qt>;H7;1^;T2RBp?jtxo$<0GJR1O%-uCpdnUt^F1{yw|BSz?dk zW?kG(!?Fx7d9x_|e58u?MQ8)OQ=&_XW`gmbAnoLGjlE&XwpTO{Fk4eUVGN%yK1|-! z!Li$&f72EmLm(!kVNyCAau#AULe-(GpOG65EQQuDI)Xi`6jxda`bb2hL*uWOhr#kX zHxcVQCN~Sumf$A=py$igEGYhz>mGuXJIwtzn*38@wNWW2Wfw)X>>M^?U8A-SukLZN zumxVbZd<@hwM-dzLEq3^TOkj$ZPBtdIJ|gTzrYl1jha(7Y_@+jGS+*DU_{ zFnL+~rav6;ylnGLNKMSGvaU`nJTewj52IB##-fG$-a5-M2We!7rdmy0gSB)q4Lesz zM$SpGg8wTr`0mcbp-T$MJ%i^!9!Qe7o)qJEb5DthzH&JcHaCX0ja@fLD5M^ngu;J- zmSV}RJZp9xVbq9ZhcZ>9> zZMM41zO80g%iDm3iE&bH!y}a{yyD(bn}1Bx=g3e0_%Zl-)LgmxjO9@EX^U8j+%@iIk1zs_gK1-Zh48 zv@cJltD9_|ozG6z%W(Gqa3OULKh>r;h}|=yQKOm=om<^xl4wz!;db=#l)<=h~h%XX>qCn-1MzTTL7Ol9}p57+{8u3}5uHO}JQV8C|I z`gD17lNIxut46E|r{k6({L(R+NKV?a3h$j1lXv0_BQYar+5~j9Id;RDoP|bo%_Oq<8w}%N1(1U94u`Lwa!hsj(slaKKMaZ}mn0l;}Es zse@(Qn#;D<0c0bGP)AMa4?rCIvR*}S25NdMQf6TvYbMEj6X=UTjsQz zB-A^mNfOFR%^i!Y7hRBzlX4k8jEQh2tXV&%ts z`w^sSNfm{7Lv0ZnJ`B%O0}&e)V%{F)`d1u;Rd}H{%lTaffza}MV+u`JEDh&KGc0=# zfqREULtItP?MSnWhi+3iWs+?tQ9QDP?h-$J;f;g8NE!!cxy4?Jv$kt^t_3ogCU8Fe z6ym3@745gXGLC}|fVJtBvJOT^?~dv8Znwo^nw@8-#VQm*WkkUi`)#u5_dPwJ$GvNKPZAb^X*TB$FENW9A(z&Ekh!lFK{TGP# zG-}|z!&pXpaIuQeaI0;4Fq|$fZs!)mX(yK1>1sMVzqkoomlW*4AYCiZsnY#}T=$e% z0hWq;Ey6@jnUVo#I?LwMG?4RFXz?XE;`Aj@Cl1<&W1#c4GB^HiEO|g&jCQ?WSI6P>9*T3Arc1iu_Vz6m&8jkJ{ zJzK3)$S%M*R~Y0B7scZAF8eDxy}|SLt?{ms1k(?A|`E#cZ-~`Rq7C9Is-L> zzr1v(%fC3&Iqh3bxTH;~AZ#OKXpn%N!>4vTB!3RgVAoob!^pA62SS)s+r40kT{Cyi zP157Y+r{jr$nYP?BQ>8DR}H3LmcyR|zZ@(tHOhOE{ko^bwmJyKUmC;ONeRmuDQ%WW zM*(9LWPeV+)WU;b{&cdoE^S{U6_R9c{GQIG<|L^Bxz8wa54?o#TZ*7XFe|Lm%x+m2 z+$S?{V4PJol6GkIdbb$12R|>)W>>RSR$Q*{FxUMhve5zlJ7=_a55hYnw#~r_GLmv) zy2WJ@v?r9IV^c;YK3NQXJr<~#&b2mDIPHHxpRxpUxJRVbJDQM$YaB7}7MbiTYh%PxwmtL5S>g3D6k8-7g&;j%g;rVl{~Zih*0Q*%3`Nwb1^ zltzAg>i6O8@^1&%wK5x}^fjCo0X2Y64Hh3 zDx!};!KvHVe*8V^Ys-&YNHT;%#)!IwXjl#i=R8I2_b1tv^b9Jc=yTj=eh9G&`^t8R zoqAVHZswn4#r*qhk)af~k8`PVWRj%tQhHZf-7{h}A#N}gV_fc0s?88FHk-{}wAj9W zp1l0?ml)w&`EiTSmIRE{X?|FfbHPv~etYxdC(>ebO(zyYN4W|{450(CRDcCj>?#d8 zcNpZXA!A?7PA{{Q;`VG6jO4T{E<&8=!1&<@AqwM8#YITmg+WmP@F^+7vGB+K&-Q?N z?4{>Ed{Z*#OrVy9BW7W8Yo$pc{&IScu&Z(Bi6w9U-xIgFz^}oT8&dIiA_P zF{5K~eh3BN^3Gyxjj~8{-#Me{EcFD{8F6z>L{OHU%$KK^=-ZnKEK>(-PI}J~gWdc8 zdZKIpO@SSjhLrHQiHXRy;YN$?5$wpY3og9hR;ByS9|ih+E3c}$s;gP)-637*aJeYv zXW7;1qL>Bi$kODLKhOfvp87KW88MfJf>IX8xRMCqI60hvMvFHqvDEZt<;N{E-db>~ z+{949Z>uCs>+K{u!&@LD5WsowEe4ndN5|NJX&7tO;0KH8@>$L`w%1mxT<&|Zp3P_3 z&3bk+pEXu5kTASl*hE?Z-k%80KPEOlBiIDuVJc(_b{NF!$F0kBL+jI5x3v1{YeH#N z;J0IIdN@iMBxyLpb=al;{Shm=?=*rd$-xB>OLvvI7^isBu=7p#k#r8#I9KcyCvIR^ zwI2bGcejl(P=lP1D%Tdt2+~j(-}Uzniuo|9vDHS{9&4!P5JNY^3#GsRF)5LH58B`V zs6ktP91SzE`(>1Nnv#a*MuUS)8HM{<3Z<^q#5`!K#^D}WI|96HilL@M@4~xAdUp~o zu_(^&vh~esdRffF$pK^!u}DUVm7cUTFXlj=;~z3Z=NVE2$;}1EqpmFn$lB~*b*Y(pH%tfl z^2co92Is%(DU$%rQQ7e^%=3A2er6zsYHV(dDrFSv_k45-c0Vt zy{t90%nDcXMrf&IN;~tX*i3d!D5)xR)G-DhQCsV^{_T?MMdbqJIy<>-s6(P6l4LoS z45=IxZwE)khzEq25Qu5^N8zk=f;P_4DV$$Ue*0MC*qL%KKW-tA)!O<4xH8w^wMohV z?oSeJdlr-2#vGG!y@8f$7EpI6<@nbaaS&$`&fb7|9H{8PAN*Hj`HRzff#Ng1$o zLwJw#_aRO;O0cQ}#ok2*q4;D4H_Luxe@$<0vcFbYfMUqzaZm!O!EFE474MXoGbZJ2 zyy2qQn75OB;gm{j*9?Avk1&AWe6W@v`b9j5ZbhxacdUpZwJsekSu=5p=t${t@)xid zuUnf&1hI#e32LCB!YUYDm&bLkki1rQucH1f1MfPY2XjKWt3xf$FqQhU{o6y{G0|xu zfm5l9>!jAIu%m0!b@qRrzjSAApF6>A>&z`AsoYY_9o*(YMv~Y+BCP{mACi^*rPy&?uG-KdTB=8Tw+!JEX;<2}rJu zv%Auu+aYXh&7T-bzIxJPGu_C(x zyV&ARsv8Vyeop7}DP(Y`7t4_3oQqPigz91A2mUcll&}d=6RLA&J9GrnGdE7eAy%7* zWo{o{PoC8q&>vpc=zG?>0Zma09==IO!3RgXxJpv7`zbOv*HmKFmmQ{s_Q_Ti;-uD% z?4WY=?vn1;?jyph)3e$4S=bCI3qkm!AmRV|b1QqN#PBLu>5wC;S=TE_An&qyaksp^ ziH)|}!-(~?Jx&aZzkPJ`v9bWVRk48PhDd2^#e!1$#o7eEk5R{4V;A1Y;7*#r>{3nfqO<1dk_h0tlMg-hSo?V zrOg`2{*l&EsCSam}F>Fsg*Csdy~UAu-n?#YaB*I*Dr@DRJ!qxEupa zRI($KcGOC|Yi#W(-b>sS^J0;mXV=T}_1%P$SS1M%1zWJW=UHNmZ%BIP(+S?K^_o5U)&MpY ze9LLVP8pHvBEy=CWw85wxo&W2JxH}Hoy^S|}u{T=DObo`rs&UEVBL89ep6Xzr~T_|d?pfoC-R+0VUGqTOh8E5b|MAt^z zOLTMEZiAetJ z-@(RU_wLi={r}s*?%gLR=KX(dzEh*plhKZhEXKSXB`_11ydF^_#eF$3>@=27#;*p2 zhPf%mcIoPP_ZSqi{(Vu*vcE58=S4`vrEtmZfvtUU0p*(+Pa-s!+baJ~td*Y>8*8ozhKVvsX0;Avf zD%CDb;NN2q7~xM?-dx;e*VE!MbYKJ*y=hrBCjEm{@04gsh?jgAyki1@TRAovK?}Z| zH7yrk?J{$4O{6+E_4KF($f4I_j6EU8<-M5Xpl?Jvs)jjMZVPOqv(i%EVh~c!ip6X? z&rVhayr9MUW*RO*D~VjQ$eBf%91`z&2elMk1pH_#vP;pWW&K&xvDMI1AFZYA@*-Y# z>6+iB;NpZc2?_{=|75X(dX#eM4&T7O3NH`#5dm&vcze`Q&=3?G%2(Qo zW7*_@oba*;3ZfYG(sHjZSN+=??jccR3W(@)rJ8(JTjNWv^pQ1LcL_cFaLs85e1vtC zA1NuhJ(Ef)PdxN=Z6kupdMe;?u(bwgseCQiXeVszEB5lW_l?T7o(5(3%bsJX+&>(3 z&WHu0@WaF5t05u3NW*X1$PD*LJ;xaSKD>4vqdOkgHIkzVRe-=+c~#`v%2F%q@XD*h z1JwFuMG)1H2suDu#k0@K)!DAuZSNAvLpC$?a&XJWGNB~7ktK4e=oBli**sd73B8k| zu8vQn%_VJ?Qd&d@m`DgUk1RUy_Jgat2(2%fIAU`LNXoznPA`hfkZ1?@I=Cuj@%p#?yhCDx zr^xxmk!C%Gw)lQ{MjUY5w2Qs?{p3YWO84Tu%A*9g&+vkJY;NC&8h*Ux_&7;Mat75i@IX^1(0i9p< z6fKDR{49#N^5ZtaM*)}<)MYzXhAN$+syeFobFRAY(6fHa5tvz&1=31Tb-4NM(7+$C zhPKreT{`y|HUT32LFNobO&#yCo{DqJ;>64AfdE(%8{jORq#fdkaq9J{(Q zWVZU*uhCvY`Ed)^nlYSNr+0c2eF*xqOuS!Z)KRSO7;h>j#gCB4Q$KX8OrD`s$aT;$cV40~_{U6=%T6I)l^t3dxD! z)ois~&x;?~#dLL5tpA?=SYOV3_~G~tH|5g|qAhjLX~IvUj5GY^XhvH@(UORih(k`*l?{hp%&TM^zVz?RU_Gg$1p5M_BP(1eA7K7Mj*)GhXBjoY?lJc+4Q8*kz)yr zxJNFaz+=Y%`G;54{3E5Ri2{C*iBNB9MF^~^B;fJ>ISyVwx&LGL!j@ZG%~PnK1VGvp zNW1BDojVRHkS^!b^X#g)EE))BLc?Pc$SoQCv-enaa7@!n>IqdCv{5eF2@snU*X$6T zhVU_B0R8gG1?ZPgDFBto=UP)o;P4XD5VanDP}9HMAeZUB$QbaV>c1oBd`%OjlmDt-RJM)P{a~)i|qSyez#}@ z#1LcQ$_wf~c8_Oo>%`Zm#8OI}qY{q}M4uI9&Zd5hn* z@?(%(V;$Iuysgc_#x?S|J!Z1Sy-u^b2G!Zbd=%>F0m3TW>yDzAf5SnzznYz16w`V3 zS9UUAF0a1Lrt`DlCjfbKB+Ag?7Ro>_DDS9P^OG5@?r_pjdF%UAz=hmCk?_cW3ch}J z!+w|gtu^dd$nz$Ix34VGVBnL4u>WWIDR2!c@>5`>u@)@EZe>h9(Bg6kwT*<1?Cjw> zm)y&*!8*HGUSG}@AulVI<{zXG7*C`LiB!z|V`51Fip4_;g!0(ubzy8}F0@tf*I`>vjr$F3Kh>`|0!+!3(d52{^$393 zH2jSoy6WWbaW0uWiUj|8x;UL?7t;j_Tm=}E3Y%m`;6!3y0J>+y1mQS`Ulg2C9oUt! z+#G`2ym#yA&u5c&H6Z_d=7iX-fRwqUL|I2l&hp%F%Zc7z-G1V&C(kqOJ6+#FR-~J@y`crs z9g~ONCDLc(i`8Xzn$4%-h~d4SIXd9pz1{kVSQ^OnMB-)?AF77Mm^pGmc#xp@tItvI z_^OS_m6zjC<;IHB0n(gu{!b9f@+>E{>~p*cDIZ4_kilZRGE3)z1K8>=r;Ek(<{~>; z{+O=T%l`}NJrs%bNRA48vNy*4Q<^YW@S}w~QIZd5Cb5ueKR%o%5|@1a?DBWHW!`rF zF1Whl!ZVpE_}gXFIVjuVKiqL`Vsf&2H=R%6 z>%Uws&XCP32#wkOs5OH~j>#ZnO=nf`Pl*O%QcdiuZ^y}j<|f+fJQYd3C7noE9u-~FU`_b26+AU4GboLF8t=> z?>@x!gZ9PUb7HbU_ZktTsY=^xV3NZhG%|DtPDK9sY*I2gG`lwC$1QDCA+^*l;|j}- zk%a36e!rh$BGR*z6o;G`D)$7h4~}ZifztN2jemh1cGVH5tFvsGoi4vm@4`qJzG?g+ z!C!Zi$T}UNN(#=2xmd=^1`sYD+MXP%?Bka8P9tHAG zY1uHR@RMWBUIJ4i?DoL)QLDf{^Ws*=`L)Nb3b`GzQ@VkvA$ba~?N1T6dNvdRcY`zH zsMEk9s;X^Su-h#=@YM~|=NYOM`1J+6%Xwqphlx@fo>7taA2sq%iPea(x`nD&Bn{xL zfvbX4{qaJ(Got1-h=vgrw3bp+`=KqlqAaO@St$8ge;kFDJd6QSLmEzivu?7B8MkL-${-{Iaj}AxE9~}%8(im?%$$$wkVNkvHCmoS+ z-*8G4J#K;-m~>Uo1&iw1t8s2HOmK6#SY+R_>1;inPeZWT++r<}42himQ(}%4d8W8O zku+?T#!$I^mv$eep&`36pI^Fp?B|yWc`ST|LTLtRE3LaTsP`vz3Lo!JvMb|ROw6fT z&NP?I@ST@s`XV^MNfir&8Fo2M=N9QjqWSGG{5o!B^|e}O4i z!+(-@?0b55OceJk7H6y3U9rd(Gr&~Q5IREA8C*jz$t3z>$~z>cvLe}pDcqKd%md*9 z`spP;bcCge^RXk(=yS9xCu zGvd%dXy?_;0Oy^0f6gV6$L3G&R?7v%>Zcd*Do>`XK%k{-2Cofr(Z*xv5FX_dE|BSs z5#6%Q*#H|cV-N3me|`*PA3jdL)>|nb9P*Q|ZCfe05e6QNQx9a^;xO!iSEa-24f1I2 z3ydI03BiOUB^mhmdnavUa%eMMY@W^)lJQf_r~e0TYr4wLr>k`^7e~R3RvX!r_ZLI) zk7=RkWytcq6CW7{3;C+4+5maYAsYPY4;Za?zM8!MPhIbH7Wjdd__Jzatk{OjiKdOCr(1|e#33qO;K;%YjX&u%lw5zqg1y;@?)xlwV{_Q-Ss zyF7gihR=R=Ya^vX-?rL_DhpuTI&7LK_W?iU+?WuC4DuNiNgfEquDor>uONJ~2iW#Z z=4ykAC36j#=;Ibw0)$lsOfce3WzPDFdl?V^wp_1ouYBxVn%|4YFrs|yOTrVe@17C! zhZuD;NLlI5?Z5bXB|O>xjGY(m{D3ixzx>n1_{%>NFfQN^&_Y;4Hq$he;-InQHer(W zh#kOvFI2jAlhUCW*-ZyPd4O=oD4h5F!x|99?L7N2o!$KXOJnf0q+fs#BDHSQ!YbmO z6zf3zp6KMw4n4o*M z&vf|F-o`c3lPY6l%kFrF8m}*c%B5d zyM2~a_sTx$y}=0FcG&mW6P-_Bwbig1SWQ=r#<@iD)OT^coX?k#!UVV>!#Dqp_T+G3wO;+vjGEtfJX9(e~-9yM*-V>n{mQNFujJD&mlw zQv%jV%6jNOWumRNqSR*K5h)x)WK~`qjJLCjTHkRH?*Ce@r`H$Rbym#h(*X650ptdL zl~B)#^e!6tr$h&S)P#cJQnQP4PmC`;CZKr?<(?KA97u&f*2+C@D*UlkxrgSQ7%iD2 zOAmjBHNhXPrrKpct!v4SOl~!h+41=&x9#%W8474^yHJCuE|q{P zR4WNT=G3qhEs~#u+0iwmSP0IoG)izyA49phfvqY$m#kxj#Jghp^zHI$wgCK}FITgG zg@X!{Q-N}R__s>KcuSqkKPr}CQ(KBNYuee*VGwX0wdv`|54b+HRenHGq?WUiIJ2<= ze$P>!>Z!GC+?NysQG?!id=J?$(M?1vJ0e=|B7aII-YGHQ2!h0Roa`9) z0Wx7Yh(YLns9c4#V{-xwt*>?Z^A7y3O^2zx|af+qI2N2 z(+_*6#HRL$olunv)z~KKm8mLY#%}WtOhsS4cK0=3z5XSEE=TP_$n(-i<3Zd3mHLi+mz(obiuTpL(V-R z=3aTpQKESF%%CRx$O?Ha>F2Yr-fE`PqiHSvaG6_SZOs#Bafpo*c^C=ky{4b;`+M{? zoWPi?3J#c7mqTMv%e7fbk-aAO&M(SlvFdn!Fy=BKu2X6T<0?LV@T z6P-s8))Znc5f&qX91mgbYRg}Ko4o&hgRn2Z)d(v;ZeuehfBAaPpEzhSHCY`QqPg?utBq6(RF zopbE7^mlUg87<;BIKH4nA`7d50PWBdcrpCF{W5t~H!|2A)*VhslNB zJDvV1QSmr4!OWKMf#PuxXdkngxGljeIanjJuCLlXAdXQIzl}&CZXqdL$UlKR+{P{< zNIf)(RRau_+A$bir}|rci9xP#iu35%5~9$cCxN4Q6qN+!wyE^?*wa5FT96?VX>!SQ zvh17H>Oge=U9xZQK25&VGv@Ey_I>M&Ir=%~uUk_FZ(muJP*{1IvTyDij`_vL0@%py z`i50k)fBL*&T2}1i$QQ(P5&?ZQOqxyTfb{}e|K@_$*3f{ zSq7f=uw@|kZUd)u>em{9(xc+_@=d&&(a~Kn^RAcP_pjEhimX`NEEkY(&U&^HyJ<{1 z+lX``%tV6GG2Tct*V8L_GI+w)9Ec=Vf(jAe-C%{v+CMiW17oT^@9riUY z7TG-eHe1Z6L4J6z43;D5G!?;0WV&XZe@b*LKurX)nK-~+&u(Jc9;JF+g8tUPzDWIt zM@y^kC(qy3rB$aKQ-0jSyCbClr{{P=nuB93)glkdLF->`=rF+M&BfwMW{j}#zc=PE zJ;sK;R{36+*p+vQWYl~w=7~`INU>`{!rs?r6Q&~Y9ve^ zP44k|oJ*s1E>y5w8cCGff}rp=;V;Rzul_!+h|zmRF?{r0XX@J$^o?@UfX5M~4xdtA zA-x##1D<x3-NKKGS#X z_m|Rzn5a-{yY)SsiwtP=oh@(AaY*|-yMTAr2nSK_Jf~LYhV@0Odq!+dhM5Uuv{viH z2~kFMGa5X?gy{2^ljpVA$8&cFqE+le=fr4lRUW`cw9@#|(;X3YUt$DRjlr|go9BVu zR@FqXoUTb2=Mw3D@9uUr%K$=uH{}Q{M|ly7^KYz^UZ%7B@0}8@|1+fJHiC68!1J+l zsFs-U<2!er?Bly%w$GD6OsF{(+UcQL3F#CHvL)0m_L)2FWyQUILouJz5IG#1k}0&y zDre#y=kb}d6J zLf|ap(X|YpKbw54*MgoutHJcKbu9>g8>v*z;++;bx71RdK-s@fr?X!*L-!q~c%5-m ztY^Bt-KRo)fSea<O@|%HYptMsFqa(Ca}XZ zxJ1vC8hht_KnecqpOZi8iL9@Vy!Ich^4bKFXz9?j7%&lS%s-_5URy@Y>oq#iqfTEn zF|iq^RPCKJ{}Sn1qu|-5KT0Kx+x5+K?!!~alKi_Q0;avkq5V@@c3%nnvRE3~ea%kh z%hO9Na5kqxq_xfJ;fO1+?z6;z_v-cJeck(VDaqcq_P$82sew$suDx4$3~dya8IQdQ z8(esVh1iGpo>YK5K!KxS@ekNTOWU#&Tis-L-*|daK%lw&_RU8hggz8=?p*b*(mO{) zse3KXq-d#jUPEYWT^l*}(DH5%*i!j_8GuI^6d--M|@TW;@;I&$BY**-iww z&HaJ{jE9A|d4O*R^@Mkezc{f|o;xl@x`Aw`n!EM-O$!A$@V*e#~Pk zN)%<9s~s16#^DV0!BC~0vV(`vzu>T?T=1;L>I{Db7t@PSlo2CxCXlQKTz=4w-=Ws( zozeuWM%8q#b4A)nU{d<=y=yi}?)8``Zy>4ashBRA3-5}_z8Bu(&2oOf!SMI;`!eX+!Wox!TGP)fpDMhcvOO z%H>6kV;K7?6muIcBd(<8i%Br&a+PY`GK7sM2m78Hq1a1{{8pI;{MRLhsCS1MvYWGIx@ocF+(zCq#FhG}gvh zLqnt4=P_ivkntWGJu%#U@qFx;6dx<#SC}!yU1f1(*cU{njFR_2UH4#78;o|?ZQ8u4 z2!I;fzN1F2fmv?aFkm8`i%sxGzaQ$kE;a%Q=r$_gjM z(o{0;YmWi1vGP0WAYaqiH=FX9>URti)t4BsE;XO7mN;89E0#gZShjeO>lhxScgpA< z5(6M(6a3L34UwlI6sL?GLR4m7^9s&>@!ORBV$O0&{d%m$mE*ED^iQHV^~@(JK^)zK zhM=jMqhOI;Pdrz0BvU5%_Lu<<&;9C`6Kgi6v&HNW9idTfCe~S}%7t^0t?0OSYCnqk z{4QI=l~>^?55wVi%5oeEw27f*OYg!vsaX$|Wne6Gt5uq)MWDgn)JoIaiz#CZ{_Y?k zADbBX^!1n6#6bCRTapOB-2HA;+VB9;X=>hqKl8IzFCrzr-?wu5{-UBIPY~M%u z^{tye{`xj0ebl*C6tysz!-^=S)mqB!GqX>5AH{v=NoX8-`8l-p&6=j@2syn=q_3jj z=pB5;*)%&@6=!$ZU#skw=B6gYIxm5L4uW2ARE#G8$BiI5F+*8#j8>1D6{p9j9fP3N z@_JMAp0iZS6m&lIIXl-dA_%Ryy|>Q|>@hQJAfwWF1LNyrDRAzR82ttTujIKX-SL1* zs&hs&(6tjLuoNXI8@w`YEIR}j&M@ZEo%g~}w_RB3RBUi_5Lua0imgw6bJ{hKn9FQ% zRE^*1@Ig^Q5sa@rM)htnY*6Q7y1FVB+0E>xL9xRij4FGiNQBje*G`HZ@02ED^@N)V zfvYBo7*b7r`fKXp^Y zGl^KeXfvGt7-rK$kW}l}V4Lmu^=_D)W5Q{r{P6X(xD2&XksBTfgy5$G=Q?GDIY&y@biuHPSHCqI&O%0DmO7;fPThiD) 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≪*iNyu?? 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 F!vJ|~6o3E# literal 0 HcmV?d00001 diff --git a/src/server/sample_data/data_sets/logs/saved_objects.js b/src/server/sample_data/data_sets/logs/saved_objects.js new file mode 100644 index 00000000000000..5e2954177974a7 --- /dev/null +++ b/src/server/sample_data/data_sets/logs/saved_objects.js @@ -0,0 +1,236 @@ +/* + * 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 max-len: 0 */ +/* eslint quotes: 0 */ + +export const savedObjects = [ + { + "id": "e1d0f010-9ee7-11e7-8711-e7a007dcef99", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Unique Visitors vs. Average Bytes", + "visState": "{\"title\":\"[Logs] Unique Visitors vs. Average Bytes\",\"type\":\"area\",\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Avg. Bytes\"}},{\"id\":\"ValueAxis-2\",\"name\":\"RightAxis-1\",\"type\":\"value\",\"position\":\"right\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Unique Visitors\"}}],\"seriesParams\":[{\"show\":\"true\",\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Avg. Bytes\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"},{\"show\":true,\"mode\":\"stacked\",\"type\":\"line\",\"drawLinesBetweenPoints\":false,\"showCircles\":true,\"interpolate\":\"linear\",\"data\":{\"id\":\"2\",\"label\":\"Unique Visitors\"},\"valueAxis\":\"ValueAxis-2\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"times\":[],\"addTimeMarker\":false,\"radiusRatio\":17},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"bytes\",\"customLabel\":\"Avg. Bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"clientip\",\"customLabel\":\"Unique Visitors\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"timestamp\",\"interval\":\"auto\",\"time_zone\":\"America/Los_Angeles\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"4\",\"enabled\":true,\"type\":\"count\",\"schema\":\"radius\",\"params\":{}}]}", + "uiStateJSON": "{\"vis\":{\"colors\":{\"Avg. Bytes\":\"#70DBED\",\"Unique Visitors\":\"#0A437C\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + }, + { + "id": "06cf9c40-9ee8-11e7-8711-e7a007dcef99", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Unique Visitors by Country", + "visState": "{\"title\":\"[Logs] Unique Visitors by Country\",\"type\":\"region_map\",\"params\":{\"legendPosition\":\"bottomright\",\"addTooltip\":true,\"colorSchema\":\"Reds\",\"selectedLayer\":{\"attribution\":\"

    \",\"name\":\"World Countries\",\"weight\":1,\"format\":{\"type\":\"geojson\"},\"url\":\"https://vector.maps.elastic.co/blob/5659313586569216?elastic_tile_service_tos=agree&my_app_version=6.2.3&license=77ab0ecf-a521-499d-bd52-fbd740bb81d0\",\"fields\":[{\"name\":\"iso2\",\"description\":\"Two letter abbreviation\"},{\"name\":\"name\",\"description\":\"Country name\"},{\"name\":\"iso3\",\"description\":\"Three letter abbreviation\"}],\"created_at\":\"2017-04-26T17:12:15.978370\",\"tags\":[],\"id\":5659313586569216,\"layerId\":\"elastic_maps_service.World Countries\"},\"selectedJoinField\":{\"name\":\"iso2\",\"description\":\"Two letter abbreviation\"},\"isDisplayWarning\":false,\"wms\":{\"enabled\":false,\"options\":{\"format\":\"image/png\",\"transparent\":true},\"baseLayersAreLoaded\":{},\"tmsLayers\":[{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.3&license=77ab0ecf-a521-499d-bd52-fbd740bb81d0\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

    © OpenStreetMap contributors | Elastic Maps Service

    \",\"subdomains\":[]}],\"selectedTmsLayer\":{\"id\":\"road_map\",\"url\":\"https://tiles.maps.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana&my_app_version=6.2.3&license=77ab0ecf-a521-499d-bd52-fbd740bb81d0\",\"minZoom\":0,\"maxZoom\":18,\"attribution\":\"

    © OpenStreetMap contributors | Elastic Maps Service

    \",\"subdomains\":[]}},\"mapZoom\":2,\"mapCenter\":[0,0],\"outlineWeight\":1,\"showAllShapes\":true,\"emsHotLink\":null},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"clientip\",\"customLabel\":\"Unique Visitors\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"geo.src\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + }, + { + "id": "935afa20-e0cd-11e7-9d07-1398ccfcefa3", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Heatmap", + "visState": "{\"title\":\"[Logs] Heatmap\",\"type\":\"heatmap\",\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":true,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":10,\"colorSchema\":\"Reds\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"color\":\"#555\",\"overwriteColor\":false}}]},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"clientip\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"geo.src\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Country Source\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"hour_of_day\",\"size\":25,\"order\":\"asc\",\"orderBy\":\"_key\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Hour of Day\"}}]}", + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 4\":\"rgb(255,245,240)\",\"4 - 8\":\"rgb(254,228,216)\",\"8 - 12\":\"rgb(253,202,181)\",\"12 - 16\":\"rgb(252,171,142)\",\"16 - 20\":\"rgb(252,138,106)\",\"20 - 24\":\"rgb(251,106,74)\",\"24 - 28\":\"rgb(241,68,50)\",\"28 - 32\":\"rgb(217,38,35)\",\"32 - 36\":\"rgb(188,20,26)\",\"36 - 40\":\"rgb(152,12,19)\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + }, + { + "id": "4eb6e500-e1c7-11e7-b6d5-4dc382ef7f5b", + "type": "visualization", + "updated_at": "2018-08-29T13:23:20.897Z", + "version": 2, + "attributes": { + "title": "[Logs] Host, Visits and Bytes Table", + "visState": "{\"title\":\"[Logs] Host, Visits and Bytes Table\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"table\",\"series\":[{\"id\":\"bd09d600-e5b1-11e7-bfc2-a1f7e71965a1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1\",\"type\":\"sum\",\"field\":\"bytes\"},{\"sigma\":\"\",\"id\":\"c9514c90-e5b1-11e7-bfc2-a1f7e71965a1\",\"type\":\"sum_bucket\",\"field\":\"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"color_rules\":[{\"id\":\"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1\"}],\"label\":\"Bytes (Total)\"},{\"id\":\"b7672c30-a6df-11e8-8b18-1da1dfc50975\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"b7672c31-a6df-11e8-8b18-1da1dfc50975\",\"type\":\"sum\",\"field\":\"bytes\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"color_rules\":[{\"id\":\"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1\"}],\"label\":\"Bytes (Last Hour)\"},{\"id\":\"f2c20700-a6df-11e8-8b18-1da1dfc50975\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"f2c20701-a6df-11e8-8b18-1da1dfc50975\",\"type\":\"cardinality\",\"field\":\"ip\"},{\"sigma\":\"\",\"id\":\"f46333e0-a6df-11e8-8b18-1da1dfc50975\",\"type\":\"sum_bucket\",\"field\":\"f2c20701-a6df-11e8-8b18-1da1dfc50975\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Unique Visits (Total)\",\"color_rules\":[{\"value\":1000,\"id\":\"2e963080-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(211,49,21,1)\",\"operator\":\"lt\"},{\"value\":1000,\"id\":\"3d4fb880-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(252,196,0,1)\",\"operator\":\"gte\"},{\"value\":1500,\"id\":\"435f8a20-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(104,188,0,1)\",\"operator\":\"gte\"}],\"offset_time\":\"\",\"value_template\":\"\",\"trend_arrows\":1},{\"id\":\"46fd7fc0-e5b1-11e7-bfc2-a1f7e71965a1\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"46fd7fc1-e5b1-11e7-bfc2-a1f7e71965a1\",\"type\":\"cardinality\",\"field\":\"ip\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Unique Visits (Last Hour)\",\"color_rules\":[{\"value\":10,\"id\":\"4e90aeb0-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(211,49,21,1)\",\"operator\":\"lt\"},{\"value\":10,\"id\":\"6d59b1c0-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(252,196,0,1)\",\"operator\":\"gte\"},{\"value\":25,\"id\":\"77578670-a6e0-11e8-8b18-1da1dfc50975\",\"text\":\"rgba(104,188,0,1)\",\"operator\":\"gte\"}],\"offset_time\":\"\",\"value_template\":\"\",\"trend_arrows\":1}],\"time_field\":\"timestamp\",\"index_pattern\":\"kibana_sample_data_logs\",\"interval\":\"1h\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"bar_color_rules\":[{\"id\":\"e9b4e490-e1c6-11e7-b4f6-0f68c45f7387\"}],\"pivot_id\":\"extension.keyword\",\"pivot_label\":\"Type\",\"drilldown_url\":\"\",\"axis_scale\":\"normal\"},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + } + }, + { + "id": "69a34b00-9ee8-11e7-8711-e7a007dcef99", + "type": "visualization", + "updated_at": "2018-08-29T13:24:46.136Z", + "version": 2, + "attributes": { + "title": "[Logs] Goals", + "visState": "{\"title\":\"[Logs] Goals\",\"type\":\"gauge\",\"params\":{\"type\":\"gauge\",\"addTooltip\":true,\"addLegend\":false,\"gauge\":{\"verticalSplit\":false,\"extendRange\":true,\"percentageMode\":false,\"gaugeType\":\"Arc\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"Labels\",\"colorsRange\":[{\"from\":0,\"to\":500},{\"from\":500,\"to\":1000},{\"from\":1000,\"to\":1500}],\"invertColors\":true,\"labels\":{\"show\":false,\"color\":\"black\"},\"scale\":{\"show\":true,\"labels\":false,\"color\":\"#333\"},\"type\":\"meter\",\"style\":{\"bgWidth\":0.9,\"width\":0.9,\"mask\":false,\"bgMask\":false,\"maskBars\":50,\"bgFill\":\"#eee\",\"bgColor\":false,\"subText\":\"visitors\",\"fontSize\":60,\"labelColor\":true}},\"isDisplayWarning\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"clientip\",\"customLabel\":\"Unique Visitors\"}}]}", + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 500\":\"rgb(165,0,38)\",\"500 - 1000\":\"rgb(255,255,190)\",\"1000 - 1500\":\"rgb(0,104,55)\"},\"colors\":{\"75 - 100\":\"#629E51\",\"50 - 75\":\"#EAB839\",\"0 - 50\":\"#E24D42\",\"0 - 100\":\"#E24D42\",\"200 - 300\":\"#7EB26D\",\"500 - 1000\":\"#E5AC0E\",\"0 - 500\":\"#E24D42\",\"1000 - 1500\":\"#7EB26D\"},\"legendOpen\":true}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + }, + { + "id": "42b997f0-0c26-11e8-b0ec-3bb475f6b6ff", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] File Type Scatter Plot", + "visState": "{\"title\":\"[Logs] File Type Scatter Plot\",\"type\":\"vega\",\"params\":{\"spec\":\"{\\n $schema: \\\"https://vega.github.io/schema/vega-lite/v2.json\\\"\\n // Use points for drawing to actually create a scatterplot\\n mark: point\\n // Specify where to load data from\\n data: {\\n // By using an object to the url parameter we will\\n // construct an Elasticsearch query\\n url: {\\n // Context == true means filters of the dashboard will be taken into account\\n %context%: true\\n // Specify on which field the time picker should operate\\n %timefield%: timestamp\\n // Specify the index pattern to load data from\\n index: kibana_sample_data_logs\\n // This body will be send to Elasticsearch's _search endpoint\\n // You can use everything the ES Query DSL supports here\\n body: {\\n // Set the size to load 10000 documents\\n size: 10000,\\n // Just ask for the fields we actually need for visualization\\n _source: [\\\"timestamp\\\", \\\"bytes\\\", \\\"extension\\\"]\\n }\\n }\\n // Tell Vega, that the array of data will be inside hits.hits of the response\\n // since the result returned from Elasticsearch fill have a format like:\\n // {\\n // hits: {\\n // total: 42000,\\n // max_score: 2,\\n // hits: [\\n // < our individual documents >\\n // ]\\n // }\\n // }\\n format: { property: \\\"hits.hits\\\" }\\n }\\n // You can do transformation and calculation of the data before drawing it\\n transform: [\\n // Since timestamp is a string value, we need to convert it to a unix timestamp\\n // so that Vega can work on it properly.\\n {\\n // Convert _source.timestamp field to a date\\n calculate: \\\"toDate(datum._source['timestamp'])\\\"\\n // Store the result in a field named \\\"time\\\" in the object\\n as: \\\"time\\\"\\n }\\n ]\\n // Specify what data will be drawn on which axis\\n encoding: {\\n x: {\\n // Draw the time field on the x-axis in temporal mode (i.e. as a time axis)\\n field: time\\n type: temporal\\n // Hide the axis label for the x-axis\\n axis: { title: false }\\n }\\n y: {\\n // Draw the bytes of each document on the y-axis\\n field: _source.bytes\\n // Mark the y-axis as quantitative\\n type: quantitative\\n // Specify the label for this axis\\n axis: { title: \\\"Transferred bytes\\\" }\\n }\\n color: {\\n // Make the color of each point depend on the _source.extension field\\n field: _source.extension\\n // Treat different values as completely unrelated values to each other.\\n // You could switch this to quantitative if you have a numeric field and\\n // want to create a color scale from one color to another depending on that\\n // field's value.\\n type: nominal\\n // Rename the legend title so it won't just state: \\\"_source.extension\\\"\\n legend: { title: 'File type' }\\n }\\n shape: {\\n // Also make the shape of each point dependent on the extension.\\n field: _source.extension\\n type: nominal\\n }\\n }\\n}\"},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + } + }, + { + "id": "7cbd2350-2223-11e8-b802-5bcf64c2cfb4", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Source and Destination Sankey Chart", + "visState": "{\"title\":\"[Logs] Source and Destination Sankey Chart\",\"type\":\"vega\",\"params\":{\"spec\":\"{ \\n $schema: https://vega.github.io/schema/vega/v3.0.json\\n data: [\\n\\t{\\n \\t// query ES based on the currently selected time range and filter string\\n \\tname: rawData\\n \\turl: {\\n \\t%context%: true\\n \\t%timefield%: timestamp\\n \\tindex: kibana_sample_data_logs\\n \\tbody: {\\n \\tsize: 0\\n \\taggs: {\\n \\ttable: {\\n \\tcomposite: {\\n \\tsize: 10000\\n \\tsources: [\\n \\t{\\n \\tstk1: {\\n \\tterms: {field: \\\"geo.src\\\"}\\n \\t}\\n \\t}\\n \\t{\\n \\tstk2: {\\n \\tterms: {field: \\\"geo.dest\\\"}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t// From the result, take just the data we are interested in\\n \\tformat: {property: \\\"aggregations.table.buckets\\\"}\\n \\t// Convert key.stk1 -> stk1 for simpler access below\\n \\ttransform: [\\n \\t{type: \\\"formula\\\", expr: \\\"datum.key.stk1\\\", as: \\\"stk1\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"datum.key.stk2\\\", as: \\\"stk2\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"datum.doc_count\\\", as: \\\"size\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: nodes\\n \\tsource: rawData\\n \\ttransform: [\\n \\t// when a country is selected, filter out unrelated data\\n \\t{\\n \\ttype: filter\\n \\texpr: !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\n \\t}\\n \\t// Set new key for later lookups - identifies each node\\n \\t{type: \\\"formula\\\", expr: \\\"datum.stk1+datum.stk2\\\", as: \\\"key\\\"}\\n \\t// instead of each table row, create two new rows,\\n \\t// one for the source (stack=stk1) and one for destination node (stack=stk2).\\n \\t// The country code stored in stk1 and stk2 fields is placed into grpId field.\\n \\t{\\n \\ttype: fold\\n \\tfields: [\\\"stk1\\\", \\\"stk2\\\"]\\n \\tas: [\\\"stack\\\", \\\"grpId\\\"]\\n \\t}\\n \\t// Create a sortkey, different for stk1 and stk2 stacks.\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\n \\tas: sortField\\n \\t}\\n \\t// Calculate y0 and y1 positions for stacking nodes one on top of the other,\\n \\t// independently for each stack, and ensuring they are in the proper order,\\n \\t// alphabetical from the top (reversed on the y axis)\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\\"stack\\\"]\\n \\tsort: {field: \\\"sortField\\\", order: \\\"descending\\\"}\\n \\tfield: size\\n \\t}\\n \\t// calculate vertical center point for each node, used to draw edges\\n \\t{type: \\\"formula\\\", expr: \\\"(datum.y0+datum.y1)/2\\\", as: \\\"yc\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: groups\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// combine all nodes into country groups, summing up the doc counts\\n \\t{\\n \\ttype: aggregate\\n \\tgroupby: [\\\"stack\\\", \\\"grpId\\\"]\\n \\tfields: [\\\"size\\\"]\\n \\tops: [\\\"sum\\\"]\\n \\tas: [\\\"total\\\"]\\n \\t}\\n \\t// re-calculate the stacking y0,y1 values\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\\"stack\\\"]\\n \\tsort: {field: \\\"grpId\\\", order: \\\"descending\\\"}\\n \\tfield: total\\n \\t}\\n \\t// project y0 and y1 values to screen coordinates\\n \\t// doing it once here instead of doing it several times in marks\\n \\t{type: \\\"formula\\\", expr: \\\"scale('y', datum.y0)\\\", as: \\\"scaledY0\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"scale('y', datum.y1)\\\", as: \\\"scaledY1\\\"}\\n \\t// boolean flag if the label should be on the right of the stack\\n \\t{type: \\\"formula\\\", expr: \\\"datum.stack == 'stk1'\\\", as: \\\"rightLabel\\\"}\\n \\t// Calculate traffic percentage for this country using \\\"y\\\" scale\\n \\t// domain upper bound, which represents the total traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.total/domain('y')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n\\t{\\n \\t// This is a temp lookup table with all the 'stk2' stack nodes\\n \\tname: destinationNodes\\n \\tsource: nodes\\n \\ttransform: [\\n \\t{type: \\\"filter\\\", expr: \\\"datum.stack == 'stk2'\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: edges\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// we only want nodes from the left stack\\n \\t{type: \\\"filter\\\", expr: \\\"datum.stack == 'stk1'\\\"}\\n \\t// find corresponding node from the right stack, keep it as \\\"target\\\"\\n \\t{\\n \\ttype: lookup\\n \\tfrom: destinationNodes\\n \\tkey: key\\n \\tfields: [\\\"key\\\"]\\n \\tas: [\\\"target\\\"]\\n \\t}\\n \\t// calculate SVG link path between stk1 and stk2 stacks for the node pair\\n \\t{\\n \\ttype: linkpath\\n \\torient: horizontal\\n \\tshape: diagonal\\n \\tsourceY: {expr: \\\"scale('y', datum.yc)\\\"}\\n \\tsourceX: {expr: \\\"scale('x', 'stk1') + bandwidth('x')\\\"}\\n \\ttargetY: {expr: \\\"scale('y', datum.target.yc)\\\"}\\n \\ttargetX: {expr: \\\"scale('x', 'stk2')\\\"}\\n \\t}\\n \\t// A little trick to calculate the thickness of the line.\\n \\t// The value needs to be the same as the hight of the node, but scaling\\n \\t// size to screen's height gives inversed value because screen's Y\\n \\t// coordinate goes from the top to the bottom, whereas the graph's Y=0\\n \\t// is at the bottom. So subtracting scaled doc count from screen height\\n \\t// (which is the \\\"lower\\\" bound of the \\\"y\\\" scale) gives us the right value\\n \\t{\\n \\ttype: formula\\n \\texpr: range('y')[0]-scale('y', datum.size)\\n \\tas: strokeWidth\\n \\t}\\n \\t// Tooltip needs individual link's percentage of all traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.size/domain('y')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n ]\\n scales: [\\n\\t{\\n \\t// calculates horizontal stack positioning\\n \\tname: x\\n \\ttype: band\\n \\trange: width\\n \\tdomain: [\\\"stk1\\\", \\\"stk2\\\"]\\n \\tpaddingOuter: 0.05\\n \\tpaddingInner: 0.95\\n\\t}\\n\\t{\\n \\t// this scale goes up as high as the highest y1 value of all nodes\\n \\tname: y\\n \\ttype: linear\\n \\trange: height\\n \\tdomain: {data: \\\"nodes\\\", field: \\\"y1\\\"}\\n\\t}\\n\\t{\\n \\t// use rawData to ensure the colors stay the same when clicking.\\n \\tname: color\\n \\ttype: ordinal\\n \\trange: category\\n \\tdomain: {data: \\\"rawData\\\", field: \\\"stk1\\\"}\\n\\t}\\n\\t{\\n \\t// this scale is used to map internal ids (stk1, stk2) to stack names\\n \\tname: stackNames\\n \\ttype: ordinal\\n \\trange: [\\\"Source\\\", \\\"Destination\\\"]\\n \\tdomain: [\\\"stk1\\\", \\\"stk2\\\"]\\n\\t}\\n ]\\n axes: [\\n\\t{\\n \\t// x axis should use custom label formatting to print proper stack names\\n \\torient: bottom\\n \\tscale: x\\n \\tencode: {\\n \\tlabels: {\\n \\tupdate: {\\n \\ttext: {scale: \\\"stackNames\\\", field: \\\"value\\\"}\\n \\t}\\n \\t}\\n \\t}\\n\\t}\\n\\t{orient: \\\"left\\\", scale: \\\"y\\\"}\\n ]\\n marks: [\\n\\t{\\n \\t// draw the connecting line between stacks\\n \\ttype: path\\n \\tname: edgeMark\\n \\tfrom: {data: \\\"edges\\\"}\\n \\t// this prevents some autosizing issues with large strokeWidth for paths\\n \\tclip: true\\n \\tencode: {\\n \\tupdate: {\\n \\t// By default use color of the left node, except when showing traffic\\n \\t// from just one country, in which case use destination color.\\n \\tstroke: [\\n \\t{\\n \\ttest: groupSelector && groupSelector.stack=='stk1'\\n \\tscale: color\\n \\tfield: stk2\\n \\t}\\n \\t{scale: \\\"color\\\", field: \\\"stk1\\\"}\\n \\t]\\n \\tstrokeWidth: {field: \\\"strokeWidth\\\"}\\n \\tpath: {field: \\\"path\\\"}\\n \\t// when showing all traffic, and hovering over a country,\\n \\t// highlight the traffic from that country.\\n \\tstrokeOpacity: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.9 : 0.3\\n \\t}\\n \\t// Ensure that the hover-selected edges show on top\\n \\tzindex: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\n \\t}\\n \\t// format tooltip string\\n \\ttooltip: {\\n \\tsignal: datum.stk1 + ' → ' + datum.stk2 + '\\t' + format(datum.size, ',.0f') + ' (' + format(datum.percentage, '.1%') + ')'\\n \\t}\\n \\t}\\n \\t// Simple mouseover highlighting of a single line\\n \\thover: {\\n \\tstrokeOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw stack groups (countries)\\n \\ttype: rect\\n \\tname: groupMark\\n \\tfrom: {data: \\\"groups\\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tfill: {scale: \\\"color\\\", field: \\\"grpId\\\"}\\n \\twidth: {scale: \\\"x\\\", band: 1}\\n \\t}\\n \\tupdate: {\\n \\tx: {scale: \\\"x\\\", field: \\\"stack\\\"}\\n \\ty: {field: \\\"scaledY0\\\"}\\n \\ty2: {field: \\\"scaledY1\\\"}\\n \\tfillOpacity: {value: 0.6}\\n \\ttooltip: {\\n \\tsignal: datum.grpId + ' ' + format(datum.total, ',.0f') + ' (' + format(datum.percentage, '.1%') + ')'\\n \\t}\\n \\t}\\n \\thover: {\\n \\tfillOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw country code labels on the inner side of the stack\\n \\ttype: text\\n \\tfrom: {data: \\\"groups\\\"}\\n \\t// don't process events for the labels - otherwise line mouseover is unclean\\n \\tinteractive: false\\n \\tencode: {\\n \\tupdate: {\\n \\t// depending on which stack it is, position x with some padding\\n \\tx: {\\n \\tsignal: scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\n \\t}\\n \\t// middle of the group\\n \\tyc: {signal: \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"}\\n \\talign: {signal: \\\"datum.rightLabel ? 'left' : 'right'\\\"}\\n \\tbaseline: {value: \\\"middle\\\"}\\n \\tfontWeight: {value: \\\"bold\\\"}\\n \\t// only show text label if the group's height is large enough\\n \\ttext: {signal: \\\"abs(datum.scaledY0-datum.scaledY1) > 13 ? datum.grpId : ''\\\"}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// Create a \\\"show all\\\" button. Shown only when a country is selected.\\n \\ttype: group\\n \\tdata: [\\n \\t// We need to make the button show only when groupSelector signal is true.\\n \\t// Each mark is drawn as many times as there are elements in the backing data.\\n \\t// Which means that if values list is empty, it will not be drawn.\\n \\t// Here I create a data source with one empty object, and filter that list\\n \\t// based on the signal value. This can only be done in a group.\\n \\t{\\n \\tname: dataForShowAll\\n \\tvalues: [{}]\\n \\ttransform: [{type: \\\"filter\\\", expr: \\\"groupSelector\\\"}]\\n \\t}\\n \\t]\\n \\t// Set button size and positioning\\n \\tencode: {\\n \\tenter: {\\n \\txc: {signal: \\\"width/2\\\"}\\n \\ty: {value: 30}\\n \\twidth: {value: 80}\\n \\theight: {value: 30}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\t// This group is shown as a button with rounded corners.\\n \\ttype: group\\n \\t// mark name allows signal capturing\\n \\tname: groupReset\\n \\t// Only shows button if dataForShowAll has values.\\n \\tfrom: {data: \\\"dataForShowAll\\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tcornerRadius: {value: 6}\\n \\tfill: {value: \\\"#f5f5f5\\\"}\\n \\tstroke: {value: \\\"#c1c1c1\\\"}\\n \\tstrokeWidth: {value: 2}\\n \\t// use parent group's size\\n \\theight: {\\n \\tfield: {group: \\\"height\\\"}\\n \\t}\\n \\twidth: {\\n \\tfield: {group: \\\"width\\\"}\\n \\t}\\n \\t}\\n \\tupdate: {\\n \\t// groups are transparent by default\\n \\topacity: {value: 1}\\n \\t}\\n \\thover: {\\n \\topacity: {value: 0.7}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\ttype: text\\n \\t// if true, it will prevent clicking on the button when over text.\\n \\tinteractive: false\\n \\tencode: {\\n \\tenter: {\\n \\t// center text in the paren group\\n \\txc: {\\n \\tfield: {group: \\\"width\\\"}\\n \\tmult: 0.5\\n \\t}\\n \\tyc: {\\n \\tfield: {group: \\\"height\\\"}\\n \\tmult: 0.5\\n \\toffset: 2\\n \\t}\\n \\talign: {value: \\\"center\\\"}\\n \\tbaseline: {value: \\\"middle\\\"}\\n \\tfontWeight: {value: \\\"bold\\\"}\\n \\ttext: {value: \\\"Show All\\\"}\\n \\t}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t]\\n\\t}\\n ]\\n signals: [\\n\\t{\\n \\t// used to highlight traffic to/from the same country\\n \\tname: groupHover\\n \\tvalue: {}\\n \\ton: [\\n \\t{\\n \\tevents: @groupMark:mouseover\\n \\tupdate: \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n \\t}\\n \\t{events: \\\"mouseout\\\", update: \\\"{}\\\"}\\n \\t]\\n\\t}\\n\\t// used to filter only the data related to the selected country\\n\\t{\\n \\tname: groupSelector\\n \\tvalue: false\\n \\ton: [\\n \\t{\\n \\t// Clicking groupMark sets this signal to the filter values\\n \\tevents: @groupMark:click!\\n \\tupdate: \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n \\t}\\n \\t{\\n \\t// Clicking \\\"show all\\\" button, or double-clicking anywhere resets it\\n \\tevents: [\\n \\t{type: \\\"click\\\", markname: \\\"groupReset\\\"}\\n \\t{type: \\\"dblclick\\\"}\\n \\t]\\n \\tupdate: \\\"false\\\"\\n \\t}\\n \\t]\\n\\t}\\n ]\\n}\\n\"},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + } + }, + { + "id": "314c6f60-2224-11e8-b802-5bcf64c2cfb4", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Response Codes Over Time + Annotations", + "visState": "{\"title\":\"[Logs] Response Codes Over Time + Annotations\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(115,216,255,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"cardinality\",\"field\":\"ip\"}],\"seperate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"percent\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.5\",\"stacked\":\"percent\",\"terms_field\":\"response.keyword\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"label\":\"Response Code Count\",\"split_color_mode\":\"gradient\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"kibana_sample_data_logs\",\"interval\":\">=4h\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"annotations\":[{\"fields\":\"geo.src, host\",\"template\":\"Security Error from {{geo.src}} on {{host}}\",\"index_pattern\":\"kibana_sample_data_logs\",\"query_string\":\"tags:error AND tags:security\",\"id\":\"bd7548a0-2223-11e8-832f-d5027f3c8a47\",\"color\":\"rgba(211,49,21,1)\",\"time_field\":\"timestamp\",\"icon\":\"fa-asterisk\",\"ignore_global_filters\":1,\"ignore_panel_filters\":1}],\"legend_position\":\"bottom\",\"axis_scale\":\"normal\",\"drop_last_bucket\":0},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + } + }, + { + "id": "24a3e970-4257-11e8-b3aa-73fdaf54bfc9", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Input Controls", + "visState": "{\"title\":\"[Logs] Input Controls\",\"type\":\"input_control_vis\",\"params\":{\"controls\":[{\"id\":\"1523980210832\",\"indexPattern\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"geo.src\",\"label\":\"Source Country\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":100,\"order\":\"desc\"},\"parent\":\"\"},{\"id\":\"1523980191978\",\"indexPattern\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"machine.os.keyword\",\"label\":\"OS\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":100,\"order\":\"desc\"},\"parent\":\"1523980210832\"},{\"id\":\"1523980232790\",\"indexPattern\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"bytes\",\"label\":\"Bytes\",\"type\":\"range\",\"options\":{\"decimalPlaces\":0,\"step\":1024}}],\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":false},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + } + } + }, + { + "id": "14e2e710-4258-11e8-b3aa-73fdaf54bfc9", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Article Tags", + "visState": "{\"title\":\"[Logs] Article Tags\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":true,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"machine.os.keyword\",\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"size\":10,\"order\":\"desc\",\"orderBy\":\"1\"}}]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + } + }, + { + "id": "47f2c680-a6e3-11e8-94b4-c30c0228351b", + "type": "visualization", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "[Logs] Markdown Instructions", + "visState": "{\"title\":\"[Logs] Markdown Instructions\",\"type\":\"markdown\",\"params\":{\"fontSize\":12,\"openLinksInNewTab\":true,\"markdown\":\"### Sample Logs Data\\nThis dashboard contains sample data for you to play with. You can view it, search it, and interact with the visualizations. For more information about Kibana, check our [docs](https://www.elastic.co/guide/en/kibana/current/index.html).\"},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + } + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "type": "index-pattern", + "updated_at": "2018-08-29T13:22:17.617Z", + "version": 1, + "attributes": { + "title": "kibana_sample_data_logs", + "timeFieldName": "timestamp", + "fields": "[{\"name\":\"message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"message.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tags.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"agent.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"extension.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"host\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"index.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"machine.os.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"request.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"response.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"hour_of_day\",\"type\":\"number\",\"count\":0,\"scripted\":true,\"script\":\"doc['timestamp'].value.getHourOfDay()\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]", + "fieldFormatMap": "{\"hour_of_day\":{}}" + } + }, + { + "id": "edf84fe0-e1a0-11e7-b6d5-4dc382ef7f5b", + "type": "dashboard", + "updated_at": "2018-08-29T13:26:13.463Z", + "version": 3, + "attributes": { + "title": "[Logs] Web Traffic", + "hits": 0, + "description": "Analyze mock web traffic log data for Elastic's website", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"colors\":{\"Avg. Bytes\":\"#6ED0E0\",\"Unique Visitors\":\"#0A437C\"},\"legendOpen\":false}},\"gridData\":{\"x\":27,\"y\":11,\"w\":21,\"h\":13,\"i\":\"2\"},\"id\":\"e1d0f010-9ee7-11e7-8711-e7a007dcef99\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1\"},{\"gridData\":{\"x\":0,\"y\":49,\"w\":24,\"h\":18,\"i\":\"4\"},\"id\":\"06cf9c40-9ee8-11e7-8711-e7a007dcef99\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 22\":\"rgb(247,251,255)\",\"22 - 44\":\"rgb(208,225,242)\",\"44 - 66\":\"rgb(148,196,223)\",\"66 - 88\":\"rgb(74,152,201)\",\"88 - 110\":\"rgb(23,100,171)\"},\"legendOpen\":false}},\"gridData\":{\"x\":0,\"y\":36,\"w\":24,\"h\":13,\"i\":\"7\"},\"id\":\"935afa20-e0cd-11e7-9d07-1398ccfcefa3\",\"panelIndex\":\"7\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"mapCenter\":[36.8092847020594,-96.94335937500001],\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"gridData\":{\"x\":27,\"y\":24,\"w\":21,\"h\":12,\"i\":\"9\"},\"id\":\"4eb6e500-e1c7-11e7-b6d5-4dc382ef7f5b\",\"panelIndex\":\"9\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"colors\":{\"0 - 500\":\"#BF1B00\",\"1000 - 1500\":\"#7EB26D\",\"500 - 1000\":\"#F2C96D\"},\"defaultColors\":{\"0 - 500\":\"rgb(165,0,38)\",\"1000 - 1500\":\"rgb(0,104,55)\",\"500 - 1000\":\"rgb(255,255,190)\"},\"legendOpen\":false}},\"gridData\":{\"x\":10,\"y\":0,\"w\":9,\"h\":11,\"i\":\"11\"},\"id\":\"69a34b00-9ee8-11e7-8711-e7a007dcef99\",\"panelIndex\":\"11\",\"title\":\"\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":0,\"y\":24,\"w\":27,\"h\":12,\"i\":\"13\"},\"id\":\"42b997f0-0c26-11e8-b0ec-3bb475f6b6ff\",\"panelIndex\":\"13\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":24,\"y\":36,\"w\":24,\"h\":31,\"i\":\"14\"},\"id\":\"7cbd2350-2223-11e8-b802-5bcf64c2cfb4\",\"panelIndex\":\"14\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":0,\"y\":11,\"w\":27,\"h\":13,\"i\":\"15\"},\"id\":\"314c6f60-2224-11e8-b802-5bcf64c2cfb4\",\"panelIndex\":\"15\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"gridData\":{\"x\":19,\"y\":0,\"w\":15,\"h\":11,\"i\":\"16\"},\"id\":\"24a3e970-4257-11e8-b3aa-73fdaf54bfc9\",\"panelIndex\":\"16\",\"title\":\"\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{\"vis\":{\"legendOpen\":false}},\"gridData\":{\"x\":34,\"y\":0,\"w\":14,\"h\":11,\"i\":\"17\"},\"id\":\"14e2e710-4258-11e8-b3aa-73fdaf54bfc9\",\"panelIndex\":\"17\",\"type\":\"visualization\",\"version\":\"6.3.0\"},{\"embeddableConfig\":{},\"gridData\":{\"x\":0,\"y\":0,\"w\":10,\"h\":11,\"i\":\"18\"},\"id\":\"47f2c680-a6e3-11e8-94b4-c30c0228351b\",\"panelIndex\":\"18\",\"title\":\"\",\"type\":\"visualization\",\"version\":\"7.0.0-alpha1\"}]", + "optionsJSON": "{\"darkTheme\":false,\"hidePanelTitles\":false,\"useMargins\":true}", + "version": 1, + "timeRestore": true, + "timeTo": "now", + "timeFrom": "now-7d", + "refreshInterval": { + "pause": false, + "value": 900000 + }, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}" + } + } + } +]; diff --git a/src/server/sample_data/routes/lib/load_data.test.js b/src/server/sample_data/routes/lib/load_data.test.js index 0d8a0503d04565..0288741ae78c02 100644 --- a/src/server/sample_data/routes/lib/load_data.test.js +++ b/src/server/sample_data/routes/lib/load_data.test.js @@ -19,7 +19,7 @@ import { loadData } from './load_data'; -test('load data', done => { +test('load flight data', done => { let myDocsCount = 0; const bulkInsertMock = (docs) => { myDocsCount += docs.length; @@ -30,3 +30,15 @@ test('load data', done => { done(); }); }); + +test('load log data', done => { + let myDocsCount = 0; + const bulkInsertMock = (docs) => { + myDocsCount += docs.length; + }; + loadData('./src/server/sample_data/data_sets/logs/logs.json.gz', bulkInsertMock, async (err, count) => { + expect(myDocsCount).toBe(14005); + expect(count).toBe(14005); + done(); + }); +}); diff --git a/src/server/sample_data/sample_data_mixin.js b/src/server/sample_data/sample_data_mixin.js index 85c314b24ae52b..160bb2be189500 100644 --- a/src/server/sample_data/sample_data_mixin.js +++ b/src/server/sample_data/sample_data_mixin.js @@ -26,6 +26,7 @@ import { } from './routes'; import { flightsSpecProvider, + logsSpecProvider, } from './data_sets'; export function sampleDataMixin(kbnServer, server) { @@ -66,4 +67,5 @@ export function sampleDataMixin(kbnServer, server) { }); server.registerSampleDataset(flightsSpecProvider); + server.registerSampleDataset(logsSpecProvider); } diff --git a/test/functional/apps/home/_sample_data.js b/test/functional/apps/home/_sample_data.js index ea8174e279ab65..2ed6a743f6e53f 100644 --- a/test/functional/apps/home/_sample_data.js +++ b/test/functional/apps/home/_sample_data.js @@ -32,26 +32,39 @@ export default function ({ getService, getPageObjects }) { await PageObjects.header.waitUntilLoadingHasFinished(); }); - it('should display registered sample data sets', async ()=> { + it('should display registered flights sample data sets', async ()=> { await retry.try(async () => { const exists = await PageObjects.home.doesSampleDataSetExist('flights'); expect(exists).to.be(true); }); }); - it('should install sample data set', async ()=> { + it('should display registered logs sample data sets', async ()=> { + await retry.try(async () => { + const exists = await PageObjects.home.doesSampleDataSetExist('logs'); + expect(exists).to.be(true); + }); + }); + + it('should install flights sample data set', async ()=> { await PageObjects.home.addSampleDataSet('flights'); const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(true); }); + it('should install logs sample data set', async ()=> { + await PageObjects.home.addSampleDataSet('logs'); + const isInstalled = await PageObjects.home.isSampleDataSetInstalled('logs'); + expect(isInstalled).to.be(true); + }); + describe('dashboard', () => { - after(async () => { + afterEach(async () => { await PageObjects.common.navigateToUrl('home', 'tutorial_directory/sampleData'); await PageObjects.header.waitUntilLoadingHasFinished(); }); - it('should launch sample data set dashboard', async ()=> { + it('should launch sample flights data set dashboard', async ()=> { await PageObjects.home.launchSampleDataSet('flights'); await PageObjects.header.waitUntilLoadingHasFinished(); const today = new Date(); @@ -63,6 +76,7 @@ export default function ({ getService, getPageObjects }) { expect(panelCount).to.be(19); }); + it.skip('pie charts rendered', async () => { await dashboardExpect.pieSliceCount(4); }); @@ -87,15 +101,35 @@ export default function ({ getService, getPageObjects }) { const tsvb = await find.existsByCssSelector('.vega-view-container'); expect(tsvb).to.be(true); }); + + it('should launch sample logs data set dashboard', async ()=> { + await PageObjects.home.launchSampleDataSet('logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + const today = new Date(); + const todayYearMonthDay = today.toISOString().substring(0, 10); + const fromTime = `${todayYearMonthDay} 00:00:00.000`; + const toTime = `${todayYearMonthDay} 23:59:59.999`; + await PageObjects.header.setAbsoluteRange(fromTime, toTime); + const panelCount = await PageObjects.dashboard.getPanelCount(); + expect(panelCount).to.be(11); + }); + }); // needs to be in describe block so it is run after 'dashboard describe block' describe('uninstall', () => { - it('should uninstall sample data set', async ()=> { + it('should uninstall flights sample data set', async ()=> { await PageObjects.home.removeSampleDataSet('flights'); const isInstalled = await PageObjects.home.isSampleDataSetInstalled('flights'); expect(isInstalled).to.be(false); }); + + it('should uninstall logs sample data set', async ()=> { + await PageObjects.home.removeSampleDataSet('logs'); + const isInstalled = await PageObjects.home.isSampleDataSetInstalled('logs'); + expect(isInstalled).to.be(false); + }); + }); }); } From dfaff7c4bf717df70be9f98f0667b377e1818dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 29 Aug 2018 23:51:56 +0200 Subject: [PATCH 065/173] [Fix] Fix bug with missing license data (#22485) --- .../apm/public/components/app/ErrorGroupOverview/view.js | 3 ++- .../apm/public/components/app/TransactionOverview/view.js | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/view.js b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/view.js index 6edd6f9d8b0464..9287028347b1d8 100644 --- a/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/view.js +++ b/x-pack/plugins/apm/public/components/app/ErrorGroupOverview/view.js @@ -6,6 +6,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import { get } from 'lodash'; import { HeaderContainer } from '../../shared/UIComponents'; import TabNavigation from '../../shared/TabNavigation'; import List from './List'; @@ -35,7 +36,7 @@ class ErrorGroupOverview extends Component {

    {serviceName}

    - {license.data.features.watcher.isAvailable && ( + {get(license.data, 'features.watcher.isAvailable') && ( )}
    diff --git a/x-pack/plugins/apm/public/components/app/TransactionOverview/view.js b/x-pack/plugins/apm/public/components/app/TransactionOverview/view.js index 0a33ae89b24ad7..ec14242232691a 100644 --- a/x-pack/plugins/apm/public/components/app/TransactionOverview/view.js +++ b/x-pack/plugins/apm/public/components/app/TransactionOverview/view.js @@ -9,6 +9,7 @@ import styled from 'styled-components'; import chrome from 'ui/chrome'; import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import { get } from 'lodash'; import { HeaderContainer, HeaderMedium } from '../../shared/UIComponents'; import TabNavigation from '../../shared/TabNavigation'; import Charts from '../../shared/charts/TransactionCharts'; @@ -69,7 +70,7 @@ class TransactionOverview extends Component { const mlEnabled = chrome.getInjected('mlEnabled'); const ChartHeaderContent = - hasDynamicBaseline && license.data.features.ml.isAvailable ? ( + hasDynamicBaseline && get(license.data, 'features.ml.isAvailable') ? ( @@ -91,7 +92,7 @@ class TransactionOverview extends Component {

    {serviceName}

    - {license.data.features.ml.isAvailable && + {get(license.data, 'features.ml.isAvailable') && mlEnabled && ( )} From fa78b753dc31b61025c99c76b80294015bb1feb7 Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Thu, 30 Aug 2018 00:39:15 +0200 Subject: [PATCH 066/173] Rely on RFC1123 when validating `server.host`. (#22469) --- .../__snapshots__/string_type.test.ts.snap | 10 ++++++ .../types/__tests__/string_type.test.ts | 33 +++++++++++++++++++ .../server/config/schema/types/string_type.ts | 7 ++++ .../__snapshots__/http_config.test.ts.snap | 11 ++++++- .../server/http/__tests__/http_config.test.ts | 9 +++++ src/core/server/http/http_config.ts | 3 +- 6 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/core/server/config/schema/types/__tests__/__snapshots__/string_type.test.ts.snap b/src/core/server/config/schema/types/__tests__/__snapshots__/string_type.test.ts.snap index 6427fa2752d40b..38da495520d2c2 100644 --- a/src/core/server/config/schema/types/__tests__/__snapshots__/string_type.test.ts.snap +++ b/src/core/server/config/schema/types/__tests__/__snapshots__/string_type.test.ts.snap @@ -1,5 +1,15 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`#hostname returns error when value is not a valid hostname 1`] = `"value is [host:name] but it must be a valid hostname (see RFC 1123)."`; + +exports[`#hostname returns error when value is not a valid hostname 2`] = `"value is [localhost:5601] but it must be a valid hostname (see RFC 1123)."`; + +exports[`#hostname returns error when value is not a valid hostname 3`] = `"value is [-] but it must be a valid hostname (see RFC 1123)."`; + +exports[`#hostname returns error when value is not a valid hostname 4`] = `"value is [0:?:0:0:0:0:0:1] but it must be a valid hostname (see RFC 1123)."`; + +exports[`#hostname returns error when value is not a valid hostname 5`] = `"value is [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa] but it must be a valid hostname (see RFC 1123)."`; + exports[`#maxLength returns error when longer string 1`] = `"value is [foo] but it must have a maximum length of [2]."`; exports[`#minLength returns error when shorter string 1`] = `"value is [foo] but it must have a minimum length of [4]."`; diff --git a/src/core/server/config/schema/types/__tests__/string_type.test.ts b/src/core/server/config/schema/types/__tests__/string_type.test.ts index 4ed472d10930ae..f9415a0ac2506f 100644 --- a/src/core/server/config/schema/types/__tests__/string_type.test.ts +++ b/src/core/server/config/schema/types/__tests__/string_type.test.ts @@ -53,6 +53,39 @@ describe('#maxLength', () => { }); }); +describe('#hostname', () => { + test('returns value for valid hostname as per RFC1123', () => { + const hostNameSchema = schema.string({ hostname: true }); + + expect(hostNameSchema.validate('www.example.com')).toBe('www.example.com'); + expect(hostNameSchema.validate('3domain.local')).toBe('3domain.local'); + expect(hostNameSchema.validate('hostname')).toBe('hostname'); + expect(hostNameSchema.validate('2387628')).toBe('2387628'); + expect(hostNameSchema.validate('::1')).toBe('::1'); + expect(hostNameSchema.validate('0:0:0:0:0:0:0:1')).toBe('0:0:0:0:0:0:0:1'); + expect(hostNameSchema.validate('xn----ascii-7gg5ei7b1i.xn--90a3a')).toBe( + 'xn----ascii-7gg5ei7b1i.xn--90a3a' + ); + + const hostNameWithMaxAllowedLength = 'a'.repeat(255); + expect(hostNameSchema.validate(hostNameWithMaxAllowedLength)).toBe( + hostNameWithMaxAllowedLength + ); + }); + + test('returns error when value is not a valid hostname', () => { + const hostNameSchema = schema.string({ hostname: true }); + + expect(() => hostNameSchema.validate('host:name')).toThrowErrorMatchingSnapshot(); + expect(() => hostNameSchema.validate('localhost:5601')).toThrowErrorMatchingSnapshot(); + expect(() => hostNameSchema.validate('-')).toThrowErrorMatchingSnapshot(); + expect(() => hostNameSchema.validate('0:?:0:0:0:0:0:1')).toThrowErrorMatchingSnapshot(); + + const tooLongHostName = 'a'.repeat(256); + expect(() => hostNameSchema.validate(tooLongHostName)).toThrowErrorMatchingSnapshot(); + }); +}); + describe('#defaultValue', () => { test('returns default when string is undefined', () => { expect(schema.string({ defaultValue: 'foo' }).validate(undefined)).toBe('foo'); diff --git a/src/core/server/config/schema/types/string_type.ts b/src/core/server/config/schema/types/string_type.ts index 4e7eb5cc229a5f..6a2cb948b0e769 100644 --- a/src/core/server/config/schema/types/string_type.ts +++ b/src/core/server/config/schema/types/string_type.ts @@ -24,6 +24,7 @@ import { Type, TypeOptions } from './type'; export type StringOptions = TypeOptions & { minLength?: number; maxLength?: number; + hostname?: boolean; }; export class StringType extends Type { @@ -38,6 +39,10 @@ export class StringType extends Type { schema = schema.max(options.maxLength); } + if (options.hostname === true) { + schema = schema.hostname(); + } + super(schema, options); } @@ -50,6 +55,8 @@ export class StringType extends Type { return `value is [${value}] but it must have a minimum length of [${limit}].`; case 'string.max': return `value is [${value}] but it must have a maximum length of [${limit}].`; + case 'string.hostname': + return `value is [${value}] but it must be a valid hostname (see RFC 1123).`; } } } diff --git a/src/core/server/http/__tests__/__snapshots__/http_config.test.ts.snap b/src/core/server/http/__tests__/__snapshots__/http_config.test.ts.snap index 4201e4f774892e..6c38ae7ecf5d66 100644 --- a/src/core/server/http/__tests__/__snapshots__/http_config.test.ts.snap +++ b/src/core/server/http/__tests__/__snapshots__/http_config.test.ts.snap @@ -1,5 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`accepts valid hostnames: valid host names 1`] = ` +Object { + "host1": "www.example.com", + "host2": "8.8.8.8", + "host3": "::1", + "host4": "localhost", +} +`; + exports[`has defaults for config 1`] = ` Object { "cors": false, @@ -44,7 +53,7 @@ exports[`throws if basepath is missing prepended slash 1`] = `"[basePath]: must exports[`throws if basepath is not specified, but rewriteBasePath is set 1`] = `"cannot use [rewriteBasePath] when [basePath] is not specified"`; -exports[`throws if invalid hostname 1`] = `"[host]: must be a valid hostname"`; +exports[`throws if invalid hostname 1`] = `"[host]: value is [asdf$%^] but it must be a valid hostname (see RFC 1123)."`; exports[`with TLS should accept known protocols\` 1`] = ` "[ssl.supportedProtocols.0]: types that failed validation: diff --git a/src/core/server/http/__tests__/http_config.test.ts b/src/core/server/http/__tests__/http_config.test.ts index bc21205cf8708a..45bd8962fc0df5 100644 --- a/src/core/server/http/__tests__/http_config.test.ts +++ b/src/core/server/http/__tests__/http_config.test.ts @@ -25,6 +25,15 @@ test('has defaults for config', () => { expect(httpSchema.validate(obj)).toMatchSnapshot(); }); +test('accepts valid hostnames', () => { + const { host: host1 } = HttpConfig.schema.validate({ host: 'www.example.com' }); + const { host: host2 } = HttpConfig.schema.validate({ host: '8.8.8.8' }); + const { host: host3 } = HttpConfig.schema.validate({ host: '::1' }); + const { host: host4 } = HttpConfig.schema.validate({ host: 'localhost' }); + + expect({ host1, host2, host3, host4 }).toMatchSnapshot('valid host names'); +}); + test('throws if invalid hostname', () => { const httpSchema = HttpConfig.schema; const obj = { diff --git a/src/core/server/http/http_config.ts b/src/core/server/http/http_config.ts index bef8baf7941476..5d1504008027b4 100644 --- a/src/core/server/http/http_config.ts +++ b/src/core/server/http/http_config.ts @@ -21,7 +21,6 @@ import { Env } from '../config'; import { ByteSizeValue, schema, TypeOf } from '../config/schema'; import { SslConfig } from './ssl_config'; -const validHostnameRegex = /^(([A-Z0-9]|[A-Z0-9][A-Z0-9\-]*[A-Z0-9])\.)*([A-Z0-9]|[A-Z0-9][A-Z0-9\-]*[A-Z0-9])$/i; const validBasePathRegex = /(^$|^\/.*[^\/]$)/; const match = (regex: RegExp, errorMsg: string) => (str: string) => @@ -51,7 +50,7 @@ const createHttpSchema = schema.object( ), host: schema.string({ defaultValue: 'localhost', - validate: match(validHostnameRegex, 'must be a valid hostname'), + hostname: true, }), maxPayload: schema.byteSize({ defaultValue: '1048576b', From 22aa6caba4736c0558a1fe16b5d0195ab42028c6 Mon Sep 17 00:00:00 2001 From: Chris Davies Date: Wed, 29 Aug 2018 20:16:06 -0400 Subject: [PATCH 067/173] Convert Chromium reports to puppeteer (#21788) Update Chromium to a recent version compatible with Puppeteer. Update Chromium build scripts to initialize build environments and work with recent versions of Chromium. Modify Chromium reporting logic to be driven mostly by Puppeteer. --- x-pack/build_chromium/.gitignore | 1 + x-pack/build_chromium/README.md | 127 ++++++++++- x-pack/build_chromium/build.js | 148 ------------- x-pack/build_chromium/build.py | 92 ++++++++ x-pack/build_chromium/build_util.py | 33 +++ x-pack/build_chromium/cli.js | 25 --- x-pack/build_chromium/create_zip.js | 25 --- .../{darwin.args.gn => darwin/args.gn} | 10 +- x-pack/build_chromium/darwin/init.sh | 5 + x-pack/build_chromium/init.py | 32 +++ .../{linux.args.gn => linux/args.gn} | 0 x-pack/build_chromium/linux/init.sh | 13 ++ x-pack/build_chromium/platform_archives.js | 33 --- .../{win32.args.gn => windows/args.gn} | 9 +- x-pack/build_chromium/windows/init.bat | 31 +++ x-pack/package.json | 7 +- .../printable_pdf/server/lib/screenshots.js | 29 +-- x-pack/plugins/reporting/index.js | 3 +- .../chromium/driver/ignore_ssl_errors.js | 13 -- .../server/browsers/chromium/driver/index.js | 142 +++---------- .../driver/screenshot_stitcher/combine.ts | 115 ---------- .../fixtures/2x1-checkerboard.png | Bin 84 -> 0 bytes .../fixtures/2x2-black.png | Bin 88 -> 0 bytes .../fixtures/2x2-checkerboard.png | Bin 94 -> 0 bytes .../fixtures/2x2-white.png | Bin 86 -> 0 bytes .../fixtures/4x4-checkerboard.png | Bin 104 -> 0 bytes .../fixtures/single-black-pixel.png | Bin 3358 -> 0 bytes .../fixtures/single-white-pixel.png | Bin 80 -> 0 bytes .../screenshot_stitcher/get_clips.test.ts | 107 ---------- .../driver/screenshot_stitcher/get_clips.ts | 34 --- .../driver/screenshot_stitcher/index.test.ts | 188 ---------------- .../driver/screenshot_stitcher/index.ts | 8 - .../screenshot_stitcher.ts | 91 -------- .../driver/screenshot_stitcher/types.ts | 28 --- .../browsers/chromium/driver/transform_fn.js | 29 --- .../driver_factory/{args.js => args.ts} | 21 +- .../ensure_chromium_is_listening.js | 47 ---- .../browsers/chromium/driver_factory/index.js | 58 ++--- .../server/browsers/chromium/paths.js | 14 +- .../reporting/server/browsers/install.js | 3 +- x-pack/scripts/build_chromium.js | 8 - x-pack/scripts/functional_tests.js | 6 +- .../functional/page_objects/reporting_page.js | 5 + .../reporting/functional/lib/compare_pdfs.js | 55 +++-- x-pack/test/reporting/functional/reporting.js | 2 + x-pack/yarn.lock | 201 +++++++++++++----- yarn.lock | 48 +++-- 47 files changed, 650 insertions(+), 1196 deletions(-) create mode 100644 x-pack/build_chromium/.gitignore delete mode 100644 x-pack/build_chromium/build.js create mode 100644 x-pack/build_chromium/build.py create mode 100644 x-pack/build_chromium/build_util.py delete mode 100644 x-pack/build_chromium/cli.js delete mode 100644 x-pack/build_chromium/create_zip.js rename x-pack/build_chromium/{darwin.args.gn => darwin/args.gn} (70%) create mode 100755 x-pack/build_chromium/darwin/init.sh create mode 100644 x-pack/build_chromium/init.py rename x-pack/build_chromium/{linux.args.gn => linux/args.gn} (100%) create mode 100755 x-pack/build_chromium/linux/init.sh delete mode 100644 x-pack/build_chromium/platform_archives.js rename x-pack/build_chromium/{win32.args.gn => windows/args.gn} (67%) create mode 100644 x-pack/build_chromium/windows/init.bat delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/ignore_ssl_errors.js delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/combine.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x1-checkerboard.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x2-black.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x2-checkerboard.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x2-white.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/4x4-checkerboard.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/single-black-pixel.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/single-white-pixel.png delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.test.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.test.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/screenshot_stitcher.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/types.ts delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver/transform_fn.js rename x-pack/plugins/reporting/server/browsers/chromium/driver_factory/{args.js => args.ts} (83%) delete mode 100644 x-pack/plugins/reporting/server/browsers/chromium/driver_factory/ensure_chromium_is_listening.js delete mode 100644 x-pack/scripts/build_chromium.js diff --git a/x-pack/build_chromium/.gitignore b/x-pack/build_chromium/.gitignore new file mode 100644 index 00000000000000..0d20b6487c61e7 --- /dev/null +++ b/x-pack/build_chromium/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/x-pack/build_chromium/README.md b/x-pack/build_chromium/README.md index e355fd88101767..742ccd9f45633c 100644 --- a/x-pack/build_chromium/README.md +++ b/x-pack/build_chromium/README.md @@ -1,12 +1,123 @@ -# Building on Linux -The following script will run in the elastic/ubuntu-16.04-x86_64 virtual machine. It should be noted that the harddisk of the Virtual Machine should be resized to at least 40GB. +# Chromium build -# Building on Windows -Some dependencies must be installed on the build machine to build on Windows, those are specified [here](https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md). You don't have to install the depot_tools, just Visual Studio and the Windows SDK. When building on Windows, using the `--workspace` flag is likely required because of the NTFS max paths. +We ship our own headless build of Chromium which is significantly smaller than the standard binaries shipped by Google. The scripts in this folder can be used to initialize the build environments and run the build on Mac, Windows, and Linux. -# Building on macOS -XCode and the OS X 10.10 SDK are currently required, but the full requirements are specified [here](https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md). Also, you don't have to install the depot_tools. +The official Chromium build process is poorly documented, and seems to have breaking changes fairly regularly. The build pre-requisites, and the build flags change over time, so it is likely that the scripts in this directory will be out of date by the time we have to do another Chromium build. +This document is an attempt to note all of the gotchas we've come across while building, so that the next time we have to tinker here, we'll have a good starting point. -## Updating the revision -If you want to build the headless_shell that mirrors a specific version of the Chrome browser, you can take the version number displayed in `Chrome -> About` and plug it into the "Version" input [here](https://omahaproxy.appspot.com/) and it'll give you the Commit that you can feed into the build script using the `--git-sha` argument. It's highly recommended to update the default when you're upgrading the version. +## Build args + +Chromium is built via a build tool called "ninja". The build can be configured by specifying build flags either in an "args.gn" file or via commandline args. We have an "args.gn" file per platform: + +- mac: darwin/args.gn +- linux: linux/args.gn +- windows: windows/args.gn + +The various build flags are not well documented. Some are documented [here](https://www.chromium.org/developers/gn-build-configuration). Some, such as `enable_basic_printing = false`, I only found by poking through 3rd party build scripts. + +As of this writing, there is an officially supported headless Chromium build args file for Linux: `build/args/headless.gn`. This does not work on Windows or Mac, so we have taken that as our starting point, and modified it until the Windows / Mac builds succeeded. + +## VMs + +I ran Linux and Windows VMs in GCP with the following specs: + +- 8 core vCPU +- 30GB RAM +- 128GB hard drive +- Ubuntu 18.04 LTS (not minimal) +- Windows Server 2016 (full, with desktop) + +The more cores the better, as the build makes effective use of each. For Linux, Ubuntu is the only officially supported build target. + +- Linux: + - SSH in using [gcloud](https://cloud.google.com/sdk/) + - Get the ssh command in the [GCP console](https://console.cloud.google.com/) -> VM instances -> your-vm-name -> SSH -> gcloud + - Their in-browser UI is kinda sluggish, so use the commandline tool + +- Windows: + - Install Microsoft's Remote Desktop tools + - Get the RDP file in the [GCP console](https://console.cloud.google.com/) -> VM instances -> your-vm-name -> RDP -> Download the RDP file + - Edit it in Microsoft Remote Desktop: + - Display -> Resolution (1280 x 960 or something reasonable) + - Local Resources -> Folders, then select the folder(s) you want to share, this is at least `build_chromium` folder + - Save + +## Initializing each VM / environment + +You only need to initialize each environment once. + +Create the build folder: + +- Mac / Linux: `mkdir -p ~/chromium` +- Windows: `mkdir c:\chromium` + +Copy the `x-pack/build-chromium` folder to each. Replace `you@your-machine` with the correct username and VM name: + +- Mac: `cp -r ~/dev/elastic/kibana/x-pack/build_chromium ~/chromium/build_chromium` +- Linux: `gcloud compute scp --recurse ~/dev/elastic/kibana/x-pack/build_chromium you@your-machine:~/chromium --zone=us-east1-b` +- Windows: Copy the `build_chromium` folder via the RDP GUI into `c:\chromium\build_chromium` + +There is an init script for each platform. This downloads and installs the necessary prerequisites, sets environment variables, etc. + +- Mac: `~/chromium/build_chromium/darwin/init.sh` +- Linux: `~/chromium/build_chromium/linux/init.sh` +- Windows `c:\chromium\build_chromium\windows\init.bat` + +In windows, at least, you will need to do a number of extra steps: + +- Follow the prompts in the Visual Studio installation process, click "Install" and wait a while +- Once it's installed, open Control Panel and turn on Debugging Tools for Windows: + - Control Panel → Programs → Programs and Features → Select the “Windows Software Development Kit” → Change → Change → Check “Debugging Tools For Windows” → Change +- Press enter in the terminal to continue running the init + +## Building + +Find the sha of the Chromium commit you wish to build. Most likely, you want to build the Chromium revision that is tied to the version of puppeteer that we're using. + +Find the Chromium revision (modify the following command to be wherever you have the kibana source installed): + +- `cat ~/dev/elastic/kibana/x-pack/node_modules/puppeteer-core/package.json | grep chromium_revision` +- Take the revision number from that, and tack it to the end of this URL: https://crrev.com + - (For example: https://crrev.com/575458) +- Grab the SHA from there + - (For example, rev 575458 has sha 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479) + +Note: In Linux, you should run the build command in tmux so that if your ssh session disconnects, the build can keep going. To do this, just type `tmux` into your terminal to hop into a tmux session. If you get disconnected, you can hop back in like so: + +- SSH into the server +- Run `tmux list-sessions` +- Run `tmux switch -t {session_id}`, replacing {session_id} with the value from the list-sessions output + +To run the build, replace the sha in the following commands with the sha that you wish to build: + +- Mac: `python ~/chromium/build_chromium/build.py 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479` +- Linux: `python ~/chromium/build_chromium/build.py 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479` +- Windows: `python c:\chromium\build_chromium\build.py 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479` + +## Artifacts + +After the build completes, there will be a .zip file and a .md5 file in `~/chromium/chromium/src/out/headless`. These are named like so: `chromium-{first_7_of_SHA}-{platform}`, for example: `chromium-4747cc2-linux`. + +The zip files need to be deployed to s3. For testing, I drop them into `headless-shell-dev`, but for production, they need to be in `headless-shell`. And the `x-pack/plugins/reporting/server/browsers/chromium/paths.js` file needs to be upated to have the correct `archiveChecksum`, `archiveFilename` and `baseUrl`. + +*If you're building in the cloud, don't forget to turn off your VM after retrieving the build artifacts!* + +## Diagnosing runtime failures + +After getting the build to pass, the resulting binaries often failed to run or would hang. + +You can run the headless browser manually to see what errors it is generating (replace the `c:\dev\data` with the path to a dummy folder you've created on your system): + +`headless_shell.exe --disable-translate --disable-extensions --disable-background-networking --safebrowsing-disable-auto-update --disable-sync --metrics-recording-only --disable-default-apps --mute-audio --no-first-run --user-data-dir=c:\dev\data --disable-gpu --no-sandbox --headless --hide-scrollbars --window-size=400,400 --remote-debugging-port=3333 about:blank` + +## Resources + +The following links provide helpful context about how the Chromium build works, and its prerequisites: + +- https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches +- https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md +- https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md +- https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md +- Some build-flag descriptions: https://www.chromium.org/developers/gn-build-configuration +- The serverless Chromium project was indispensable: https://github.com/adieuadieu/serverless-chrome/blob/b29445aa5a96d031be2edd5d1fc8651683bf262c/packages/lambda/builds/chromium/build/build.sh diff --git a/x-pack/build_chromium/build.js b/x-pack/build_chromium/build.js deleted file mode 100644 index faf4ee9be5cc9a..00000000000000 --- a/x-pack/build_chromium/build.js +++ /dev/null @@ -1,148 +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 fs from 'fs'; -import path from 'path'; -import { spawn } from 'child_process'; -import mkdirp from 'mkdirp'; -import { promisify } from 'bluebird'; -import { platformArchives } from './platform_archives'; -import { createZip } from './create_zip'; - -const DEPOT_TOOLS_GIT_URL = 'https://chromium.googlesource.com/chromium/tools/depot_tools.git'; - -class Paths { - constructor(workspace) { - this.workspace = workspace; - this.depotTools = path.join(this.workspace, 'depot_tools'); - this.chromium = path.join(this.workspace, 'chromium'); - this.chromiumSrc = path.join(this.chromium, 'src'); - this.gclientConfig = path.join(this.chromium, '.gclient'); - this.headlessOutput = path.join(this.chromiumSrc, 'out', 'Headless'); - this.headlessOutputArgs = path.join(this.headlessOutput, 'args.gn'); - this.target = path.join(this.workspace, 'target'); - } - - getHeadlessArgs = (platform) => path.join(__dirname, `${platform}.args.gn`); -} - -const fsp = { - mkdir: promisify(fs.mkdir, fs), - mkdirp: promisify(mkdirp), - readFile: promisify(fs.readFile, fs), - writeFile: promisify(fs.writeFile, fs), -}; - -const log = (msg) => { - console.log(msg); -}; - -const fromExitCode = (process) => { - return new Promise((resolve, reject) => { - process.on('exit', code => code === 0 ? resolve() : reject(new Error(`Child process exited with code ${code}`))); - }); -}; - -const printOutput = (proc) => { - proc.stdout.on('data', buffer => console.log(buffer.toString())); - proc.stderr.on('data', buffer => console.error(buffer.toString())); - return proc; -}; - -const pathEnvName = process.platform === 'win32' ? 'Path' : 'PATH'; - -export async function build(command) { - const paths = new Paths(command.workspace); - if (!fs.existsSync(paths.workspace)) { - log(`creating workspace`); - await fsp.mkdir(paths.workspace); - } - - log('setting up depot_tools'); - if (!fs.existsSync(paths.depotTools)) { - log(`cloning depot_tools`); - await fromExitCode(spawn('git', ['clone', DEPOT_TOOLS_GIT_URL, paths.depotTools], { cwd: paths.workspace, shell: true })); - } else { - log(`depot_tools already cloned, updating`); - await fromExitCode(spawn('git', ['pull'], { cwd: paths.depotTools, env: process.env, shell: true })); - } - - const depotToolsPathEnv = { - ...process.env, - DEPOT_TOOLS_WIN_TOOLCHAIN: 0, - [pathEnvName]: `${process.env[pathEnvName]}${path.delimiter}${paths.depotTools}`, - }; - - if (!fs.existsSync(paths.chromium)) { - log(`creating chromium directory`); - await fsp.mkdir(paths.chromium); - } - - if (!fs.existsSync(paths.gclientConfig)) { - log(`creating .gclient`); - const solution = `{ - 'url': 'https://chromium.googlesource.com/chromium/src.git', - 'managed': False, - 'name': 'src', - 'deps_file': '.DEPS.git', - 'custom_deps': {}, - }`.replace(/\n/g, ''); - await fromExitCode(printOutput(spawn('gclient', [ - 'config', - `--spec "solutions=[${solution.replace(/\n/g, '')}]"` - ], { cwd: paths.chromium, env: depotToolsPathEnv, shell: true }))); - } - - log(`syncing src`); - await fromExitCode(printOutput(spawn('gclient', [ - 'sync', - '-r', - `src@${command.gitSha}`, - '--no-history', - '--nohooks' - ], { cwd: paths.chromium, env: depotToolsPathEnv, shell: true }))); - - if (process.platform === 'linux') { - log(`installing build dependencies`); - await fromExitCode(printOutput(spawn('build/install-build-deps.sh', [ - '--no-prompt', - '--no-nacl' - ], { cwd: paths.chromiumSrc, env: depotToolsPathEnv, shell: true }))); - } - - log(`running hooks`); - await fromExitCode(printOutput(spawn('gclient', [ - 'runhooks' - ], { cwd: paths.chromium, env: depotToolsPathEnv, shell: true }))); - - log(`generating ninja`); - await fsp.mkdirp(paths.headlessOutput); - - const argsContent = await fsp.readFile(paths.getHeadlessArgs(process.platform)); - await fsp.writeFile(paths.headlessOutputArgs, argsContent); - - await fromExitCode(printOutput(spawn('gn', [ - 'gen', - 'out/Headless' - ], { cwd: paths.chromiumSrc, env: depotToolsPathEnv, shell: true }))); - - log("building"); - await fromExitCode(printOutput(spawn('ninja', [ - `-C ${paths.headlessOutput}`, 'headless_shell' - ], { cwd: paths.chromiumSrc, env: depotToolsPathEnv, shell: true }))); - - - if (!fs.existsSync(paths.target)) { - log(`creating target folder`); - await fsp.mkdir(paths.target); - } - - const platformArchive = platformArchives[process.platform]; - const zipFilename = `chromium-${command.gitSha.substr(0, 7)}-${process.platform}.zip`; - await createZip(paths.headlessOutput, platformArchive.files, platformArchive.directoryName, paths.target, zipFilename); - - console.log(`Archive created at ${path.join(paths.target, zipFilename)}`); -} diff --git a/x-pack/build_chromium/build.py b/x-pack/build_chromium/build.py new file mode 100644 index 00000000000000..e881c3691bd6d2 --- /dev/null +++ b/x-pack/build_chromium/build.py @@ -0,0 +1,92 @@ +import subprocess, os, sys, platform, zipfile, hashlib, shutil +from build_util import runcmd, mkdir, md5_file, script_dir, root_dir, configure_environment + +# This file builds Chromium headless on Windows, Mac, and Linux. + +# Verify that we have an argument, and if not print instructions +if (len(sys.argv) < 2): + print('Usage:') + print('python build.py {chromium_version}') + print('Example:') + print('python build.py 68.0.3440.106') + print('python build.py 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479') + sys.exit(1) + +# The version of Chromium we wish to build. This can be any valid git +# commit, tag, or branch, so: 68.0.3440.106 or +# 4747cc23ae334a57a35ed3c8e6adcdbc8a50d479 +source_version = sys.argv[1] + +print('Building Chromium ' + source_version) + +# Set the environment variables required by the build tools +print('Configuring the build environment') +configure_environment() + +# Sync the codebase to the correct version, syncing master first +# to ensure that we actually have all the versions we may refer to +print('Syncing source code') + +os.chdir(os.path.join(root_dir, 'chromium/src')) + +runcmd('git checkout master') +runcmd('git fetch origin') +runcmd('gclient sync --with_branch_heads --with_tags --jobs 16') +runcmd('git checkout ' + source_version) +runcmd('gclient sync --with_branch_heads --with_tags --jobs 16') +runcmd('gclient runhooks') + +# Copy build args/{Linux | Darwin | Windows}.gn from the root of our directory to out/headless/args.gn, +platform_build_args = os.path.join(script_dir, platform.system().lower(), 'args.gn') +print('Generating platform-specific args') +print('Copying build args: ' + platform_build_args + ' to out/headless/args.gn') +mkdir('out/headless') +shutil.copyfile(platform_build_args, 'out/headless/args.gn') +runcmd('gn gen out/headless') + +# Build Chromium... this takes *forever* on underpowered VMs +print('Compiling... this will take a while') +runcmd('autoninja -C out/headless headless_shell') + +# Optimize the output on Linux and Mac by stripping inessentials from the binary +if platform.system() != 'Windows': + print('Optimizing headless_shell') + shutil.move('out/headless/headless_shell', 'out/headless/headless_shell_raw') + runcmd('strip -o out/headless/headless_shell out/headless/headless_shell_raw') + +# Create the zip and generate the md5 hash using filenames like: +# chromium-4747cc2-linux.zip +base_filename = 'out/headless/chromium-' + source_version[:7].strip('.') + '-' + platform.system().lower() +zip_filename = base_filename + '.zip' +md5_filename = base_filename + '.md5' + +print('Creating ' + zip_filename) +archive = zipfile.ZipFile(zip_filename, mode='w', compression=zipfile.ZIP_DEFLATED) + +def archive_file(name): + """A little helper function to write individual files to the zip file""" + from_path = os.path.join('out/headless', name) + to_path = os.path.join('headless_shell-' + platform.system().lower(), name) + archive.write(from_path, to_path) + +# Each platform has slightly different requirements for what dependencies +# must be bundled with the Chromium executable. +if platform.system() == 'Linux': + archive_file('headless_shell') +elif platform.system() == 'Windows': + archive_file('headless_shell.exe') + archive_file('dbghelp.dll') + archive_file('icudtl.dat') + archive_file('natives_blob.bin') + archive_file('snapshot_blob.bin') +elif platform.system() == 'Darwin': + archive_file('headless_shell') + archive_file('natives_blob.bin') + archive_file('snapshot_blob.bin') + archive_file('Helpers/crashpad_handler') + +archive.close() + +print('Creating ' + md5_filename) +with open (md5_filename, 'w') as f: + f.write(md5_file(zip_filename)) diff --git a/x-pack/build_chromium/build_util.py b/x-pack/build_chromium/build_util.py new file mode 100644 index 00000000000000..00ca13d32dba80 --- /dev/null +++ b/x-pack/build_chromium/build_util.py @@ -0,0 +1,33 @@ +import os, hashlib + +# This file contains various utility functions used by the init and build scripts + +# Compute the root build and script directory as relative to this file +script_dir = os.path.realpath(os.path.join(__file__, '..')) +root_dir = os.path.realpath(os.path.join(script_dir, '..')) + +def runcmd(cmd): + """Executes a string command in the shell""" + print(cmd) + result = os.system(cmd) + if result != 0: + raise Exception(cmd + ' returned ' + str(result)) + +def mkdir(dir): + """Makes a directory if it doesn't exist""" + if not os.path.exists(dir): + print('mkdir -p ' + dir) + return os.makedirs(dir) + +def md5_file(filename): + """Builds a hex md5 hash of the given file""" + md5 = hashlib.md5() + with open(filename, 'rb') as f: + for chunk in iter(lambda: f.read(128 * md5.block_size), b''): + md5.update(chunk) + return md5.hexdigest() + +def configure_environment(): + """Configures temporary environment variables required by Chromium's build""" + depot_tools_path = os.path.join(root_dir, 'depot_tools') + os.environ['PATH'] = depot_tools_path + os.pathsep + os.environ['PATH'] diff --git a/x-pack/build_chromium/cli.js b/x-pack/build_chromium/cli.js deleted file mode 100644 index d0f0f98602fa2d..00000000000000 --- a/x-pack/build_chromium/cli.js +++ /dev/null @@ -1,25 +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 path from 'path'; -import { Command } from 'commander'; - -import { build } from './build'; - -const cmd = new Command('node scripts/build_chromium'); -cmd.option('--workspace [path]', 'working directory for building chromium', path.join(__dirname, '.workspace')) - .option('--git-sha [sha]', 'chromium src git SHA to checkout', '503a3e48dffe2d5bcbacef72d33b6e1801d061a2') - .parse(process.argv); - -(async function () { - try { - await build(cmd); - } - catch (err) { - console.error(err.stack); - process.exit(1); - } -}()); diff --git a/x-pack/build_chromium/create_zip.js b/x-pack/build_chromium/create_zip.js deleted file mode 100644 index 3df866cbb7795f..00000000000000 --- a/x-pack/build_chromium/create_zip.js +++ /dev/null @@ -1,25 +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 path from 'path'; -import rename from 'gulp-rename'; -import vfs from 'vinyl-fs'; -import zip from 'gulp-zip'; - -// we create the zip, but we want all the files to be in a folder, the zipDirectoryName, -// so we have to rename them as such -export function createZip(dir, files, zipDirectoryName, zipPath, zipFilename) { - return new Promise(function (resolve, reject) { - vfs.src(files, { cwd: dir, base: dir }) - .pipe(rename(function (filePath) { - filePath.dirname = path.join(zipDirectoryName, filePath.dirname); - })) - .pipe(zip(zipFilename)) - .pipe(vfs.dest(zipPath)) - .on('end', resolve) - .on('error', reject); - }); -} \ No newline at end of file diff --git a/x-pack/build_chromium/darwin.args.gn b/x-pack/build_chromium/darwin/args.gn similarity index 70% rename from x-pack/build_chromium/darwin.args.gn rename to x-pack/build_chromium/darwin/args.gn index afc49a345069a5..04737b9e644bbb 100644 --- a/x-pack/build_chromium/darwin.args.gn +++ b/x-pack/build_chromium/darwin/args.gn @@ -1,4 +1,4 @@ -# This based on the //build/headless.gn, but modified to work with OSX. +# Based on //build/headless.gn # Embed resource.pak into binary to simplify deployment. headless_use_embedded_resources = true @@ -7,13 +7,17 @@ headless_use_embedded_resources = true # into binary. icu_use_data_file = false +# Use embedded data instead external files for headless in order +# to simplify deployment. +v8_use_external_startup_data = false + enable_nacl = false enable_print_preview = false +enable_basic_printing = false enable_remoting = false use_alsa = false -use_ash = false +use_cups = false use_dbus = false -use_gconf = false use_gio = false use_kerberos = false use_libpci = false diff --git a/x-pack/build_chromium/darwin/init.sh b/x-pack/build_chromium/darwin/init.sh new file mode 100755 index 00000000000000..9ceffe65a2e5f8 --- /dev/null +++ b/x-pack/build_chromium/darwin/init.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Launch the cross-platform init script using a relative path +# from this script's location. +python "`dirname "$0"`/../init.py" diff --git a/x-pack/build_chromium/init.py b/x-pack/build_chromium/init.py new file mode 100644 index 00000000000000..a3c5f8dc16fb75 --- /dev/null +++ b/x-pack/build_chromium/init.py @@ -0,0 +1,32 @@ +import os, platform +from build_util import runcmd, mkdir, md5_file, root_dir, configure_environment + +# This is a cross-platform initialization script which should only be run +# once per environment, and isn't intended to be run directly. You should +# run the appropriate platform init script (e.g. Linux/init.sh) which will +# call this once the platform-specific initialization has completed. + +os.chdir(root_dir) + +# Configure git +runcmd('git config --global core.autocrlf false') +runcmd('git config --global core.filemode false') +runcmd('git config --global branch.autosetuprebase always') + +# Grab Chromium's custom build tools, if they aren't already installed +# (On Windows, they are installed before this Python script is run) +if not os.path.isdir('depot_tools'): + runcmd('git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git') + +# Put depot_tools on the path so we can properly run the fetch command +configure_environment() + +# Fetch the Chromium source code +mkdir('chromium') +os.chdir('chromium') +runcmd('fetch chromium') + +# Build Linux deps +if platform.system() == 'Linux': + os.chdir('src') + runcmd('build/install-build-deps.sh') diff --git a/x-pack/build_chromium/linux.args.gn b/x-pack/build_chromium/linux/args.gn similarity index 100% rename from x-pack/build_chromium/linux.args.gn rename to x-pack/build_chromium/linux/args.gn diff --git a/x-pack/build_chromium/linux/init.sh b/x-pack/build_chromium/linux/init.sh new file mode 100755 index 00000000000000..e259ebded12a18 --- /dev/null +++ b/x-pack/build_chromium/linux/init.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Initializes a Linux environment. This need only be done once per +# machine. The OS needs to be a flavor that supports apt get, such as Ubuntu. + +if ! [ -x "$(command -v python)" ]; then + echo "Installing Python" + sudo apt-get --assume-yes install python +fi + +# Launch the cross-platform init script using a relative path +# from this script's location. +python "`dirname "$0"`/../init.py" diff --git a/x-pack/build_chromium/platform_archives.js b/x-pack/build_chromium/platform_archives.js deleted file mode 100644 index ea99363d4ce3f0..00000000000000 --- a/x-pack/build_chromium/platform_archives.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export const platformArchives = { - darwin: { - directoryName: 'headless_shell-darwin', - files: [ - 'headless_shell', - 'natives_blob.bin', - 'snapshot_blob.bin', - 'Helpers/crashpad_handler' - ] - }, - linux: { - directoryName: 'headless_shell-linux', - files: [ - 'headless_shell' - ] - }, - win32: { - directoryName: 'headless_shell-win32', - files: [ - 'dbghelp.dll', - 'headless_shell.exe', - 'icudtl.dat', - 'natives_blob.bin', - 'snapshot_blob.bin', - ] - } -}; \ No newline at end of file diff --git a/x-pack/build_chromium/win32.args.gn b/x-pack/build_chromium/windows/args.gn similarity index 67% rename from x-pack/build_chromium/win32.args.gn rename to x-pack/build_chromium/windows/args.gn index 3b912e6b335152..d0c4e54f142b92 100644 --- a/x-pack/build_chromium/win32.args.gn +++ b/x-pack/build_chromium/windows/args.gn @@ -1,16 +1,19 @@ -# This based on the //build/headless.gn, but modified to work with Windows. +# Based on //build/headless.gn # Embed resource.pak into binary to simplify deployment. headless_use_embedded_resources = true +# Use embedded data instead external files for headless in order +# to simplify deployment. +v8_use_external_startup_data = false + enable_nacl = false enable_print_preview = false +enable_basic_printing = false enable_remoting = false use_alsa = false -use_ash = false use_cups = false use_dbus = false -use_gconf = false use_gio = false use_libpci = false use_pulseaudio = false diff --git a/x-pack/build_chromium/windows/init.bat b/x-pack/build_chromium/windows/init.bat new file mode 100644 index 00000000000000..0775fe113773a8 --- /dev/null +++ b/x-pack/build_chromium/windows/init.bat @@ -0,0 +1,31 @@ +: This only needs to be run once per environment to set it up. +: This requires a GUI, as the VS installation is graphical. + +@echo off + +: Install Visual Studio (this requires user interaction, and takes quite a while) +: Most of the subsequent commands can be run in parallel with this (downloading, unzipping, +: grabbing the source, etc). This must be completed before building, though. +@echo "Installing Visual Studio" + +powershell -command "& {iwr -outf c:\chromium\install_vs.exe https://download.visualstudio.microsoft.com/download/pr/f9c35424-ffad-4b44-bb8f-d4e3968e90ce/f75403c967456e32e758ef558957f345/vs_community.exe}" + +install_vs.exe --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended + +: Install Chromium's custom build tools +@echo "Installing Chromium build tools" + +powershell -command "& {iwr -outf %~dp0../../depot_tools.zip https://storage.googleapis.com/chrome-infra/depot_tools.zip}" +powershell -command "& {Expand-Archive %~dp0../../depot_tools.zip -DestinationPath %~dp0../../depot_tools}" + +: Set the environment variables required by depot_tools +@echo "When Visual Studio is installed, you need to enable the Windows SDK in Control Panel. After taht, press here to continue initialization" + +pause + +SETX PATH "%~dp0..\..\depot_tools;%path%" +SETX DEPOT_TOOLS_WIN_TOOLCHAIN 0 + +call gclient + +python %~dp0../init.py diff --git a/x-pack/package.json b/x-pack/package.json index edb4d4c5313fdf..17cef7c7d79bab 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -59,7 +59,8 @@ "mustache": "^2.3.0", "mutation-observer": "^1.0.3", "node-fetch": "^2.1.2", - "pdf-image": "1.1.0", + "pdf-image": "2.0.0", + "pdfjs-dist": "^2.0.489", "pixelmatch": "4.0.2", "proxyquire": "1.7.11", "react-test-renderer": "^16.2.0", @@ -98,7 +99,6 @@ "bluebird": "3.1.1", "boom": "3.1.1", "brace": "0.11.1", - "chrome-remote-interface": "0.24.2", "classnames": "2.2.5", "concat-stream": "1.5.1", "d3": "3.5.6", @@ -135,6 +135,7 @@ "polished": "^1.9.2", "prop-types": "^15.6.0", "puid": "1.0.5", + "puppeteer-core": "^1.7.0", "react": "^16.3.0", "react-clipboard.js": "^1.1.2", "react-dom": "^16.3.0", @@ -169,4 +170,4 @@ "engines": { "yarn": "^1.6.0" } -} +} \ No newline at end of file diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/server/lib/screenshots.js b/x-pack/plugins/reporting/export_types/printable_pdf/server/lib/screenshots.js index b22d2dc1ce6de9..0845ecad656643 100644 --- a/x-pack/plugins/reporting/export_types/printable_pdf/server/lib/screenshots.js +++ b/x-pack/plugins/reporting/export_types/printable_pdf/server/lib/screenshots.js @@ -6,9 +6,7 @@ import * as Rx from 'rxjs'; import { first, tap, mergeMap } from 'rxjs/operators'; -import path from 'path'; import fs from 'fs'; -import moment from 'moment'; import getPort from 'get-port'; import { promisify } from 'bluebird'; import { LevelLogger } from '../../../../server/lib/level_logger'; @@ -24,8 +22,6 @@ export function screenshotsObservableFactory(server) { const browserDriverFactory = server.plugins.reporting.browserDriverFactory; const captureConfig = config.get('xpack.reporting.capture'); - const dataDirectory = config.get('path.data'); - const asyncDurationLogger = async (description, promise) => { const start = new Date(); const result = await promise; @@ -33,16 +29,6 @@ export function screenshotsObservableFactory(server) { return result; }; - const startRecording = (browser) => { - if (captureConfig.record) { - if (!browser.record) { - throw new Error('Unable to record capture with current browser'); - } - - browser.record(path.join(dataDirectory, `recording-${moment().utc().format().replace(/:/g, '_')}`)); - } - }; - const openUrl = async (browser, url, headers) => { const waitForSelector = '.application'; @@ -256,7 +242,6 @@ export function screenshotsObservableFactory(server) { const screenshot$ = driver$.pipe( - tap(browser => startRecording(browser)), tap(() => logger.debug(`opening ${url}`)), mergeMap( browser => openUrl(browser, url, headers), @@ -280,20 +265,20 @@ export function screenshotsObservableFactory(server) { browser => getNumberOfItems(browser, layout), (browser, itemsCount) => ({ browser, itemsCount }) ), + tap(() => logger.debug('setting viewport')), + mergeMap( + ({ browser, itemsCount }) => setViewport(browser, itemsCount, layout), + ({ browser, itemsCount }) => ({ browser, itemsCount }), + ), tap(({ itemsCount }) => logger.debug(`waiting for ${itemsCount} to be in the DOM`)), mergeMap( ({ browser, itemsCount }) => waitForElementsToBeInDOM(browser, itemsCount, layout), ({ browser, itemsCount }) => ({ browser, itemsCount }) ), - tap(() => logger.debug('setting viewport')), - mergeMap( - ({ browser, itemsCount }) => setViewport(browser, itemsCount, layout), - ({ browser }) => browser - ), tap(() => logger.debug('positioning elements')), mergeMap( - browser => positionElements(browser, layout), - browser => browser + ({ browser }) => positionElements(browser, layout), + ({ browser }) => browser ), tap(() => logger.debug('waiting for rendering to complete')), mergeMap( diff --git a/x-pack/plugins/reporting/index.js b/x-pack/plugins/reporting/index.js index f2708f45c0d610..a00b2fcbc718af 100644 --- a/x-pack/plugins/reporting/index.js +++ b/x-pack/plugins/reporting/index.js @@ -37,7 +37,7 @@ export const reporting = (kibana) => { 'plugins/reporting/controls/visualize', 'plugins/reporting/controls/dashboard', ], - hacks: [ 'plugins/reporting/hacks/job_completion_notifier'], + hacks: ['plugins/reporting/hacks/job_completion_notifier'], home: ['plugins/reporting/register_feature'], managementSections: ['plugins/reporting/views/management'], injectDefaultVars(server, options) { @@ -77,7 +77,6 @@ export const reporting = (kibana) => { timeout: Joi.number().integer().default(120000), }).default(), capture: Joi.object({ - record: Joi.boolean().default(false), zoom: Joi.number().integer().default(2), viewport: Joi.object({ width: Joi.number().integer().default(1950), diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/ignore_ssl_errors.js b/x-pack/plugins/reporting/server/browsers/chromium/driver/ignore_ssl_errors.js deleted file mode 100644 index 5c9d7dd9303f55..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/ignore_ssl_errors.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export async function ignoreSSLErrorsBehavior(Security) { - await Security.enable(); - await Security.setOverrideCertificateErrors({ override: true }); - Security.certificateError(({ eventId }) => { - Security.handleCertificateError({ eventId, action: 'continue' }); - }); -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/index.js b/x-pack/plugins/reporting/server/browsers/chromium/driver/index.js index b62dd313fe4021..1f14532e804482 100644 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/index.js +++ b/x-pack/plugins/reporting/server/browsers/chromium/driver/index.js @@ -4,79 +4,30 @@ * you may not use this file except in compliance with the Elastic License. */ -import fs from 'fs'; -import path from 'path'; -import moment from 'moment'; -import { promisify, delay } from 'bluebird'; -import { transformFn } from './transform_fn'; -import { ignoreSSLErrorsBehavior } from './ignore_ssl_errors'; -import { screenshotStitcher, CapturePngSizeError } from './screenshot_stitcher'; - export class HeadlessChromiumDriver { - constructor(client, { maxScreenshotDimension, logger }) { - this._client = client; + constructor(page, { maxScreenshotDimension, logger }) { + this._page = page; this._maxScreenshotDimension = maxScreenshotDimension; this._waitForDelayMs = 100; this._zoom = 1; this._logger = logger; } - async evaluate({ fn, args = [], awaitPromise = false, returnByValue = false }) { - const { Runtime } = this._client; - - const serializedArgs = args.map(arg => JSON.stringify(arg)).join(','); - const expression = `(${transformFn(fn)})(${serializedArgs})`; - const result = await Runtime.evaluate({ expression, awaitPromise, returnByValue }); - return result.result.value; - } - async open(url, { headers, waitForSelector }) { this._logger.debug(`HeadlessChromiumDriver:opening url ${url}`); - const { Network, Page } = this._client; - await Promise.all([ - Network.enable(), - Page.enable(), - ]); - await ignoreSSLErrorsBehavior(this._client.Security); - await Network.setExtraHTTPHeaders({ headers }); - await Page.navigate({ url }); - await Page.loadEventFired(); - const { frameTree } = await Page.getResourceTree(); - if (frameTree.frame.unreachableUrl) { - throw new Error('URL open failed. Is the server running?'); - } - this.documentNode = await this._client.DOM.getDocument(); - await this.waitForSelector(waitForSelector); - } - - async record(recordPath) { - const { Page } = this._client; + await this._page.setExtraHTTPHeaders(headers); + await this._page.goto(url, { waitUntil: 'networkidle0' }); - await promisify(fs.mkdir, fs)(recordPath); - await Page.startScreencast(); - - Page.screencastFrame(async ({ data, sessionId }) => { - await this._writeData(path.join(recordPath, `${moment().utc().format('HH_mm_ss_SSS')}.png`), data); - await Page.screencastFrameAck({ sessionId }); - }); + this.documentNode = await this._page.evaluateHandle(() => document); + await this._page.waitFor(waitForSelector); } async screenshot(elementPosition = null) { - const { Page } = this._client; - - let outputClip; - if (!elementPosition) { - const { layoutViewport } = await Page.getLayoutMetrics(); - outputClip = { - x: layoutViewport.pageX, - y: layoutViewport.pageY, - width: layoutViewport.clientWidth, - height: layoutViewport.clientHeight, - }; - } else { + let clip; + if (elementPosition) { const { boundingClientRect, scroll = { x: 0, y: 0 } } = elementPosition; - outputClip = { + clip = { x: boundingClientRect.left + scroll.x, y: boundingClientRect.top + scroll.y, height: boundingClientRect.height, @@ -84,69 +35,44 @@ export class HeadlessChromiumDriver { }; } - // Wrapping screenshotStitcher function call in a retry because of this bug: - // https://github.com/elastic/kibana/issues/19563. The reason was never found - it only appeared on ci and - // debug logic right after Page.captureScreenshot to ensure the correct size made the bug disappear. - let retryCount = 0; - const MAX_RETRIES = 3; + const screenshot = await this._page.screenshot({ + encoding: 'base64', + clip, + }); + + return screenshot; + } + + async evaluate({ fn, args = [] }) { + const result = await this._page.evaluate(fn, ...args); + return result; + } + + waitForSelector(selector) { + return this._page.waitFor(selector); + } + + async waitFor({ fn, args, toEqual }) { while (true) { - try { - return await screenshotStitcher(outputClip, this._zoom, this._maxScreenshotDimension, async screenshotClip => { - const { data } = await Page.captureScreenshot({ - clip: { - ...screenshotClip, - scale: 1 - } - }); - this._logger.debug(`Captured screenshot clip ${JSON.stringify(screenshotClip)}`); - return data; - }, this._logger); - } catch (error) { - const isCapturePngSizeError = error instanceof CapturePngSizeError; - if (!isCapturePngSizeError || retryCount === MAX_RETRIES) { - throw error; - } else { - this._logger.error(error.message); - this._logger.error('Trying again...'); - retryCount++; - } + const result = await this.evaluate({ fn, args }); + if (result === toEqual) { + return; } - } - } - async _writeData(writePath, base64EncodedData) { - const buffer = Buffer.from(base64EncodedData, 'base64'); - await promisify(fs.writeFile, fs)(writePath, buffer); + await new Promise(r => setTimeout(r, this._waitForDelayMs)); + } } async setViewport({ width, height, zoom }) { this._logger.debug(`Setting viewport to width: ${width}, height: ${height}, zoom: ${zoom}`); - const { Emulation } = this._client; - await Emulation.setDeviceMetricsOverride({ + await this._page.setViewport({ width: Math.floor(width / zoom), height: Math.floor(height / zoom), deviceScaleFactor: zoom, - mobile: false, + isMobile: false, }); this._zoom = zoom; } - - async waitFor({ fn, args, toEqual }) { - while ((await this.evaluate({ fn, args })) !== toEqual) { - await delay(this._waitForDelayMs); - } - } - - async waitForSelector(selector) { - while (true) { - const { nodeId } = await this._client.DOM.querySelector({ nodeId: this.documentNode.root.nodeId, selector }); - if (nodeId) { - break; - } - - await delay(this._waitForDelayMs); - } - } } diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/combine.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/combine.ts deleted file mode 100644 index cc901ab72de1d2..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/combine.ts +++ /dev/null @@ -1,115 +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. - */ - -// No types found for this package. May want to investigate an alternative with types. -// @ts-ignore: implicit any for JS file -import $streamToObservable from '@samverschueren/stream-to-observable'; -import { PNG } from 'pngjs'; -import * as Rx from 'rxjs'; -import { ObservableInput } from 'rxjs'; -import { map, mergeMap, reduce, switchMap, tap, toArray } from 'rxjs/operators'; -import { Logger, Screenshot, Size } from './types'; - -export class CapturePngSizeError extends Error { - constructor( - actualSize: { width: number; height: number }, - expectedSize: { width: number; height: number } - ) { - super(); - this.message = - `Capture PNG size error. Please visit https://github.com/elastic/kibana/issues/19563 to report this error. ` + - `Screenshot captured of size ${actualSize.width}x${ - actualSize.height - } was not of expected size ${expectedSize.width}x${expectedSize.height}`; - } -} - -// if we're only given one screenshot, and it matches the given size -// we're going to skip the combination and just use it -const canUseFirstScreenshot = ( - screenshots: Screenshot[], - size: { width: number; height: number } -) => { - if (screenshots.length !== 1) { - return false; - } - - const firstScreenshot = screenshots[0]; - return ( - firstScreenshot.rectangle.width === size.width && - firstScreenshot.rectangle.height === size.height - ); -}; - -/** - * Combines the screenshot clips into a single screenshot of size `outputSize`. - * @param screenshots - Array of screenshots to combine - * @param outputSize - Final output size that the screenshots should match up with - * @param logger - logger for extra debug output - */ -export function $combine( - screenshots: Screenshot[], - outputSize: Size, - logger: Logger -): Rx.Observable { - logger.debug( - `Combining screenshot clips into final, scaled output dimension of ${JSON.stringify( - outputSize - )}` - ); - - if (screenshots.length === 0) { - return Rx.throwError('Unable to combine 0 screenshots'); - } - - if (canUseFirstScreenshot(screenshots, outputSize)) { - return Rx.of(screenshots[0].data); - } - - // Turn the screenshot data into actual PNGs - const pngs$ = Rx.from(screenshots).pipe( - mergeMap( - (screenshot: Screenshot): ObservableInput => { - const png = new PNG(); - const buffer = Buffer.from(screenshot.data, 'base64'); - const parseAsObservable = Rx.bindNodeCallback(png.parse.bind(png)); - return parseAsObservable(buffer); - }, - (screenshot: Screenshot, png: PNG) => { - if ( - png.width !== screenshot.rectangle.width || - png.height !== screenshot.rectangle.height - ) { - const error = new CapturePngSizeError(png, screenshot.rectangle); - logger.error(error.message); - throw error; - } - return { screenshot, png }; - } - ) - ); - - const output$ = pngs$.pipe( - reduce((output: PNG, input: { screenshot: Screenshot; png: PNG }) => { - const { png, screenshot } = input; - // Spitting out a lot of output to help debug https://github.com/elastic/kibana/issues/19563. Once that is - // fixed, this should probably get pared down. - logger.debug(`Output dimensions is ${JSON.stringify(outputSize)}`); - logger.debug(`Input png w: ${png.width} and h: ${png.height}`); - logger.debug(`Creating output png with ${JSON.stringify(screenshot.rectangle)}`); - const { rectangle } = screenshot; - png.bitblt(output, 0, 0, rectangle.width, rectangle.height, rectangle.x, rectangle.y); - return output; - }, new PNG({ width: outputSize.width, height: outputSize.height })) - ); - - return output$.pipe( - tap(png => png.pack()), - switchMap($streamToObservable), - toArray(), - map((chunks: Buffer[]) => Buffer.concat(chunks).toString('base64')) - ); -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x1-checkerboard.png b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x1-checkerboard.png deleted file mode 100644 index 2a993e7799c46a68a9f667ae22338800cc22badb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-Y!3HG1DAjj?1Uy|FLn;{GNYz~e@_0eKMj9!f*@XUN>b9V f^9(FLJOK<0d>xFO!X9T>fRYTJu6{1-oD!MMj9!;vin~4}KOO nAD{n{GiS{B_y6zj>5L3vsvQ5BuEk~pl`wd^`njxgN@xNAu>BcH diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x2-white.png b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/2x2-white.png deleted file mode 100644 index 03f7e3707168ce260617403a4c951189b1be4350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`1|*BN@v4A0o-U3d6^w7B>Mj9!{2*TPAAS}d ehXY3#SQ%`8urP%7ZP*NyV(@hJb6Mw<&;$UapA#hj diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/4x4-checkerboard.png b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/4x4-checkerboard.png deleted file mode 100644 index d6eedad24af771ebaccaceb2e6650278f4fbc0e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 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 diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/single-white-pixel.png b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/fixtures/single-white-pixel.png deleted file mode 100644 index ff3dd16fd7085732bbcd491699e069b7876a6bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blCQlc~kP5~(QgxSrJWdcV`3FA> Z1Ltq%zbg&xUjqdhJYD@<);T3K0RThb5%mB7 diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.test.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.test.ts deleted file mode 100644 index 89d688b43822e7..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { toArray } from 'rxjs/operators'; -import { $getClips } from './get_clips'; -import { Rectangle } from './types'; - -function getClipsTest( - description: string, - input: { rectangle: Rectangle; max: number }, - expectedClips: { clips: Rectangle[] } -) { - test(description, async () => { - const clips = await $getClips(input.rectangle, input.max) - .pipe(toArray()) - .toPromise(); - expect(clips.length).toBe(expectedClips.clips.length); - for (let i = 0; i < clips.length; ++i) { - expect(clips[i]).toEqual(expectedClips.clips[i]); - } - }); -} - -getClipsTest( - `creates one rect if 0, 0`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 0, width: 0 }, - }, - { - clips: [{ x: 0, y: 0, height: 0, width: 0 }], - } -); - -getClipsTest( - `creates one rect if smaller than max`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 99, width: 99 }, - }, - { - clips: [{ x: 0, y: 0, height: 99, width: 99 }], - } -); - -getClipsTest( - `create one rect if equal to max`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 100, width: 100 }, - }, - { - clips: [{ x: 0, y: 0, height: 100, width: 100 }], - } -); - -getClipsTest( - `creates two rects if width is 1.5 * max`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 100, width: 150 }, - }, - { - clips: [{ x: 0, y: 0, height: 100, width: 100 }, { x: 100, y: 0, height: 100, width: 50 }], - } -); - -getClipsTest( - `creates two rects if height is 1.5 * max`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 150, width: 100 }, - }, - { - clips: [{ x: 0, y: 0, height: 100, width: 100 }, { x: 0, y: 100, height: 50, width: 100 }], - } -); - -getClipsTest( - `created four rects if height and width is 1.5 * max`, - { - max: 100, - rectangle: { x: 0, y: 0, height: 150, width: 150 }, - }, - { - clips: [ - { x: 0, y: 0, height: 100, width: 100 }, - { x: 100, y: 0, height: 100, width: 50 }, - { x: 0, y: 100, height: 50, width: 100 }, - { x: 100, y: 100, height: 50, width: 50 }, - ], - } -); - -getClipsTest( - `creates one rect if height and width is equal to max and theres a y equal to the max`, - { - max: 100, - rectangle: { x: 0, y: 100, height: 100, width: 100 }, - }, - { - clips: [{ x: 0, y: 100, height: 100, width: 100 }], - } -); diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.ts deleted file mode 100644 index 905690ac14eeba..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/get_clips.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import * as Rx from 'rxjs'; -import { Rectangle } from './types'; - -/** - * Takes one large rectangle and breaks it down into an array of smaller rectangles, - * that if stitched together would create the original rectangle. - * @param largeRectangle - A big rectangle that might be broken down into smaller rectangles - * @param max - Maximum width or height any single clip should have - */ -export function $getClips(largeRectangle: Rectangle, max: number): Rx.Observable { - const rectanglesGenerator = function*(): IterableIterator { - const columns = Math.ceil(largeRectangle.width / max) || 1; - const rows = Math.ceil(largeRectangle.height / max) || 1; - - for (let row = 0; row < rows; ++row) { - for (let column = 0; column < columns; ++column) { - yield { - height: row === rows - 1 ? largeRectangle.height - row * max : max, - width: column === columns - 1 ? largeRectangle.width - column * max : max, - x: column * max + largeRectangle.x, - y: row * max + largeRectangle.y, - }; - } - } - }; - - return Rx.from(rectanglesGenerator()); -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.test.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.test.ts deleted file mode 100644 index b519a0f6363a51..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.test.ts +++ /dev/null @@ -1,188 +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 { promisify } from 'bluebird'; -import fs from 'fs'; -import path from 'path'; - -import { screenshotStitcher } from './index'; - -const loggerMock = { - debug: () => { - return; - }, - error: () => { - return; - }, - warning: () => { - return; - }, -}; - -const fsp = { - readFile: promisify(fs.readFile), -}; - -const readPngFixture = async (filename: string) => { - const buffer = await fsp.readFile(path.join(__dirname, 'fixtures', filename)); - return buffer.toString('base64'); -}; - -const getSingleWhitePixel = () => { - return readPngFixture('single-white-pixel.png'); -}; - -const getSingleBlackPixel = () => { - return readPngFixture('single-black-pixel.png'); -}; - -const get2x1Checkerboard = () => { - return readPngFixture('2x1-checkerboard.png'); -}; - -const get2x2White = () => { - return readPngFixture('2x2-white.png'); -}; - -const get2x2Black = () => { - return readPngFixture('2x2-black.png'); -}; - -const get4x4Checkerboard = () => { - return readPngFixture('4x4-checkerboard.png'); -}; - -test(`single screenshot`, async () => { - const clip = { - height: 1, - width: 1, - x: 0, - y: 0, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(getSingleWhitePixel()); - const data = await screenshotStitcher(clip, 1, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(1); - expect(fn.mock.calls[0][0]).toEqual({ x: 0, y: 0, width: 1, height: 1 }); - - const expectedData = await getSingleWhitePixel(); - expect(data).toEqual(expectedData); -}); - -test(`single screenshot, when zoom creates partial pixel we round up`, async () => { - const clip = { - height: 1, - width: 1, - x: 0, - y: 0, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(get2x2White()); - const data = await screenshotStitcher(clip, 2, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(1); - expect(fn.mock.calls[0][0]).toEqual({ x: 0, y: 0, width: 1, height: 1 }); - - const expectedData = await get2x2White(); - expect(data).toEqual(expectedData); -}); - -test(`two screenshots, no zoom`, async () => { - const clip = { - height: 1, - width: 2, - x: 0, - y: 0, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(getSingleWhitePixel()); - fn.mockReturnValueOnce(getSingleBlackPixel()); - const data = await screenshotStitcher(clip, 1, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(2); - expect(fn.mock.calls[0][0]).toEqual({ x: 0, y: 0, width: 1, height: 1 }); - expect(fn.mock.calls[1][0]).toEqual({ x: 1, y: 0, width: 1, height: 1 }); - - const expectedData = await get2x1Checkerboard(); - expect(data).toEqual(expectedData); -}); - -test(`two screenshots, no zoom`, async () => { - const clip = { - height: 1, - width: 2, - x: 0, - y: 0, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(getSingleWhitePixel()); - fn.mockReturnValueOnce(getSingleBlackPixel()); - const data = await screenshotStitcher(clip, 1, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(2); - expect(fn.mock.calls[0][0]).toEqual({ x: 0, y: 0, width: 1, height: 1 }); - expect(fn.mock.calls[1][0]).toEqual({ x: 1, y: 0, width: 1, height: 1 }); - - const expectedData = await get2x1Checkerboard(); - expect(data).toEqual(expectedData); -}); - -test(`four screenshots, zoom`, async () => { - const clip = { - height: 2, - width: 2, - x: 0, - y: 0, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(get2x2White()); - fn.mockReturnValueOnce(get2x2Black()); - fn.mockReturnValueOnce(get2x2Black()); - fn.mockReturnValueOnce(get2x2White()); - - const data = await screenshotStitcher(clip, 2, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(4); - expect(fn.mock.calls[0][0]).toEqual({ x: 0, y: 0, width: 1, height: 1 }); - expect(fn.mock.calls[1][0]).toEqual({ x: 1, y: 0, width: 1, height: 1 }); - expect(fn.mock.calls[2][0]).toEqual({ x: 0, y: 1, width: 1, height: 1 }); - expect(fn.mock.calls[3][0]).toEqual({ x: 1, y: 1, width: 1, height: 1 }); - - const expectedData = await get4x4Checkerboard(); - expect(data).toEqual(expectedData); -}); - -test(`four screenshots, zoom and offset`, async () => { - const clip = { - height: 2, - width: 2, - x: 1, - y: 1, - }; - - const fn = jest.fn(); - fn.mockReturnValueOnce(get2x2White()); - fn.mockReturnValueOnce(get2x2Black()); - fn.mockReturnValueOnce(get2x2Black()); - fn.mockReturnValueOnce(get2x2White()); - - const data = await screenshotStitcher(clip, 2, 1, fn, loggerMock); - - expect(fn.mock.calls.length).toBe(4); - expect(fn.mock.calls[0][0]).toEqual({ x: 1, y: 1, width: 1, height: 1 }); - expect(fn.mock.calls[1][0]).toEqual({ x: 2, y: 1, width: 1, height: 1 }); - expect(fn.mock.calls[2][0]).toEqual({ x: 1, y: 2, width: 1, height: 1 }); - expect(fn.mock.calls[3][0]).toEqual({ x: 2, y: 2, width: 1, height: 1 }); - - const expectedData = await get4x4Checkerboard(); - expect(data).toEqual(expectedData); -}); diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.ts deleted file mode 100644 index cb127cfd7f26f3..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { screenshotStitcher } from './screenshot_stitcher'; -export { CapturePngSizeError } from './combine'; diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/screenshot_stitcher.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/screenshot_stitcher.ts deleted file mode 100644 index 09c0d9e3bbf4d7..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/screenshot_stitcher.ts +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { map, mergeMap, switchMap, toArray } from 'rxjs/operators'; -import { $combine } from './combine'; -import { $getClips } from './get_clips'; -import { Logger, Rectangle, Screenshot } from './types'; - -const scaleRect = (rect: Rectangle, scale: number): Rectangle => { - return { - height: rect.height * scale, - width: rect.width * scale, - x: rect.x * scale, - y: rect.y * scale, - }; -}; - -/** - * Returns a stream of data that should be of the size outputClip.width * zoom x outputClip.height * zoom - * @param outputClip - The dimensions the final image should take. - * @param zoom - Determines the resolution want the final screenshot to take. - * @param maxDimensionPerClip - The maximimum dimension, in any direction (width or height) that we should allow per - * screenshot clip. If zoom is 10 and maxDimensionPerClip is anything less than or - * equal to 10, each clip taken, before being zoomed in, should be no bigger than 1 x 1. - * If zoom is 10 and maxDimensionPerClip is 20, then each clip taken before being zoomed in should be no bigger than 2 x 2. - * @param captureScreenshotFn - a function to take a screenshot from the page using the dimensions given. The data - * returned should have dimensions not of the clip passed in, but of the clip passed in multiplied by zoom. - * @param logger - */ -export async function screenshotStitcher( - outputClip: Rectangle, - zoom: number, - maxDimensionPerClip: number, - captureScreenshotFn: (rect: Rectangle) => Promise, - logger: Logger -): Promise { - // We have to divide the max by the zoom because we will be multiplying each clip's dimensions - // later by zoom, and we don't want those dimensions to end up larger than max. - const maxDimensionBeforeZoom = Math.ceil(maxDimensionPerClip / zoom); - const screenshotClips$ = $getClips(outputClip, maxDimensionBeforeZoom); - - const screenshots$ = screenshotClips$.pipe( - mergeMap(clip => captureScreenshotFn(clip), (clip, data) => ({ clip, data }), 1) - ); - - // when we take the screenshots we don't have to scale the rects - // but the PNGs don't know about the zoom, so we have to scale them - const screenshotPngRects$ = screenshots$.pipe( - map(({ data, clip }) => { - // At this point we don't care about the offset - the screenshots have been taken. - // We need to adjust the x & y values so they all are adjusted for the top-left most - // clip being at 0, 0. - const x = clip.x - outputClip.x; - const y = clip.y - outputClip.y; - - const scaledScreenshotRects = scaleRect( - { - height: clip.height, - width: clip.width, - x, - y, - }, - zoom - ); - return { - data, - rectangle: scaledScreenshotRects, - }; - }) - ); - - const scaledOutputRects = scaleRect(outputClip, zoom); - return screenshotPngRects$ - .pipe( - toArray(), - switchMap((screenshots: Screenshot[]) => - $combine( - screenshots, - { - height: scaledOutputRects.height, - width: scaledOutputRects.width, - }, - logger - ) - ) - ) - .toPromise(); -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/types.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/types.ts deleted file mode 100644 index d99a61a7a7c63f..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/screenshot_stitcher/types.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export interface Rectangle { - width: number; - height: number; - x: number; - y: number; -} - -export interface Size { - width: number; - height: number; -} - -export interface Screenshot { - data: string; - rectangle: Rectangle; -} - -export interface Logger { - debug: (message: string) => void; - error: (message: string) => void; - warning: (message: string) => void; -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/transform_fn.js b/x-pack/plugins/reporting/server/browsers/chromium/driver/transform_fn.js deleted file mode 100644 index 8a29b650ee986f..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver/transform_fn.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { transform as babelTransform } from 'babel-core'; -import { memoize } from 'lodash'; - -const safeWrap = (obj) => { - const code = obj.toString(); - return new Function(`return (${code}).apply(null, arguments);`); -}; - -const transform = (code) => { - const result = babelTransform(code, { - ast: false, - babelrc: false, - presets: [ - [ require.resolve('babel-preset-es2015'), { 'modules': false } ] - ] - }); - return result.code; -}; - -export const transformFn = memoize((fn) => { - const code = transform(safeWrap(fn)); - return safeWrap(code); -}); diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.js b/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.ts similarity index 83% rename from x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.js rename to x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.ts index b1bc09af0b6e93..18b43fa8cf1c02 100644 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.js +++ b/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/args.ts @@ -4,7 +4,25 @@ * you may not use this file except in compliance with the Elastic License. */ -export const args = ({ userDataDir, bridgePort, viewport, disableSandbox, proxyConfig, verboseLogging }) => { +interface Opts { + userDataDir: string; + viewport: { width: number; height: number }; + disableSandbox: boolean; + proxyConfig: { + enabled: boolean; + server: string; + bypass?: string[]; + }; + verboseLogging: boolean; +} + +export const args = ({ + userDataDir, + viewport, + disableSandbox, + proxyConfig, + verboseLogging, +}: Opts) => { const flags = [ // Disable built-in Google Translate service '--disable-translate', @@ -30,7 +48,6 @@ export const args = ({ userDataDir, bridgePort, viewport, disableSandbox, proxyC '--headless', '--hide-scrollbars', `--window-size=${Math.floor(viewport.width)},${Math.floor(viewport.height)}`, - `--remote-debugging-port=${bridgePort}`, ]; if (proxyConfig.enabled) { diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/ensure_chromium_is_listening.js b/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/ensure_chromium_is_listening.js deleted file mode 100644 index 1a54a9a740ac11..00000000000000 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/ensure_chromium_is_listening.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import http from 'http'; - - -// See https://github.com/elastic/kibana/issues/19351 for why this is necessary. Long story short, on certain -// linux platforms (fwiw, we have only experienced this on jenkins agents) the first bootup of chromium takes -// a long time doing something with fontconfig packages loading up a cache. The cdp command will timeout -// if we don't wait for this manually. Note that this may still timeout based on the value of -// xpack.reporting.queue.timeout. Subsequent runs should be fast because the cache will already be -// initialized. -/** - * - * @param {string} port - * @param {Object} logger - * @return {Promise} - */ -export async function ensureChromiumIsListening(port, logger) { - const options = { - port, - hostname: '127.0.0.1', - timeout: 120000, - path: '/json', - }; - - return new Promise((resolve, reject) => { - http.get( - options, - res => { - res.on('data', function (chunk) { - logger.debug(`Response from chromium: ${chunk}`); - }); - res.on('end', function () { - logger.debug(`Chromium response complete`); - resolve(); - }); - }) - .on('error', e => { - logger.error(`Ensure chromium is listening failed with error ${e.message}`); - reject(e); - }); - }); -} diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/index.js b/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/index.js index bddaf19e2e9e45..4d5137283ebbae 100644 --- a/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/index.js +++ b/x-pack/plugins/reporting/server/browsers/chromium/driver_factory/index.js @@ -6,15 +6,13 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; -import { spawn } from 'child_process'; +import puppeteer from 'puppeteer-core'; import rimraf from 'rimraf'; import * as Rx from 'rxjs'; -import { map, share, first, tap, mergeMap, filter, partition } from 'rxjs/operators'; -import cdp from 'chrome-remote-interface'; +import { map, share, mergeMap, filter, partition } from 'rxjs/operators'; import { HeadlessChromiumDriver } from '../driver'; import { args } from './args'; -import { safeChildProcess, exitCodeSuggestion } from '../../safe_child_process'; -import { ensureChromiumIsListening } from './ensure_chromium_is_listening'; +import { safeChildProcess } from '../../safe_child_process'; const compactWhitespace = (str) => { return str.replace(/\s+/, ' '); @@ -29,57 +27,61 @@ export class HeadlessChromiumDriverFactory { type = 'chromium'; - create({ bridgePort, viewport }) { + create({ viewport }) { return Rx.Observable.create(async observer => { const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'chromium-')); const chromiumArgs = args({ userDataDir, - bridgePort, viewport, verboseLogging: this.logger.isVerbose, disableSandbox: this.browserConfig.disableSandbox, proxyConfig: this.browserConfig.proxy, }); - this.logger.debug(`spawning chromium process at ${this.binaryPath} with arguments ${chromiumArgs}`); let chromium; + let page; try { - chromium = spawn(this.binaryPath, chromiumArgs); + chromium = await puppeteer.launch({ + userDataDir, + executablePath: this.binaryPath, + ignoreHTTPSErrors: true, + args: chromiumArgs, + }); + + page = await chromium.newPage(); } catch (err) { observer.error(new Error(`Caught error spawning Chromium`)); return; } - safeChildProcess(chromium, observer); + safeChildProcess({ + async kill() { + await chromium.close(); + } + }, observer); - const stderr$ = Rx.fromEvent(chromium.stderr, 'data').pipe( - map(line => line.toString()), + const stderr$ = Rx.fromEvent(page, 'console').pipe( + filter(line => line._type === 'error'), + map(line => line._text), share() ); - const [ consoleMessage$, message$ ] = stderr$.pipe( + const [consoleMessage$, message$] = stderr$.pipe( partition(msg => msg.match(/\[\d+\/\d+.\d+:\w+:CONSOLE\(\d+\)\]/)) ); - const driver$ = message$.pipe( - first(line => line.indexOf(`DevTools listening on ws://127.0.0.1:${bridgePort}`) >= 0), - tap(() => this.logger.debug('Ensure chromium is running and listening')), - mergeMap(() => ensureChromiumIsListening(bridgePort, this.logger)), - tap(() => this.logger.debug('Connecting chrome remote interface')), - mergeMap(() => cdp({ port: bridgePort, local: true })), - tap(() => this.logger.debug('Initializing chromium driver')), - map(client => new HeadlessChromiumDriver(client, { - maxScreenshotDimension: this.browserConfig.maxScreenshotDimension, - logger: this.logger - })) - ); + const driver$ = Rx.of(new HeadlessChromiumDriver(page, { + maxScreenshotDimension: this.browserConfig.maxScreenshotDimension, + logger: this.logger + })); - const processError$ = Rx.fromEvent(chromium, 'error').pipe( + const processError$ = Rx.fromEvent(page, 'error').pipe( + map((err) => this.logger.error(err)), mergeMap(() => Rx.throwError(new Error(`Unable to spawn Chromium`))), ); - const processExit$ = Rx.fromEvent(chromium, 'exit').pipe( - mergeMap(([code]) => Rx.throwError(new Error(`Chromium exited with code: ${code}. ${exitCodeSuggestion(code)}`))) + const processExit$ = Rx.fromEvent(chromium, 'disconnected').pipe( + mergeMap((err) => Rx.throwError(new Error(`Chromium exited with code: ${err}. ${JSON.stringify(err)}`))) ); const nssError$ = message$.pipe( diff --git a/x-pack/plugins/reporting/server/browsers/chromium/paths.js b/x-pack/plugins/reporting/server/browsers/chromium/paths.js index 136b87df4b4658..edfb6ed1f73321 100644 --- a/x-pack/plugins/reporting/server/browsers/chromium/paths.js +++ b/x-pack/plugins/reporting/server/browsers/chromium/paths.js @@ -11,18 +11,18 @@ export const paths = { baseUrl: 'https://s3.amazonaws.com/headless-shell/', packages: [{ platforms: ['darwin', 'freebsd', 'openbsd'], - archiveFilename: 'chromium-503a3e4-darwin.zip', - archiveChecksum: 'c1b530f99374e122c0bd7ba663867a95', + archiveFilename: 'chromium-4747cc2-darwin.zip', + archiveChecksum: '3f509e2fa994da3a1399d18d03b6eef7', binaryRelativePath: 'headless_shell-darwin/headless_shell', }, { platforms: ['linux'], - archiveFilename: 'chromium-503a3e4-linux.zip', - archiveChecksum: '9486d8eff9fc4f94c899aa72f5e59520', + archiveFilename: 'chromium-4747cc2-linux.zip', + archiveChecksum: '8f361042d0fc8a84d60cd01777ec260f', binaryRelativePath: 'headless_shell-linux/headless_shell' }, { platforms: ['win32'], - archiveFilename: 'chromium-503a3e4-win32.zip', - archiveChecksum: 'a71ce5565791767492f6d0fb4fe5360d', - binaryRelativePath: 'headless_shell-win32\\headless_shell.exe' + archiveFilename: 'chromium-4747cc2-windows.zip', + archiveChecksum: 'fac0967cd54bb2492a5a858fbefdf983', + binaryRelativePath: 'headless_shell-windows\\headless_shell.exe' }] }; diff --git a/x-pack/plugins/reporting/server/browsers/install.js b/x-pack/plugins/reporting/server/browsers/install.js index 8619206aa96602..239fa5bad77ab9 100644 --- a/x-pack/plugins/reporting/server/browsers/install.js +++ b/x-pack/plugins/reporting/server/browsers/install.js @@ -27,8 +27,9 @@ const fsp = { export async function installBrowser(logger, browserConfig, browserType, installsPath) { const browser = BROWSERS_BY_TYPE[browserType]; const pkg = browser.paths.packages.find(p => p.platforms.includes(process.platform)); + if (!pkg) { - throw new Error('Unsupported platform: platform'); + throw new Error(`Unsupported platform: ${JSON.stringify(browser, null, 2)}`); } const binaryPath = path.join(installsPath, pkg.binaryRelativePath); diff --git a/x-pack/scripts/build_chromium.js b/x-pack/scripts/build_chromium.js deleted file mode 100644 index d7ea1bb4994864..00000000000000 --- a/x-pack/scripts/build_chromium.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -require('@kbn/plugin-helpers').babelRegister(); -require('../build_chromium/cli'); diff --git a/x-pack/scripts/functional_tests.js b/x-pack/scripts/functional_tests.js index 73ec560acaf05c..e7e4579bbb2e57 100644 --- a/x-pack/scripts/functional_tests.js +++ b/x-pack/scripts/functional_tests.js @@ -6,10 +6,8 @@ require('@kbn/plugin-helpers').babelRegister(); require('@kbn/test').runTestsCli([ - // https://github.com/elastic/kibana/issues/19563 needs to be fixed and then these can get - // turned back on. A 3x retry loop did not prevent it from becoming flaky. - // require.resolve('../test/reporting/configs/chromium_api.js'), - // require.resolve('../test/reporting/configs/chromium_functional.js'), + require.resolve('../test/reporting/configs/chromium_api.js'), + require.resolve('../test/reporting/configs/chromium_functional.js'), require.resolve('../test/reporting/configs/phantom_api.js'), require.resolve('../test/reporting/configs/phantom_functional.js'), require.resolve('../test/functional/config.js'), diff --git a/x-pack/test/functional/page_objects/reporting_page.js b/x-pack/test/functional/page_objects/reporting_page.js index a89f4c51eb5e9e..4108668605f1e5 100644 --- a/x-pack/test/functional/page_objects/reporting_page.js +++ b/x-pack/test/functional/page_objects/reporting_page.js @@ -138,6 +138,11 @@ export function ReportingPageProvider({ getService, getPageObjects }) { await testSubjects.click('downloadCompletedReportButton', timeout); } + async clearToastNotifications() { + const toasts = await testSubjects.findAll('toastCloseButton'); + await Promise.all(toasts.map(t => t.click())); + } + async getUnsavedChangesWarningExists() { return await testSubjects.exists('unsavedChangesReportingWarning'); } diff --git a/x-pack/test/reporting/functional/lib/compare_pdfs.js b/x-pack/test/reporting/functional/lib/compare_pdfs.js index de2103d7db9b7c..dce750a4e0875e 100644 --- a/x-pack/test/reporting/functional/lib/compare_pdfs.js +++ b/x-pack/test/reporting/functional/lib/compare_pdfs.js @@ -12,9 +12,9 @@ import mkdirp from 'mkdirp'; import { PNG } from 'pngjs'; import { PDFImage } from 'pdf-image'; +import PDFJS from 'pdfjs-dist'; const mkdirAsync = promisify(mkdirp); -const writeFileAsync = promisify(fs.writeFile); function comparePngs(actualPath, expectedPath, diffPath, log) { log.debug(`comparePngs: ${actualPath} vs ${expectedPath}`); @@ -73,12 +73,14 @@ export async function checkIfPdfsMatch(actualPdfPath, baselinePdfPath, screensho // don't want to start causing failures for other devs working on OS's which are lacking snapshots. We have // mac and linux covered which is better than nothing for now. try { - await writeFileAsync(baselineCopyPath, fs.readFileSync(baselinePdfPath)); + log.debug(`writeFileSync: ${baselineCopyPath}`); + fs.writeFileSync(baselineCopyPath, fs.readFileSync(baselinePdfPath)); } catch (error) { log.error(`No baseline pdf found at ${baselinePdfPath}`); return 0; } - await writeFileAsync(actualCopyPath, fs.readFileSync(actualPdfPath)); + log.debug(`writeFileSync: ${actualCopyPath}`); + fs.writeFileSync(actualCopyPath, fs.readFileSync(actualPdfPath)); const convertOptions = { '-density': '300', @@ -86,39 +88,30 @@ export async function checkIfPdfsMatch(actualPdfPath, baselinePdfPath, screensho const actualPdfImage = new PDFImage(actualCopyPath, { convertOptions }); const expectedPdfImage = new PDFImage(baselineCopyPath, { convertOptions }); - let pageNum = 0; + log.debug(`Calculating numberOfPages`); + + const actualDoc = await PDFJS.getDocument(actualCopyPath); + const expectedDoc = await PDFJS.getDocument(baselineCopyPath); + const actualPages = actualDoc.numPages; + const expectedPages = expectedDoc.numPages; + + if (actualPages !== expectedPages) { + throw new Error( + `Expected ${expectedPages} pages but got ${actualPages} in PDFs expected: "${baselineCopyPath}" actual: "${actualCopyPath}".` + ); + } + let diffTotal = 0; - // Ran across an instance where the page conversion failed with `Failed to convert page to image` for no known - // reason. Seeing if a loop will resolve these flaky errors. - let failCount = 0; - while (true) { - let expectedPagePng; - let actualPagePng; - try { - log.debug(`Converting expected pdf page ${pageNum} to png`); - expectedPagePng = await expectedPdfImage.convertPage(pageNum); - log.debug(`Converting actual pdf page ${pageNum} to png`); - actualPagePng = await actualPdfImage.convertPage(pageNum); - } catch (e) { - log.error(`Error caught while converting pdf page ${pageNum} to png: ${e.message}`); - if (JSON.stringify(e).indexOf('Requested FirstPage is greater than the number of pages in the file') >= 0) { - break; - } else { - if (failCount < 3) { - log.error(`${failCount}: Will try conversion again...`); - failCount++; - continue; - } else { - log.error(`Failed ${failCount} times, throwing error`); - throw e; - } - } - } + for (let pageNum = 0; pageNum <= expectedPages; ++pageNum) { + log.debug(`Converting expected pdf page ${pageNum} to png`); + const expectedPagePng = await expectedPdfImage.convertPage(pageNum); + log.debug(`Converting actual pdf page ${pageNum} to png`); + const actualPagePng = await actualPdfImage.convertPage(pageNum); const diffPngPath = path.resolve(failureDirectoryPath, `${baselinePdfFileName}-${pageNum}.png`); diffTotal += await comparePngs(actualPagePng, expectedPagePng, diffPngPath, log); pageNum++; } + return diffTotal; } - diff --git a/x-pack/test/reporting/functional/reporting.js b/x-pack/test/reporting/functional/reporting.js index 16501ec701b03c..e550d370ba7f14 100644 --- a/x-pack/test/reporting/functional/reporting.js +++ b/x-pack/test/reporting/functional/reporting.js @@ -66,6 +66,8 @@ export default function ({ getService, getPageObjects }) { }; describe('Dashboard', () => { + beforeEach(() => PageObjects.reporting.clearToastNotifications()); + describe('Print PDF button', () => { it('is not available if new', async () => { await PageObjects.common.navigateToApp('dashboard'); diff --git a/x-pack/yarn.lock b/x-pack/yarn.lock index f98f7fd87ee1be..41adacfd61a70e 100644 --- a/x-pack/yarn.lock +++ b/x-pack/yarn.lock @@ -226,12 +226,22 @@ acorn@^5.0.0, acorn@^5.1.2: version "5.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + dependencies: + es6-promisify "^5.0.0" + agentkeepalive@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.4.1.tgz#aa95aebc3a749bca5ed53e3880a09f5235b48f0c" dependencies: humanize-ms "^1.2.1" +ajv-keywords@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -248,6 +258,15 @@ ajv@^5.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.1.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -487,10 +506,6 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -assertion-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1044,6 +1059,10 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + bl@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" @@ -1192,6 +1211,10 @@ buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + buffer@^3.0.1: version "3.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb" @@ -1300,13 +1323,6 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai@~1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-1.9.2.tgz#3f1a20f82b0b9d7437577d24d6f12b1a69d3b590" - dependencies: - assertion-error "1.0.0" - deep-eql "0.1.3" - chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1358,13 +1374,6 @@ chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chrome-remote-interface@0.24.2: - version "0.24.2" - resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.24.2.tgz#43a05440a1fa60b73769e72f3e7892ac11d66eba" - dependencies: - commander "2.1.x" - ws "2.0.x" - ci-info@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" @@ -1510,10 +1519,6 @@ commander@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" -commander@2.1.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" - commander@2.12.2, commander@^2.9.0: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -1552,6 +1557,15 @@ concat-stream@1.5.1: readable-stream "~2.0.0" typedarray "~0.0.5" +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + concat-stream@^1.4.7, concat-stream@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" @@ -1828,7 +1842,7 @@ debug@2.6.0: dependencies: ms "0.7.2" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -1858,12 +1872,6 @@ dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" -deep-eql@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" - dependencies: - type-detect "0.1.1" - deep-equal@^1.0.0, deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2091,6 +2099,10 @@ elasticsearch@^14.1.0: lodash.isempty "^4.4.0" lodash.trimend "^4.5.1" +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -2179,9 +2191,15 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es6-promise@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.0.1.tgz#ccc4963e679f0ca9fb187c777b9e583d3c7573c2" +es6-promise@^4.0.3, es6-promise@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + dependencies: + es6-promise "^4.0.3" escape-string-regexp@1.0.2: version "1.0.2" @@ -2413,6 +2431,15 @@ extract-zip@1.5.0: mkdirp "0.5.0" yauzl "2.4.1" +extract-zip@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2442,6 +2469,10 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3457,6 +3488,13 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -4370,6 +4408,10 @@ json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4388,7 +4430,7 @@ json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -json5@^0.5.1: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -4537,6 +4579,14 @@ load-json-file@^1.0.0, load-json-file@^1.1.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +loader-utils@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -4984,6 +5034,10 @@ mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mime@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -5226,6 +5280,10 @@ nise@^1.2.0: path-to-regexp "^1.7.0" text-encoding "^0.6.4" +node-ensure@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" + node-fetch@^1.0.1, node-fetch@^1.3.3: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -5747,12 +5805,18 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -pdf-image@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pdf-image/-/pdf-image-1.1.0.tgz#2ddc0397dcf0f2007e40519cdddd7ba64fa4d367" +pdf-image@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pdf-image/-/pdf-image-2.0.0.tgz#f134296876c3d5aacb6bb5805ad15d0a46775fd5" + dependencies: + es6-promise "~4.2.4" + +pdfjs-dist@^2.0.489: + version "2.0.489" + resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.0.489.tgz#63e54b292a86790a454697eb44d4347b8fbfad27" dependencies: - chai "~1.9.2" - es6-promise "~2.0.0" + node-ensure "^0.0.0" + worker-loader "^1.1.1" pdfkit@^0.8.3: version "0.8.3" @@ -5948,6 +6012,10 @@ process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -5976,6 +6044,10 @@ prop-types@^15.6.1: loose-envify "^1.3.1" object-assign "^4.1.1" +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + proxyquire@1.7.11: version "1.7.11" resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-1.7.11.tgz#13b494eb1e71fb21cc3ebe3699e637d3bec1af9e" @@ -6042,6 +6114,19 @@ punycode@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" +puppeteer-core@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-1.7.0.tgz#c10f660983e9a4faacf6b8e50861c7739871c752" + dependencies: + debug "^3.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.0" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^5.1.1" + qs@^6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -6922,6 +7007,13 @@ sax@>=0.6.0, sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +schema-utils@^0.4.0: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + scroll-into-view@^1.3.0: version "1.9.1" resolved "https://registry.yarnpkg.com/scroll-into-view/-/scroll-into-view-1.9.1.tgz#90c3b338422f9fddaebad90e6954790940dc9c1e" @@ -7768,10 +7860,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -7809,10 +7897,6 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - unbzip2-stream@1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.0.9.tgz#9d107697a8d539d7bfdb9378a1cd832836bb7f8f" @@ -7877,6 +7961,12 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + urix@^0.1.0, urix@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -8153,6 +8243,13 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-loader@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-1.1.1.tgz#920d74ddac6816fc635392653ed8b4af1929fd92" + dependencies: + loader-utils "^1.0.0" + schema-utils "^0.4.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -8179,12 +8276,6 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@2.0.x: - version "2.0.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.0.3.tgz#532fd499c3f7d7d720e543f1f807106cfc57d9cb" - dependencies: - ultron "~1.1.0" - ws@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" @@ -8192,6 +8283,12 @@ ws@^4.1.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" +ws@^5.1.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + xml-crypto@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-0.10.1.tgz#f832f74ccf56f24afcae1163a1fcab44d96774a8" diff --git a/yarn.lock b/yarn.lock index 2fefc214986a81..25c1cab071a68d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2717,13 +2717,6 @@ chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chrome-remote-interface@0.24.2: - version "0.24.2" - resolved "https://registry.yarnpkg.com/chrome-remote-interface/-/chrome-remote-interface-0.24.2.tgz#43a05440a1fa60b73769e72f3e7892ac11d66eba" - dependencies: - commander "2.1.x" - ws "2.0.x" - chromedriver@2.41.0: version "2.41.0" resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.41.0.tgz#2709d3544bc0c288b4738a6925a64c02a98a921f" @@ -2994,10 +2987,6 @@ commander@2, commander@^2.12.1, commander@^2.9.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -commander@2.1.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" - commander@2.8.1, commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -4971,7 +4960,7 @@ extract-zip@1.5.0: mkdirp "0.5.0" yauzl "2.4.1" -extract-zip@^1.6.7: +extract-zip@^1.6.6, extract-zip@^1.6.7: version "1.6.7" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" dependencies: @@ -8860,6 +8849,10 @@ mime@^1.2.11, mime@^1.3.4, mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mime@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -10475,7 +10468,7 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -proxy-from-env@1.0.0: +proxy-from-env@1.0.0, proxy-from-env@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -10664,6 +10657,19 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +puppeteer-core@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-1.7.0.tgz#c10f660983e9a4faacf6b8e50861c7739871c752" + dependencies: + debug "^3.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.0" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^5.1.1" + q@^1.0.1, q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -13390,10 +13396,6 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - unbzip2-stream@1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.0.9.tgz#9d107697a8d539d7bfdb9378a1cd832836bb7f8f" @@ -14380,12 +14382,6 @@ ws@1.1.2: options ">=0.0.5" ultron "1.0.x" -ws@2.0.x: - version "2.0.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.0.3.tgz#532fd499c3f7d7d720e543f1f807106cfc57d9cb" - dependencies: - ultron "~1.1.0" - ws@^4.0.0, ws@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" @@ -14393,6 +14389,12 @@ ws@^4.0.0, ws@^4.1.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" +ws@^5.1.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + wtf-8@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" From c65078eda782e21ecb429ef3d7928eb3520ede20 Mon Sep 17 00:00:00 2001 From: John Dorlus Date: Wed, 29 Aug 2018 22:38:23 -0400 Subject: [PATCH 068/173] Created separate pr to handle keybinding for mac and other os. (#22521) --- test/functional/page_objects/visual_builder_page.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/functional/page_objects/visual_builder_page.js b/test/functional/page_objects/visual_builder_page.js index faf96b7d631bd5..c5433bca4dc48d 100644 --- a/test/functional/page_objects/visual_builder_page.js +++ b/test/functional/page_objects/visual_builder_page.js @@ -64,7 +64,11 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }) { // Since we use ACE editor and that isn't really storing its value inside // a textarea we must really select all text and remove it, and cannot use // clearValue(). - await input.session.pressKeys([Keys.CONTROL, 'a']); // Select all text + if (process.platform === 'darwin') { + await input.session.pressKeys([Keys.COMMAND, 'a']); // Select all Mac + } else { + await input.session.pressKeys([Keys.CONTROL, 'a']); // Select all for everything else + } await input.session.pressKeys(Keys.NULL); // Release modifier keys await input.session.pressKeys(Keys.BACKSPACE); // Delete all content await input.type(markdown); @@ -120,8 +124,7 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }) { return await gaugeCount.getVisibleText(); } - async clickTopN() - { + async clickTopN() { await testSubjects.click('top_nTsvbTypeBtn'); await PageObjects.header.waitUntilLoadingHasFinished(); } From fc7e7b4e32ee27d4f93b17096137fa1d7caa1653 Mon Sep 17 00:00:00 2001 From: Bhavya RM Date: Wed, 29 Aug 2018 23:13:40 -0400 Subject: [PATCH 069/173] Functional test to surface index version conflicts (#22509) --- option[value=url] | 0 .../management/_handle_version_conflict.js | 102 ++++++++++++++++++ test/functional/apps/management/index.js | 1 + test/functional/page_objects/common_page.js | 3 + 4 files changed, 106 insertions(+) create mode 100644 option[value=url] create mode 100644 test/functional/apps/management/_handle_version_conflict.js diff --git a/option[value=url] b/option[value=url] new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/test/functional/apps/management/_handle_version_conflict.js b/test/functional/apps/management/_handle_version_conflict.js new file mode 100644 index 00000000000000..4a515473449a07 --- /dev/null +++ b/test/functional/apps/management/_handle_version_conflict.js @@ -0,0 +1,102 @@ +/* + * 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. + */ + + +/* Steps for version conflict test + 1. Create index pattern + 2. Click on scripted field and fill in the values + 3. Use es to update the index pattern's title + 4. Try to save the scripted field + 5. Kibana should display the message - you need to refresh the index pattern + + */ + +import expect from 'expect.js'; + +export default function ({ getService, getPageObjects }) { + const esArchiver = getService('esArchiver'); + const remote = getService('remote'); + const es = getService('es'); + const retry = getService('retry'); + const scriptedFiledName = 'versionConflictScript'; + const PageObjects = getPageObjects(['common', 'home', 'settings', 'discover', 'header']); + const log = getService('log'); + + + describe('index version conflict', function describeIndexTests() { + before(async function () { + await remote.setWindowSize(1200, 800); + await esArchiver.load('discover'); + }); + + + it('Should be able to surface version conflict notification while creating scripted field', async function () { + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaIndices(); + await PageObjects.settings.clickOnOnlyIndexPattern(); + await PageObjects.settings.clickScriptedFieldsTab(); + await PageObjects.settings.clickAddScriptedField(); + await PageObjects.settings.setScriptedFieldName(scriptedFiledName); + await PageObjects.settings.setScriptedFieldScript(`doc['bytes'].value`); + const response = await es.update({ + index: '.kibana', + type: 'doc', + id: 'index-pattern:logstash-*', + body: { + 'doc': { 'index-pattern': { 'fieldFormatMap': '{"geo.src":{"id":"number"}}' } } + } + }); + log.debug(JSON.stringify(response)); + expect(response.result).to.be('updated'); + await PageObjects.settings.setFieldFormat('url'); + await PageObjects.settings.clickSaveScriptedField(); + await retry.try(async function () { + const message = await PageObjects.common.closeToast(); + expect(message).to.contain('Unable'); + }); + }); + + it('Should be able to surface version conflict notification while changing field format', async function () { + const fieldName = 'geo.srcdest'; + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaIndices(); + await PageObjects.settings.clickOnOnlyIndexPattern(); + log.debug('Starting openControlsByName (' + fieldName + ')'); + await PageObjects.settings.openControlsByName(fieldName); + log.debug('controls are open'); + await PageObjects.settings.setFieldFormat('url'); + const response = await es.update({ + index: '.kibana', + type: 'doc', + id: 'index-pattern:logstash-*', + body: { + 'doc': { 'index-pattern': { 'fieldFormatMap': '{"geo.dest":{"id":"number"}}' } } + } + }); + log.debug(JSON.stringify(response)); + expect(response.result).to.be('updated'); + await PageObjects.settings.controlChangeSave(); + await retry.try(async function () { + //await PageObjects.common.sleep(2000); + const message = await PageObjects.common.closeToast(); + expect(message).to.contain('Unable'); + }); + }); + }); +} diff --git a/test/functional/apps/management/index.js b/test/functional/apps/management/index.js index adc9a9b882f3ca..727462a3fb1b60 100644 --- a/test/functional/apps/management/index.js +++ b/test/functional/apps/management/index.js @@ -46,6 +46,7 @@ export default function ({ getService, loadTestFile }) { loadTestFile(require.resolve('./_import_objects')); loadTestFile(require.resolve('./_test_huge_fields')); loadTestFile(require.resolve('./_handle_alias')); + loadTestFile(require.resolve('./_handle_version_conflict')); }); } diff --git a/test/functional/page_objects/common_page.js b/test/functional/page_objects/common_page.js index f6417438e5137c..c560cbcd2dbf3b 100644 --- a/test/functional/page_objects/common_page.js +++ b/test/functional/page_objects/common_page.js @@ -332,7 +332,10 @@ export function CommonPageProvider({ getService, getPageObjects }) { async closeToast() { const toast = await find.byCssSelector('.euiToast'); await remote.moveMouseTo(toast); + const title = await (await find.byCssSelector('.euiToastHeader__title')).getVisibleText(); + log.debug(title); await find.clickByCssSelector('.euiToast__closeButton'); + return title; } async clearAllToasts() { From 57e99302e70989fdccd37fe7c7d53ace6a5cbd01 Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Thu, 30 Aug 2018 08:40:47 +0200 Subject: [PATCH 070/173] fixing bug discovered by bahvya (#22481) --- src/core_plugins/tagcloud/public/tag_cloud_visualization.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core_plugins/tagcloud/public/tag_cloud_visualization.js b/src/core_plugins/tagcloud/public/tag_cloud_visualization.js index 8773deb268d4d7..e625caa13394fb 100644 --- a/src/core_plugins/tagcloud/public/tag_cloud_visualization.js +++ b/src/core_plugins/tagcloud/public/tag_cloud_visualization.js @@ -67,6 +67,7 @@ export class TagCloudVisualization { } async render(data, status) { + if (!(status.resize || status.data || status.params)) return; if (status.params || status.aggs) { this._updateParams(); From 34b5f224d9f4cb539fd7b14f13017dcc0d13e760 Mon Sep 17 00:00:00 2001 From: Maryia Lapata Date: Thu, 30 Aug 2018 10:22:24 +0300 Subject: [PATCH 071/173] Translations for Home page (#22249) * Translate Home page; add mountWithIntl method into enzyme_helper.js * Update message ids * Update component name * Update message ids * Fix unit tests * Remove export from variables that get wrapped by a helper --- .../__snapshots__/add_data.test.js.snap | 168 ++++++++-- .../__snapshots__/home.test.js.snap | 286 ++++++++++++++---- .../recently_accessed.test.js.snap | 6 +- .../kibana/public/home/components/add_data.js | 106 +++++-- .../public/home/components/add_data.test.js | 8 +- .../home/components/feature_directory.js | 16 +- .../kibana/public/home/components/home.js | 27 +- .../kibana/public/home/components/home_app.js | 65 ++-- .../home/components/recently_accessed.js | 7 +- .../home/components/recently_accessed.test.js | 11 +- .../home/components/sample_data_set_card.js | 43 ++- .../home/components/sample_data_set_cards.js | 22 +- .../__snapshots__/footer.test.js.snap | 6 +- .../__snapshots__/introduction.test.js.snap | 6 +- .../saved_objects_installer.test.js.snap | 241 ++++++++++++++- .../__snapshots__/tutorial.test.js.snap | 6 +- .../public/home/components/tutorial/footer.js | 7 +- .../home/components/tutorial/instruction.js | 4 +- .../components/tutorial/instruction_set.js | 37 ++- .../tutorial/instruction_set.test.js | 14 +- .../home/components/tutorial/introduction.js | 4 +- .../tutorial/saved_objects_installer.js | 53 +++- .../tutorial/saved_objects_installer.test.js | 8 +- .../home/components/tutorial/tutorial.js | 21 +- .../home/components/tutorial/tutorial.test.js | 11 +- .../home/components/tutorial_directory.js | 36 ++- .../kibana/public/home/components/welcome.js | 24 +- .../kibana/public/home/load_tutorials.js | 9 +- src/test_utils/public/enzyme_helpers.js | 49 ++- 29 files changed, 1041 insertions(+), 260 deletions(-) diff --git a/src/core_plugins/kibana/public/home/components/__snapshots__/add_data.test.js.snap b/src/core_plugins/kibana/public/home/components/__snapshots__/add_data.test.js.snap index 51d080ee62c4c4..eeb15bf7877518 100644 --- a/src/core_plugins/kibana/public/home/components/__snapshots__/add_data.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/__snapshots__/add_data.test.js.snap @@ -23,14 +23,22 @@ exports[`apmUiEnabled 1`] = ` size="m" >

    - Add Data to Kibana +

    - Use these solutions to quickly turn your data into pre-built dashboards and monitoring systems. +

    @@ -63,7 +71,11 @@ exports[`apmUiEnabled 1`] = ` iconSide="left" type="button" > - Add APM + } icon={ @@ -95,7 +107,11 @@ exports[`apmUiEnabled 1`] = ` iconSide="left" type="button" > - Add log data + } icon={ @@ -127,7 +143,11 @@ exports[`apmUiEnabled 1`] = ` iconSide="left" type="button" > - Add metric data + } icon={ @@ -159,7 +179,11 @@ exports[`apmUiEnabled 1`] = ` iconSide="left" type="button" > - Add security events + } icon={ @@ -204,7 +228,11 @@ exports[`apmUiEnabled 1`] = ` } } > - Sample Data + - Load a data set and a Kibana dashboard + @@ -235,7 +267,11 @@ exports[`apmUiEnabled 1`] = ` } } > - Your Data + - Connect to your Elasticsearch index + @@ -278,14 +318,22 @@ exports[`isNewKibanaInstance 1`] = ` size="m" >

    - Add Data to Kibana +

    - Use these solutions to quickly turn your data into pre-built dashboards and monitoring systems. +

    @@ -318,7 +366,11 @@ exports[`isNewKibanaInstance 1`] = ` iconSide="left" type="button" > - Add log data + } icon={ @@ -350,7 +402,11 @@ exports[`isNewKibanaInstance 1`] = ` iconSide="left" type="button" > - Add metric data + } icon={ @@ -382,7 +438,11 @@ exports[`isNewKibanaInstance 1`] = ` iconSide="left" type="button" > - Add security events + } icon={ @@ -427,7 +487,11 @@ exports[`isNewKibanaInstance 1`] = ` } } > - Sample Data + - Load a data set and a Kibana dashboard + @@ -458,7 +526,11 @@ exports[`isNewKibanaInstance 1`] = ` } } > - Your Data + - Connect to your Elasticsearch index + @@ -501,14 +577,22 @@ exports[`render 1`] = ` size="m" >

    - Add Data to Kibana +

    - Use these solutions to quickly turn your data into pre-built dashboards and monitoring systems. +

    @@ -541,7 +625,11 @@ exports[`render 1`] = ` iconSide="left" type="button" > - Add log data + } icon={ @@ -573,7 +661,11 @@ exports[`render 1`] = ` iconSide="left" type="button" > - Add metric data + } icon={ @@ -605,7 +697,11 @@ exports[`render 1`] = ` iconSide="left" type="button" > - Add security events + } icon={ @@ -650,7 +746,11 @@ exports[`render 1`] = ` } } > - Sample Data + - Load a data set and a Kibana dashboard + @@ -681,7 +785,11 @@ exports[`render 1`] = ` } } > - Your Data + - Connect to your Elasticsearch index + diff --git a/src/core_plugins/kibana/public/home/components/__snapshots__/home.test.js.snap b/src/core_plugins/kibana/public/home/components/__snapshots__/home.test.js.snap index 4f245a6cc8ef7d..1781469eacfeff 100644 --- a/src/core_plugins/kibana/public/home/components/__snapshots__/home.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/__snapshots__/home.test.js.snap @@ -8,7 +8,7 @@ exports[`home directories should not render directory entry when showOnHomePage - @@ -37,7 +37,11 @@ exports[`home directories should not render directory entry when showOnHomePage size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -126,7 +142,7 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel - @@ -155,7 +171,11 @@ exports[`home directories should render ADMIN directory entry in "Manage" panel size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -263,7 +295,7 @@ exports[`home directories should render DATA directory entry in "Explore Data" p - @@ -292,7 +324,11 @@ exports[`home directories should render DATA directory entry in "Explore Data" p size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -400,7 +448,7 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = ` - @@ -429,7 +477,11 @@ exports[`home isNewKibanaInstance should safely handle execeptions 1`] = ` size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -518,7 +582,7 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t - @@ -547,7 +611,11 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to false when t size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -636,7 +716,7 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th - @@ -665,7 +745,11 @@ exports[`home isNewKibanaInstance should set isNewKibanaInstance to true when th size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -754,7 +850,7 @@ exports[`home should not contain RecentlyAccessed panel when there is no recentl - @@ -783,7 +879,11 @@ exports[`home should not contain RecentlyAccessed panel when there is no recentl size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -888,7 +1000,7 @@ exports[`home should render home component 1`] = ` size="l" /> - @@ -917,7 +1029,11 @@ exports[`home should render home component 1`] = ` size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -1006,7 +1134,7 @@ exports[`home welcome should show the normal home page if loading fails 1`] = ` - @@ -1035,7 +1163,11 @@ exports[`home welcome should show the normal home page if loading fails 1`] = ` size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -1124,7 +1268,7 @@ exports[`home welcome should show the normal home page if welcome screen is disa - @@ -1153,7 +1297,11 @@ exports[`home welcome should show the normal home page if welcome screen is disa size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + @@ -1249,7 +1409,7 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = ` - @@ -1278,7 +1438,11 @@ exports[`home welcome stores skip welcome setting if skipped 1`] = ` size="m" >

    - Visualize and Explore Data +

    - Manage and Administer the Elastic Stack +

    - Didn’t find what you were looking for? +

    - View full directory of Kibana plugins + diff --git a/src/core_plugins/kibana/public/home/components/__snapshots__/recently_accessed.test.js.snap b/src/core_plugins/kibana/public/home/components/__snapshots__/recently_accessed.test.js.snap index 98bd8db229a85d..c0e0c3ad3f2b4e 100644 --- a/src/core_plugins/kibana/public/home/components/__snapshots__/recently_accessed.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/__snapshots__/recently_accessed.test.js.snap @@ -14,7 +14,11 @@ exports[`render 1`] = ` color="subdued" component="span" > - Recently viewed +

    Made with NaturalEarth | Elastic Maps Service

    diff --git a/src/core_plugins/kibana/public/home/components/add_data.js b/src/core_plugins/kibana/public/home/components/add_data.js index 1b2e04164a7295..827143d1bffb8e 100644 --- a/src/core_plugins/kibana/public/home/components/add_data.js +++ b/src/core_plugins/kibana/public/home/components/add_data.js @@ -20,6 +20,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; +import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; import { EuiButton, @@ -35,22 +36,54 @@ import { EuiHorizontalRule, } from '@elastic/eui'; -export function AddData({ apmUiEnabled, isNewKibanaInstance }) { +const AddDataUi = ({ apmUiEnabled, isNewKibanaInstance, intl }) => { const renderCards = () => { + const apmTitle = intl.formatMessage({ + id: 'kbn.home.addData.apm.nameTitle', defaultMessage: 'APM' + }); + const apmDescription = intl.formatMessage({ + id: 'kbn.home.addData.apm.nameDescription', + defaultMessage: 'APM automatically collects in-depth performance metrics and errors from inside your applications.' + }); + const loggingTitle = intl.formatMessage({ + id: 'kbn.home.addData.logging.nameTitle', defaultMessage: 'Logging' + }); + const loggingDescription = intl.formatMessage({ + id: 'kbn.home.addData.logging.nameDescription', + defaultMessage: 'Ingest logs from popular data sources and easily visualize in preconfigured dashboards.' + }); + const metricsTitle = intl.formatMessage({ + id: 'kbn.home.addData.metrics.nameTitle', defaultMessage: 'Metrics' + }); + const metricsDescription = intl.formatMessage({ + id: 'kbn.home.addData.metrics.nameDescription', + defaultMessage: 'Collect metrics from the operating system and services running on your servers.' + }); + const securityTitle = intl.formatMessage({ + id: 'kbn.home.addData.security.nameTitle', defaultMessage: 'Security Analytics' + }); + const securityDescription = intl.formatMessage({ + id: 'kbn.home.addData.security.nameDescription', + defaultMessage: 'Centralize security events for interactive investigation in ready-to-go visualizations.' + }); + const getApmCard = () => ( } - title="APM" - description="APM automatically collects in-depth performance metrics and errors from inside your applications." + title={apmTitle} + description={apmDescription} footer={ - Add APM + } /> @@ -66,14 +99,17 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { } - title="Logging" - description="Ingest logs from popular data sources and easily visualize in preconfigured dashboards." + title={loggingTitle} + description={loggingDescription} footer={ - Add log data + } /> @@ -83,14 +119,17 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { } - title="Metrics" - description="Collect metrics from the operating system and services running on your servers." + title={metricsTitle} + description={metricsDescription} footer={ - Add metric data + } /> @@ -100,14 +139,17 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { } - title="Security Analytics" - description="Centralize security events for interactive investigation in ready-to-go visualizations." + title={securityTitle} + description={securityDescription} footer={ - Add security events + } /> @@ -123,11 +165,19 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { -

    Add Data to Kibana

    +

    + +

    - Use these solutions to quickly turn your data into pre-built dashboards and monitoring systems. +

    @@ -143,26 +193,38 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { - Sample Data + - Load a data set and a Kibana dashboard + - Your Data + - Connect to your Elasticsearch index + @@ -172,9 +234,11 @@ export function AddData({ apmUiEnabled, isNewKibanaInstance }) { ); -} +}; -AddData.propTypes = { +AddDataUi.propTypes = { apmUiEnabled: PropTypes.bool.isRequired, isNewKibanaInstance: PropTypes.bool.isRequired, }; + +export const AddData = injectI18n(AddDataUi); diff --git a/src/core_plugins/kibana/public/home/components/add_data.test.js b/src/core_plugins/kibana/public/home/components/add_data.test.js index 3ed8dafe860a80..549990eb99ffa4 100644 --- a/src/core_plugins/kibana/public/home/components/add_data.test.js +++ b/src/core_plugins/kibana/public/home/components/add_data.test.js @@ -18,11 +18,11 @@ */ import React from 'react'; -import { shallow } from 'enzyme'; import { AddData } from './add_data'; +import { shallowWithIntl } from 'test_utils/enzyme_helpers'; test('render', () => { - const component = shallow(); @@ -30,7 +30,7 @@ test('render', () => { }); test('apmUiEnabled', () => { - const component = shallow(); @@ -38,7 +38,7 @@ test('apmUiEnabled', () => { }); test('isNewKibanaInstance', () => { - const component = shallow(); diff --git a/src/core_plugins/kibana/public/home/components/feature_directory.js b/src/core_plugins/kibana/public/home/components/feature_directory.js index ce7371fbff092f..e3ccd6774f4a7a 100644 --- a/src/core_plugins/kibana/public/home/components/feature_directory.js +++ b/src/core_plugins/kibana/public/home/components/feature_directory.js @@ -33,6 +33,9 @@ import { import { FeatureCatalogueCategory } from 'ui/registry/feature_catalogue'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n/react'; + const ALL_TAB_ID = 'all'; const OTHERS_TAB_ID = 'others'; @@ -47,18 +50,18 @@ export class FeatureDirectory extends React.Component { this.tabs = [{ id: ALL_TAB_ID, - name: 'All', + name: i18n.translate('kbn.home.directory.tabs.allTitle', { defaultMessage: 'All' }), }, { id: FeatureCatalogueCategory.DATA, - name: 'Data Exploration & Visualization', + name: i18n.translate('kbn.home.directory.tabs.dataTitle', { defaultMessage: 'Data Exploration & Visualization' }), }, { id: FeatureCatalogueCategory.ADMIN, - name: 'Administrative', + name: i18n.translate('kbn.home.directory.tabs.administrativeTitle', { defaultMessage: 'Administrative' }), }]; if (props.directories.some(isOtherCategory)) { this.tabs.push({ id: OTHERS_TAB_ID, - name: 'Other', + name: i18n.translate('kbn.home.directory.tabs.otherTitle', { defaultMessage: 'Other' }), }); } @@ -117,7 +120,10 @@ export class FeatureDirectory extends React.Component {

    - Directory +

    diff --git a/src/core_plugins/kibana/public/home/components/home.js b/src/core_plugins/kibana/public/home/components/home.js index 5cf09eb239d2a0..4bcd66ca56a326 100644 --- a/src/core_plugins/kibana/public/home/components/home.js +++ b/src/core_plugins/kibana/public/home/components/home.js @@ -22,6 +22,7 @@ import PropTypes from 'prop-types'; import { Synopsis } from './synopsis'; import { AddData } from './add_data'; import { RecentlyAccessed, recentlyAccessedShape } from './recently_accessed'; +import { FormattedMessage } from '@kbn/i18n/react'; import { EuiButton, @@ -156,7 +157,12 @@ export class Home extends Component { -

    Visualize and Explore Data

    +

    + +

    @@ -167,7 +173,12 @@ export class Home extends Component { -

    Manage and Administer the Elastic Stack

    +

    + +

    @@ -182,11 +193,19 @@ export class Home extends Component { -

    Didn’t find what you were looking for?

    +

    + +

    - View full directory of Kibana plugins +
    diff --git a/src/core_plugins/kibana/public/home/components/home_app.js b/src/core_plugins/kibana/public/home/components/home_app.js index d277fd542f70d7..e27356b06196df 100644 --- a/src/core_plugins/kibana/public/home/components/home_app.js +++ b/src/core_plugins/kibana/public/home/components/home_app.js @@ -32,6 +32,7 @@ import { getTutorial } from '../load_tutorials'; import { replaceTemplateStrings } from './tutorial/replace_template_strings'; import chrome from 'ui/chrome'; import { recentlyAccessedShape } from './recently_accessed'; +import { I18nProvider } from '@kbn/i18n/react'; export function HomeApp({ addBasePath, @@ -73,39 +74,41 @@ export function HomeApp({ }; return ( - - - - - - + + + - - - - - - + + + + + + + + + ); } diff --git a/src/core_plugins/kibana/public/home/components/recently_accessed.js b/src/core_plugins/kibana/public/home/components/recently_accessed.js index b0dbfb888d0bf5..a14d494b0ef5e9 100644 --- a/src/core_plugins/kibana/public/home/components/recently_accessed.js +++ b/src/core_plugins/kibana/public/home/components/recently_accessed.js @@ -34,6 +34,8 @@ import { EuiTitle, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + export const NUM_LONG_LINKS = 5; export class RecentlyAccessed extends Component { @@ -197,7 +199,10 @@ export class RecentlyAccessed extends Component {

    - Recently viewed +

    diff --git a/src/core_plugins/kibana/public/home/components/recently_accessed.test.js b/src/core_plugins/kibana/public/home/components/recently_accessed.test.js index c412664be696e8..8986586a0cf1ea 100644 --- a/src/core_plugins/kibana/public/home/components/recently_accessed.test.js +++ b/src/core_plugins/kibana/public/home/components/recently_accessed.test.js @@ -18,9 +18,10 @@ */ import React from 'react'; -import { shallow, mount } from 'enzyme'; +import { shallow } from 'enzyme'; import { RecentlyAccessed, NUM_LONG_LINKS } from './recently_accessed'; import { findTestSubject } from '@elastic/eui/lib/test'; +import { mountWithIntl } from 'test_utils/enzyme_helpers'; const createRecentlyAccessed = (length) => { const recentlyAccessed = []; @@ -44,7 +45,7 @@ test('render', () => { describe('more popover', () => { test('should not be rendered when recently accessed list size is less than NUM_LONG_LINKS', () => { - const component = mount(); @@ -53,7 +54,7 @@ describe('more popover', () => { }); test('should not be rendered when recently accessed list size is NUM_LONG_LINKS', () => { - const component = mount(); @@ -63,7 +64,7 @@ describe('more popover', () => { describe('recently accessed list size exceeds NUM_LONG_LINKS', () => { test('should be rendered', () => { - const component = mount(); @@ -73,7 +74,7 @@ describe('more popover', () => { test('should only contain overflow recently accessed items when opened', () => { const numberOfRecentlyAccessed = NUM_LONG_LINKS + 2; - const component = mount(); diff --git a/src/core_plugins/kibana/public/home/components/sample_data_set_card.js b/src/core_plugins/kibana/public/home/components/sample_data_set_card.js index a19eaf1c5dd8a8..74a08f84cc76c2 100644 --- a/src/core_plugins/kibana/public/home/components/sample_data_set_card.js +++ b/src/core_plugins/kibana/public/home/components/sample_data_set_card.js @@ -31,6 +31,8 @@ import { export const INSTALLED_STATUS = 'installed'; export const UNINSTALLED_STATUS = 'not_installed'; +import { FormattedMessage } from '@kbn/i18n/react'; + export class SampleDataSetCard extends React.Component { isInstalled = () => { @@ -61,7 +63,15 @@ export class SampleDataSetCard extends React.Component { color="danger" data-test-subj={`removeSampleDataSet${this.props.id}`} > - {this.props.isProcessing ? 'Removing' : 'Remove'} + {this.props.isProcessing + ? + : }
    @@ -69,7 +79,10 @@ export class SampleDataSetCard extends React.Component { href={this.props.launchUrl} data-test-subj={`launchSampleDataSet${this.props.id}`} > - View data +
    @@ -84,7 +97,16 @@ export class SampleDataSetCard extends React.Component { onClick={this.install} data-test-subj={`addSampleDataSet${this.props.id}`} > - {this.props.isProcessing ? 'Adding' : 'Add'} + {this.props.isProcessing + ? + : + }
    @@ -96,13 +118,24 @@ export class SampleDataSetCard extends React.Component { {`Unable to verify dataset status, error: ${this.props.statusMsg}`}

    } + content={ +

    + +

    + } > - {'Add'} +
    diff --git a/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js b/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js index 4f50af96778764..6d0c25498f3d3d 100644 --- a/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js +++ b/src/core_plugins/kibana/public/home/components/sample_data_set_cards.js @@ -39,6 +39,8 @@ import { uninstallSampleDataSet } from '../sample_data_sets'; +import { i18n } from '@kbn/i18n'; + export class SampleDataSetCards extends React.Component { constructor(props) { @@ -66,7 +68,9 @@ export class SampleDataSetCards extends React.Component { sampleDataSets = await listSampleDataSets(); } catch (fetchError) { toastNotifications.addDanger({ - title: `Unable to load sample data sets list`, + title: i18n.translate('kbn.home.sampleDataSet.unableToLoadListErrorMessage', { + defaultMessage: 'Unable to load sample data sets list' } + ), text: `${fetchError.message}`, }); sampleDataSets = []; @@ -109,7 +113,9 @@ export class SampleDataSetCards extends React.Component { })); } toastNotifications.addDanger({ - title: `Unable to install sample data set: ${targetSampleDataSet.name}`, + title: i18n.translate('kbn.home.sampleDataSet.unableToInstallErrorMessage', { + defaultMessage: 'Unable to install sample data set: {name}', values: { name: targetSampleDataSet.name } } + ), text: `${fetchError.message}`, }); return; @@ -125,7 +131,9 @@ export class SampleDataSetCards extends React.Component { }), })); toastNotifications.addSuccess({ - title: `${targetSampleDataSet.name} installed`, + title: i18n.translate('kbn.home.sampleDataSet.installedLabel', { + defaultMessage: '{name} installed', values: { name: targetSampleDataSet.name } } + ), ['data-test-subj']: 'sampleDataSetInstallToast' }); } @@ -154,7 +162,9 @@ export class SampleDataSetCards extends React.Component { })); } toastNotifications.addDanger({ - title: `Unable to uninstall sample data set: ${targetSampleDataSet.name}`, + title: i18n.translate('kbn.home.sampleDataSet.unableToUninstallErrorMessage', { + defaultMessage: 'Unable to uninstall sample data set: {name}', values: { name: targetSampleDataSet.name } } + ), text: `${fetchError.message}`, }); return; @@ -170,7 +180,9 @@ export class SampleDataSetCards extends React.Component { }), })); toastNotifications.addSuccess({ - title: `${targetSampleDataSet.name} uninstalled`, + title: i18n.translate('kbn.home.sampleDataSet.uninstalledLabel', { + defaultMessage: '{name} uninstalled', values: { name: targetSampleDataSet.name } } + ), ['data-test-subj']: 'sampleDataSetUninstallToast' }); } diff --git a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/footer.test.js.snap b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/footer.test.js.snap index 3520cd93cbb8e5..e72aadd0bcae71 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/footer.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/footer.test.js.snap @@ -23,7 +23,11 @@ exports[`render 1`] = ` grow={true} >

    - When all steps are complete, you're ready to explore your data. +

    diff --git a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/introduction.test.js.snap b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/introduction.test.js.snap index 48e1bc15b6ea61..9ada357a7380dc 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/introduction.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/introduction.test.js.snap @@ -57,7 +57,11 @@ exports[`props exportedFieldsUrl 1`] = ` target="_blank" type="button" > - View exported fields +

  • diff --git a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/saved_objects_installer.test.js.snap b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/saved_objects_installer.test.js.snap index 802135f11e8092..6a0f123c229070 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/saved_objects_installer.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/saved_objects_installer.test.js.snap @@ -1,8 +1,144 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`bulkCreate should display error message when bulkCreate request fails 1`] = ` - , "key": "installStep", @@ -199,7 +335,7 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1 color="warning" data-test-subj="loadSavedObjects_failed" size="m" - title="Request failed, Error: simulated bulkRequest error" + title="Request failed, Error: {message}" >
    - Request failed, Error: simulated bulkRequest error + Request failed, Error: {message}
    @@ -221,12 +357,97 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1 -
    + `; exports[`bulkCreate should display success message when bulkCreate is successful 1`] = ` - , "key": "installStep", @@ -463,7 +684,7 @@ exports[`bulkCreate should display success message when bulkCreate is successful color="success" data-test-subj="loadSavedObjects_success" size="m" - title="1 saved objects successfully added" + title="{savedObjectsLength} saved objects successfully added" >
    - 1 saved objects successfully added + {savedObjectsLength} saved objects successfully added
    @@ -485,7 +706,7 @@ exports[`bulkCreate should display success message when bulkCreate is successful -
    + `; exports[`renders 1`] = ` diff --git a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/tutorial.test.js.snap b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/tutorial.test.js.snap index debe5319704b8c..84a98a3a7b7848 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/tutorial.test.js.snap +++ b/src/core_plugins/kibana/public/home/components/tutorial/__snapshots__/tutorial.test.js.snap @@ -48,7 +48,7 @@ exports[`isCloudEnabled is false should not render instruction toggle when ON_PR hasShadow={false} paddingSize="l" > - - - @@ -38,7 +40,10 @@ export function Footer({ url, label }) {

    - {`When all steps are complete, you're ready to explore your data.`} +

    diff --git a/src/core_plugins/kibana/public/home/components/tutorial/instruction.js b/src/core_plugins/kibana/public/home/components/tutorial/instruction.js index 07418f35ba883c..b8cf63c171dbb8 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/instruction.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/instruction.js @@ -30,6 +30,8 @@ import { EuiButton, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + export function Instruction({ commands, paramValues, textPost, textPre, replaceTemplateStrings }) { let pre; if (textPre) { @@ -65,7 +67,7 @@ export function Instruction({ commands, paramValues, textPost, textPre, replaceT size="s" onClick={copy} > - Copy snippet + )} diff --git a/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.js b/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.js index 9d5a4cbc5f0bf7..d3b5ea4744177d 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.js @@ -40,7 +40,9 @@ import { } from '@elastic/eui'; import * as StatusCheckStates from './status_check_states'; -export class InstructionSet extends React.Component { +import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; + +class InstructionSetUi extends React.Component { constructor(props) { super(props); @@ -93,12 +95,18 @@ export class InstructionSet extends React.Component { case StatusCheckStates.FETCHING: return null; // Don't show any message while fetching or if you haven't yet checked. case StatusCheckStates.HAS_DATA: - message = this.props.statusCheckConfig.success ? this.props.statusCheckConfig.success : 'Success'; + message = this.props.statusCheckConfig.success + ? this.props.statusCheckConfig.success + : this.props.intl.formatMessage({ id: 'kbn.home.tutorial.instractionSet.successLabel', + defaultMessage: 'Success' }); color = 'success'; break; case StatusCheckStates.ERROR: case StatusCheckStates.NO_DATA: - message = this.props.statusCheckConfig.error ? this.props.statusCheckConfig.error : 'No data found'; + message = this.props.statusCheckConfig.error + ? this.props.statusCheckConfig.error + : this.props.intl.formatMessage({ id: 'kbn.home.tutorial.instractionSet.noDataLabel', + defaultMessage: 'No data found' }); color = 'warning'; break; } @@ -145,7 +153,10 @@ export class InstructionSet extends React.Component { onClick={onStatusCheck} isLoading={statusCheckState === StatusCheckStates.FETCHING} > - {statusCheckConfig.btnLabel || 'Check status'} + {statusCheckConfig.btnLabel || } @@ -157,7 +168,9 @@ export class InstructionSet extends React.Component { ); return { - title: statusCheckConfig.title || 'Status Check', + title: statusCheckConfig.title || this.props.intl.formatMessage({ id: 'kbn.home.tutorial.instractionSet.statusCheckTitle', + defaultMessage: 'Status Check' + }), status: this.getStepStatus(statusCheckState), children: checkStatusStep, key: 'checkStatusStep' @@ -208,16 +221,22 @@ export class InstructionSet extends React.Component { 'fa-caret-right': !this.state.isParamFormVisible, 'fa-caret-down': this.state.isParamFormVisible }); + const ariaLabel = this.props.intl.formatMessage({ id: 'kbn.home.tutorial.instractionSet.toggleAriaLabel', + defaultMessage: 'toggle command parameters visibility' + }); paramsVisibilityToggle = (
    - Customize your code snippets +
    @@ -291,7 +310,7 @@ const statusCheckConfigShape = PropTypes.shape({ btnLabel: PropTypes.string, }); -InstructionSet.propTypes = { +InstructionSetUi.propTypes = { title: PropTypes.string.isRequired, instructionVariants: PropTypes.arrayOf(instructionVariantShape).isRequired, statusCheckConfig: statusCheckConfigShape, @@ -309,3 +328,5 @@ InstructionSet.propTypes = { setParameter: PropTypes.func, replaceTemplateStrings: PropTypes.func.isRequired, }; + +export const InstructionSet = injectI18n(InstructionSetUi); diff --git a/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.test.js b/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.test.js index f3ce7770dff821..84ed073f277441 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.test.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/instruction_set.test.js @@ -18,7 +18,7 @@ */ import React from 'react'; -import { shallow } from 'enzyme'; +import { shallowWithIntl } from 'test_utils/enzyme_helpers'; import { InstructionSet, @@ -52,7 +52,7 @@ const instructionVariants = [ ]; test('render', () => { - const component = shallow( {}} @@ -73,7 +73,7 @@ describe('statusCheckState', () => { }; test('initial state - no check has been attempted', () => { - const component = shallow( {}} @@ -87,7 +87,7 @@ describe('statusCheckState', () => { }); test('checking status', () => { - const component = shallow( {}} @@ -101,7 +101,7 @@ describe('statusCheckState', () => { }); test('failed status check - error', () => { - const component = shallow( {}} @@ -115,7 +115,7 @@ describe('statusCheckState', () => { }); test('failed status check - no data', () => { - const component = shallow( {}} @@ -129,7 +129,7 @@ describe('statusCheckState', () => { }); test('successful status check', () => { - const component = shallow( {}} diff --git a/src/core_plugins/kibana/public/home/components/tutorial/introduction.js b/src/core_plugins/kibana/public/home/components/tutorial/introduction.js index 1b3e06e35b2942..56bb11a5016783 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/introduction.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/introduction.js @@ -31,6 +31,8 @@ import { EuiBetaBadge, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + export function Introduction({ description, previewUrl, title, exportedFieldsUrl, iconType, isBeta }) { let img; if (previewUrl) { @@ -55,7 +57,7 @@ export function Introduction({ description, previewUrl, title, exportedFieldsUrl target="_blank" rel="noopener noreferrer" > - View exported fields + ); diff --git a/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.js b/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.js index fd4ac6578df3d1..69aaa716f3619e 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.js @@ -17,6 +17,10 @@ * under the License. */ +/* eslint-disable no-multi-str*/ + +import { injectI18n } from '@kbn/i18n/react'; + import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; @@ -30,14 +34,17 @@ import { EuiCallOut, } from '@elastic/eui'; -const DEFAULT_BUTTON_LABEL = 'Load Kibana objects'; +class SavedObjectsInstallerUi extends React.Component { + DEFAULT_BUTTON_LABEL = this.props.intl.formatMessage({ + id: 'kbn.home.tutorial.savedObject.defaultButtonLabel', + defaultMessage: 'Load Kibana objects' + }); -export class SavedObjectsInstaller extends React.Component { state = { isInstalling: false, isInstalled: false, overwrite: false, - buttonLabel: DEFAULT_BUTTON_LABEL, + buttonLabel: this.DEFAULT_BUTTON_LABEL, }; componentDidMount() { @@ -63,10 +70,12 @@ export class SavedObjectsInstaller extends React.Component { this.setState({ isInstalling: false, - installStatusMsg: `Request failed, Error: ${error.message}`, + installStatusMsg: this.props.intl.formatMessage( + { id: 'kbn.home.tutorial.savedObject.requestFailedErrorMessage', defaultMessage: 'Request failed, Error: {message}' }, + { message: error.message }), isInstalled: false, overwrite: false, - buttonLabel: DEFAULT_BUTTON_LABEL + buttonLabel: this.DEFAULT_BUTTON_LABEL }); return; } @@ -85,26 +94,37 @@ export class SavedObjectsInstaller extends React.Component { if (overwriteErrors.length > 0) { this.setState({ isInstalling: false, - installStatusMsg: `${overwriteErrors.length} of ${this.props.savedObjects.length} objects already exist. ` + - `Click 'Confirm overwrite' to import and overwrite existing objects. ` + - `Any changes to the objects will be lost.`, + installStatusMsg: this.props.intl.formatMessage( + { id: 'kbn.home.tutorial.savedObject.installStatusLabel', + defaultMessage: '{overwriteErrorsLength} of {savedObjectsLength} objects already exist. \ +Click \'Confirm overwrite\' to import and overwrite existing objects. Any changes to the objects will be lost.' }, + { overwriteErrorsLength: overwriteErrors.length, savedObjectsLength: this.props.savedObjects.length }), isInstalled: false, overwrite: true, - buttonLabel: 'Confirm overwrite' + buttonLabel: this.props.intl.formatMessage({ id: 'kbn.home.tutorial.savedObject.confirmButtonLabel', + defaultMessage: 'Confirm overwrite' }) }); return; } const hasErrors = errors.length > 0; const statusMsg = hasErrors - ? `Unable to add ${errors.length} of ${this.props.savedObjects.length} kibana objects, Error: ${errors[0].error.message}` - : `${this.props.savedObjects.length} saved objects successfully added`; + ? this.props.intl.formatMessage( + { id: 'kbn.home.tutorial.savedObject.unableToAddErrorMessage', + defaultMessage: 'Unable to add {errorsLength} of {savedObjectsLength} kibana objects, Error: ${errors[0].error.message}' + }, + { errorsLength: errors.length, savedObjectsLength: this.props.savedObjects.length }) + : this.props.intl.formatMessage( + { id: 'kbn.home.tutorial.savedObject.addedLabel', + defaultMessage: '{savedObjectsLength} saved objects successfully added' + }, + { savedObjectsLength: this.props.savedObjects.length }); this.setState({ isInstalling: false, installStatusMsg: statusMsg, isInstalled: !hasErrors, overwrite: false, - buttonLabel: DEFAULT_BUTTON_LABEL, + buttonLabel: this.DEFAULT_BUTTON_LABEL, }); } @@ -125,7 +145,8 @@ export class SavedObjectsInstaller extends React.Component { renderInstallStep = () => { const installMsg = this.props.installMsg ? this.props.installMsg - : 'Imports index pattern, visualizations and pre-defined dashboards.'; + : this.props.intl.formatMessage({ id: 'kbn.home.tutorial.savedObject.installLabel', + defaultMessage: 'Imports index pattern, visualizations and pre-defined dashboards.' }); const installStep = ( @@ -155,7 +176,7 @@ export class SavedObjectsInstaller extends React.Component { ); return { - title: 'Load Kibana objects', + title: this.props.intl.formatMessage({ id: 'kbn.home.tutorial.savedObject.loadTitle', defaultMessage: 'Load Kibana objects' }), status: this.state.isInstalled ? 'complete' : 'incomplete', children: installStep, key: 'installStep' @@ -177,8 +198,10 @@ const savedObjectShape = PropTypes.shape({ attributes: PropTypes.object.isRequired, }); -SavedObjectsInstaller.propTypes = { +SavedObjectsInstallerUi.propTypes = { bulkCreate: PropTypes.func.isRequired, savedObjects: PropTypes.arrayOf(savedObjectShape).isRequired, installMsg: PropTypes.string, }; + +export const SavedObjectsInstaller = injectI18n(SavedObjectsInstallerUi); diff --git a/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.test.js b/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.test.js index 1c28831679a246..38a83424421ec7 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.test.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/saved_objects_installer.test.js @@ -18,13 +18,13 @@ */ import React from 'react'; -import { shallow, mount } from 'enzyme'; import { findTestSubject } from '@elastic/eui/lib/test'; +import { shallowWithIntl, mountWithIntl } from 'test_utils/enzyme_helpers'; import { SavedObjectsInstaller } from './saved_objects_installer'; test('renders', () => { - const component = shallow( {}} savedObjects={[]} />); @@ -43,7 +43,7 @@ describe('bulkCreate', () => { savedObjects: [savedObject] }); }; - const component = mount(); @@ -62,7 +62,7 @@ describe('bulkCreate', () => { const bulkCreateMock = () => { return Promise.reject(new Error('simulated bulkRequest error')); }; - const component = mount(); diff --git a/src/core_plugins/kibana/public/home/components/tutorial/tutorial.js b/src/core_plugins/kibana/public/home/components/tutorial/tutorial.js index f42dab9c16ff63..847265af794d81 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/tutorial.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/tutorial.js @@ -36,6 +36,7 @@ import { EuiFlexItem, } from '@elastic/eui'; import * as StatusCheckStates from './status_check_states'; +import { injectI18n, FormattedMessage } from '@kbn/i18n/react'; const INSTRUCTIONS_TYPE = { ELASTIC_CLOUD: 'elasticCloud', @@ -43,7 +44,7 @@ const INSTRUCTIONS_TYPE = { ON_PREM_ELASTIC_CLOUD: 'onPremElasticCloud' }; -export class Tutorial extends React.Component { +class TutorialUi extends React.Component { constructor(props) { super(props); @@ -187,14 +188,18 @@ export class Tutorial extends React.Component { renderInstructionSetsToggle = () => { if (!this.props.isCloudEnabled && this.state.tutorial.onPremElasticCloud) { + const selfManagedLabel = this.props.intl.formatMessage({ id: 'kbn.home.tutorial.selfManagedButtonLabel', + defaultMessage: 'Self managed' }); + const cloudLabel = this.props.intl.formatMessage({ id: 'kbn.home.tutorial.elasticCloudButtonLabel', + defaultMessage: 'Elastic Cloud' }); const radioButtons = [ { id: INSTRUCTIONS_TYPE.ON_PREM, - label: 'Self managed', + label: selfManagedLabel, }, { id: INSTRUCTIONS_TYPE.ON_PREM_ELASTIC_CLOUD, - label: 'Elastic Cloud', + label: cloudLabel, } ]; return ( @@ -296,7 +301,11 @@ export class Tutorial extends React.Component {

    - Unable to find tutorial {this.props.tutorialId} +

    @@ -356,7 +365,7 @@ export class Tutorial extends React.Component { } } -Tutorial.propTypes = { +TutorialUi.propTypes = { addBasePath: PropTypes.func.isRequired, isCloudEnabled: PropTypes.bool.isRequired, getTutorial: PropTypes.func.isRequired, @@ -364,3 +373,5 @@ Tutorial.propTypes = { tutorialId: PropTypes.string.isRequired, bulkCreate: PropTypes.func.isRequired, }; + +export const Tutorial = injectI18n(TutorialUi); diff --git a/src/core_plugins/kibana/public/home/components/tutorial/tutorial.test.js b/src/core_plugins/kibana/public/home/components/tutorial/tutorial.test.js index 040fd671fc0279..cf6745cf9445a0 100644 --- a/src/core_plugins/kibana/public/home/components/tutorial/tutorial.test.js +++ b/src/core_plugins/kibana/public/home/components/tutorial/tutorial.test.js @@ -18,8 +18,8 @@ */ import React from 'react'; -import { shallow, mount } from 'enzyme'; import { findTestSubject } from '@elastic/eui/lib/test'; +import { shallowWithIntl, mountWithIntl } from 'test_utils/enzyme_helpers'; import { Tutorial, @@ -64,9 +64,8 @@ const replaceTemplateStrings = (text) => { }; describe('isCloudEnabled is false', () => { - test('should render ON_PREM instructions with instruction toggle', () => { - const component = shallow( { const getBasicTutorial = () => { return loadBasicTutorialPromise; }; - const component = shallow( { }); test('should display ON_PREM_ELASTIC_CLOUD instructions when toggle is clicked', () => { - const component = mount( { }); test('should render ELASTIC_CLOUD instructions when isCloudEnabled is true', () => { - const component = shallow( - Home + + +

    - Add Data to Kibana +

    @@ -206,7 +218,7 @@ export class TutorialDirectory extends React.Component { } } -TutorialDirectory.propTypes = { +TutorialDirectoryUi.propTypes = { addBasePath: PropTypes.func.isRequired, openTab: PropTypes.string, isCloudEnabled: PropTypes.bool.isRequired, @@ -214,3 +226,5 @@ TutorialDirectory.propTypes = { setConfig: PropTypes.func.isRequired, clearIndexPatternsCache: PropTypes.func.isRequired, }; + +export const TutorialDirectory = injectI18n(TutorialDirectoryUi); diff --git a/src/core_plugins/kibana/public/home/components/welcome.js b/src/core_plugins/kibana/public/home/components/welcome.js index 237a6de55507ef..c95a00323c367e 100644 --- a/src/core_plugins/kibana/public/home/components/welcome.js +++ b/src/core_plugins/kibana/public/home/components/welcome.js @@ -37,6 +37,8 @@ import { EuiButtonEmpty, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + /** * Shows a full-screen welcome page that gives helpful quick links to beginners. */ @@ -67,10 +69,14 @@ export class Welcome extends React.Component { -

    Welcome to Kibana

    +

    + +

    -

    Your window into the Elastic Stack

    +

    + +

    @@ -81,9 +87,13 @@ export class Welcome extends React.Component { } + description={ + } footer={
    - Try our sample data + - Explore on my own +
    } diff --git a/src/core_plugins/kibana/public/home/load_tutorials.js b/src/core_plugins/kibana/public/home/load_tutorials.js index 8894a0e78b8b8d..d6b264154d4248 100644 --- a/src/core_plugins/kibana/public/home/load_tutorials.js +++ b/src/core_plugins/kibana/public/home/load_tutorials.js @@ -19,6 +19,7 @@ import _ from 'lodash'; import chrome from 'ui/chrome'; +import { i18n } from '@kbn/i18n'; import { toastNotifications } from 'ui/notify'; const baseUrl = chrome.addBasePath('/api/kibana/home/tutorials'); @@ -38,14 +39,18 @@ async function loadTutorials() { headers: headers, }); if (response.status >= 300) { - throw new Error(`Request failed with status code: ${response.status}`); + throw new Error(i18n.translate('kbn.home.loadTutorials.requestFailedErrorMessage', { + defaultMessage: 'Request failed with status code: {status}', values: { status: response.status } } + )); } tutorials = await response.json(); tutorialsLoaded = true; } catch(err) { toastNotifications.addDanger({ - title: 'Unable to load tutorials', + title: i18n.translate('kbn.home.loadTutorials.unableToLoadErrorMessage', { + defaultMessage: 'Unable to load tutorials' } + ), text: err.message, }); } diff --git a/src/test_utils/public/enzyme_helpers.js b/src/test_utils/public/enzyme_helpers.js index ca7618d38705fd..4bbaefe515f6f9 100644 --- a/src/test_utils/public/enzyme_helpers.js +++ b/src/test_utils/public/enzyme_helpers.js @@ -19,24 +19,57 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { shallow } from 'enzyme'; +import { shallow, mount } from 'enzyme'; import { intl } from './mocks/intl'; /** - * Creates the wrapper instance with provided intl object into context + * Creates the wrapper instance using shallow with provided intl object into context * * @param node The React element or cheerio wrapper * @param options properties to pass into shallow wrapper * @return The wrapper instance around the rendered output with intl object in context */ export function shallowWithIntl(node, { context = {}, childContextTypes = {}, ...props } = {}) { + const clonedNode = cloneNode(node); + const options = getOptions(context, childContextTypes, props); + + if (React.isValidElement(node)) { + return shallow(clonedNode, options); + } + + return clonedNode.shallow(options); +} + +/** + * Creates the wrapper instance using mount with provided intl object into context + * + * @param node The React element or cheerio wrapper + * @param options properties to pass into mount wrapper + * @return The wrapper instance around the rendered output with intl object in context + */ +export function mountWithIntl(node, { context = {}, childContextTypes = {}, ...props } = {}) { + const clonedNode = cloneNode(node); + const options = getOptions(context, childContextTypes, props); + + if (React.isValidElement(node)) { + return mount(clonedNode, options); + } + + return clonedNode.mount(options); +} + +export { intl }; + +function cloneNode(node) { if (!node) { throw new Error(`First argument should be cheerio object or React element, not ${node}`); } - const clonedNode = React.cloneElement(node, { intl }); + return React.cloneElement(node, { intl }); +} - const options = { +function getOptions(context, childContextTypes, props) { + return { context: { ...context, intl, @@ -47,12 +80,4 @@ export function shallowWithIntl(node, { context = {}, childContextTypes = {}, .. }, ...props, }; - - if (React.isValidElement(node)) { - return shallow(clonedNode, options); - } - - return clonedNode.shallow(options); } - -export { intl }; From 25761fb43ae35ed5bd2fcaaae4bbcff209b250a1 Mon Sep 17 00:00:00 2001 From: Brian Frantz Date: Thu, 30 Aug 2018 03:58:43 -0500 Subject: [PATCH 072/173] Add option to drop partial buckets from date_histogram visuals (#19979) * Add Drop Partials option to date histogram agg settings UI * Add timeRange to aggOpts and parse in _response_writer * Implement dropPartials method in TabifyBuckets * Fixed a couple issues * Fixed issue with undefined timeRange * Use braces for conditionals --- .../agg_response/tabify/__tests__/_buckets.js | 75 +++++++++++++++++++ .../tabify/__tests__/_response_writer.js | 29 +++++++ src/ui/public/agg_response/tabify/_buckets.js | 38 +++++++++- .../agg_response/tabify/_response_writer.js | 9 +++ src/ui/public/agg_response/tabify/tabify.js | 2 +- .../agg_types/buckets/date_histogram.js | 8 ++ .../agg_types/controls/drop_partials.html | 11 +++ src/ui/public/vis/response_handlers/basic.js | 6 +- src/ui/public/vis/response_handlers/tabify.js | 5 +- 9 files changed, 177 insertions(+), 6 deletions(-) create mode 100644 src/ui/public/agg_types/controls/drop_partials.html diff --git a/src/ui/public/agg_response/tabify/__tests__/_buckets.js b/src/ui/public/agg_response/tabify/__tests__/_buckets.js index 785a62ff82657e..8be13c1ad6c129 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_buckets.js +++ b/src/ui/public/agg_response/tabify/__tests__/_buckets.js @@ -80,4 +80,79 @@ describe('Buckets wrapper', function () { expect(buckets).to.have.length(1); }); }); + + describe('drop_partial option', function () { + const aggResp = { + buckets: [ + { key: 0, value: {} }, + { key: 100, value: {} }, + { key: 200, value: {} }, + { key: 300, value: {} } + ] + }; + + it('drops partial buckets when enabled', function () { + const aggParams = { + drop_partials: true, + field: { + name: 'date' + } + }; + const timeRange = { + gte: 150, + lte: 350, + name: 'date' + }; + const buckets = new TabifyBuckets(aggResp, aggParams, timeRange); + expect(buckets).to.have.length(1); + }); + + it('keeps partial buckets when disabled', function () { + const aggParams = { + drop_partials: false, + field: { + name: 'date' + } + }; + const timeRange = { + gte: 150, + lte: 350, + name: 'date' + }; + const buckets = new TabifyBuckets(aggResp, aggParams, timeRange); + expect(buckets).to.have.length(4); + }); + + it('keeps aligned buckets when enabled', function () { + const aggParams = { + drop_partials: true, + field: { + name: 'date' + } + }; + const timeRange = { + gte: 100, + lte: 400, + name: 'date' + }; + const buckets = new TabifyBuckets(aggResp, aggParams, timeRange); + expect(buckets).to.have.length(3); + }); + + it('does not drop buckets for non-timerange fields', function () { + const aggParams = { + drop_partials: true, + field: { + name: 'other_time' + } + }; + const timeRange = { + gte: 150, + lte: 350, + name: 'date' + }; + const buckets = new TabifyBuckets(aggResp, aggParams, timeRange); + expect(buckets).to.have.length(4); + }); + }); }); diff --git a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js index 3835e4ceb33985..d9e04af7253db6 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js +++ b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js @@ -97,6 +97,35 @@ describe('TabbedAggResponseWriter class', function () { expect(writer.splitStack).to.have.length(1); expect(writer.splitStack[0]).to.be(writer.root); }); + + describe('sets timeRange', function () { + it('to the first nested object\'s range', function () { + const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); + const range = { + gte: 0, + lte: 100 + }; + + const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { + timeRange: { + '@timestamp': range + } + }); + + expect(writer.timeRange.gte).to.be(range.gte); + expect(writer.timeRange.lte).to.be(range.lte); + expect(writer.timeRange.name).to.be('@timestamp'); + }); + + it('to undefined if no nested object', function () { + const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); + + const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { + timeRange: {} + }); + expect(writer).to.have.property('timeRange', undefined); + }); + }); }); describe('', function () { diff --git a/src/ui/public/agg_response/tabify/_buckets.js b/src/ui/public/agg_response/tabify/_buckets.js index 6beadefe5e5b91..846536b9831f94 100644 --- a/src/ui/public/agg_response/tabify/_buckets.js +++ b/src/ui/public/agg_response/tabify/_buckets.js @@ -19,7 +19,7 @@ import _ from 'lodash'; -function TabifyBuckets(aggResp, aggParams) { +function TabifyBuckets(aggResp, aggParams, timeRange) { if (_.has(aggResp, 'buckets')) { this.buckets = aggResp.buckets; } else if (aggResp) { @@ -38,7 +38,12 @@ function TabifyBuckets(aggResp, aggParams) { this.length = this.buckets.length; } - if (this.length && aggParams) this._orderBucketsAccordingToParams(aggParams); + if (this.length && aggParams) { + this._orderBucketsAccordingToParams(aggParams); + if (aggParams.drop_partials) { + this._dropPartials(aggParams, timeRange); + } + } } TabifyBuckets.prototype.forEach = function (fn) { @@ -75,10 +80,37 @@ TabifyBuckets.prototype._orderBucketsAccordingToParams = function (params) { ranges = params.ipRangeType === 'mask' ? ranges.mask : ranges.fromTo; } this.buckets = ranges.map(range => { - if (range.mask) return this.buckets.find(el => el.key === range.mask); + if (range.mask) { + return this.buckets.find(el => el.key === range.mask); + } return this.buckets.find(el => this._isRangeEqual(el, range)); }); } }; +// dropPartials should only be called if the aggParam setting is enabled, +// and the agg field is the same as the Time Range. +TabifyBuckets.prototype._dropPartials = function (params, timeRange) { + if (!timeRange || + this.buckets.length <= 1 || + this.objectMode || + params.field.name !== timeRange.name) { + return; + } + + const interval = this.buckets[1].key - this.buckets[0].key; + + this.buckets = this.buckets.filter(bucket => { + if (bucket.key < timeRange.gte) { + return false; + } + if (bucket.key + interval > timeRange.lte) { + return false; + } + return true; + }); + + this.length = this.buckets.length; +}; + export { TabifyBuckets }; diff --git a/src/ui/public/agg_response/tabify/_response_writer.js b/src/ui/public/agg_response/tabify/_response_writer.js index 1d0bd1c23863cb..0b6d4cb947466f 100644 --- a/src/ui/public/agg_response/tabify/_response_writer.js +++ b/src/ui/public/agg_response/tabify/_response_writer.js @@ -70,6 +70,15 @@ function TabbedAggResponseWriter(aggs, opts) { this.root = new TabifyTableGroup(); this.acrStack = []; this.splitStack = [this.root]; + + // Extract the time range object if provided + if (this.opts.timeRange) { + const timeRangeKey = Object.keys(this.opts.timeRange)[0]; + this.timeRange = this.opts.timeRange[timeRangeKey]; + if (this.timeRange) { + this.timeRange.name = timeRangeKey; + } + } } /** diff --git a/src/ui/public/agg_response/tabify/tabify.js b/src/ui/public/agg_response/tabify/tabify.js index 05ec560d5214a3..7e91670d83fb3a 100644 --- a/src/ui/public/agg_response/tabify/tabify.js +++ b/src/ui/public/agg_response/tabify/tabify.js @@ -49,7 +49,7 @@ function collectBucket(write, bucket, key, aggScale) { switch (agg.type.type) { case 'buckets': - const buckets = new TabifyBuckets(bucket[agg.id], agg.params); + const buckets = new TabifyBuckets(bucket[agg.id], agg.params, write.timeRange); if (buckets.length) { const splitting = write.canSplit && agg.schema.name === 'split'; if (splitting) { diff --git a/src/ui/public/agg_types/buckets/date_histogram.js b/src/ui/public/agg_types/buckets/date_histogram.js index fe93fe41f28e9d..c712a34a95eaf3 100644 --- a/src/ui/public/agg_types/buckets/date_histogram.js +++ b/src/ui/public/agg_types/buckets/date_histogram.js @@ -28,6 +28,7 @@ import { TimeBuckets } from '../../time_buckets'; import { createFilterDateHistogram } from './create_filter/date_histogram'; import { intervalOptions } from './_interval_options'; import intervalTemplate from '../controls/time_interval.html'; +import dropPartialTemplate from '../controls/drop_partials.html'; const config = chrome.getUiSettingsClient(); const detectedTimezone = tzDetect.determine().name(); @@ -147,6 +148,13 @@ export const dateHistogramBucketAgg = new BucketAggType({ return isDefaultTimezone ? detectedTimezone || tzOffset : config.get('dateFormat:tz'); }, }, + { + name: 'drop_partials', + default: false, + write: _.noop, + editor: dropPartialTemplate, + }, + { name: 'customInterval', default: '2h', diff --git a/src/ui/public/agg_types/controls/drop_partials.html b/src/ui/public/agg_types/controls/drop_partials.html new file mode 100644 index 00000000000000..3b3713db22f871 --- /dev/null +++ b/src/ui/public/agg_types/controls/drop_partials.html @@ -0,0 +1,11 @@ +
    + +
    diff --git a/src/ui/public/vis/response_handlers/basic.js b/src/ui/public/vis/response_handlers/basic.js index d8ce9942a88983..42625fade7b595 100644 --- a/src/ui/public/vis/response_handlers/basic.js +++ b/src/ui/public/vis/response_handlers/basic.js @@ -19,6 +19,7 @@ import { AggResponseIndexProvider } from '../../agg_response'; import { TabifyTable } from '../../agg_response/tabify/_table'; +import { getTime } from 'ui/timefilter/get_time'; import { VisResponseHandlersRegistryProvider } from '../../registry/vis_response_handlers'; @@ -71,10 +72,13 @@ const BasicResponseHandlerProvider = function (Private) { resolve(aggResponse.hierarchical(vis, response)); } + const time = getTime(vis.indexPattern, vis.filters.timeRange); + const tableGroup = aggResponse.tabify(vis.getAggConfig(), response, { canSplit: true, asAggConfigResults: true, - isHierarchical: vis.isHierarchical() + isHierarchical: vis.isHierarchical(), + timeRange: time ? time.range : undefined }); let converted = convertTableGroup(vis, tableGroup); diff --git a/src/ui/public/vis/response_handlers/tabify.js b/src/ui/public/vis/response_handlers/tabify.js index 1b3cc3a1c33465..6a74fd2dbd728e 100644 --- a/src/ui/public/vis/response_handlers/tabify.js +++ b/src/ui/public/vis/response_handlers/tabify.js @@ -20,6 +20,7 @@ import _ from 'lodash'; import { AggResponseIndexProvider } from '../../agg_response'; import { VisResponseHandlersRegistryProvider } from '../../registry/vis_response_handlers'; +import { getTime } from 'ui/timefilter/get_time'; const TabifyResponseHandlerProvider = function (Private) { const aggResponse = Private(AggResponseIndexProvider); @@ -28,11 +29,13 @@ const TabifyResponseHandlerProvider = function (Private) { name: 'tabify', handler: function (vis, response) { return new Promise((resolve) => { + const time = getTime(vis.indexPattern, vis.filters.timeRange); const tableGroup = aggResponse.tabify(vis.getAggConfig(), response, { canSplit: true, asAggConfigResults: _.get(vis, 'type.responseHandlerConfig.asAggConfigResults', false), - isHierarchical: vis.isHierarchical() + isHierarchical: vis.isHierarchical(), + timeRange: time ? time.range : undefined }); resolve(tableGroup); From f6a3f900b1a3e4deacb65768d5ffbc5f0b4e0cf4 Mon Sep 17 00:00:00 2001 From: Guanghao Fan <389823537@qq.com> Date: Thu, 30 Aug 2018 20:14:36 +0800 Subject: [PATCH 073/173] Fix issue with heatmap showing black tiles (#20753) * Heatmap metric data points should only be quantized while the data full range is grate than the maxmum allowed color count * The data cell with metric value 'null' should always be hidden in the heatmap * Add one variable for max color count and follow the coding style --- .../point_series/heatmap_chart.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ui/public/vislib/visualizations/point_series/heatmap_chart.js b/src/ui/public/vislib/visualizations/point_series/heatmap_chart.js index 3f2391eb1e3516..b765ccb31838e7 100644 --- a/src/ui/public/vislib/visualizations/point_series/heatmap_chart.js +++ b/src/ui/public/vislib/visualizations/point_series/heatmap_chart.js @@ -69,6 +69,7 @@ export function VislibVisualizationsHeatmapChartProvider(Private) { const zScale = this.getValueAxis().getScale(); const [min, max] = zScale.domain(); const labels = []; + const maxColorCnt = 10; if (cfg.get('setColorRange')) { colorsRange.forEach(range => { const from = isFinite(range.from) ? zAxisFormatter(range.from) : range.from; @@ -90,8 +91,14 @@ export function VislibVisualizationsHeatmapChartProvider(Private) { } else { val = val * (max - min) + min; nextVal = nextVal * (max - min) + min; - if (max > 1) { - val = Math.ceil(val); + if (max - min > maxColorCnt) { + const valInt = Math.ceil(val); + if (i === 0) { + val = (valInt === val ? val : valInt - 1); + } + else{ + val = valInt; + } nextVal = Math.ceil(nextVal); } if (isFinite(val)) val = zAxisFormatter(val); @@ -184,12 +191,16 @@ export function VislibVisualizationsHeatmapChartProvider(Private) { val = Math.min(colorsNumber - 1, Math.floor(val * colorsNumber)); } } + if (d.y == null) { + return -1; + } return !isNaN(val) ? val : -1; } function label(d) { const colorBucket = getColorBucket(d); - if (colorBucket === -1) d.hide = true; + // colorBucket id should always GTE 0 + if (colorBucket < 0) d.hide = true; return labels[colorBucket]; } From e5a94e7a1062f34471444ea29e20a844815842f6 Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Thu, 30 Aug 2018 14:56:18 +0200 Subject: [PATCH 074/173] simplified tabify (#19061) --- .../kbn_vislib_vis_types/public/gauge.js | 3 +- .../kbn_vislib_vis_types/public/goal.js | 3 +- .../public/discover/controllers/discover.js | 4 +- .../metric_vis/public/__tests__/metric_vis.js | 8 +- .../public/__tests__/metric_vis_controller.js | 20 +- .../metric_vis/public/metric_vis.js | 1 + .../public/metric_vis_controller.js | 87 ++-- .../__tests__/region_map_visualization.js | 42 +- .../public/region_map_visualization.js | 17 +- .../public/__tests__/_table_vis_controller.js | 28 +- .../table_vis/public/table_vis.js | 1 + .../__tests__/tag_cloud_visualization.js | 38 +- .../tagcloud/public/tag_cloud_vis.js | 3 +- .../public/tag_cloud_visualization.js | 13 +- .../public/coordinatemap_response_handler.js | 4 +- .../point_series/__tests__/_fake_x_aspect.js | 12 +- .../point_series/__tests__/_get_aspects.js | 12 +- .../point_series/__tests__/_get_point.js | 12 +- .../point_series/__tests__/_get_series.js | 25 +- .../point_series/__tests__/_init_x_axis.js | 26 +- .../point_series/__tests__/_init_y_axis.js | 14 +- .../point_series/__tests__/_main.js | 9 +- .../__tests__/_ordered_date_axis.js | 6 +- .../point_series/__tests__/point_series.js | 21 +- .../point_series/_fake_x_aspect.js | 7 +- .../agg_response/point_series/_get_aspects.js | 4 +- .../agg_response/point_series/_get_point.js | 8 +- .../agg_response/point_series/_get_series.js | 10 +- .../agg_response/point_series/_init_x_axis.js | 12 +- .../agg_response/point_series/_init_y_axis.js | 12 +- .../point_series/_ordered_date_axis.js | 2 +- .../agg_response/point_series/point_series.js | 2 +- .../tabify/__tests__/_get_columns.js | 8 +- .../tabify/__tests__/_integration.js | 175 ++----- .../tabify/__tests__/_response_writer.js | 434 ++++-------------- .../agg_response/tabify/__tests__/_table.js | 94 ---- .../tabify/__tests__/_table_group.js | 32 -- .../agg_response/tabify/__tests__/tabify.js | 2 - .../agg_response/tabify/_get_columns.js | 23 +- .../agg_response/tabify/_response_writer.js | 284 ++---------- src/ui/public/agg_response/tabify/_table.js | 53 --- .../agg_response/tabify/_table_group.js | 39 -- src/ui/public/agg_response/tabify/tabify.js | 66 +-- src/ui/public/agg_table/__tests__/_group.js | 12 +- src/ui/public/agg_table/__tests__/_table.js | 69 +-- src/ui/public/agg_table/agg_table.js | 4 +- .../agg_types/__tests__/metrics/median.js | 3 +- .../__tests__/metrics/parent_pipeline.js | 3 +- .../__tests__/metrics/sibling_pipeline.js | 3 +- .../agg_types/__tests__/metrics/top_hit.js | 3 +- src/ui/public/vis/__tests__/_vis.js | 3 +- .../response_handlers/_build_chart_data.js | 9 +- .../vis/__tests__/response_handlers/basic.js | 4 +- .../__tests__/vis_types/vislib_vis_type.js | 4 +- src/ui/public/vis/map/convert_to_geojson.js | 29 +- src/ui/public/vis/request_handlers/courier.js | 13 +- src/ui/public/vis/response_handlers/legacy.js | 110 +++++ src/ui/public/vis/response_handlers/tabify.js | 8 +- .../response_handlers/{basic.js => vislib.js} | 43 +- src/ui/public/vis/vis.js | 16 +- .../public/vis/vis_types/vislib_vis_type.js | 3 +- src/ui/public/vislib/lib/handler.js | 13 +- .../components/visualization.test.js | 9 +- .../visualize/components/visualization.tsx | 5 +- .../components/visualization_noresults.tsx | 16 +- src/ui/ui_exports/ui_export_defaults.js | 3 +- 66 files changed, 684 insertions(+), 1377 deletions(-) delete mode 100644 src/ui/public/agg_response/tabify/__tests__/_table.js delete mode 100644 src/ui/public/agg_response/tabify/__tests__/_table_group.js delete mode 100644 src/ui/public/agg_response/tabify/_table.js delete mode 100644 src/ui/public/agg_response/tabify/_table_group.js create mode 100644 src/ui/public/vis/response_handlers/legacy.js rename src/ui/public/vis/response_handlers/{basic.js => vislib.js} (66%) diff --git a/src/core_plugins/kbn_vislib_vis_types/public/gauge.js b/src/core_plugins/kbn_vislib_vis_types/public/gauge.js index bcf5e3f6850c7a..fae7248e82e1c0 100644 --- a/src/core_plugins/kbn_vislib_vis_types/public/gauge.js +++ b/src/core_plugins/kbn_vislib_vis_types/public/gauge.js @@ -110,6 +110,7 @@ export default function GaugeVisType(Private) { aggFilter: ['!geohash_grid', '!filter'] } ]) - } + }, + useCustomNoDataScreen: true }); } diff --git a/src/core_plugins/kbn_vislib_vis_types/public/goal.js b/src/core_plugins/kbn_vislib_vis_types/public/goal.js index 5d94ebb0f5d4b5..2ce74fd4d98124 100644 --- a/src/core_plugins/kbn_vislib_vis_types/public/goal.js +++ b/src/core_plugins/kbn_vislib_vis_types/public/goal.js @@ -105,6 +105,7 @@ export default function GoalVisType(Private) { aggFilter: ['!geohash_grid', '!filter'] } ]) - } + }, + useCustomNoDataScreen: true }); } diff --git a/src/core_plugins/kibana/public/discover/controllers/discover.js b/src/core_plugins/kibana/public/discover/controllers/discover.js index d449bdcfef832e..b2b1ef1bbe152e 100644 --- a/src/core_plugins/kibana/public/discover/controllers/discover.js +++ b/src/core_plugins/kibana/public/discover/controllers/discover.js @@ -35,7 +35,7 @@ import 'ui/query_bar'; import { hasSearchStategyForIndexPattern, isDefaultTypeIndexPattern } from 'ui/courier'; import { toastNotifications } from 'ui/notify'; import { VisProvider } from 'ui/vis'; -import { BasicResponseHandlerProvider } from 'ui/vis/response_handlers/basic'; +import { VislibResponseHandlerProvider } from 'ui/vis/response_handlers/vislib'; import { DocTitleProvider } from 'ui/doc_title'; import PluginsKibanaDiscoverHitSortFnProvider from '../_hit_sort_fn'; import { FilterBarQueryFilterProvider } from 'ui/filter_bar/query_filter'; @@ -156,7 +156,7 @@ function discoverController( const docTitle = Private(DocTitleProvider); const HitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider); const queryFilter = Private(FilterBarQueryFilterProvider); - const responseHandler = Private(BasicResponseHandlerProvider).handler; + const responseHandler = Private(VislibResponseHandlerProvider).handler; const filterManager = Private(FilterManagerProvider); const notify = new Notifier({ location: 'Discover' diff --git a/src/core_plugins/metric_vis/public/__tests__/metric_vis.js b/src/core_plugins/metric_vis/public/__tests__/metric_vis.js index 10b16f0652c5bd..5ec32b480ad3ff 100644 --- a/src/core_plugins/metric_vis/public/__tests__/metric_vis.js +++ b/src/core_plugins/metric_vis/public/__tests__/metric_vis.js @@ -25,7 +25,7 @@ import { VisProvider } from 'ui/vis'; import LogstashIndexPatternStubProvider from 'fixtures/stubbed_logstash_index_pattern'; import MetricVisProvider from '../metric_vis'; -describe('metric_vis', () => { +describe('metric vis', () => { let setup = null; let vis; @@ -62,10 +62,8 @@ describe('metric_vis', () => { const ip = '235.195.237.208'; render({ - tables: [{ - columns: [{ title: 'ip', aggConfig: vis.aggs[0] }], - rows: [[ ip ]] - }] + columns: [{ id: 'col-0', title: 'ip', aggConfig: vis.aggs[0] }], + rows: [{ 'col-0': ip }] }); const $link = $(el) diff --git a/src/core_plugins/metric_vis/public/__tests__/metric_vis_controller.js b/src/core_plugins/metric_vis/public/__tests__/metric_vis_controller.js index 7ce5cb6ab18244..ec3aa063d939a1 100644 --- a/src/core_plugins/metric_vis/public/__tests__/metric_vis_controller.js +++ b/src/core_plugins/metric_vis/public/__tests__/metric_vis_controller.js @@ -20,7 +20,7 @@ import expect from 'expect.js'; import { MetricVisComponent } from '../metric_vis_controller'; -describe('metric vis', function () { +describe('metric vis controller', function () { const vis = { params: { @@ -53,10 +53,8 @@ describe('metric vis', function () { it('should set the metric label and value', function () { const metrics = metricController._processTableGroups({ - tables: [{ - columns: [{ title: 'Count', aggConfig: { ...aggConfig, makeLabel: () => 'Count' } }], - rows: [[ 4301021 ]] - }] + columns: [{ id: 'col-0', title: 'Count', aggConfig: { ...aggConfig, makeLabel: () => 'Count' } }], + rows: [{ 'col-0': 4301021 }] }); expect(metrics.length).to.be(1); @@ -66,13 +64,11 @@ describe('metric vis', function () { it('should support multi-value metrics', function () { const metrics = metricController._processTableGroups({ - tables: [{ - columns: [ - { aggConfig: { ...aggConfig, makeLabel: () => '1st percentile of bytes' } }, - { aggConfig: { ...aggConfig, makeLabel: () => '99th percentile of bytes' } } - ], - rows: [[ 182, 445842.4634666484 ]] - }] + columns: [ + { id: 'col-0', aggConfig: { ...aggConfig, makeLabel: () => '1st percentile of bytes' } }, + { id: 'col-1', aggConfig: { ...aggConfig, makeLabel: () => '99th percentile of bytes' } } + ], + rows: [{ 'col-0': 182, 'col-1': 445842.4634666484 }] }); expect(metrics.length).to.be(2); diff --git a/src/core_plugins/metric_vis/public/metric_vis.js b/src/core_plugins/metric_vis/public/metric_vis.js index 4d25bad420da26..c4cbd0c11716ef 100644 --- a/src/core_plugins/metric_vis/public/metric_vis.js +++ b/src/core_plugins/metric_vis/public/metric_vis.js @@ -100,6 +100,7 @@ function MetricVisProvider(Private) { } ]) }, + responseHandler: 'tabify', }); } diff --git a/src/core_plugins/metric_vis/public/metric_vis_controller.js b/src/core_plugins/metric_vis/public/metric_vis_controller.js index fa9adb7885ced3..abd6d63cc8ec4d 100644 --- a/src/core_plugins/metric_vis/public/metric_vis_controller.js +++ b/src/core_plugins/metric_vis/public/metric_vis_controller.js @@ -89,7 +89,7 @@ export class MetricVisComponent extends Component { return fieldFormatter(value); } - _processTableGroups(tableGroups) { + _processTableGroups(table) { const config = this.props.vis.params.metric; const isPercentageMode = config.percentageMode; const min = config.colorsRange[0].from; @@ -98,56 +98,55 @@ export class MetricVisComponent extends Component { const labels = this._getLabels(); const metrics = []; - tableGroups.tables.forEach((table, tableIndex) => { - let bucketAgg; - let rowHeaderIndex; + let bucketAgg; + let bucketColumnId; + let rowHeaderIndex; - table.columns.forEach((column, columnIndex) => { - const aggConfig = column.aggConfig; + table.columns.forEach((column, columnIndex) => { + const aggConfig = column.aggConfig; - if (aggConfig && aggConfig.type.type === 'buckets') { - bucketAgg = aggConfig; - // Store the current index, so we later know in which position in the - // row array, the bucket agg key will be, so we can create filters on it. - rowHeaderIndex = columnIndex; - return; - } + if (aggConfig && aggConfig.type.type === 'buckets') { + bucketAgg = aggConfig; + // Store the current index, so we later know in which position in the + // row array, the bucket agg key will be, so we can create filters on it. + rowHeaderIndex = columnIndex; + bucketColumnId = column.id; + return; + } - table.rows.forEach((row, rowIndex) => { + table.rows.forEach((row, rowIndex) => { - let title = column.title; - let value = row[columnIndex]; - const color = this._getColor(value, labels, colors); + let title = column.name; + let value = row[column.id]; + const color = this._getColor(value, labels, colors); - if (isPercentageMode) { - const percentage = Math.round(100 * (value - min) / (max - min)); - value = `${percentage}%`; - } + if (isPercentageMode) { + const percentage = Math.round(100 * (value - min) / (max - min)); + value = `${percentage}%`; + } - if (aggConfig) { - if (!isPercentageMode) value = this._getFormattedValue(aggConfig.fieldFormatter('html'), value); - if (bucketAgg) { - const bucketValue = bucketAgg.fieldFormatter('text')(row[0]); - title = `${bucketValue} - ${aggConfig.makeLabel()}`; - } else { - title = aggConfig.makeLabel(); - } + if (aggConfig) { + if (!isPercentageMode) value = this._getFormattedValue(aggConfig.fieldFormatter('html'), value); + if (bucketAgg) { + const bucketValue = bucketAgg.fieldFormatter('text')(row[bucketColumnId]); + title = `${bucketValue} - ${aggConfig.makeLabel()}`; + } else { + title = aggConfig.makeLabel(); } + } - const shouldColor = config.colorsRange.length > 1; - - metrics.push({ - label: title, - value: value, - color: shouldColor && config.style.labelColor ? color : null, - bgColor: shouldColor && config.style.bgColor ? color : null, - lightText: shouldColor && config.style.bgColor && this._needsLightText(color), - filterKey: rowHeaderIndex !== undefined ? row[rowHeaderIndex] : null, - tableIndex: tableIndex, - rowIndex: rowIndex, - columnIndex: rowHeaderIndex, - bucketAgg: bucketAgg, - }); + const shouldColor = config.colorsRange.length > 1; + + metrics.push({ + label: title, + value: value, + color: shouldColor && config.style.labelColor ? color : null, + bgColor: shouldColor && config.style.bgColor ? color : null, + lightText: shouldColor && config.style.bgColor && this._needsLightText(color), + filterKey: bucketColumnId !== undefined ? row[bucketColumnId] : null, + rowIndex: rowIndex, + columnIndex: rowHeaderIndex, + bucketAgg: bucketAgg, }); }); }); @@ -159,7 +158,7 @@ export class MetricVisComponent extends Component { if (!metric.filterKey || !metric.bucketAgg) { return; } - const table = this.props.visData.tables[metric.tableIndex]; + const table = this.props.visData; this.props.vis.API.events.addFilter(table, metric.columnIndex, metric.rowIndex); }; diff --git a/src/core_plugins/region_map/public/__tests__/region_map_visualization.js b/src/core_plugins/region_map/public/__tests__/region_map_visualization.js index b0acdb85fddcff..7f3064b99380f0 100644 --- a/src/core_plugins/region_map/public/__tests__/region_map_visualization.js +++ b/src/core_plugins/region_map/public/__tests__/region_map_visualization.js @@ -108,22 +108,26 @@ describe('RegionMapsVisualizationTests', function () { const _makeJsonAjaxCallOld = ChoroplethLayer.prototype._makeJsonAjaxCall; const dummyTableGroup = { - tables: [ - { - columns: [{ - 'aggConfig': { - 'id': '2', - 'enabled': true, - 'type': 'terms', - 'schema': 'segment', - 'params': { 'field': 'geo.dest', 'size': 5, 'order': 'desc', 'orderBy': '1' } - }, 'title': 'geo.dest: Descending' - }, { - 'aggConfig': { 'id': '1', 'enabled': true, 'type': 'count', 'schema': 'metric', 'params': {} }, - 'title': 'Count' - }], - rows: [['CN', 26], ['IN', 17], ['US', 6], ['DE', 4], ['BR', 3]] - } + columns: [{ + 'id': 'col-0', + 'aggConfig': { + 'id': '2', + 'enabled': true, + 'type': 'terms', + 'schema': 'segment', + 'params': { 'field': 'geo.dest', 'size': 5, 'order': 'desc', 'orderBy': '1' } + }, 'title': 'geo.dest: Descending' + }, { + 'id': 'col-1', + 'aggConfig': { 'id': '1', 'enabled': true, 'type': 'count', 'schema': 'metric', 'params': {} }, + 'title': 'Count' + }], + rows: [ + { 'col-0': 'CN', 'col-1': 26 }, + { 'col-0': 'IN', 'col-1': 17 }, + { 'col-0': 'US', 'col-1': 6 }, + { 'col-0': 'DE', 'col-1': 4 }, + { 'col-0': 'BR', 'col-1': 3 } ] }; @@ -293,7 +297,7 @@ describe('RegionMapsVisualizationTests', function () { }); const newTableGroup = _.cloneDeep(dummyTableGroup); - newTableGroup.tables[0].rows.pop();//remove one shape + newTableGroup.rows.pop();//remove one shape await regionMapsVisualization.render(newTableGroup, { resize: false, @@ -306,7 +310,7 @@ describe('RegionMapsVisualizationTests', function () { const anotherTableGroup = _.cloneDeep(newTableGroup); - anotherTableGroup.tables[0].rows.pop();//remove one shape + anotherTableGroup.rows.pop();//remove one shape domNode.style.width = '412px'; domNode.style.height = '112px'; await regionMapsVisualization.render(anotherTableGroup, { @@ -336,7 +340,7 @@ describe('RegionMapsVisualizationTests', function () { }); const newTableGroup = _.cloneDeep(dummyTableGroup); - newTableGroup.tables[0].rows.pop();//remove one shape + newTableGroup.rows.pop();//remove one shape vis.params.colorSchema = 'Blues'; await regionMapsVisualization.render(newTableGroup, { resize: false, diff --git a/src/core_plugins/region_map/public/region_map_visualization.js b/src/core_plugins/region_map/public/region_map_visualization.js index 881bfd4ea8dc63..fd2be9aef49dc3 100644 --- a/src/core_plugins/region_map/public/region_map_visualization.js +++ b/src/core_plugins/region_map/public/region_map_visualization.js @@ -46,14 +46,17 @@ export function RegionMapsVisualizationProvider(Private, config) { } } - async _updateData(tableGroup) { - this._chartData = tableGroup; + async _updateData(table) { + this._chartData = table; let results; - if (!tableGroup || !tableGroup.tables || !tableGroup.tables.length || tableGroup.tables[0].columns.length !== 2) { + if (!table || !table.rows.length || table.columns.length !== 2) { results = []; } else { - const buckets = tableGroup.tables[0].rows; - results = buckets.map(([term, value]) => { + const termColumn = table.columns[0].id; + const valueColumn = table.columns[1].id; + results = table.rows.map(row => { + const term = row[termColumn]; + const value = row[valueColumn]; return { term: term, value: value }; }); } @@ -150,8 +153,8 @@ export function RegionMapsVisualizationProvider(Private, config) { return; } - const rowIndex = this._chartData.tables[0].rows.findIndex(row => row[0] === event); - this._vis.API.events.addFilter(this._chartData.tables[0], 0, rowIndex, event); + const rowIndex = this._chartData.rows.findIndex(row => row[0] === event); + this._vis.API.events.addFilter(this._chartData, 0, rowIndex, event); }); this._choroplethLayer.on('styleChanged', (event) => { diff --git a/src/core_plugins/table_vis/public/__tests__/_table_vis_controller.js b/src/core_plugins/table_vis/public/__tests__/_table_vis_controller.js index d13075ed2c0433..acdb2d1b6aa08b 100644 --- a/src/core_plugins/table_vis/public/__tests__/_table_vis_controller.js +++ b/src/core_plugins/table_vis/public/__tests__/_table_vis_controller.js @@ -21,7 +21,7 @@ import $ from 'jquery'; import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ng_mock'; -import { tabifyAggResponse } from 'ui/agg_response/tabify/tabify'; +import { LegacyResponseHandlerProvider } from 'ui/vis/response_handlers/legacy'; import { VisProvider } from 'ui/vis'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import { AppStateProvider } from 'ui/state_management/app_state'; @@ -35,6 +35,7 @@ describe('Table Vis Controller', function () { let Vis; let fixtures; let AppState; + let tableAggResponse; beforeEach(ngMock.module('kibana', 'kibana/table_vis')); beforeEach(ngMock.inject(function ($injector) { @@ -44,6 +45,7 @@ describe('Table Vis Controller', function () { fixtures = require('fixtures/fake_hierarchical_data'); AppState = Private(AppStateProvider); Vis = Private(VisProvider); + tableAggResponse = Private(LegacyResponseHandlerProvider).handler; })); function OneRangeVis(params) { @@ -99,16 +101,14 @@ describe('Table Vis Controller', function () { $rootScope.$apply(); } - it('exposes #tableGroups and #hasSomeRows when a response is attached to scope', function () { + it('exposes #tableGroups and #hasSomeRows when a response is attached to scope', async function () { const vis = new OneRangeVis(); initController(vis); expect(!$scope.tableGroups).to.be.ok(); expect(!$scope.hasSomeRows).to.be.ok(); - attachEsResponseToScope(tabifyAggResponse(vis.getAggConfig(), fixtures.oneRangeBucket, { - isHierarchical: vis.isHierarchical() - })); + attachEsResponseToScope(await tableAggResponse(vis, fixtures.oneRangeBucket)); expect($scope.hasSomeRows).to.be(true); expect($scope.tableGroups).to.have.property('tables'); @@ -117,20 +117,18 @@ describe('Table Vis Controller', function () { expect($scope.tableGroups.tables[0].rows).to.have.length(2); }); - it('clears #tableGroups and #hasSomeRows when the response is removed', function () { + it('clears #tableGroups and #hasSomeRows when the response is removed', async function () { const vis = new OneRangeVis(); initController(vis); - attachEsResponseToScope(tabifyAggResponse(vis.getAggConfig(), fixtures.oneRangeBucket, { - isHierarchical: vis.isHierarchical() - })); + attachEsResponseToScope(await tableAggResponse(vis, fixtures.oneRangeBucket)); removeEsResponseFromScope(); expect(!$scope.hasSomeRows).to.be.ok(); expect(!$scope.tableGroups).to.be.ok(); }); - it('sets the sort on the scope when it is passed as a vis param', function () { + it('sets the sort on the scope when it is passed as a vis param', async function () { const sortObj = { columnIndex: 1, direction: 'asc' @@ -142,15 +140,13 @@ describe('Table Vis Controller', function () { const resp = _.cloneDeep(fixtures.oneRangeBucket); resp.aggregations.agg_2.buckets = {}; - attachEsResponseToScope(tabifyAggResponse(vis.getAggConfig(), resp, { - isHierarchical: vis.isHierarchical() - })); + attachEsResponseToScope(await tableAggResponse(vis, resp)); expect($scope.sort.columnIndex).to.equal(sortObj.columnIndex); expect($scope.sort.direction).to.equal(sortObj.direction); }); - it('sets #hasSomeRows properly if the table group is empty', function () { + it('sets #hasSomeRows properly if the table group is empty', async function () { const vis = new OneRangeVis(); initController(vis); @@ -158,9 +154,7 @@ describe('Table Vis Controller', function () { const resp = _.cloneDeep(fixtures.oneRangeBucket); resp.aggregations.agg_2.buckets = {}; - attachEsResponseToScope(tabifyAggResponse(vis.getAggConfig(), resp, { - isHierarchical: vis.isHierarchical() - })); + attachEsResponseToScope(await tableAggResponse(vis, resp)); expect($scope.hasSomeRows).to.be(false); expect(!$scope.tableGroups).to.be.ok(); diff --git a/src/core_plugins/table_vis/public/table_vis.js b/src/core_plugins/table_vis/public/table_vis.js index 5d430b71e26f65..05cc5f4c3aab57 100644 --- a/src/core_plugins/table_vis/public/table_vis.js +++ b/src/core_plugins/table_vis/public/table_vis.js @@ -96,6 +96,7 @@ function TableVisTypeProvider(Private) { } ]) }, + responseHandler: 'legacy', responseHandlerConfig: { asAggConfigResults: true }, diff --git a/src/core_plugins/tagcloud/public/__tests__/tag_cloud_visualization.js b/src/core_plugins/tagcloud/public/__tests__/tag_cloud_visualization.js index 7a8db667f7d560..d37c19786b69b8 100644 --- a/src/core_plugins/tagcloud/public/__tests__/tag_cloud_visualization.js +++ b/src/core_plugins/tagcloud/public/__tests__/tag_cloud_visualization.js @@ -39,23 +39,27 @@ describe('TagCloudVisualizationTest', function () { let imageComparator; const dummyTableGroup = { - tables: [ - { - columns: [{ - 'aggConfig': { - 'id': '2', - 'enabled': true, - 'type': 'terms', - 'schema': 'segment', - 'params': { 'field': 'geo.dest', 'size': 5, 'order': 'desc', 'orderBy': '1' }, - fieldFormatter: () => (x => x) - }, 'title': 'geo.dest: Descending' - }, { - 'aggConfig': { 'id': '1', 'enabled': true, 'type': 'count', 'schema': 'metric', 'params': {} }, - 'title': 'Count' - }], - rows: [['CN', 26], ['IN', 17], ['US', 6], ['DE', 4], ['BR', 3]] - } + columns: [{ + id: 'col-0', + 'aggConfig': { + 'id': '2', + 'enabled': true, + 'type': 'terms', + 'schema': 'segment', + 'params': { 'field': 'geo.dest', 'size': 5, 'order': 'desc', 'orderBy': '1' }, + fieldFormatter: () => (x => x) + }, 'title': 'geo.dest: Descending' + }, { + id: 'col-1', + 'aggConfig': { 'id': '1', 'enabled': true, 'type': 'count', 'schema': 'metric', 'params': {} }, + 'title': 'Count' + }], + rows: [ + { 'col-0': 'CN', 'col-1': 26 }, + { 'col-0': 'IN', 'col-1': 17 }, + { 'col-0': 'US', 'col-1': 6 }, + { 'col-0': 'DE', 'col-1': 4 }, + { 'col-0': 'BR', 'col-1': 3 } ] }; diff --git a/src/core_plugins/tagcloud/public/tag_cloud_vis.js b/src/core_plugins/tagcloud/public/tag_cloud_vis.js index ee6aed7b6868b6..4ac7d92efdf478 100644 --- a/src/core_plugins/tagcloud/public/tag_cloud_vis.js +++ b/src/core_plugins/tagcloud/public/tag_cloud_vis.js @@ -77,6 +77,7 @@ VisTypesRegistryProvider.register(function (Private) { aggFilter: ['terms', 'significant_terms'] } ]) - } + }, + useCustomNoDataScreen: true }); }); diff --git a/src/core_plugins/tagcloud/public/tag_cloud_visualization.js b/src/core_plugins/tagcloud/public/tag_cloud_visualization.js index e625caa13394fb..251673ca30cae1 100644 --- a/src/core_plugins/tagcloud/public/tag_cloud_visualization.js +++ b/src/core_plugins/tagcloud/public/tag_cloud_visualization.js @@ -110,13 +110,12 @@ export class TagCloudVisualization { } - _updateData(response) { - if (!response || !response.tables.length) { + _updateData(data) { + if (!data || !data.rows.length) { this._tagCloud.setData([]); return; } - const data = response.tables[0]; const segmentAggs = this._vis.aggs.bySchemaName.segment; if (segmentAggs && segmentAggs.length > 0) { this._bucketAgg = segmentAggs[0]; @@ -124,12 +123,16 @@ export class TagCloudVisualization { this._bucketAgg = null; } + const hasTags = data.columns.length === 2; + const tagColumn = hasTags ? data.columns[0].id : -1; + const metricColumn = data.columns[hasTags ? 1 : 0].id; const tags = data.rows.map((row, rowIndex) => { - const [tag, count] = row; + const tag = row[tagColumn] || 'all'; + const metric = row[metricColumn]; return { displayText: this._bucketAgg ? this._bucketAgg.fieldFormatter()(tag) : tag, rawText: tag, - value: count, + value: metric, meta: { data: data, rowIndex: rowIndex, diff --git a/src/core_plugins/tile_map/public/coordinatemap_response_handler.js b/src/core_plugins/tile_map/public/coordinatemap_response_handler.js index b99cef25104bb4..f742a651ed6a80 100644 --- a/src/core_plugins/tile_map/public/coordinatemap_response_handler.js +++ b/src/core_plugins/tile_map/public/coordinatemap_response_handler.js @@ -34,9 +34,7 @@ export function makeGeoJsonResponseHandler() { //double conversion, first to table, then to geojson //This is to future-proof this code for Canvas-refactoring - const tabifiedResponse = tabifyAggResponse(vis.getAggConfig(), esResponse, { - asAggConfigResults: false - }); + const tabifiedResponse = tabifyAggResponse(vis.getAggConfig(), esResponse); lastGeoJsonResponse = convertToGeoJson(tabifiedResponse); return lastGeoJsonResponse; diff --git a/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js b/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js index 9475b564d92cc0..ecd374871fe731 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js +++ b/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js @@ -43,22 +43,18 @@ describe('makeFakeXAspect', function () { expect(aspect) .to.have.property('i', -1) - .and.have.property('agg') - .and.have.property('col'); + .and.have.property('aggConfig') + .and.have.property('title'); - expect(aspect.agg) + expect(aspect.aggConfig) .to.be.an(AggConfig) .and.to.have.property('type'); - expect(aspect.agg.type) + expect(aspect.aggConfig.type) .to.be.an(AggType) .and.to.have.property('name', 'all') .and.to.have.property('title', 'All docs') .and.to.have.property('hasNoDsl', true); - expect(aspect.col) - .to.be.an('object') - .and.to.have.property('aggConfig', aspect.agg) - .and.to.have.property('label', aspect.agg.makeLabel()); }); }); diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js b/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js index 7338cd781239bf..8dabce275d5073 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js @@ -58,8 +58,7 @@ describe('getAspects', function () { expect(aspect) .to.be.an('object') .and.have.property('i', i) - .and.have.property('agg', vis.aggs[i]) - .and.have.property('col', table.columns[i]); + .and.have.property('aggConfig', vis.aggs[i]); } function init(group, x, y) { @@ -150,13 +149,10 @@ describe('getAspects', function () { expect(aspects.x) .to.be.an('object') .and.have.property('i', -1) - .and.have.property('agg') - .and.have.property('col'); + .and.have.property('aggConfig') + .and.have.property('title'); - expect(aspects.x.agg).to.be.an(AggConfig); - expect(aspects.x.col) - .to.be.an('object') - .and.to.have.property('aggConfig', aspects.x.agg); + expect(aspects.x.aggConfig).to.be.an(AggConfig); }); }); diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_point.js b/src/ui/public/agg_response/point_series/__tests__/_get_point.js index db2d7e5e1171e3..92a1fc871e694f 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_point.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_point.js @@ -37,15 +37,13 @@ describe('getPoint', function () { describe('Without series aspect', function () { let seriesAspect; let xAspect; - let yCol; let yAspect; let yScale; beforeEach(function () { seriesAspect = null; xAspect = { i: 0 }; - yCol = { title: 'Y', aggConfig: {} }; - yAspect = { i: 1, col: yCol }; + yAspect = { i: 1, title: 'Y', aggConfig: {} }; yScale = 5; }); @@ -58,7 +56,7 @@ describe('getPoint', function () { .to.have.property('x', 1) .and.have.property('y', 10) .and.have.property('z', 3) - .and.have.property('series', yCol.title) + .and.have.property('series', yAspect.title) .and.have.property('aggConfigResult', row[1]); }); @@ -83,7 +81,7 @@ describe('getPoint', function () { }); it('properly unwraps and scales values', function () { - const seriesAspect = { i: 1, agg: identFormatted }; + const seriesAspect = { i: 1, aggConfig: identFormatted }; const point = getPoint(xAspect, seriesAspect, yScale, row, yAspect); expect(point) @@ -94,7 +92,7 @@ describe('getPoint', function () { }); it('properly formats series values', function () { - const seriesAspect = { i: 1, agg: truthFormatted }; + const seriesAspect = { i: 1, aggConfig: truthFormatted }; const point = getPoint(xAspect, seriesAspect, yScale, row, yAspect); expect(point) @@ -105,7 +103,7 @@ describe('getPoint', function () { }); it ('adds the aggConfig to the points', function () { - const seriesAspect = { i: 1, agg: truthFormatted }; + const seriesAspect = { i: 1, aggConfig: truthFormatted }; const point = getPoint(xAspect, seriesAspect, yScale, row, yAspect); expect(point).to.have.property('aggConfig', truthFormatted); diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_series.js b/src/ui/public/agg_response/point_series/__tests__/_get_series.js index 0823f07d61143a..67c15222992533 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_series.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_series.js @@ -47,11 +47,10 @@ describe('getSeries', function () { [1, 2, 3] ].map(wrapRows); - const yCol = { aggConfig: {}, title: 'y' }; const chart = { aspects: { x: { i: 0 }, - y: { i: 1, col: yCol, agg: { id: 'id' } }, + y: { i: 1, title: 'y', aggConfig: { id: 'id' } }, z: { i: 2 } } }; @@ -65,7 +64,7 @@ describe('getSeries', function () { const siri = series[0]; expect(siri) .to.be.an('object') - .and.have.property('label', yCol.title) + .and.have.property('label', chart.aspects.y.title) .and.have.property('values'); expect(siri.values) @@ -93,8 +92,8 @@ describe('getSeries', function () { aspects: { x: { i: 0 }, y: [ - { i: 1, col: { title: '0' }, agg: { id: 1 } }, - { i: 2, col: { title: '1' }, agg: { id: 2 } }, + { i: 1, title: '0', aggConfig: { id: 1 } }, + { i: 2, title: '1', aggConfig: { id: 2 } }, ] } }; @@ -138,8 +137,8 @@ describe('getSeries', function () { const chart = { aspects: { x: { i: -1 }, - series: { i: 0, agg: agg }, - y: { i: 1, col: { title: '0' }, agg: agg } + series: { i: 0, aggConfig: agg }, + y: { i: 1, title: '0', aggConfig: agg } } }; @@ -180,10 +179,10 @@ describe('getSeries', function () { const chart = { aspects: { x: { i: -1 }, - series: { i: 0, agg: agg }, + series: { i: 0, aggConfig: agg }, y: [ - { i: 1, col: { title: '0' }, agg: { id: 1 } }, - { i: 2, col: { title: '1' }, agg: { id: 2 } } + { i: 1, title: '0', aggConfig: { id: 1 } }, + { i: 2, title: '1', aggConfig: { id: 2 } } ] } }; @@ -230,10 +229,10 @@ describe('getSeries', function () { const chart = { aspects: { x: { i: -1 }, - series: { i: 0, agg: agg }, + series: { i: 0, aggConfig: agg }, y: [ - { i: 1, col: { title: '0' }, agg: { id: 1 } }, - { i: 2, col: { title: '1' }, agg: { id: 2 } } + { i: 1, title: '0', aggConfig: { id: 1 } }, + { i: 2, title: '1', aggConfig: { id: 2 } } ] } }; diff --git a/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js b/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js index 48beab766df44c..0389a393ad15a9 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js @@ -34,14 +34,12 @@ describe('initXAxis', function () { const baseChart = { aspects: { x: { - agg: { + aggConfig: { fieldFormatter: _.constant({}), write: _.constant({ params: {} }), type: {} }, - col: { - title: 'label' - } + title: 'label' } } }; @@ -53,23 +51,23 @@ describe('initXAxis', function () { initXAxis(chart); expect(chart) .to.have.property('xAxisLabel', 'label') - .and.have.property('xAxisFormatter', chart.aspects.x.agg.fieldFormatter()); + .and.have.property('xAxisFormatter', chart.aspects.x.aggConfig.fieldFormatter()); }); it('makes the chart ordered if the agg is ordered', function () { const chart = _.cloneDeep(baseChart); - chart.aspects.x.agg.type.ordered = true; - chart.aspects.x.agg.params = { + chart.aspects.x.aggConfig.type.ordered = true; + chart.aspects.x.aggConfig.params = { field: field }; - chart.aspects.x.agg.vis = { + chart.aspects.x.aggConfig.vis = { indexPattern: indexPattern }; initXAxis(chart); expect(chart) .to.have.property('xAxisLabel', 'label') - .and.have.property('xAxisFormatter', chart.aspects.x.agg.fieldFormatter()) + .and.have.property('xAxisFormatter', chart.aspects.x.aggConfig.fieldFormatter()) .and.have.property('indexPattern', indexPattern) .and.have.property('xAxisField', field) .and.have.property('ordered'); @@ -81,19 +79,19 @@ describe('initXAxis', function () { it('reads the interval param from the x agg', function () { const chart = _.cloneDeep(baseChart); - chart.aspects.x.agg.type.ordered = true; - chart.aspects.x.agg.write = _.constant({ params: { interval: 10 } }); - chart.aspects.x.agg.params = { + chart.aspects.x.aggConfig.type.ordered = true; + chart.aspects.x.aggConfig.write = _.constant({ params: { interval: 10 } }); + chart.aspects.x.aggConfig.params = { field: field }; - chart.aspects.x.agg.vis = { + chart.aspects.x.aggConfig.vis = { indexPattern: indexPattern }; initXAxis(chart); expect(chart) .to.have.property('xAxisLabel', 'label') - .and.have.property('xAxisFormatter', chart.aspects.x.agg.fieldFormatter()) + .and.have.property('xAxisFormatter', chart.aspects.x.aggConfig.fieldFormatter()) .and.have.property('indexPattern', indexPattern) .and.have.property('xAxisField', field) .and.have.property('ordered'); diff --git a/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js b/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js index 507bd01b88fa2d..d8e06f2b355a20 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js @@ -42,12 +42,12 @@ describe('initYAxis', function () { const baseChart = { aspects: { y: [ - { agg: agg(), col: { title: 'y1' } }, - { agg: agg(), col: { title: 'y2' } }, + { aggConfig: agg(), title: 'y1' }, + { aggConfig: agg(), title: 'y2' }, ], x: { - agg: agg(), - col: { title: 'x' } + aggConfig: agg(), + title: 'x' } } }; @@ -59,7 +59,7 @@ describe('initYAxis', function () { it('sets the yAxisFormatter the the field formats convert fn', function () { const chart = _.cloneDeep(singleYBaseChart); initYAxis(chart); - expect(chart).to.have.property('yAxisFormatter', chart.aspects.y.agg.fieldFormatter()); + expect(chart).to.have.property('yAxisFormatter', chart.aspects.y.aggConfig.fieldFormatter()); }); it('sets the yAxisLabel', function () { @@ -76,8 +76,8 @@ describe('initYAxis', function () { expect(chart).to.have.property('yAxisFormatter'); expect(chart.yAxisFormatter) - .to.be(chart.aspects.y[0].agg.fieldFormatter()) - .and.not.be(chart.aspects.y[1].agg.fieldFormatter()); + .to.be(chart.aspects.y[0].aggConfig.fieldFormatter()) + .and.not.be(chart.aspects.y[1].aggConfig.fieldFormatter()); }); it('does not set the yAxisLabel, it does not make sense to put multiple labels on the same axis', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_main.js b/src/ui/public/agg_response/point_series/__tests__/_main.js index 9cfad3eaa053ef..3652e537d73dfa 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_main.js +++ b/src/ui/public/agg_response/point_series/__tests__/_main.js @@ -23,7 +23,6 @@ import AggConfigResult from '../../../vis/agg_config_result'; import expect from 'expect.js'; import ngMock from 'ng_mock'; import { VisProvider } from '../../../vis'; -import { TabifyTable } from '../../tabify/_table'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import { AggResponsePointSeriesProvider } from '../point_series'; @@ -47,7 +46,7 @@ describe('pointSeriesChartDataFromTable', function () { const agg = vis.aggs[0]; const result = new AggConfigResult(vis.aggs[0], void 0, 100, 100); - const table = new TabifyTable(); + const table = { rows: [] }; table.columns = [ { aggConfig: agg } ]; table.rows.push([ result ]); @@ -86,7 +85,7 @@ describe('pointSeriesChartDataFromTable', function () { }; const rowCount = 3; - const table = new TabifyTable(); + const table = { rows: [] }; table.columns = [ x.col, y.col ]; _.times(rowCount, function (i) { const date = new AggConfigResult(x.agg, void 0, x.at(i)); @@ -147,7 +146,7 @@ describe('pointSeriesChartDataFromTable', function () { }; const rowCount = 3; - const table = new TabifyTable(); + const table = { rows: [] }; table.columns = [ date.col, avg.col, max.col ]; _.times(rowCount, function (i) { const dateResult = new AggConfigResult(date.agg, void 0, date.at(i)); @@ -226,7 +225,7 @@ describe('pointSeriesChartDataFromTable', function () { const metricCount = 2; const rowsPerSegment = 2; const rowCount = extensions.length * rowsPerSegment; - const table = new TabifyTable(); + const table = { rows: [] }; table.columns = [ date.col, term.col, avg.col, max.col ]; _.times(rowCount, function (i) { const dateResult = new AggConfigResult(date.agg, void 0, date.at(i)); diff --git a/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js b/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js index 92eaa98b739fcf..611907733e86b9 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js @@ -35,7 +35,7 @@ describe('orderedDateAxis', function () { chart: { aspects: { x: { - agg: { + aggConfig: { fieldIsTimeField: _.constant(true), buckets: { getScaledDateFormat: _.constant('hh:mm:ss'), @@ -88,7 +88,7 @@ describe('orderedDateAxis', function () { it('relies on agg.buckets for the interval', function () { const args = _.cloneDeep(baseArgs); - const spy = sinon.spy(args.chart.aspects.x.agg.buckets, 'getInterval'); + const spy = sinon.spy(args.chart.aspects.x.aggConfig.buckets, 'getInterval'); orderedDateAxis(args.vis, args.chart); expect(spy).to.have.property('callCount', 1); }); @@ -102,7 +102,7 @@ describe('orderedDateAxis', function () { it('does not set the min/max when the buckets are unbounded', function () { const args = _.cloneDeep(baseArgs); - args.chart.aspects.x.agg.buckets.getBounds = _.constant(); + args.chart.aspects.x.aggConfig.buckets.getBounds = _.constant(); orderedDateAxis(args.vis, args.chart); expect(args.chart.ordered).to.not.have.property('min'); expect(args.chart.ordered).to.not.have.property('max'); diff --git a/src/ui/public/agg_response/point_series/__tests__/point_series.js b/src/ui/public/agg_response/point_series/__tests__/point_series.js index ff56ce1f12bca8..a649b7f38fc915 100644 --- a/src/ui/public/agg_response/point_series/__tests__/point_series.js +++ b/src/ui/public/agg_response/point_series/__tests__/point_series.js @@ -17,15 +17,16 @@ * under the License. */ -import './_main'; -import './_add_to_siri'; -import './_fake_x_aspect'; -import './_get_aspects'; -import './_get_point'; -import './_get_series'; -import './_init_x_axis'; -import './_init_y_axis'; -import './_ordered_date_axis'; -import './_tooltip_formatter'; + describe('Point Series Agg Response', function () { + require ('./_main'); + require('./_add_to_siri'); + require('./_fake_x_aspect'); + require('./_get_aspects'); + require('./_get_point'); + require('./_get_series'); + require('./_init_x_axis'); + require('./_init_y_axis'); + require('./_ordered_date_axis'); + require('./_tooltip_formatter'); }); diff --git a/src/ui/public/agg_response/point_series/_fake_x_aspect.js b/src/ui/public/agg_response/point_series/_fake_x_aspect.js index a6088ec45a71da..1fb873dda1f5df 100644 --- a/src/ui/public/agg_response/point_series/_fake_x_aspect.js +++ b/src/ui/public/agg_response/point_series/_fake_x_aspect.js @@ -37,11 +37,8 @@ export function PointSeriesFakeXAxisProvider() { return { i: -1, - agg: fake, - col: { - aggConfig: fake, - label: fake.makeLabel() - } + aggConfig: fake, + title: fake.makeLabel(), }; }; } diff --git a/src/ui/public/agg_response/point_series/_get_aspects.js b/src/ui/public/agg_response/point_series/_get_aspects.js index b1f8539618686c..4bb3ab3c8f1cb7 100644 --- a/src/ui/public/agg_response/point_series/_get_aspects.js +++ b/src/ui/public/agg_response/point_series/_get_aspects.js @@ -39,8 +39,8 @@ export function PointSeriesGetAspectsProvider(Private) { const aspect = { i: i, - col: col, - agg: col.aggConfig + title: col.title, + aggConfig: col.aggConfig }; if (!aspects[name]) aspects[name] = []; diff --git a/src/ui/public/agg_response/point_series/_get_point.js b/src/ui/public/agg_response/point_series/_get_point.js index aa914efa7e0a3e..2713483e3e342a 100644 --- a/src/ui/public/agg_response/point_series/_get_point.js +++ b/src/ui/public/agg_response/point_series/_get_point.js @@ -45,13 +45,13 @@ export function PointSeriesGetPointProvider() { if (series) { const seriesArray = series.length ? series : [ series ]; - point.aggConfig = seriesArray[0].agg; - point.series = seriesArray.map(s => s.agg.fieldFormatter()(unwrap(row[s.i]))).join(' - '); + point.aggConfig = seriesArray[0].aggConfig; + point.series = seriesArray.map(s => s.aggConfig.fieldFormatter()(unwrap(row[s.i]))).join(' - '); } else if (y) { // If the data is not split up with a series aspect, then // each point's "series" becomes the y-agg that produced it - point.aggConfig = y.col.aggConfig; - point.series = y.col.title; + point.aggConfig = y.aggConfig; + point.series = y.title; } if (yScale) { diff --git a/src/ui/public/agg_response/point_series/_get_series.js b/src/ui/public/agg_response/point_series/_get_series.js index 24ac1a589f53ba..31a40ede7e3efe 100644 --- a/src/ui/public/agg_response/point_series/_get_series.js +++ b/src/ui/public/agg_response/point_series/_get_series.js @@ -35,7 +35,7 @@ export function PointSeriesGetSeriesProvider(Private) { .transform(function (series, row) { if (!multiY) { const point = partGetPoint(row, aspects.y, aspects.z); - if (point) addToSiri(series, point, point.series, point.series, aspects.y.agg); + if (point) addToSiri(series, point, point.series, point.series, aspects.y.aggConfig); return; } @@ -46,8 +46,8 @@ export function PointSeriesGetSeriesProvider(Private) { // use the point's y-axis as it's series by default, // but augment that with series aspect if it's actually // available - let seriesId = y.agg.id; - let seriesLabel = y.col.title; + let seriesId = y.aggConfig.id; + let seriesLabel = y.title; if (aspects.series) { const prefix = point.series ? point.series + ': ' : ''; @@ -55,7 +55,7 @@ export function PointSeriesGetSeriesProvider(Private) { seriesLabel = prefix + seriesLabel; } - addToSiri(series, point, seriesId, seriesLabel, y.agg); + addToSiri(series, point, seriesId, seriesLabel, y.aggConfig); }); }, new Map()) @@ -70,7 +70,7 @@ export function PointSeriesGetSeriesProvider(Private) { if (firstVal) { const agg = firstVal.aggConfigResult.aggConfig; y = _.find(aspects.y, function (y) { - return y.agg === agg; + return y.aggConfig === agg; }); } diff --git a/src/ui/public/agg_response/point_series/_init_x_axis.js b/src/ui/public/agg_response/point_series/_init_x_axis.js index d07cbc5ba49c37..74be642a418748 100644 --- a/src/ui/public/agg_response/point_series/_init_x_axis.js +++ b/src/ui/public/agg_response/point_series/_init_x_axis.js @@ -21,16 +21,16 @@ export function PointSeriesInitXAxisProvider() { return function initXAxis(chart) { const x = chart.aspects.x; - chart.xAxisFormatter = x.agg ? x.agg.fieldFormatter() : String; - chart.xAxisLabel = x.col.title; + chart.xAxisFormatter = x.aggConfig ? x.aggConfig.fieldFormatter() : String; + chart.xAxisLabel = x.title; - if (!x.agg || !x.agg.type.ordered) return; + if (!x.aggConfig || !x.aggConfig.type.ordered) return; - chart.indexPattern = x.agg.vis.indexPattern; - chart.xAxisField = x.agg.params.field; + chart.indexPattern = x.aggConfig.vis.indexPattern; + chart.xAxisField = x.aggConfig.params.field; chart.ordered = {}; - const xAggOutput = x.agg.write(); + const xAggOutput = x.aggConfig.write(); if (xAggOutput.params.interval) { chart.ordered.interval = xAggOutput.params.interval; } diff --git a/src/ui/public/agg_response/point_series/_init_y_axis.js b/src/ui/public/agg_response/point_series/_init_y_axis.js index dd3165041547dc..1f38a100309555 100644 --- a/src/ui/public/agg_response/point_series/_init_y_axis.js +++ b/src/ui/public/agg_response/point_series/_init_y_axis.js @@ -24,21 +24,21 @@ export function PointSeriesInitYAxisProvider() { if (Array.isArray(y)) { // TODO: vis option should allow choosing this format - chart.yAxisFormatter = y[0].agg.fieldFormatter(); + chart.yAxisFormatter = y[0].aggConfig.fieldFormatter(); chart.yAxisLabel = ''; // use the legend } else { - chart.yAxisFormatter = y.agg.fieldFormatter(); - chart.yAxisLabel = y.col.title; + chart.yAxisFormatter = y.aggConfig.fieldFormatter(); + chart.yAxisLabel = y.title; } const z = chart.aspects.series; if (z) { if (Array.isArray(z)) { - chart.zAxisFormatter = z[0].agg.fieldFormatter(); + chart.zAxisFormatter = z[0].aggConfig.fieldFormatter(); chart.zAxisLabel = ''; // use the legend } else { - chart.zAxisFormatter = z.agg.fieldFormatter(); - chart.zAxisLabel = z.col.title; + chart.zAxisFormatter = z.aggConfig.fieldFormatter(); + chart.zAxisLabel = z.title; } } }; diff --git a/src/ui/public/agg_response/point_series/_ordered_date_axis.js b/src/ui/public/agg_response/point_series/_ordered_date_axis.js index e5d5f46883ec01..0b63e82ebd6430 100644 --- a/src/ui/public/agg_response/point_series/_ordered_date_axis.js +++ b/src/ui/public/agg_response/point_series/_ordered_date_axis.js @@ -22,7 +22,7 @@ import moment from 'moment'; export function PointSeriesOrderedDateAxisProvider() { return function orderedDateAxis(vis, chart) { - const xAgg = chart.aspects.x.agg; + const xAgg = chart.aspects.x.aggConfig; const buckets = xAgg.buckets; const format = buckets.getScaledDateFormat(); diff --git a/src/ui/public/agg_response/point_series/point_series.js b/src/ui/public/agg_response/point_series/point_series.js index 6dce54ee9b3c94..b6788bbbec00e8 100644 --- a/src/ui/public/agg_response/point_series/point_series.js +++ b/src/ui/public/agg_response/point_series/point_series.js @@ -42,7 +42,7 @@ export function AggResponsePointSeriesProvider(Private) { initXAxis(chart); initYAxis(chart); - const datedX = aspects.x.agg.type.ordered && aspects.x.agg.type.ordered.date; + const datedX = aspects.x.aggConfig.type.ordered && aspects.x.aggConfig.type.ordered.date; if (datedX) { setupOrderedDateXAxis(vis, chart); } diff --git a/src/ui/public/agg_response/tabify/__tests__/_get_columns.js b/src/ui/public/agg_response/tabify/__tests__/_get_columns.js index fe01fe0913782d..fbc42aaa04c377 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_get_columns.js +++ b/src/ui/public/agg_response/tabify/__tests__/_get_columns.js @@ -52,7 +52,7 @@ describe('get columns', function () { ] }); - const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), null, vis.isHierarchical()); + const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), !vis.isHierarchical()); expect(columns).to.have.length(2); expect(columns[1]).to.have.property('aggConfig'); @@ -70,7 +70,7 @@ describe('get columns', function () { ] }); - const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), null, vis.isHierarchical()); + const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), !vis.isHierarchical()); expect(columns).to.have.length(8); columns.forEach(function (column, i) { @@ -92,7 +92,7 @@ describe('get columns', function () { ] }); - const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), null, vis.isHierarchical()); + const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), !vis.isHierarchical()); function checkColumns(column, i) { expect(column).to.have.property('aggConfig'); @@ -128,7 +128,7 @@ describe('get columns', function () { ] }); - const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), null, vis.isHierarchical()); + const columns = tabifyGetColumns(vis.getAggConfig().getResponseAggs(), !vis.isHierarchical()); expect(columns).to.have.length(6); // sum should be last diff --git a/src/ui/public/agg_response/tabify/__tests__/_integration.js b/src/ui/public/agg_response/tabify/__tests__/_integration.js index b06293fa480934..e9a99bc33d2015 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_integration.js +++ b/src/ui/public/agg_response/tabify/__tests__/_integration.js @@ -49,16 +49,14 @@ describe('tabifyAggResponse Integration', function () { normalizeIds(vis); const resp = tabifyAggResponse(vis.getAggConfig(), fixtures.metricOnly, { - canSplit: false, - isHierarchical: vis.isHierarchical() + metricsAtAllLevels: vis.isHierarchical() }); - expect(resp).to.not.have.property('tables'); expect(resp).to.have.property('rows').and.property('columns'); expect(resp.rows).to.have.length(1); expect(resp.columns).to.have.length(1); - expect(resp.rows[0]).to.eql([1000]); + expect(resp.rows[0]).to.eql({ 'col-0-agg_1': 1000 }); expect(resp.columns[0]).to.have.property('aggConfig', vis.aggs[0]); }); @@ -94,33 +92,6 @@ describe('tabifyAggResponse Integration', function () { esResp.aggregations.agg_2.buckets[1].agg_3.buckets[0].agg_4.buckets = []; }); - // check that the root table group is formed properly, then pass - // each table to expectExtensionSplit, along with the expectInnerTables() - // function. - function expectRootGroup(rootTableGroup, expectInnerTables) { - expect(rootTableGroup).to.have.property('tables'); - - const tables = rootTableGroup.tables; - expect(tables).to.be.an('array').and.have.length(3); - expectExtensionSplit(tables[0], 'png', expectInnerTables); - expectExtensionSplit(tables[1], 'css', expectInnerTables); - expectExtensionSplit(tables[2], 'html', expectInnerTables); - } - - // check that the tableGroup for the extension agg was formed properly - // then call expectTable() on each table inside. it should validate that - // each table is formed properly - function expectExtensionSplit(tableGroup, key, expectTable) { - expect(tableGroup).to.have.property('tables'); - expect(tableGroup).to.have.property('aggConfig', ext); - expect(tableGroup).to.have.property('key', key); - expect(tableGroup.tables).to.be.an('array').and.have.length(1); - - tableGroup.tables.forEach(function (table) { - expectTable(table, key); - }); - } - // check that the columns of a table are formed properly function expectColumns(table, aggs) { expect(table.columns).to.be.an('array').and.have.length(aggs.length); @@ -131,10 +102,11 @@ describe('tabifyAggResponse Integration', function () { // check that a row has expected values function expectRow(row, asserts) { - expect(row).to.be.an('array'); - expect(row).to.have.length(asserts.length); + expect(row).to.be.an('object'); asserts.forEach(function (assert, i) { - assert(row[i]); + if (row[`col-${i}`]) { + assert(row[`col-${i}`]); + } }); } @@ -144,10 +116,10 @@ describe('tabifyAggResponse Integration', function () { expect(val).to.have.length(2); } - // check for an empty cell - function expectEmpty(val) { + // check for an OS term + function expectExtension(val) { expect(val) - .to.be(''); + .to.match(/^(js|png|html|css|jpg)$/); } // check for an OS term @@ -162,127 +134,44 @@ describe('tabifyAggResponse Integration', function () { expect(val === 0 || val > 1000).to.be.ok(); } - // create an assert that checks for an expected value - function expectVal(expected) { - return function (val) { - expect(val).to.be(expected); - }; - } - it('for non-hierarchical vis', function () { // the default for a non-hierarchical vis is to display // only complete rows, and only put the metrics at the end. - vis.isHierarchical = _.constant(false); - const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { isHierarchical: vis.isHierarchical() }); + const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { minimalColumns: true }); - expectRootGroup(tabbed, function expectTable(table, splitKey) { - expectColumns(table, [src, os, avg]); + expectColumns(tabbed, [ext, src, os, avg]); - table.rows.forEach(function (row) { - if (splitKey === 'css' && row[0] === 'MX') { - throw new Error('expected the MX row in the css table to be removed'); - } else { - expectRow(row, [ - expectCountry, - expectOS, - expectAvgBytes - ]); - } - }); + tabbed.rows.forEach(function (row) { + expectRow(row, [ + expectExtension, + expectCountry, + expectOS, + expectAvgBytes + ]); }); }); - it('for hierarchical vis, with partial rows', function () { + it('for hierarchical vis', function () { // since we have partialRows we expect that one row will have some empty // values, and since the vis is hierarchical and we are NOT using // minimalColumns we should expect the partial row to be completely after // the existing bucket and it's metric vis.isHierarchical = _.constant(true); - const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { - partialRows: true, - isHierarchical: vis.isHierarchical() - }); - - expectRootGroup(tabbed, function expectTable(table, splitKey) { - expectColumns(table, [src, avg, os, avg]); - - table.rows.forEach(function (row) { - if (splitKey === 'css' && row[0] === 'MX') { - expectRow(row, [ - expectCountry, - expectAvgBytes, - expectEmpty, - expectEmpty - ]); - } else { - expectRow(row, [ - expectCountry, - expectAvgBytes, - expectOS, - expectAvgBytes - ]); - } - }); - }); - }); - - it('for hierarchical vis, with partial rows, and minimal columns', function () { - // since we have partialRows we expect that one row has some empty - // values, and since the vis is hierarchical and we are displaying using - // minimalColumns, we should expect the partial row to have a metric at - // the end - - vis.isHierarchical = _.constant(true); - const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { - partialRows: true, - minimalColumns: true, - isHierarchical: vis.isHierarchical() - }); - - expectRootGroup(tabbed, function expectTable(table, splitKey) { - expectColumns(table, [src, os, avg]); - - table.rows.forEach(function (row) { - if (splitKey === 'css' && row[0] === 'MX') { - expectRow(row, [ - expectCountry, - expectEmpty, - expectVal(9299) - ]); - } else { - expectRow(row, [ - expectCountry, - expectOS, - expectAvgBytes - ]); - } - }); - }); - }); - - it('for non-hierarchical vis, minimal columns set to false', function () { - // the reason for this test is mainly to check that setting - // minimalColumns = false on a non-hierarchical vis doesn't - // create metric columns after each bucket - - vis.isHierarchical = _.constant(false); - const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { - minimalColumns: false, - isHierarchical: vis.isHierarchical() - }); - - expectRootGroup(tabbed, function expectTable(table) { - expectColumns(table, [src, os, avg]); - - table.rows.forEach(function (row) { - expectRow(row, [ - expectCountry, - expectOS, - expectAvgBytes - ]); - }); + const tabbed = tabifyAggResponse(vis.getAggConfig(), esResp, { metricsAtAllLevels: true }); + + expectColumns(tabbed, [ext, avg, src, avg, os, avg]); + + tabbed.rows.forEach(function (row) { + expectRow(row, [ + expectExtension, + expectAvgBytes, + expectCountry, + expectAvgBytes, + expectOS, + expectAvgBytes + ]); }); }); }); diff --git a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js index d9e04af7253db6..b395467146762b 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js +++ b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js @@ -17,13 +17,9 @@ * under the License. */ -import _ from 'lodash'; -import sinon from 'sinon'; import expect from 'expect.js'; import ngMock from 'ng_mock'; import { TabbedAggResponseWriter } from '../_response_writer'; -import { TabifyTableGroup } from '../_table_group'; -import { TabifyBuckets } from '../_buckets'; import { VisProvider } from '../../../vis'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; @@ -32,70 +28,55 @@ describe('TabbedAggResponseWriter class', function () { let Private; let indexPattern; - function defineSetup() { - beforeEach(ngMock.module('kibana')); - beforeEach(ngMock.inject(function ($injector) { - Private = $injector.get('Private'); - - Vis = Private(VisProvider); - indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - })); - } + beforeEach(ngMock.module('kibana')); + beforeEach(ngMock.inject(function ($injector) { + Private = $injector.get('Private'); + + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + })); + + const splitAggConfig = [ { + type: 'terms', + params: { + field: 'geo.src', + } + }]; + + const twoSplitsAggConfig = [{ + type: 'terms', + params: { + field: 'geo.src', + } + }, { + type: 'terms', + params: { + field: 'machine.os.raw', + } + }]; + + const createResponseWritter = (aggs = [], opts = {}) => { + const vis = new Vis(indexPattern, { type: 'histogram', aggs: aggs }); + return new TabbedAggResponseWriter(vis.getAggConfig(), opts); + }; describe('Constructor', function () { - defineSetup(); - - it('sets canSplit=true by default', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - expect(writer).to.have.property('canSplit', true); + let responseWriter; + beforeEach(() => { + responseWriter = createResponseWritter(twoSplitsAggConfig); }); - it('sets canSplit=false when config says to', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - canSplit: false, - isHierarchical: vis.isHierarchical() - }); - expect(writer).to.have.property('canSplit', false); + it('creates aggStack', () => { + expect(responseWriter.aggStack.length).to.eql(3); }); - describe('sets partialRows', function () { - it('to the value of the config if set', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const partial = Boolean(Math.round(Math.random())); - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical(), - partialRows: partial - }); - expect(writer).to.have.property('partialRows', partial); - }); - - it('to the value of vis.isHierarchical if no config', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const hierarchical = Boolean(Math.round(Math.random())); - sinon.stub(vis, 'isHierarchical').returns(hierarchical); - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - expect(writer).to.have.property('partialRows', hierarchical); - }); + it('generates columns', () => { + expect(responseWriter.columns.length).to.eql(3); }); - it('starts off with a root TabifyTableGroup', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - expect(writer.root).to.be.a(TabifyTableGroup); - expect(writer.splitStack).to.be.an('array'); - expect(writer.splitStack).to.have.length(1); - expect(writer.splitStack[0]).to.be(writer.root); + it('correctly generates columns with metricsAtAllLevels set to true', () => { + const minimalColumnsResponseWriter = createResponseWritter(twoSplitsAggConfig, { metricsAtAllLevels: true }); + expect(minimalColumnsResponseWriter.columns.length).to.eql(4); }); describe('sets timeRange', function () { @@ -128,296 +109,71 @@ describe('TabbedAggResponseWriter class', function () { }); }); - describe('', function () { - defineSetup(); + describe('row()', function () { + let responseWriter; - describe('#response()', function () { - it('returns the root TabifyTableGroup if splitting', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - expect(writer.response()).to.be(writer.root); - }); - - it('returns the first table if not splitting', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical(), - canSplit: false - }); - const table = writer._table(); - expect(writer.response()).to.be(table); - }); - - it('adds columns to all of the tables', function () { - const vis = new Vis(indexPattern, { - type: 'histogram', - aggs: [ - { type: 'terms', params: { field: '_type' }, schema: 'split' }, - { type: 'count', schema: 'metric' } - ] - }); - const buckets = new TabifyBuckets({ buckets: [ { key: 'nginx' }, { key: 'apache' } ] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - const tables = []; - - writer.split(vis.aggs[0], buckets, function () { - writer.cell(vis.aggs[1], 100, function () { - tables.push(writer.row()); - }); - }); - - tables.forEach(function (table) { - expect(table.columns == null).to.be(true); - }); - - const resp = writer.response(); - expect(resp).to.be.a(TabifyTableGroup); - expect(resp.tables).to.have.length(2); - - const nginx = resp.tables.shift(); - expect(nginx).to.have.property('aggConfig', vis.aggs[0]); - expect(nginx).to.have.property('key', 'nginx'); - expect(nginx.tables).to.have.length(1); - nginx.tables.forEach(function (table) { - expect(_.contains(tables, table)).to.be(true); - }); - - const apache = resp.tables.shift(); - expect(apache).to.have.property('aggConfig', vis.aggs[0]); - expect(apache).to.have.property('key', 'apache'); - expect(apache.tables).to.have.length(1); - apache.tables.forEach(function (table) { - expect(_.contains(tables, table)).to.be(true); - }); - - tables.forEach(function (table) { - expect(table.columns).to.be.an('array'); - expect(table.columns).to.have.length(1); - expect(table.columns[0].aggConfig.type.name).to.be('count'); - }); - }); + beforeEach(() => { + responseWriter = createResponseWritter(splitAggConfig, { partialRows: true }); }); - describe('#split()', function () { - it('with break if the user has specified that splitting is to be disabled', function () { - const vis = new Vis(indexPattern, { - type: 'histogram', - aggs: [ - { type: 'terms', schema: 'split', params: { field: '_type' } }, - { type: 'count', schema: 'metric' } - ] - }); - const agg = vis.aggs.bySchemaName.split[0]; - const buckets = new TabifyBuckets({ buckets: [ { key: 'apache' } ] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical(), - canSplit: false - }); - - expect(function () { - writer.split(agg, buckets, _.noop); - }).to.throwException(/splitting is disabled/); - }); - - it('forks the acrStack and rewrites the parents', function () { - const vis = new Vis(indexPattern, { - type: 'histogram', - aggs: [ - { type: 'terms', params: { field: 'extension' }, schema: 'segment' }, - { type: 'terms', params: { field: '_type' }, schema: 'split' }, - { type: 'terms', params: { field: 'machine.os' }, schema: 'segment' }, - { type: 'count', schema: 'metric' } - ] - }); - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical(), - asAggConfigResults: true - }); - const extensions = new TabifyBuckets({ buckets: [ { key: 'jpg' }, { key: 'png' } ] }); - const types = new TabifyBuckets({ buckets: [ { key: 'nginx' }, { key: 'apache' } ] }); - const os = new TabifyBuckets({ buckets: [ { key: 'window' }, { key: 'osx' } ] }); - - extensions.forEach(function (b, extension) { - writer.cell(vis.aggs[0], extension, function () { - writer.split(vis.aggs[1], types, function () { - os.forEach(function (b, os) { - writer.cell(vis.aggs[2], os, function () { - writer.cell(vis.aggs[3], 200, function () { - writer.row(); - }); - }); - }); - }); - }); - }); - - const tables = _.flattenDeep(_.pluck(writer.response().tables, 'tables')); - expect(tables.length).to.be(types.length); - - // collect the far left acr from each table - const leftAcrs = _.pluck(tables, 'rows[0][0]'); - - leftAcrs.forEach(function (acr, i, acrs) { - expect(acr.aggConfig).to.be(vis.aggs[0]); - expect(acr.$parent.aggConfig).to.be(vis.aggs[1]); - expect(acr.$parent.$parent).to.be(void 0); - - // for all but the last acr, compare to the next - if (i + 1 >= acrs.length) return; - const acr2 = leftAcrs[i + 1]; - - expect(acr.key).to.be(acr2.key); - expect(acr.value).to.be(acr2.value); - expect(acr.aggConfig).to.be(acr2.aggConfig); - expect(acr.$parent).to.not.be(acr2.$parent); - }); - }); - - + it('adds the row to the array', () => { + responseWriter.rowBuffer['col-0'] = 'US'; + responseWriter.rowBuffer['col-1'] = 5; + responseWriter.row(); + expect(responseWriter.rows.length).to.eql(1); + expect(responseWriter.rows[0]).to.eql({ 'col-0': 'US', 'col-1': 5 }); }); - describe('#cell()', function () { - it('logs a cell in the TabbedAggResponseWriters row buffer, calls the block arg, then removes the value from the buffer', - function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - - expect(writer.rowBuffer).to.have.length(0); - writer.cell({}, 500, function () { - expect(writer.rowBuffer).to.have.length(1); - expect(writer.rowBuffer[0]).to.be(500); - }); - expect(writer.rowBuffer).to.have.length(0); - }); + it('correctly handles bucketBuffer', () => { + responseWriter.bucketBuffer.push({ id: 'col-0', value: 'US' }); + responseWriter.rowBuffer['col-1'] = 5; + responseWriter.row(); + expect(responseWriter.rows.length).to.eql(1); + expect(responseWriter.rows[0]).to.eql({ 'col-0': 'US', 'col-1': 5 }); }); - describe('#row()', function () { - it('writes the TabbedAggResponseWriters internal rowBuffer into a table', function () { - const vis = new Vis(indexPattern, { type: 'histogram', aggs: [] }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - - const table = writer._table(); - writer.cell({}, 1, function () { - writer.cell({}, 2, function () { - writer.cell({}, 3, function () { - writer.row(); - }); - }); - }); - - expect(table.rows).to.have.length(1); - expect(table.rows[0]).to.eql([1, 2, 3]); - }); - - it('always writes to the table group at the top of the split stack', function () { - const vis = new Vis(indexPattern, { - type: 'histogram', - aggs: [ - { type: 'terms', schema: 'split', params: { field: '_type' } }, - { type: 'terms', schema: 'split', params: { field: 'extension' } }, - { type: 'terms', schema: 'split', params: { field: 'machine.os' } }, - { type: 'count', schema: 'metric' } - ] - }); - const splits = vis.aggs.bySchemaName.split; - - const type = splits[0]; - const typeTabifyBuckets = new TabifyBuckets({ buckets: [ { key: 'nginx' }, { key: 'apache' } ] }); - - const ext = splits[1]; - const extTabifyBuckets = new TabifyBuckets({ buckets: [ { key: 'jpg' }, { key: 'png' } ] }); - - const os = splits[2]; - const osTabifyBuckets = new TabifyBuckets({ buckets: [ { key: 'windows' }, { key: 'mac' } ] }); - - const count = vis.aggs[3]; - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - writer.split(type, typeTabifyBuckets, function () { - writer.split(ext, extTabifyBuckets, function () { - writer.split(os, osTabifyBuckets, function (bucket, key) { - writer.cell(count, key === 'windows' ? 1 : 2, function () { - writer.row(); - }); - }); - }); - }); - - const resp = writer.response(); - let sum = 0; - let tables = 0; - (function recurse(t) { - if (t.tables) { - // table group - t.tables.forEach(function (tt) { - recurse(tt); - }); - } else { - tables += 1; - // table - t.rows.forEach(function (row) { - row.forEach(function (cell) { - sum += cell; - }); - }); - } - }(resp)); - - expect(tables).to.be(8); - expect(sum).to.be(12); - }); - - it('writes partial rows for hierarchical vis', function () { - const vis = new Vis(indexPattern, { - type: 'pie', - aggs: [ - { type: 'terms', schema: 'segment', params: { field: '_type' } }, - { type: 'count', schema: 'metric' } - ] - }); - - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - const table = writer._table(); - writer.cell(vis.aggs[0], 'apache', function () { - writer.row(); - }); + it('doesn\'t add an empty row', () => { + responseWriter.row(); + expect(responseWriter.rows.length).to.eql(0); + }); + }); - expect(table.rows).to.have.length(1); - expect(table.rows[0]).to.eql(['apache', '']); - }); + describe('response()', () => { + let responseWriter; - it('skips partial rows for non-hierarchical vis', function () { - const vis = new Vis(indexPattern, { - type: 'histogram', - aggs: [ - { type: 'terms', schema: 'segment', params: { field: '_type' } }, - { type: 'count', schema: 'metric' } - ] - }); + beforeEach(() => { + responseWriter = createResponseWritter(splitAggConfig); + }); - const writer = new TabbedAggResponseWriter(vis.getAggConfig(), { - isHierarchical: vis.isHierarchical() - }); - const table = writer._table(); - writer.cell(vis.aggs[0], 'apache', function () { - writer.row(); - }); + it('produces correct response', () => { + responseWriter.rowBuffer['col-0-1'] = 'US'; + responseWriter.rowBuffer['col-1-2'] = 5; + responseWriter.row(); + const response = responseWriter.response(); + expect(response).to.have.property('rows'); + expect(response.rows).to.eql([{ 'col-0-1': 'US', 'col-1-2': 5 }]); + expect(response).to.have.property('columns'); + expect(response.columns.length).to.equal(2); + expect(response.columns[0]).to.have.property('id', 'col-0-1'); + expect(response.columns[0]).to.have.property('name', 'geo.src: Descending'); + expect(response.columns[0]).to.have.property('aggConfig'); + expect(response.columns[1]).to.have.property('id', 'col-1-2'); + expect(response.columns[1]).to.have.property('name', 'Count'); + expect(response.columns[1]).to.have.property('aggConfig'); + }); - expect(table.rows).to.have.length(0); - }); + it('produces correct response for no data', () => { + const response = responseWriter.response(); + expect(response).to.have.property('rows'); + expect(response.rows.length).to.be(0); + expect(response).to.have.property('columns'); + expect(response.columns.length).to.equal(2); + expect(response.columns[0]).to.have.property('id', 'col-0-1'); + expect(response.columns[0]).to.have.property('name', 'geo.src: Descending'); + expect(response.columns[0]).to.have.property('aggConfig'); + expect(response.columns[1]).to.have.property('id', 'col-1-2'); + expect(response.columns[1]).to.have.property('name', 'Count'); + expect(response.columns[1]).to.have.property('aggConfig'); }); }); }); diff --git a/src/ui/public/agg_response/tabify/__tests__/_table.js b/src/ui/public/agg_response/tabify/__tests__/_table.js deleted file mode 100644 index 6248c6cb77af8c..00000000000000 --- a/src/ui/public/agg_response/tabify/__tests__/_table.js +++ /dev/null @@ -1,94 +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 _ from 'lodash'; -import expect from 'expect.js'; -import { TabifyTable } from '../_table'; - -describe('TabifyTable class', function () { - it('exposes rows array, but not the columns', function () { - const table = new TabifyTable(); - expect(table.rows).to.be.an('array'); - expect(table.columns == null).to.be.ok(); - }); - - describe('#aggConfig', function () { - it('accepts a column from the table and returns its agg config', function () { - const table = new TabifyTable(); - const football = {}; - const column = { - aggConfig: football - }; - - expect(table.aggConfig(column)).to.be(football); - }); - - it('throws a TypeError if the column is malformed', function () { - expect(function () { - const notAColumn = {}; - (new TabifyTable()).aggConfig(notAColumn); - }).to.throwException(TypeError); - }); - }); - - describe('#title', function () { - it('returns nothing if the table is not part of a table group', function () { - const table = new TabifyTable(); - expect(table.title()).to.be(''); - }); - - it('returns the title of the TabifyTableGroup if the table is part of one', function () { - const table = new TabifyTable(); - table.$parent = { - title: 'TabifyTableGroup Title', - tables: [table] - }; - - expect(table.title()).to.be('TabifyTableGroup Title'); - }); - }); - - describe('#field', function () { - it('calls the columns aggConfig#getField() method', function () { - const table = new TabifyTable(); - const football = {}; - const column = { - aggConfig: { - getField: _.constant(football) - } - }; - - expect(table.field(column)).to.be(football); - }); - }); - - describe('#fieldFormatter', function () { - it('calls the columns aggConfig#fieldFormatter() method', function () { - const table = new TabifyTable(); - const football = {}; - const column = { - aggConfig: { - fieldFormatter: _.constant(football) - } - }; - - expect(table.fieldFormatter(column)).to.be(football); - }); - }); -}); diff --git a/src/ui/public/agg_response/tabify/__tests__/_table_group.js b/src/ui/public/agg_response/tabify/__tests__/_table_group.js deleted file mode 100644 index 0051e46247ea24..00000000000000 --- a/src/ui/public/agg_response/tabify/__tests__/_table_group.js +++ /dev/null @@ -1,32 +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 expect from 'expect.js'; -import { TabifyTableGroup } from '../_table_group'; - -describe('Table Group class', function () { - - it('exposes tables array and empty aggConfig, key and title', function () { - const tableGroup = new TabifyTableGroup(); - expect(tableGroup.tables).to.be.an('array'); - expect(tableGroup.aggConfig).to.be(null); - expect(tableGroup.key).to.be(null); - expect(tableGroup.title).to.be(null); - }); -}); diff --git a/src/ui/public/agg_response/tabify/__tests__/tabify.js b/src/ui/public/agg_response/tabify/__tests__/tabify.js index 7f82817470c934..2e66d583fdeeb8 100644 --- a/src/ui/public/agg_response/tabify/__tests__/tabify.js +++ b/src/ui/public/agg_response/tabify/__tests__/tabify.js @@ -19,8 +19,6 @@ import './_get_columns'; import './_buckets'; -import './_table'; -import './_table_group'; import './_response_writer'; import './_integration'; describe('Tabify Agg Response', function () { diff --git a/src/ui/public/agg_response/tabify/_get_columns.js b/src/ui/public/agg_response/tabify/_get_columns.js index e5010f0f0358ac..68df7e1a033333 100644 --- a/src/ui/public/agg_response/tabify/_get_columns.js +++ b/src/ui/public/agg_response/tabify/_get_columns.js @@ -19,15 +19,19 @@ import _ from 'lodash'; -export function tabifyGetColumns(aggs, minimal, hierarchical) { +const getColumn = (agg, i) => { + return { + aggConfig: agg, + id: `col-${i}-${agg.id}`, + name: agg.makeLabel() + }; +}; - if (minimal == null) minimal = !hierarchical; +export function tabifyGetColumns(aggs, minimal) { // pick the columns if (minimal) { - return aggs.map(function (agg) { - return { aggConfig: agg }; - }); + return aggs.map((agg, i) => getColumn(agg, i)); } // supposed to be bucket,...metrics,bucket,...metrics @@ -40,16 +44,15 @@ export function tabifyGetColumns(aggs, minimal, hierarchical) { if (!grouped.buckets) { // return just the metrics, in column format - return grouped.metrics.map(function (agg) { - return { aggConfig: agg }; - }); + return grouped.metrics.map((agg, i) => getColumn(agg, i)); } + let columnIndex = 0; // return the buckets, and after each place all of the metrics grouped.buckets.forEach(function (agg) { - columns.push({ aggConfig: agg }); + columns.push(getColumn(agg, columnIndex++)); grouped.metrics.forEach(function (metric) { - columns.push({ aggConfig: metric }); + columns.push(getColumn(metric, columnIndex++)); }); }); diff --git a/src/ui/public/agg_response/tabify/_response_writer.js b/src/ui/public/agg_response/tabify/_response_writer.js index 0b6d4cb947466f..e71fe842e0bc6c 100644 --- a/src/ui/public/agg_response/tabify/_response_writer.js +++ b/src/ui/public/agg_response/tabify/_response_writer.js @@ -17,294 +17,74 @@ * under the License. */ -import _ from 'lodash'; -import AggConfigResult from '../../vis/agg_config_result'; -import { TabifyTable } from './_table'; -import { TabifyTableGroup } from './_table_group'; +import { toArray } from 'lodash'; import { tabifyGetColumns } from './_get_columns'; -import { createLegacyClass } from '../../utils/legacy_class'; - -createLegacyClass(SplitAcr).inherits(AggConfigResult); -function SplitAcr(agg, parent, key) { - SplitAcr.Super.call(this, agg, parent, key, key); -} /** * Writer class that collects information about an aggregation response and * produces a table, or a series of tables. * - * @param {Vis} vis - the vis object to which the aggregation response correlates + * @param {AggConfigs} aggs - the agg configs object to which the aggregation response correlates + * @param {boolean} metricsAtAllLevels - setting to true will produce metrics for every bucket + * @param {boolean} partialRows - setting to true will not remove rows with missing values */ -function TabbedAggResponseWriter(aggs, opts) { - this.opts = opts || {}; - this.rowBuffer = []; - - const visIsHier = opts.isHierarchical; - - // do the options allow for splitting? we will only split if true and - // tabify calls the split method. - this.canSplit = this.opts.canSplit !== false; - - // should we allow partial rows to be included in the tables? if a - // partial row is found, it is filled with empty strings '' - this.partialRows = this.opts.partialRows == null ? visIsHier : this.opts.partialRows; - - // if true, we will not place metric columns after every bucket - // even if the vis is hierarchical. if false, and the vis is - // hierarchical, then we will display metric columns after - // every bucket col - this.minimalColumns = visIsHier ? !!this.opts.minimalColumns : true; - - // true if we can expect metrics to have been calculated - // for every bucket - this.metricsForAllBuckets = visIsHier; - - // if true, values will be wrapped in aggConfigResult objects which link them - // to their aggConfig and enable the filterbar and tooltip formatters - this.asAggConfigResults = !!this.opts.asAggConfigResults; +function TabbedAggResponseWriter(aggs, { metricsAtAllLevels = false, partialRows = false, timeRange } = {}) { + this.rowBuffer = {}; + this.bucketBuffer = []; + this.metricBuffer = []; + this.metricsForAllBuckets = metricsAtAllLevels; + this.partialRows = partialRows; this.aggs = aggs; - this.columns = tabifyGetColumns(aggs.getResponseAggs(), this.minimalColumns); - this.aggStack = _.pluck(this.columns, 'aggConfig'); + this.columns = tabifyGetColumns(aggs.getResponseAggs(), !metricsAtAllLevels); + this.aggStack = [...this.columns]; - this.root = new TabifyTableGroup(); - this.acrStack = []; - this.splitStack = [this.root]; + this.rows = []; // Extract the time range object if provided - if (this.opts.timeRange) { - const timeRangeKey = Object.keys(this.opts.timeRange)[0]; - this.timeRange = this.opts.timeRange[timeRangeKey]; + if (timeRange) { + const timeRangeKey = Object.keys(timeRange)[0]; + this.timeRange = timeRange[timeRangeKey]; if (this.timeRange) { this.timeRange.name = timeRangeKey; } } } -/** - * Create a Table of TableGroup object, link it to it's parent (if any), and determine if - * it's the root - * - * @param {boolean} group - is this a TableGroup or just a normal Table - * @param {AggConfig} agg - the aggregation that create this table, only applies to groups - * @param {any} key - the bucketKey that this table relates to - * @return {Table/TableGroup} table - the created table - */ -TabbedAggResponseWriter.prototype._table = function (group, agg, key) { - const Class = (group) ? TabifyTableGroup : TabifyTable; - const table = new Class(); - const parent = this.splitStack[0]; - - if (group) { - table.aggConfig = agg; - table.key = key; - table.title = (table.fieldFormatter()(key)); - // aggs that don't implement makeLabel should not add to title - if (agg.makeLabel() !== agg.name) { - table.title += ': ' + agg.makeLabel(); - } - } - - // link the parent and child - table.$parent = parent; - parent.tables.push(table); - - return table; +TabbedAggResponseWriter.prototype.isPartialRow = function (row) { + return !this.columns.map(column => row.hasOwnProperty(column.id)).every(c => (c === true)); }; /** - * Enter into a split table, called for each bucket of a splitting agg. The new table - * is either created or located using the agg and key arguments, and then the block is - * executed with the table as it's this context. Within this function, you should - * walk into the remaining branches and end up writing some rows to the table. - * - * @param {aggConfig} agg - the aggConfig that created this split - * @param {Buckets} buckets - the buckets produces by the agg - * @param {function} block - a function to execute for each sub bucket + * Create a new row by reading the row buffer and bucketBuffer */ -TabbedAggResponseWriter.prototype.split = function (agg, buckets, block) { - const self = this; - - if (!self.canSplit) { - throw new Error('attempted to split when splitting is disabled'); - } - - self._removeAggFromColumns(agg); - - buckets.forEach(function (bucket, key) { - // find the existing split that we should extend - let tableGroup = _.find(self.splitStack[0].tables, { aggConfig: agg, key: key }); - // create the split if it doesn't exist yet - if (!tableGroup) tableGroup = self._table(true, agg, key); - - let splitAcr = false; - if (self.asAggConfigResults) { - splitAcr = self._injectParentSplit(agg, key); - } - - // push the split onto the stack so that it will receive written tables - self.splitStack.unshift(tableGroup); - - // call the block - if (_.isFunction(block)) block.call(self, bucket, key); - - // remove the split from the stack - self.splitStack.shift(); - splitAcr && _.pull(self.acrStack, splitAcr); - }); -}; - -TabbedAggResponseWriter.prototype._removeAggFromColumns = function (agg) { - const i = _.findIndex(this.columns, function (col) { - return col.aggConfig === agg; +TabbedAggResponseWriter.prototype.row = function () { + this.bucketBuffer.forEach(bucket => { + this.rowBuffer[bucket.id] = bucket.value; }); - // we must have already removed this column - if (i === -1) return; - - this.columns.splice(i, 1); - - if (this.minimalColumns) return; - - // hierarchical vis creates additional columns for each bucket - // we will remove those too - const mCol = this.columns.splice(i, 1).pop(); - const mI = _.findIndex(this.aggStack, function (agg) { - return agg === mCol.aggConfig; + this.metricBuffer.forEach(metric => { + this.rowBuffer[metric.id] = metric.value; }); - if (mI > -1) this.aggStack.splice(mI, 1); -}; - -/** - * When a split is found while building the aggConfigResult tree, we - * want to push the split into the tree at another point. Since each - * branch in the tree is a double-linked list we need do some special - * shit to pull this off. - * - * @private - * @param {AggConfig} - The agg which produced the split bucket - * @param {any} - The value which identifies the bucket - * @return {SplitAcr} - the AggConfigResult created for the split bucket - */ -TabbedAggResponseWriter.prototype._injectParentSplit = function (agg, key) { - const oldList = this.acrStack; - const newList = this.acrStack = []; - - // walk from right to left through the old stack - // and move things to the new stack - let injected = false; - - if (!oldList.length) { - injected = new SplitAcr(agg, null, key); - newList.unshift(injected); - return injected; - } - - // walk from right to left, emptying the previous list - while (oldList.length) { - const acr = oldList.pop(); - - // ignore other splits - if (acr instanceof SplitAcr) { - newList.unshift(acr); - continue; - } - - // inject the split - if (!injected) { - injected = new SplitAcr(agg, newList[0], key); - newList.unshift(injected); - } - - const newAcr = new AggConfigResult(acr.aggConfig, newList[0], acr.value, acr.aggConfig.getKey(acr), acr.filters); - newList.unshift(newAcr); - - // and replace the acr in the row buffer if its there - const rowI = this.rowBuffer.indexOf(acr); - if (rowI > -1) { - this.rowBuffer[rowI] = newAcr; - } - } - - return injected; -}; - -/** - * Push a value into the row, then run a block. Once the block is - * complete the value is pulled from the stack. - * - * @param {any} value - the value that should be added to the row - * @param {function} block - the function to run while this value is in the row - * @return {any} - the value that was added - */ -TabbedAggResponseWriter.prototype.cell = function (agg, value, block, filters) { - if (this.asAggConfigResults) { - value = new AggConfigResult(agg, this.acrStack[0], value, value, filters); - } - - const stackResult = this.asAggConfigResults && value.type === 'bucket'; - - this.rowBuffer.push(value); - if (stackResult) this.acrStack.unshift(value); - - if (_.isFunction(block)) block.call(this); - - this.rowBuffer.pop(value); - if (stackResult) this.acrStack.shift(); - - return value; -}; - -/** - * Create a new row by reading the row buffer. This will do nothing if - * the row is incomplete and the vis this data came from is NOT flagged as - * hierarchical. - * - * @param {array} [buffer] - optional buffer to use in place of the stored rowBuffer - * @return {undefined} - */ -TabbedAggResponseWriter.prototype.row = function (buffer) { - const cells = buffer || this.rowBuffer.slice(0); - - if (!this.partialRows && cells.length < this.columns.length) { + if (!toArray(this.rowBuffer).length || (!this.partialRows && this.isPartialRow(this.rowBuffer))) { return; } - const split = this.splitStack[0]; - const table = split.tables[0] || this._table(false); - - while (cells.length < this.columns.length) cells.push(''); - table.rows.push(cells); - return table; + this.rows.push(this.rowBuffer); + this.rowBuffer = {}; }; /** * Get the actual response * - * @return {object} - the final table-tree + * @return {object} - the final table */ TabbedAggResponseWriter.prototype.response = function () { - const columns = this.columns; - - // give the columns some metadata - columns.map(function (col) { - col.title = col.aggConfig.makeLabel(); - }); - - // walk the tree and write the columns to each table - ((function step(table) { - if (table.tables) table.tables.forEach(step); - else table.columns = columns.slice(0); - })(this.root)); - - if (this.canSplit) return this.root; - - const table = this.root.tables[0]; - if (!table) return; - - delete table.$parent; - return table; + return { + columns: this.columns, + rows: this.rows + }; }; export { TabbedAggResponseWriter }; diff --git a/src/ui/public/agg_response/tabify/_table.js b/src/ui/public/agg_response/tabify/_table.js deleted file mode 100644 index 80b84407c65846..00000000000000 --- a/src/ui/public/agg_response/tabify/_table.js +++ /dev/null @@ -1,53 +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. - */ - -/** - * Simple table class that is used to contain the rows and columns that create - * a table. This is usually found at the root of the response or within a TableGroup - */ -function TabifyTable() { - this.columns = null; // written with the first row - this.rows = []; -} - -TabifyTable.prototype.title = function () { - if (this.$parent) { - return this.$parent.title; - } else { - return ''; - } -}; - -TabifyTable.prototype.aggConfig = function (col) { - if (!col.aggConfig) { - throw new TypeError('Column is missing the aggConfig property'); - } - return col.aggConfig; -}; - -TabifyTable.prototype.field = function (col) { - return this.aggConfig(col).getField(); -}; - -TabifyTable.prototype.fieldFormatter = function (col) { - return this.aggConfig(col).fieldFormatter(); -}; - - -export { TabifyTable }; diff --git a/src/ui/public/agg_response/tabify/_table_group.js b/src/ui/public/agg_response/tabify/_table_group.js deleted file mode 100644 index 6306a783e1ecfb..00000000000000 --- a/src/ui/public/agg_response/tabify/_table_group.js +++ /dev/null @@ -1,39 +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. - */ - -/** - * Simple object that wraps multiple tables. It contains information about the aggConfig - * and bucket that created this group and a list of the tables within it. - */ -function TabifyTableGroup() { - this.aggConfig = null; - this.key = null; - this.title = null; - this.tables = []; -} - -TabifyTableGroup.prototype.field = function () { - if (this.aggConfig) return this.aggConfig.getField(); -}; - -TabifyTableGroup.prototype.fieldFormatter = function () { - if (this.aggConfig) return this.aggConfig.fieldFormatter(); -}; - -export { TabifyTableGroup }; diff --git a/src/ui/public/agg_response/tabify/tabify.js b/src/ui/public/agg_response/tabify/tabify.js index 7e91670d83fb3a..08abe3fbb35964 100644 --- a/src/ui/public/agg_response/tabify/tabify.js +++ b/src/ui/public/agg_response/tabify/tabify.js @@ -43,7 +43,8 @@ export function tabifyAggResponse(aggs, esResponse, respOpts = {}) { * @returns {undefined} */ function collectBucket(write, bucket, key, aggScale) { - const agg = write.aggStack.shift(); + const column = write.aggStack.shift(); + const agg = column.aggConfig; const aggInfo = agg.write(write.aggs); aggScale *= aggInfo.metricScale || 1; @@ -51,23 +52,24 @@ function collectBucket(write, bucket, key, aggScale) { case 'buckets': const buckets = new TabifyBuckets(bucket[agg.id], agg.params, write.timeRange); if (buckets.length) { - const splitting = write.canSplit && agg.schema.name === 'split'; - if (splitting) { - write.split(agg, buckets, function forEachBucket(subBucket, key) { - collectBucket(write, subBucket, agg.getKey(subBucket, key), aggScale); - }); - } else { - buckets.forEach(function (subBucket, key) { - write.cell(agg, agg.getKey(subBucket, key), function () { - collectBucket(write, subBucket, agg.getKey(subBucket, key), aggScale); - }, subBucket.filters); - }); - } - } else if (write.partialRows && write.metricsForAllBuckets && write.minimalColumns) { + buckets.forEach(function (subBucket, key) { + // if the bucket doesn't have value don't add it to the row + // we don't want rows like: { column1: undefined, column2: 10 } + const bucketValue = agg.getKey(subBucket, key); + const hasBucketValue = typeof bucketValue !== 'undefined'; + if (hasBucketValue) { + write.bucketBuffer.push({ id: column.id, value: bucketValue }); + } + collectBucket(write, subBucket, agg.getKey(subBucket, key), aggScale); + if (hasBucketValue) { + write.bucketBuffer.pop(); + } + }); + } else if (write.partialRows) { // we don't have any buckets, but we do have metrics at this // level, then pass all the empty buckets and jump back in for // the metrics. - write.aggStack.unshift(agg); + write.aggStack.unshift(column); passEmptyBuckets(write, bucket, key, aggScale); write.aggStack.shift(); } else { @@ -83,39 +85,41 @@ function collectBucket(write, bucket, key, aggScale) { if (aggScale !== 1) { value *= aggScale; } - write.cell(agg, value, function () { - if (!write.aggStack.length) { - // row complete - write.row(); - } else { - // process the next agg at this same level - collectBucket(write, bucket, key, aggScale); - } - }); + write.metricBuffer.push({ id: column.id, value: value }); + + if (!write.aggStack.length) { + // row complete + write.row(); + } else { + // process the next agg at this same level + collectBucket(write, bucket, key, aggScale); + } + + write.metricBuffer.pop(); + break; } - write.aggStack.unshift(agg); + write.aggStack.unshift(column); } // write empty values for each bucket agg, then write // the metrics from the initial bucket using collectBucket() function passEmptyBuckets(write, bucket, key, aggScale) { - const agg = write.aggStack.shift(); + const column = write.aggStack.shift(); + const agg = column.aggConfig; switch (agg.type.type) { case 'metrics': // pass control back to collectBucket() - write.aggStack.unshift(agg); + write.aggStack.unshift(column); collectBucket(write, bucket, key, aggScale); return; case 'buckets': - write.cell(agg, '', function () { - passEmptyBuckets(write, bucket, key, aggScale); - }); + passEmptyBuckets(write, bucket, key, aggScale); } - write.aggStack.unshift(agg); + write.aggStack.unshift(column); } diff --git a/src/ui/public/agg_table/__tests__/_group.js b/src/ui/public/agg_table/__tests__/_group.js index 5bf8741362ee0f..2c6c988f674c49 100644 --- a/src/ui/public/agg_table/__tests__/_group.js +++ b/src/ui/public/agg_table/__tests__/_group.js @@ -21,7 +21,7 @@ import $ from 'jquery'; import ngMock from 'ng_mock'; import expect from 'expect.js'; import fixtures from 'fixtures/fake_hierarchical_data'; -import { tabifyAggResponse } from '../../agg_response/tabify/tabify'; +import { LegacyResponseHandlerProvider } from '../../vis/response_handlers/legacy'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import { VisProvider } from '../../vis'; describe('AggTableGroup Directive', function () { @@ -30,9 +30,11 @@ describe('AggTableGroup Directive', function () { let $compile; let Vis; let indexPattern; + let tableAggResponse; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($injector, Private) { + tableAggResponse = Private(LegacyResponseHandlerProvider).handler; indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); Vis = Private(VisProvider); @@ -49,9 +51,9 @@ describe('AggTableGroup Directive', function () { }); - it('renders a simple split response properly', function () { + it('renders a simple split response properly', async function () { const vis = new Vis(indexPattern, 'table'); - $scope.group = tabifyAggResponse(vis.getAggConfig(), fixtures.metricOnly); + $scope.group = await tableAggResponse(vis, fixtures.metricOnly); $scope.sort = { columnIndex: null, direction: null @@ -79,7 +81,7 @@ describe('AggTableGroup Directive', function () { expect($subTables.length).to.be(0); }); - it('renders a complex response properly', function () { + it('renders a complex response properly', async function () { const vis = new Vis(indexPattern, { type: 'pie', aggs: [ @@ -93,7 +95,7 @@ describe('AggTableGroup Directive', function () { agg.id = 'agg_' + (i + 1); }); - const group = $scope.group = tabifyAggResponse(vis.getAggConfig(), fixtures.threeTermBuckets); + const group = $scope.group = await tableAggResponse(vis, fixtures.threeTermBuckets); const $el = $(''); $compile($el)($scope); $scope.$digest(); diff --git a/src/ui/public/agg_table/__tests__/_table.js b/src/ui/public/agg_table/__tests__/_table.js index 4d556bfafe9fc5..9e67c6bf42a176 100644 --- a/src/ui/public/agg_table/__tests__/_table.js +++ b/src/ui/public/agg_table/__tests__/_table.js @@ -17,14 +17,13 @@ * under the License. */ -import _ from 'lodash'; import $ from 'jquery'; import moment from 'moment'; import ngMock from 'ng_mock'; import expect from 'expect.js'; import fixtures from 'fixtures/fake_hierarchical_data'; import sinon from 'sinon'; -import { tabifyAggResponse } from '../../agg_response/tabify/tabify'; +import { LegacyResponseHandlerProvider } from '../../vis/response_handlers/legacy'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import { VisProvider } from '../../vis'; describe('AggTable Directive', function () { @@ -34,9 +33,11 @@ describe('AggTable Directive', function () { let Vis; let indexPattern; let settings; + let tableAggResponse; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($injector, Private, config) { + tableAggResponse = Private(LegacyResponseHandlerProvider).handler; indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); Vis = Private(VisProvider); settings = config; @@ -54,20 +55,19 @@ describe('AggTable Directive', function () { }); - it('renders a simple response properly', function () { + it('renders a simple response properly', async function () { const vis = new Vis(indexPattern, 'table'); - $scope.table = tabifyAggResponse( - vis.getAggConfig(), - fixtures.metricOnly, - { canSplit: false, hierarchical: vis.isHierarchical() } - ); + $scope.table = (await tableAggResponse( + vis, + fixtures.metricOnly + )).tables[0]; const $el = $compile('')($scope); $scope.$digest(); expect($el.find('tbody').length).to.be(1); expect($el.find('td').length).to.be(1); - expect($el.find('td').text()).to.eql(1000); + expect($el.find('td').text()).to.eql('1,000'); }); it('renders nothing if the table is empty', function () { @@ -78,24 +78,24 @@ describe('AggTable Directive', function () { expect($el.find('tbody').length).to.be(0); }); - it('renders a complex response properly', function () { + it('renders a complex response properly', async function () { const vis = new Vis(indexPattern, { - type: 'pie', + type: 'table', + params: { + showMetricsAtAllLevels: true + }, aggs: [ { type: 'avg', schema: 'metric', params: { field: 'bytes' } }, - { type: 'terms', schema: 'split', params: { field: 'extension' } }, - { type: 'terms', schema: 'segment', params: { field: 'geo.src' } }, - { type: 'terms', schema: 'segment', params: { field: 'machine.os' } } + { type: 'terms', schema: 'bucket', params: { field: 'extension' } }, + { type: 'terms', schema: 'bucket', params: { field: 'geo.src' } }, + { type: 'terms', schema: 'bucket', params: { field: 'machine.os' } } ] }); vis.aggs.forEach(function (agg, i) { agg.id = 'agg_' + (i + 1); }); - $scope.table = tabifyAggResponse(vis.getAggConfig(), fixtures.threeTermBuckets, { - canSplit: false, - isHierarchical: vis.isHierarchical() - }); + $scope.table = (await tableAggResponse(vis, fixtures.threeTermBuckets)).tables[0]; const $el = $(''); $compile($el)($scope); $scope.$digest(); @@ -106,9 +106,10 @@ describe('AggTable Directive', function () { expect($rows.length).to.be.greaterThan(0); function validBytes(str) { - expect(str).to.match(/^\d+$/); - const bytesAsNum = _.parseInt(str); - expect(bytesAsNum === 0 || bytesAsNum > 1000).to.be.ok(); + const num = str.replace(/,/g, ''); + if (num !== '-') { + expect(num).to.match(/^\d+$/); + } } $rows.each(function () { @@ -135,7 +136,7 @@ describe('AggTable Directive', function () { }); describe('renders totals row', function () { - function totalsRowTest(totalFunc, expected) { + async function totalsRowTest(totalFunc, expected) { const vis = new Vis(indexPattern, { type: 'table', aggs: [ @@ -158,10 +159,10 @@ describe('AggTable Directive', function () { const oldTimezoneSetting = settings.get('dateFormat:tz'); settings.set('dateFormat:tz', 'UTC'); - $scope.table = tabifyAggResponse(vis.getAggConfig(), + $scope.table = (await tableAggResponse(vis, fixtures.oneTermOneHistogramBucketWithTwoMetricsOneTopHitOneDerivative, { canSplit: false, minimalColumns: true, asAggConfigResults: true } - ); + )).tables[0]; $scope.showTotal = true; $scope.totalFunc = totalFunc; const $el = $(''); @@ -182,11 +183,11 @@ describe('AggTable Directive', function () { settings.set('dateFormat:tz', oldTimezoneSetting); off(); } - it('as count', function () { - totalsRowTest('count', ['18', '18', '18', '18', '18', '18']); + it('as count', async function () { + await totalsRowTest('count', ['18', '18', '18', '18', '18', '18']); }); - it('as min', function () { - totalsRowTest('min', [ + it('as min', async function () { + await totalsRowTest('min', [ '', '2014-09-28', '9,283', @@ -195,8 +196,8 @@ describe('AggTable Directive', function () { '11' ]); }); - it('as max', function () { - totalsRowTest('max', [ + it('as max', async function () { + await totalsRowTest('max', [ '', '2014-10-03', '220,943', @@ -205,8 +206,8 @@ describe('AggTable Directive', function () { '837' ]); }); - it('as avg', function () { - totalsRowTest('avg', [ + it('as avg', async function () { + await totalsRowTest('avg', [ '', '', '87,221.5', @@ -215,8 +216,8 @@ describe('AggTable Directive', function () { '206.833' ]); }); - it('as sum', function () { - totalsRowTest('sum', [ + it('as sum', async function () { + await totalsRowTest('sum', [ '', '', '1,569,987', diff --git a/src/ui/public/agg_table/agg_table.js b/src/ui/public/agg_table/agg_table.js index dba9ebeb5d10b7..352d1152aa99df 100644 --- a/src/ui/public/agg_table/agg_table.js +++ b/src/ui/public/agg_table/agg_table.js @@ -102,10 +102,10 @@ uiModules return; } - self.csv.filename = ($scope.exportTitle || table.title() || 'table') + '.csv'; + self.csv.filename = ($scope.exportTitle || table.title || 'table') + '.csv'; $scope.rows = table.rows; $scope.formattedColumns = table.columns.map(function (col, i) { - const agg = $scope.table.aggConfig(col); + const agg = col.aggConfig; const field = agg.getField(); const formattedColumn = { title: col.title, diff --git a/src/ui/public/agg_types/__tests__/metrics/median.js b/src/ui/public/agg_types/__tests__/metrics/median.js index b4db30e3d929ba..de81913494bae9 100644 --- a/src/ui/public/agg_types/__tests__/metrics/median.js +++ b/src/ui/public/agg_types/__tests__/metrics/median.js @@ -35,8 +35,7 @@ describe('AggTypeMetricMedianProvider class', function () { 'title': 'New Visualization', 'type': 'metric', 'params': { - 'fontSize': 60, - 'handleNoResults': true + 'fontSize': 60 }, 'aggs': [ { diff --git a/src/ui/public/agg_types/__tests__/metrics/parent_pipeline.js b/src/ui/public/agg_types/__tests__/metrics/parent_pipeline.js index d149fd34a2a0f0..78a9ad4d107973 100644 --- a/src/ui/public/agg_types/__tests__/metrics/parent_pipeline.js +++ b/src/ui/public/agg_types/__tests__/metrics/parent_pipeline.js @@ -59,8 +59,7 @@ describe('parent pipeline aggs', function () { title: 'New Visualization', type: 'metric', params: { - fontSize: 60, - handleNoResults: true + fontSize: 60 }, aggs: [ { diff --git a/src/ui/public/agg_types/__tests__/metrics/sibling_pipeline.js b/src/ui/public/agg_types/__tests__/metrics/sibling_pipeline.js index e3e09b886d03d7..43ae223eaf17e5 100644 --- a/src/ui/public/agg_types/__tests__/metrics/sibling_pipeline.js +++ b/src/ui/public/agg_types/__tests__/metrics/sibling_pipeline.js @@ -68,8 +68,7 @@ describe('sibling pipeline aggs', function () { title: 'New Visualization', type: 'metric', params: { - fontSize: 60, - handleNoResults: true + fontSize: 60 }, aggs: [ { diff --git a/src/ui/public/agg_types/__tests__/metrics/top_hit.js b/src/ui/public/agg_types/__tests__/metrics/top_hit.js index 5dc109422c16f6..a83053140f5cd8 100644 --- a/src/ui/public/agg_types/__tests__/metrics/top_hit.js +++ b/src/ui/public/agg_types/__tests__/metrics/top_hit.js @@ -49,8 +49,7 @@ describe('Top hit metric', function () { title: 'New Visualization', type: 'metric', params: { - fontSize: 60, - handleNoResults: true + fontSize: 60 }, aggs: [ { diff --git a/src/ui/public/vis/__tests__/_vis.js b/src/ui/public/vis/__tests__/_vis.js index faccce9643a93f..81ca0d31b5a038 100644 --- a/src/ui/public/vis/__tests__/_vis.js +++ b/src/ui/public/vis/__tests__/_vis.js @@ -269,10 +269,11 @@ describe('Vis Class', function () { data = { columns: [{ + id: 'col-0', title: 'test', aggConfig }], - rows: [['US']] + rows: [{ 'col-0': 'US' }] }; }); diff --git a/src/ui/public/vis/__tests__/response_handlers/_build_chart_data.js b/src/ui/public/vis/__tests__/response_handlers/_build_chart_data.js index ee3c8647b16352..789b2f94f43fc6 100644 --- a/src/ui/public/vis/__tests__/response_handlers/_build_chart_data.js +++ b/src/ui/public/vis/__tests__/response_handlers/_build_chart_data.js @@ -21,9 +21,8 @@ import _ from 'lodash'; import ngMock from 'ng_mock'; import expect from 'expect.js'; import sinon from 'sinon'; -import { TabifyTable } from '../../../agg_response/tabify/_table'; import { AggResponseIndexProvider } from '../../../agg_response'; -import { BasicResponseHandlerProvider } from '../../response_handlers/basic'; +import { VislibResponseHandlerProvider } from '../../response_handlers/vislib'; describe('renderbot#buildChartData', function () { let buildChartData; @@ -32,7 +31,7 @@ describe('renderbot#buildChartData', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { aggResponse = Private(AggResponseIndexProvider); - buildChartData = Private(BasicResponseHandlerProvider).handler; + buildChartData = Private(VislibResponseHandlerProvider).handler; })); describe('for hierarchical vis', function () { @@ -79,7 +78,7 @@ describe('renderbot#buildChartData', function () { } }; const esResp = { hits: { total: 1 } }; - const tabbed = { tables: [ new TabifyTable() ] }; + const tabbed = { tables: [ {}] }; sinon.stub(aggResponse, 'tabify').returns(tabbed); expect(buildChartData.call(renderbot, esResp)).to.eql(chart); @@ -88,7 +87,7 @@ describe('renderbot#buildChartData', function () { it('converts table groups into rows/columns wrappers for charts', function () { const converter = sinon.stub().returns('chart'); const esResp = { hits: { total: 1 } }; - const tables = [new TabifyTable(), new TabifyTable(), new TabifyTable(), new TabifyTable()]; + const tables = [{}, {}, {}, {}]; const renderbot = { vis: { diff --git a/src/ui/public/vis/__tests__/response_handlers/basic.js b/src/ui/public/vis/__tests__/response_handlers/basic.js index 11aabc0d8d91cd..84febf6270ef2c 100644 --- a/src/ui/public/vis/__tests__/response_handlers/basic.js +++ b/src/ui/public/vis/__tests__/response_handlers/basic.js @@ -19,7 +19,7 @@ import ngMock from 'ng_mock'; import expect from 'expect.js'; -import { BasicResponseHandlerProvider } from '../../response_handlers/basic'; +import { VislibResponseHandlerProvider } from '../../response_handlers/vislib'; import { VisProvider } from '../..'; import fixtures from 'fixtures/fake_hierarchical_data'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; @@ -39,7 +39,7 @@ describe('Basic Response Handler', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - basicResponseHandler = Private(BasicResponseHandlerProvider).handler; + basicResponseHandler = Private(VislibResponseHandlerProvider).handler; Vis = Private(VisProvider); indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); diff --git a/src/ui/public/vis/__tests__/vis_types/vislib_vis_type.js b/src/ui/public/vis/__tests__/vis_types/vislib_vis_type.js index 6779638f1a4ca6..5ad5f58b70b95c 100644 --- a/src/ui/public/vis/__tests__/vis_types/vislib_vis_type.js +++ b/src/ui/public/vis/__tests__/vis_types/vislib_vis_type.js @@ -39,9 +39,9 @@ describe('Vislib Vis Type', function () { })); describe('initialization', () => { - it('should set the basic response handler if not set', () => { + it('should set the vislib response handler if not set', () => { const visType = new VislibVisType(visConfig); - expect(visType.responseHandler).to.equal('basic'); + expect(visType.responseHandler).to.equal('vislib'); }); it('should not change response handler if its already set', () => { diff --git a/src/ui/public/vis/map/convert_to_geojson.js b/src/ui/public/vis/map/convert_to_geojson.js index 317c2b4a5865c5..0b4193460f1e59 100644 --- a/src/ui/public/vis/map/convert_to_geojson.js +++ b/src/ui/public/vis/map/convert_to_geojson.js @@ -28,27 +28,28 @@ export function convertToGeoJson(tabifiedResponse) { let max = -Infinity; let geoAgg; - if (tabifiedResponse && tabifiedResponse.tables && tabifiedResponse.tables[0] && tabifiedResponse.tables[0].rows) { + if (tabifiedResponse && tabifiedResponse.rows) { - const table = tabifiedResponse.tables[0]; - const geohashIndex = table.columns.findIndex(column => column.aggConfig.type.dslName === 'geohash_grid'); - geoAgg = table.columns.find(column => column.aggConfig.type.dslName === 'geohash_grid'); + const table = tabifiedResponse; + const geohashColumn = table.columns.find(column => column.aggConfig.type.dslName === 'geohash_grid'); - if (geohashIndex === -1) { + if (!geohashColumn) { features = []; } else { - const metricIndex = table.columns.findIndex(column => column.aggConfig.type.type === 'metrics'); - const geocentroidIndex = table.columns.findIndex(column => column.aggConfig.type.dslName === 'geo_centroid'); + geoAgg = geohashColumn.aggConfig; + + const metricColumn = table.columns.find(column => column.aggConfig.type.type === 'metrics'); + const geocentroidColumn = table.columns.find(column => column.aggConfig.type.dslName === 'geo_centroid'); features = table.rows.map(row => { - const geohash = row[geohashIndex]; + const geohash = row[geohashColumn.id]; const geohashLocation = decodeGeoHash(geohash); let pointCoordinates; - if (geocentroidIndex > -1) { - const location = row[geocentroidIndex]; + if (geocentroidColumn) { + const location = row[geocentroidColumn.id]; pointCoordinates = [location.lon, location.lat]; } else { pointCoordinates = [geohashLocation.longitude[2], geohashLocation.latitude[2]]; @@ -66,13 +67,13 @@ export function convertToGeoJson(tabifiedResponse) { geohashLocation.longitude[2] ]; - if (geoAgg.aggConfig.params.useGeocentroid) { + if (geoAgg.params.useGeocentroid) { // see https://github.com/elastic/elasticsearch/issues/24694 for why clampGrid is used pointCoordinates[0] = clampGrid(pointCoordinates[0], geohashLocation.longitude[0], geohashLocation.longitude[1]); pointCoordinates[1] = clampGrid(pointCoordinates[1], geohashLocation.latitude[0], geohashLocation.latitude[1]); } - const value = row[metricIndex]; + const value = row[metricColumn.id]; min = Math.min(min, value); max = Math.max(max, value); @@ -111,8 +112,8 @@ export function convertToGeoJson(tabifiedResponse) { meta: { min: min, max: max, - geohashPrecision: geoAgg && geoAgg.aggConfig.params.precision, - geohashGridDimensionsAtEquator: geoAgg && gridDimensions(geoAgg.aggConfig.params.precision) + geohashPrecision: geoAgg && geoAgg.params.precision, + geohashGridDimensionsAtEquator: geoAgg && gridDimensions(geoAgg.params.precision) } }; } diff --git a/src/ui/public/vis/request_handlers/courier.js b/src/ui/public/vis/request_handlers/courier.js index eb9ff172d62265..f39130280e49c8 100644 --- a/src/ui/public/vis/request_handlers/courier.js +++ b/src/ui/public/vis/request_handlers/courier.js @@ -35,10 +35,8 @@ const CourierRequestHandlerProvider = function () { */ async function buildTabularInspectorData(vis, searchSource, aggConfigs) { const table = tabifyAggResponse(aggConfigs, searchSource.finalResponse, { - canSplit: false, - asAggConfigResults: false, partialRows: true, - isHierarchical: vis.isHierarchical(), + metricsAtAllLevels: vis.isHierarchical(), }); const columns = table.columns.map((col, index) => { const field = col.aggConfig.getField(); @@ -46,7 +44,7 @@ const CourierRequestHandlerProvider = function () { col.aggConfig.isFilterable() && (!field || field.filterable); return ({ - name: col.title, + name: col.name, field: `col${index}`, filter: isCellContentFilterable && ((value) => { const filter = col.aggConfig.createFilter(value.raw); @@ -61,9 +59,10 @@ const CourierRequestHandlerProvider = function () { }); }); const rows = table.rows.map(row => { - return row.reduce((prev, cur, index) => { - const fieldFormatter = table.columns[index].aggConfig.fieldFormatter('text'); - prev[`col${index}`] = new FormattedData(cur, fieldFormatter(cur)); + return table.columns.reduce((prev, cur, index) => { + const value = row[cur.id]; + const fieldFormatter = cur.aggConfig.fieldFormatter('text'); + prev[`col${index}`] = new FormattedData(value, fieldFormatter(value)); return prev; }, {}); }); diff --git a/src/ui/public/vis/response_handlers/legacy.js b/src/ui/public/vis/response_handlers/legacy.js new file mode 100644 index 00000000000000..c8072efa4b4d21 --- /dev/null +++ b/src/ui/public/vis/response_handlers/legacy.js @@ -0,0 +1,110 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import _ from 'lodash'; +import { tabifyAggResponse } from '../../agg_response/tabify'; +import AggConfigResult from '../../vis/agg_config_result'; +import { VisResponseHandlersRegistryProvider } from '../../registry/vis_response_handlers'; + +const LegacyResponseHandlerProvider = function () { + + return { + name: 'legacy', + handler: function (vis, response) { + return new Promise((resolve) => { + const converted = { tables: [] }; + const metricsAtAllLevels = vis.params.hasOwnProperty('showMetricsAtAllLevels') ? + vis.params.showMetricsAtAllLevels : vis.isHierarchical(); + + const table = tabifyAggResponse(vis.getAggConfig(), response, { + metricsAtAllLevels: metricsAtAllLevels, + partialRows: vis.params.showPartialRows, + }); + + const asAggConfigResults = _.get(vis, 'type.responseHandlerConfig.asAggConfigResults', false); + + const splitColumn = table.columns.find(column => column.aggConfig.schema.name === 'split'); + if (splitColumn) { + const splitAgg = splitColumn.aggConfig; + const splitMap = {}; + let splitIndex = 0; + + table.rows.forEach(row => { + const splitValue = row[splitColumn.id]; + const splitColumnIndex = table.columns.findIndex(column => column === splitColumn); + + if (!splitMap.hasOwnProperty(splitValue)) { + splitMap[splitValue] = splitIndex++; + const tableGroup = { + $parent: converted, + aggConfig: splitAgg, + title: `${splitValue}: ${splitAgg.makeLabel()}`, + key: splitValue, + tables: [] + }; + tableGroup.tables.push({ + $parent: tableGroup, + columns: table.columns.filter((column, i) => i !== splitColumnIndex).map(column => ({ title: column.name, ...column })), + rows: [] + }); + + converted.tables.push(tableGroup); + } + + let previousSplitAgg = new AggConfigResult(splitAgg, null, splitValue, splitValue); + const tableIndex = splitMap[splitValue]; + const newRow = _.map(converted.tables[tableIndex].tables[0].columns, column => { + const value = row[column.id]; + const aggConfigResult = new AggConfigResult(column.aggConfig, previousSplitAgg, value, value); + if (column.aggConfig.type.type === 'buckets') { + previousSplitAgg = aggConfigResult; + } + return asAggConfigResults ? aggConfigResult : value; + }); + + converted.tables[tableIndex].tables[0].rows.push(newRow); + }); + } else { + + converted.tables.push({ + columns: table.columns.map(column => ({ title: column.name, ...column })), + rows: table.rows.map(row => { + let previousSplitAgg; + return table.columns.map(column => { + const value = row[column.id]; + const aggConfigResult = new AggConfigResult(column.aggConfig, previousSplitAgg, value, value); + if (column.aggConfig.type.type === 'buckets') { + previousSplitAgg = aggConfigResult; + } + return asAggConfigResults ? aggConfigResult : value; + }); + }), + aggConfig: (column) => column.aggConfig + }); + } + + resolve(converted); + }); + } + }; +}; + +VisResponseHandlersRegistryProvider.register(LegacyResponseHandlerProvider); + +export { LegacyResponseHandlerProvider }; diff --git a/src/ui/public/vis/response_handlers/tabify.js b/src/ui/public/vis/response_handlers/tabify.js index 6a74fd2dbd728e..ac45995b73c24c 100644 --- a/src/ui/public/vis/response_handlers/tabify.js +++ b/src/ui/public/vis/response_handlers/tabify.js @@ -17,7 +17,6 @@ * under the License. */ -import _ from 'lodash'; import { AggResponseIndexProvider } from '../../agg_response'; import { VisResponseHandlersRegistryProvider } from '../../registry/vis_response_handlers'; import { getTime } from 'ui/timefilter/get_time'; @@ -32,10 +31,9 @@ const TabifyResponseHandlerProvider = function (Private) { const time = getTime(vis.indexPattern, vis.filters.timeRange); const tableGroup = aggResponse.tabify(vis.getAggConfig(), response, { - canSplit: true, - asAggConfigResults: _.get(vis, 'type.responseHandlerConfig.asAggConfigResults', false), - isHierarchical: vis.isHierarchical(), - timeRange: time ? time.range : undefined + metricsAtAllLevels: vis.isHierarchical(), + partialRows: vis.params.showPartialRows, + timeRange: time ? time.range : undefined, }); resolve(tableGroup); diff --git a/src/ui/public/vis/response_handlers/basic.js b/src/ui/public/vis/response_handlers/vislib.js similarity index 66% rename from src/ui/public/vis/response_handlers/basic.js rename to src/ui/public/vis/response_handlers/vislib.js index 42625fade7b595..9cdf11596aaf41 100644 --- a/src/ui/public/vis/response_handlers/basic.js +++ b/src/ui/public/vis/response_handlers/vislib.js @@ -18,18 +18,18 @@ */ import { AggResponseIndexProvider } from '../../agg_response'; -import { TabifyTable } from '../../agg_response/tabify/_table'; -import { getTime } from 'ui/timefilter/get_time'; - +import { LegacyResponseHandlerProvider } from './legacy'; import { VisResponseHandlersRegistryProvider } from '../../registry/vis_response_handlers'; -const BasicResponseHandlerProvider = function (Private) { +const VislibResponseHandlerProvider = function (Private) { const aggResponse = Private(AggResponseIndexProvider); + const tableResponseProvider = Private(LegacyResponseHandlerProvider).handler; function convertTableGroup(vis, tableGroup) { const tables = tableGroup.tables; const firstChild = tables[0]; - if (firstChild instanceof TabifyTable) { + + if (firstChild.columns) { const chart = convertTable(vis, firstChild); // if chart is within a split, assign group title to its label @@ -40,6 +40,7 @@ const BasicResponseHandlerProvider = function (Private) { } if (!tables.length) return; + const out = {}; let outList; @@ -64,38 +65,34 @@ const BasicResponseHandlerProvider = function (Private) { } return { - name: 'basic', + name: 'vislib', handler: function (vis, response) { return new Promise((resolve) => { if (vis.isHierarchical()) { // the hierarchical converter is very self-contained (woot!) + // todo: it should be updated to be based on tabified data just as other responseConverters resolve(aggResponse.hierarchical(vis, response)); } - const time = getTime(vis.indexPattern, vis.filters.timeRange); + return tableResponseProvider(vis, response).then(tableGroup => { + let converted = convertTableGroup(vis, tableGroup); + if (!converted) { + // mimic a row of tables that doesn't have any tables + // https://github.com/elastic/kibana/blob/7bfb68cd24ed42b1b257682f93c50cd8d73e2520/src/kibana/components/vislib/components/zero_injection/inject_zeros.js#L32 + converted = { rows: [] }; + } - const tableGroup = aggResponse.tabify(vis.getAggConfig(), response, { - canSplit: true, - asAggConfigResults: true, - isHierarchical: vis.isHierarchical(), - timeRange: time ? time.range : undefined - }); + converted.hits = response.hits.total; - let converted = convertTableGroup(vis, tableGroup); - if (!converted) { - // mimic a row of tables that doesn't have any tables - // https://github.com/elastic/kibana/blob/7bfb68cd24ed42b1b257682f93c50cd8d73e2520/src/kibana/components/vislib/components/zero_injection/inject_zeros.js#L32 - converted = { rows: [] }; - } + resolve(converted); + }); - converted.hits = response.hits.total; - resolve(converted); }); } }; }; -VisResponseHandlersRegistryProvider.register(BasicResponseHandlerProvider); +VisResponseHandlersRegistryProvider.register(VislibResponseHandlerProvider); -export { BasicResponseHandlerProvider }; +export { VislibResponseHandlerProvider }; diff --git a/src/ui/public/vis/vis.js b/src/ui/public/vis/vis.js index e00943d815a661..84606c5b656886 100644 --- a/src/ui/public/vis/vis.js +++ b/src/ui/public/vis/vis.js @@ -49,7 +49,11 @@ const getTerms = (table, columnIndex, rowIndex) => { } // get only rows where cell value matches current row for all the fields before columnIndex - const rows = table.rows.filter(row => row.every((cell, i) => cell === table.rows[rowIndex][i] || i >= columnIndex)); + const rows = table.rows.filter(row => { + return table.columns.every((column, i) => { + return row[column.id] === table.rows[rowIndex][column.id] || i >= columnIndex; + }); + }); const terms = rows.map(row => row[columnIndex]); return [...new Set(terms.filter(term => { @@ -99,17 +103,17 @@ export function VisProvider(Private, indexPatterns, getAppState) { filterBarClickHandler(appState)(event); }, addFilter: (data, columnIndex, rowIndex, cellValue) => { - const agg = data.columns[columnIndex].aggConfig; + const { aggConfig, id: columnId } = data.columns[columnIndex]; let filter = []; - const value = rowIndex > -1 ? data.rows[rowIndex][columnIndex] : cellValue; + const value = rowIndex > -1 ? data.rows[rowIndex][columnId] : cellValue; if (!value) { return; } - if (agg.type.name === 'terms' && agg.params.otherBucket) { + if (aggConfig.type.name === 'terms' && aggConfig.params.otherBucket) { const terms = getTerms(data, columnIndex, rowIndex); - filter = agg.createFilter(value, { terms }); + filter = aggConfig.createFilter(value, { terms }); } else { - filter = agg.createFilter(value); + filter = aggConfig.createFilter(value); } queryFilter.addFilters(filter); }, brush: (event) => { diff --git a/src/ui/public/vis/vis_types/vislib_vis_type.js b/src/ui/public/vis/vis_types/vislib_vis_type.js index 7d503a66d2d3c4..f691f511a2d7ee 100644 --- a/src/ui/public/vis/vis_types/vislib_vis_type.js +++ b/src/ui/public/vis/vis_types/vislib_vis_type.js @@ -108,7 +108,8 @@ export function VislibVisTypeProvider(Private, $rootScope, $timeout, $compile) { class VislibVisType extends BaseVisType { constructor(opts) { if (!opts.responseHandler) { - opts.responseHandler = 'basic'; + opts.responseHandler = 'vislib'; + opts.responseHandlerConfig = { asAggConfigResults: true }; } if (!opts.responseConverter) { opts.responseConverter = pointSeries; diff --git a/src/ui/public/vislib/lib/handler.js b/src/ui/public/vislib/lib/handler.js index c370d5189f5547..c07a8d7426e353 100644 --- a/src/ui/public/vislib/lib/handler.js +++ b/src/ui/public/vislib/lib/handler.js @@ -219,18 +219,7 @@ export function VisHandlerProvider(Private) { // to continuously call render on resize .attr('class', 'visualize-error chart error'); - if (message === 'No results found') { - div.append('div') - .attr('class', 'text-center visualize-error visualize-chart') - .append('div').attr('class', 'item top') - .append('div').attr('class', 'item') - .append('h2').html('') - .append('h4').text(message); - - div.append('div').attr('class', 'item bottom'); - } else { - div.append('h4').text(markdownIt.renderInline(message)); - } + div.append('h4').text(markdownIt.renderInline(message)); dispatchRenderComplete(this.el); return div; diff --git a/src/ui/public/visualize/components/visualization.test.js b/src/ui/public/visualize/components/visualization.test.js index 8c88e004c6fc69..1d768787ce1934 100644 --- a/src/ui/public/visualize/components/visualization.test.js +++ b/src/ui/public/visualize/components/visualization.test.js @@ -43,7 +43,7 @@ class VisualizationStub { describe('', () => { const visData = { - hits: { total: 1 } + hits: 1 }; const uiState = { @@ -63,19 +63,18 @@ describe('', () => { return this.uiState; }, params: { - }, type: { title: 'new vis', requiresSearch: true, - handleNoResults: true, + useCustomNoDataScreen: false, visualization: VisualizationStub } }; }); it('should display no result message when length of data is 0', () => { - const data = { hits: { total: 0 } }; + const data = { rows: [] }; const wrapper = render(); expect(wrapper.text()).toBe('No results found'); }); @@ -87,7 +86,7 @@ describe('', () => { it('should call onInit when rendering no data', () => { const spy = jest.fn(); - const noData = { hits: { total: 0 } }; + const noData = { hits: 0 }; mount( void; } export class VisualizationNoResults extends React.Component { + private containerDiv = React.createRef(); + public render() { return ( -
    +
    -
    - - +
    +
    , ) helper function to append the - * directive to the DOM and correctly initialize it. Otherwise the rendering of - * the directive would fail because its link() function is dependent on certain - * DOM attributes (e.g. the dynamic width and height of an element). - * The init() function takes care of running the tests only after the initialize - * $scope.$digest() is run. - * Also note the use of done() with these tests, this is required if tests are - * run in an asynchronous manner like using a callback in this case. - */ - -describe('ML - ', () => { - let $scope; - let $compile; - let $element; - - const seriesConfig = { - jobId: 'population-03', - detectorIndex: 0, - metricFunction: 'sum', - timeField: '@timestamp', - interval: '1h', - datafeedConfig: { - datafeed_id: 'datafeed-population-03', - job_id: 'population-03', - query_delay: '60s', - frequency: '600s', - indices: ['filebeat-7.0.0*'], - types: ['doc'], - query: { match_all: { boost: 1 } }, - scroll_size: 1000, - chunking_config: { mode: 'auto' }, - state: 'stopped' - }, - metricFieldName: 'nginx.access.body_sent.bytes', - functionDescription: 'sum', - bucketSpanSeconds: 3600, - detectorLabel: 'high_sum(nginx.access.body_sent.bytes) over nginx.access.remote_ip (population-03)', - fieldName: 'nginx.access.body_sent.bytes', - entityFields: [{ - fieldName: 'nginx.access.remote_ip', - fieldValue: '72.57.0.53', - $$hashKey: 'object:813' - }], - infoTooltip: `
    job ID: population-03
    - aggregation interval: 1h
    chart function: sum nginx.access.body_sent.bytes
    - nginx.access.remote_ip: 72.57.0.53
    `, - loading: false, - plotEarliest: 1487534400000, - plotLatest: 1488168000000, - selectedEarliest: 1487808000000, - selectedLatest: 1487894399999 - }; - - beforeEach(() => { - ngMock.module('kibana'); - ngMock.inject(function (_$compile_, $rootScope) { - $compile = _$compile_; - $scope = $rootScope.$new(); - }); - }); - - afterEach(function () { - $scope.$destroy(); - }); - - it('Initialize', () => { - $element = $compile('')($scope); - $scope.$digest(); - - // without setting any attributes and corresponding data - // the directive just ends up being empty. - expect($element.find('.content-wrapper').html()).to.be(''); - expect($element.find('ml-loading-indicator .loading-indicator').length).to.be(0); - }); - - it('Loading status active, no chart', () => { - $scope.seriesConfig = { - loading: true - }; - - $element = $compile('')($scope); - $scope.$digest(); - - // test if the loading indicator is shown - expect($element.find('ml-loading-indicator .loading-indicator').length).to.be(1); - }); - - describe('ML - data rendering', () => { - // For the following tests the directive needs to be rendered in the actual DOM, - // because otherwise there wouldn't be a width available which would - // trigger SVG errors. We use a fixed width to be able to test for - // fine grained attributes of the chart. - - // basically a parameterized beforeEach - function init(chartData, tests) { - // First we create the element including a wrapper which sets the width: - $element = angular.element('
    '); - // Add the element to the body so it gets rendered - $element.appendTo(document.body); - - $scope.seriesConfig = { - ...seriesConfig, - chartData, - chartLimits: chartLimits(chartData) - }; - - // Compile the directive and run a $digest() - $compile($element)($scope); - $scope.$evalAsync(tests); - $scope.$digest(); - } - - afterEach(function () { - // remove the element from the DOM - $element.remove(); - }); - - it('Anomaly Explorer Chart with multiple data points', (done) => { - // prepare data for the test case - const chartData = [ - { - date: new Date('2017-02-23T08:00:00.000Z'), - value: 228243469, anomalyScore: 63.32916, numberOfCauses: 1, - actual: [228243469], typical: [133107.7703441773] - }, - { date: new Date('2017-02-23T09:00:00.000Z'), value: null }, - { date: new Date('2017-02-23T10:00:00.000Z'), value: null }, - { date: new Date('2017-02-23T11:00:00.000Z'), value: null }, - { - date: new Date('2017-02-23T12:00:00.000Z'), - value: 625736376, anomalyScore: 97.32085, numberOfCauses: 1, - actual: [625736376], typical: [132830.424736973] - }, - { - date: new Date('2017-02-23T13:00:00.000Z'), - value: 201039318, anomalyScore: 59.83488, numberOfCauses: 1, - actual: [201039318], typical: [132739.5267403542] - } - ]; - - init(chartData, () => { - // the loading indicator should not be shown - expect($element.find('ml-loading-indicator .loading-indicator').length).to.be(0); - - // test if all expected elements are present - const svg = $element.find('svg'); - expect(svg.length).to.be(1); - - const lineChart = svg.find('g.line-chart'); - expect(lineChart.length).to.be(1); - - const rects = lineChart.find('rect'); - expect(rects.length).to.be(2); - - const chartBorder = angular.element(rects[0]); - expect(+chartBorder.attr('x')).to.be(0); - expect(+chartBorder.attr('y')).to.be(0); - expect(+chartBorder.attr('height')).to.be(170); - - const selectedInterval = angular.element(rects[1]); - expect(selectedInterval.attr('class')).to.be('selected-interval'); - expect(+selectedInterval.attr('y')).to.be(1); - expect(+selectedInterval.attr('height')).to.be(169); - - // skip this test for now - // TODO find out why this doesn't work in IE11 - // const xAxisTicks = lineChart.find('.x.axis .tick'); - // expect(xAxisTicks.length).to.be(4); - const yAxisTicks = lineChart.find('.y.axis .tick'); - expect(yAxisTicks.length).to.be(10); - - const paths = lineChart.find('path'); - expect(angular.element(paths[0]).attr('class')).to.be('domain'); - expect(angular.element(paths[1]).attr('class')).to.be('domain'); - - const line = angular.element(paths[2]); - expect(line.attr('class')).to.be('values-line'); - // this is not feasible to test because of minimal differences - // across various browsers - // expect(line.attr('d')) - // .to.be('M205.56285511363637,152.3732523349513M215.3515625,7.72727272727272L217.79873934659093,162.27272727272728'); - expect(line.attr('d')).not.to.be(undefined); - - const dots = lineChart.find('g.values-dots circle'); - expect(dots.length).to.be(1); - - const dot = angular.element(dots[0]); - expect(dot.attr('r')).to.be('1.5'); - - const chartMarkers = lineChart.find('g.chart-markers circle'); - expect(chartMarkers.length).to.be(3); - expect(chartMarkers.toArray().map(d => +angular.element(d).attr('r'))).to.eql([7, 7, 7]); - - done(); - }); - }); - - it('Anomaly Explorer Chart with single data point', (done) => { - const chartData = [ - { - date: new Date('2017-02-23T08:00:00.000Z'), - value: 228243469, anomalyScore: 63.32916, numberOfCauses: 1, - actual: [228243469], typical: [228243469] - } - ]; - - init(chartData, () => { - const svg = $element.find('svg'); - const lineChart = svg.find('g.line-chart'); - const yAxisTicks = lineChart.find('.y.axis .tick'); - expect(yAxisTicks.length).to.be(13); - done(); - }); - }); - }); -}); diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explore_series.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explore_series.js new file mode 100644 index 00000000000000..48b11391f5eb81 --- /dev/null +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explore_series.js @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import _ from 'lodash'; +import moment from 'moment'; +import rison from 'rison-node'; + +import chrome from 'ui/chrome'; +import { timefilter } from 'ui/timefilter'; + +export function exploreSeries(series) { + // Open the Single Metric dashboard over the same overall bounds and + // zoomed in to the same time as the current chart. + const bounds = timefilter.getActiveBounds(); + const from = bounds.min.toISOString(); // e.g. 2016-02-08T16:00:00.000Z + const to = bounds.max.toISOString(); + + const zoomFrom = moment(series.plotEarliest).toISOString(); + const zoomTo = moment(series.plotLatest).toISOString(); + + // Pass the detector index and entity fields (i.e. by, over, partition fields) + // to identify the particular series to view. + // Initially pass them in the mlTimeSeriesExplorer part of the AppState. + // TODO - do we want to pass the entities via the filter? + const entityCondition = {}; + _.each(series.entityFields, (entity) => { + entityCondition[entity.fieldName] = entity.fieldValue; + }); + + // Use rison to build the URL . + const _g = rison.encode({ + ml: { + jobIds: [series.jobId] + }, + refreshInterval: { + display: 'Off', + pause: false, + value: 0 + }, + time: { + from: from, + to: to, + mode: 'absolute' + } + }); + + const _a = rison.encode({ + mlTimeSeriesExplorer: { + zoom: { + from: zoomFrom, + to: zoomTo + }, + detectorIndex: series.detectorIndex, + entities: entityCondition, + }, + filters: [], + query: { + query_string: { + analyze_wildcard: true, + query: '*' + } + } + }); + + let path = chrome.getBasePath(); + path += '/app/ml#/timeseriesexplorer'; + path += '?_g=' + _g; + path += '&_a=' + encodeURIComponent(_a); + window.open(path, '_blank'); + +} diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_directive.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.js similarity index 82% rename from x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_directive.js rename to x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.js index befa1afc4dd3bd..5932ba8786d278 100644 --- a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_directive.js +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.js @@ -4,43 +4,64 @@ * you may not use this file except in compliance with the Elastic License. */ - - /* - * AngularJS directive for rendering a chart of anomalies in the raw data in + * React component for rendering a chart of anomalies in the raw data in * the Machine Learning Explorer dashboard. */ -import './styles/explorer_chart_directive.less'; +import './styles/explorer_chart.less'; + +import PropTypes from 'prop-types'; +import React from 'react'; import _ from 'lodash'; import d3 from 'd3'; -import angular from 'angular'; +import $ from 'jquery'; import moment from 'moment'; -import { formatValue } from 'plugins/ml/formatters/format_value'; -import { getSeverityWithLow } from 'plugins/ml/../common/util/anomaly_utils'; -import { drawLineChartDots, numTicksForDateFormat } from 'plugins/ml/util/chart_utils'; +// don't use something like plugins/ml/../common +// because it won't work with the jest tests +import { formatValue } from '../../formatters/format_value'; +import { getSeverityWithLow } from '../../../common/util/anomaly_utils'; +import { drawLineChartDots, numTicksForDateFormat } from '../../util/chart_utils'; import { TimeBuckets } from 'ui/time_buckets'; -import loadingIndicatorWrapperTemplate from 'plugins/ml/components/loading_indicator/loading_indicator_wrapper.html'; -import { mlEscape } from 'plugins/ml/util/string_utils'; -import { mlFieldFormatService } from 'plugins/ml/services/field_format_service'; +import { LoadingIndicator } from '../../components/loading_indicator/loading_indicator'; +import { mlEscape } from '../../util/string_utils'; +import { mlFieldFormatService } from '../../services/field_format_service'; +import { mlChartTooltipService } from '../../components/chart_tooltip/chart_tooltip_service'; -import { uiModules } from 'ui/modules'; -const module = uiModules.get('apps/ml'); +const CONTENT_WRAPPER_HEIGHT = 215; -module.directive('mlExplorerChart', function ( - mlChartTooltipService, - Private, - mlSelectSeverityService) { +export class ExplorerChart extends React.Component { + static propTypes = { + seriesConfig: PropTypes.object, + mlSelectSeverityService: PropTypes.object.isRequired + } - function link(scope, element) { - console.log('ml-explorer-chart directive link series config:', scope.seriesConfig); - if (typeof scope.seriesConfig === 'undefined') { + componentDidMount() { + this.renderChart(); + } + + componentDidUpdate() { + this.renderChart(); + } + + renderChart() { + const { + mlSelectSeverityService + } = this.props; + + const element = this.rootNode; + const config = this.props.seriesConfig; + + if ( + typeof config === 'undefined' || + Array.isArray(config.chartData) === false + ) { // just return so the empty directive renders without an error later on return; } - const config = scope.seriesConfig; + const fieldFormat = mlFieldFormatService.getFieldFormat(config.jobId, config.detectorIndex); let vizWidth = 0; @@ -56,35 +77,22 @@ module.directive('mlExplorerChart', function ( let lineChartGroup; let lineChartValuesLine = null; - // create a chart loading placeholder - scope.isLoading = config.loading; - if (Array.isArray(config.chartData)) { - // make sure we wait for the previous digest cycle to finish - // or the chart's wrapping elements might not have their - // right widths yet and we need them to define the SVG's width - scope.$evalAsync(() => { - init(config.chartLimits); - drawLineChart(config.chartData); - }); - } - - element.on('$destroy', function () { - scope.$destroy(); - }); + init(config.chartLimits); + drawLineChart(config.chartData); function init(chartLimits) { - const $el = angular.element('ml-explorer-chart'); + const $el = $('.ml-explorer-chart'); // Clear any existing elements from the visualization, // then build the svg elements for the chart. - const chartElement = d3.select(element.get(0)).select('.content-wrapper'); + const chartElement = d3.select(element).select('.content-wrapper'); chartElement.select('svg').remove(); const svgWidth = $el.width(); const svgHeight = chartHeight + margin.top + margin.bottom; const svg = chartElement.append('svg') - .attr('width', svgWidth) + .attr('width', svgWidth) .attr('height', svgHeight); // Set the size of the left margin according to the width of the largest y axis tick label. @@ -122,7 +130,7 @@ module.directive('mlExplorerChart', function ( d3.select('.temp-axis-label').remove(); margin.left = (Math.max(maxYAxisLabelWidth, 40)); - vizWidth = svgWidth - margin.left - margin.right; + vizWidth = svgWidth - margin.left - margin.right; // Set the x axis domain to match the request plot range. // This ensures ranges on different charts will match, even when there aren't @@ -319,12 +327,37 @@ module.directive('mlExplorerChart', function ( } } - return { - restrict: 'E', - scope: { - seriesConfig: '=' - }, - link: link, - template: loadingIndicatorWrapperTemplate - }; -}); + shouldComponentUpdate() { + // Prevents component re-rendering + return true; + } + + setRef(componentNode) { + this.rootNode = componentNode; + } + + render() { + const { + seriesConfig + } = this.props; + + if (typeof seriesConfig === 'undefined') { + // just return so the empty directive renders without an error later on + return null; + } + + // create a chart loading placeholder + const isLoading = seriesConfig.loading; + + return ( +
    + {isLoading && ( + + )} + {!isLoading && ( +
    + )} +
    + ); + } +} diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.test.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.test.js new file mode 100644 index 00000000000000..ce40308003f5f5 --- /dev/null +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart.test.js @@ -0,0 +1,207 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// Mock TimeBuckets and mlFieldFormatService, they don't play well +// with the jest based test setup yet. +jest.mock('ui/time_buckets', () => ({ + TimeBuckets: function () { + this.setBounds = jest.fn(); + this.setInterval = jest.fn(); + this.getScaledDateFormat = jest.fn(); + } +})); +jest.mock('../../services/field_format_service', () => ({ + mlFieldFormatService: { + getFieldFormat: jest.fn() + } +})); + +import { mount } from 'enzyme'; +import React from 'react'; + +import { ExplorerChart } from './explorer_chart'; +import { chartLimits } from '../../util/chart_utils'; + +describe('ExplorerChart', () => { + const seriesConfig = { + jobId: 'population-03', + detectorIndex: 0, + metricFunction: 'sum', + timeField: '@timestamp', + interval: '1h', + datafeedConfig: { + datafeed_id: 'datafeed-population-03', + job_id: 'population-03', + query_delay: '60s', + frequency: '600s', + indices: ['filebeat-7.0.0*'], + types: ['doc'], + query: { match_all: { boost: 1 } }, + scroll_size: 1000, + chunking_config: { mode: 'auto' }, + state: 'stopped' + }, + metricFieldName: 'nginx.access.body_sent.bytes', + functionDescription: 'sum', + bucketSpanSeconds: 3600, + detectorLabel: 'high_sum(nginx.access.body_sent.bytes) over nginx.access.remote_ip (population-03)', + fieldName: 'nginx.access.body_sent.bytes', + entityFields: [{ + fieldName: 'nginx.access.remote_ip', + fieldValue: '72.57.0.53', + $$hashKey: 'object:813' + }], + infoTooltip: `
    job ID: population-03
    + aggregation interval: 1h
    chart function: sum nginx.access.body_sent.bytes
    + nginx.access.remote_ip: 72.57.0.53
    `, + loading: false, + plotEarliest: 1487534400000, + plotLatest: 1488168000000, + selectedEarliest: 1487808000000, + selectedLatest: 1487894399999 + }; + + const mlSelectSeverityServiceMock = { + state: { + get: () => ({ + val: '' + }) + } + }; + + const mockedGetBBox = { x: 0, y: -11.5, width: 12.1875, height: 14.5 }; + const originalGetBBox = SVGElement.prototype.getBBox; + beforeEach(() => SVGElement.prototype.getBBox = () => { + return mockedGetBBox; + }); + afterEach(() => (SVGElement.prototype.getBBox = originalGetBBox)); + + test('Initialize', () => { + const wrapper = mount(); + + // without setting any attributes and corresponding data + // the directive just ends up being empty. + expect(wrapper.isEmptyRender()).toBeTruthy(); + expect(wrapper.find('.content-wrapper')).toHaveLength(0); + expect(wrapper.find('.ml-loading-indicator .loading-spinner')).toHaveLength(0); + }); + + test('Loading status active, no chart', () => { + const config = { + loading: true + }; + + const wrapper = mount(); + + // test if the loading indicator is shown + expect(wrapper.find('.ml-loading-indicator .loading-spinner')).toHaveLength(1); + }); + + // For the following tests the directive needs to be rendered in the actual DOM, + // because otherwise there wouldn't be a width available which would + // trigger SVG errors. We use a fixed width to be able to test for + // fine grained attributes of the chart. + + // basically a parameterized beforeEach + function init(chartData) { + const config = { + ...seriesConfig, + chartData, + chartLimits: chartLimits(chartData) + }; + + // We create the element including a wrapper which sets the width: + return mount( +
    + +
    + ); + } + + it('Anomaly Explorer Chart with multiple data points', () => { + // prepare data for the test case + const chartData = [ + { + date: new Date('2017-02-23T08:00:00.000Z'), + value: 228243469, anomalyScore: 63.32916, numberOfCauses: 1, + actual: [228243469], typical: [133107.7703441773] + }, + { date: new Date('2017-02-23T09:00:00.000Z'), value: null }, + { date: new Date('2017-02-23T10:00:00.000Z'), value: null }, + { date: new Date('2017-02-23T11:00:00.000Z'), value: null }, + { + date: new Date('2017-02-23T12:00:00.000Z'), + value: 625736376, anomalyScore: 97.32085, numberOfCauses: 1, + actual: [625736376], typical: [132830.424736973] + }, + { + date: new Date('2017-02-23T13:00:00.000Z'), + value: 201039318, anomalyScore: 59.83488, numberOfCauses: 1, + actual: [201039318], typical: [132739.5267403542] + } + ]; + + const wrapper = init(chartData); + + // the loading indicator should not be shown + expect(wrapper.find('.ml-loading-indicator .loading-spinner')).toHaveLength(0); + + // test if all expected elements are present + // need to use getDOMNode() because the chart is not rendered via react itself + const svg = wrapper.getDOMNode().getElementsByTagName('svg'); + expect(svg).toHaveLength(1); + + const lineChart = svg[0].getElementsByClassName('line-chart'); + expect(lineChart).toHaveLength(1); + + const rects = lineChart[0].getElementsByTagName('rect'); + expect(rects).toHaveLength(2); + + const chartBorder = rects[0]; + expect(+chartBorder.getAttribute('x')).toBe(0); + expect(+chartBorder.getAttribute('y')).toBe(0); + expect(+chartBorder.getAttribute('height')).toBe(170); + + const selectedInterval = rects[1]; + expect(selectedInterval.getAttribute('class')).toBe('selected-interval'); + expect(+selectedInterval.getAttribute('y')).toBe(1); + expect(+selectedInterval.getAttribute('height')).toBe(169); + + const xAxisTicks = wrapper.getDOMNode().querySelector('.x').querySelectorAll('.tick'); + expect([...xAxisTicks]).toHaveLength(0); + const yAxisTicks = wrapper.getDOMNode().querySelector('.y').querySelectorAll('.tick'); + expect([...yAxisTicks]).toHaveLength(10); + + const paths = wrapper.getDOMNode().querySelectorAll('path'); + expect(paths[0].getAttribute('class')).toBe('domain'); + expect(paths[1].getAttribute('class')).toBe('domain'); + expect(paths[2].getAttribute('class')).toBe('values-line'); + expect(paths[2].getAttribute('d')).toBe('MNaN,159.33024504444444MNaN,9.166257955555556LNaN,169.60736875555557'); + + const dots = wrapper.getDOMNode().querySelector('.values-dots').querySelectorAll('circle'); + expect([...dots]).toHaveLength(1); + expect(dots[0].getAttribute('r')).toBe('1.5'); + + const chartMarkers = wrapper.getDOMNode().querySelector('.chart-markers').querySelectorAll('circle'); + expect([...chartMarkers]).toHaveLength(3); + expect([...chartMarkers].map(d => +d.getAttribute('r'))).toEqual([7, 7, 7]); + }); + + it('Anomaly Explorer Chart with single data point', () => { + const chartData = [ + { + date: new Date('2017-02-23T08:00:00.000Z'), + value: 228243469, anomalyScore: 63.32916, numberOfCauses: 1, + actual: [228243469], typical: [228243469] + } + ]; + + const wrapper = init(chartData); + + const yAxisTicks = wrapper.getDOMNode().querySelector('.y').querySelectorAll('.tick'); + expect([...yAxisTicks]).toHaveLength(13); + }); +}); diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_config_builder.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_config_builder.js index 07a9bc0885e605..ab167cb423127d 100644 --- a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_config_builder.js +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_config_builder.js @@ -14,87 +14,79 @@ import _ from 'lodash'; import { parseInterval } from 'ui/utils/parse_interval'; -import { buildConfigFromDetector } from 'plugins/ml/util/chart_config_builder'; -import { mlEscape } from 'plugins/ml/util/string_utils'; -import { mlJobService } from 'plugins/ml/services/job_service'; - -export function explorerChartConfigBuilder() { - - const compiledTooltip = _.template( - '
    job ID: <%= jobId %>
    ' + - 'aggregation interval: <%= aggregationInterval %>
    ' + - 'chart function: <%= chartFunction %>' + - '<% for(let i = 0; i < entityFields.length; ++i) { %>' + - '
    <%= entityFields[i].fieldName %>: <%= entityFields[i].fieldValue %>' + - '<% } %>' + - '
    '); - - // Builds the chart configuration for the provided anomaly record, returning - // an object with properties used for the display (series function and field, aggregation interval etc), - // and properties for the data feed used for the job (index pattern, time field etc). - function buildConfig(record) { - const job = mlJobService.getJob(record.job_id); - const detectorIndex = record.detector_index; - const config = buildConfigFromDetector(job, detectorIndex); - - // Add extra properties used by the explorer dashboard charts. - config.functionDescription = record.function_description; - config.bucketSpanSeconds = parseInterval(job.analysis_config.bucket_span).asSeconds(); - - config.detectorLabel = record.function; - if ((_.has(mlJobService.detectorsByJob, record.job_id)) && - (detectorIndex < mlJobService.detectorsByJob[record.job_id].length)) { - config.detectorLabel = mlJobService.detectorsByJob[record.job_id][detectorIndex].detector_description; - } else { - if (record.field_name !== undefined) { - config.detectorLabel += ` ${config.fieldName}`; - } - } - +import { buildConfigFromDetector } from '../../util/chart_config_builder'; +import { mlEscape } from '../../util/string_utils'; +import { mlJobService } from '../../services/job_service'; + +// Builds the chart configuration for the provided anomaly record, returning +// an object with properties used for the display (series function and field, aggregation interval etc), +// and properties for the data feed used for the job (index pattern, time field etc). +export function buildConfig(record) { + const job = mlJobService.getJob(record.job_id); + const detectorIndex = record.detector_index; + const config = buildConfigFromDetector(job, detectorIndex); + + // Add extra properties used by the explorer dashboard charts. + config.functionDescription = record.function_description; + config.bucketSpanSeconds = parseInterval(job.analysis_config.bucket_span).asSeconds(); + + config.detectorLabel = record.function; + if ((_.has(mlJobService.detectorsByJob, record.job_id)) && + (detectorIndex < mlJobService.detectorsByJob[record.job_id].length)) { + config.detectorLabel = mlJobService.detectorsByJob[record.job_id][detectorIndex].detector_description; + } else { if (record.field_name !== undefined) { - config.fieldName = record.field_name; - config.metricFieldName = record.field_name; - } - - // Add the 'entity_fields' i.e. the partition, by, over fields which - // define the metric series to be plotted. - config.entityFields = []; - if (_.has(record, 'partition_field_name')) { - config.entityFields.push({ fieldName: record.partition_field_name, fieldValue: record.partition_field_value }); + config.detectorLabel += ` ${config.fieldName}`; } + } - if (_.has(record, 'over_field_name')) { - config.entityFields.push({ fieldName: record.over_field_name, fieldValue: record.over_field_value }); - } + if (record.field_name !== undefined) { + config.fieldName = record.field_name; + config.metricFieldName = record.field_name; + } - // For jobs with by and over fields, don't add the 'by' field as this - // field will only be added to the top-level fields for record type results - // if it also an influencer over the bucket. - if (_.has(record, 'by_field_name') && !(_.has(record, 'over_field_name'))) { - config.entityFields.push({ fieldName: record.by_field_name, fieldValue: record.by_field_value }); - } + // Add the 'entity_fields' i.e. the partition, by, over fields which + // define the metric series to be plotted. + config.entityFields = []; + if (_.has(record, 'partition_field_name')) { + config.entityFields.push({ + fieldName: record.partition_field_name, + fieldValue: record.partition_field_value + }); + } - // Build the tooltip for the chart info icon, showing further details on what is being plotted. - let functionLabel = config.metricFunction; - if (config.metricFieldName !== undefined) { - functionLabel += ` ${mlEscape(config.metricFieldName)}`; - } + if (_.has(record, 'over_field_name')) { + config.entityFields.push({ + fieldName: record.over_field_name, + fieldValue: record.over_field_value + }); + } - config.infoTooltip = compiledTooltip({ - jobId: record.job_id, - aggregationInterval: config.interval, - chartFunction: functionLabel, - entityFields: config.entityFields.map((f) => ({ - fieldName: mlEscape(f.fieldName), - fieldValue: mlEscape(f.fieldValue), - })) + // For jobs with by and over fields, don't add the 'by' field as this + // field will only be added to the top-level fields for record type results + // if it also an influencer over the bucket. + if (_.has(record, 'by_field_name') && !(_.has(record, 'over_field_name'))) { + config.entityFields.push({ + fieldName: record.by_field_name, + fieldValue: record.by_field_value }); + } - return config; + // Build the tooltip data for the chart info icon, showing further details on what is being plotted. + let functionLabel = config.metricFunction; + if (config.metricFieldName !== undefined) { + functionLabel += ` ${mlEscape(config.metricFieldName)}`; } - return { - buildConfig + config.infoTooltip = { + jobId: record.job_id, + aggregationInterval: config.interval, + chartFunction: functionLabel, + entityFields: config.entityFields.map((f) => ({ + fieldName: mlEscape(f.fieldName), + fieldValue: mlEscape(f.fieldValue), + })) }; -} + return config; +} diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_tooltip.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_tooltip.js new file mode 100644 index 00000000000000..c0da82233e0670 --- /dev/null +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_chart_tooltip.js @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + + +import PropTypes from 'prop-types'; +import React from 'react'; + +export function ExplorerChartTooltip({ + jobId, + aggregationInterval, + chartFunction, + entityFields = [], +}) { + return ( +
    + job ID: {jobId}
    + aggregation interval: {aggregationInterval}
    + chart function: {chartFunction} + {entityFields.map((entityField, i) => { + return ( + +
    {entityField.fieldName}: {entityField.fieldValue} +
    + ); + })} +
    + ); +} +ExplorerChartTooltip.propTypes = { + jobId: PropTypes.string.isRequired, + aggregationInterval: PropTypes.string, + chartFunction: PropTypes.string, + entityFields: PropTypes.array +}; diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.html b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.html deleted file mode 100644 index 34e9ac9f9b014e..00000000000000 --- a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    - -
    -
    -
    - {{series.detectorLabel}} - - {{series.detectorLabel}} - - {{entity.fieldName}} {{entity.fieldValue}} - -
    - - - - View - -
    - -
    - -
    - -
    diff --git a/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.js b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.js new file mode 100644 index 00000000000000..2fb75120fdb44f --- /dev/null +++ b/x-pack/plugins/ml/public/explorer/explorer_charts/explorer_charts_container.js @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under 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 PropTypes from 'prop-types'; +import React from 'react'; + +import { EuiIconTip } from '@elastic/eui'; + +import { ExplorerChart } from './explorer_chart'; +import { ExplorerChartTooltip } from './explorer_chart_tooltip'; + +export function ExplorerChartsContainer({ + exploreSeries, + seriesToPlot, + layoutCellsPerChart, + tooManyBuckets, + mlSelectSeverityService +}) { + return ( +
    + {(seriesToPlot.length > 0) && + seriesToPlot.map((series) => { + + // create a somewhat unique ID from charts metadata for React's key attribute + const { + jobId, + detectorLabel, + entityFields, + } = series; + const entities = entityFields.map((ef) => `${ef.fieldName}/${ef.fieldValue}`).join(','); + const id = `${jobId}_${detectorLabel}_${entities}`; + + return ( +
    +
    +
    + {(entityFields.length > 0) && ( + {detectorLabel} - + )} + {(entityFields.length === 0) && ( + {detectorLabel} + )} + {entityFields.map((entity, j) => { + return ( + {entity.fieldName} {entity.fieldValue} + ); + })} +
    + } position="left" size="s" /> + {tooManyBuckets && ( + + )} + exploreSeries(series)}> + View