From 6ba34187330786beeaf3fe6ae1229a99a6ab4cb6 Mon Sep 17 00:00:00 2001 From: Andrew Cholakian Date: Sat, 21 Mar 2020 18:13:01 -0500 Subject: [PATCH] [Uptime] Add Settings Page (#53550) Adds a settings page to the Uptime UI. The settings page values are per-space. The only current setting is heartbeatIndices. To test this against alternate indices try changing setup.ilm.rollover_alias in heartbeat.yml to something like alt-prefix. See the ilm docs for more details. This should be tested with read-only and write only roles. To test this in kibana try creating two users with two different roles in kibana. One roll should have read access to the Uptime space in kibana. The other should have all access. Both should have read permissions for the heartbeat-* index pattern. This patch also splits API perms from just heartbeat to uptime-read and uptime-write. This patch also refactors some of the header component functionality, using hooks for breadcrumbs, and making the top links optional. Fixes elastic/uptime#43 --- .../plugins/uptime/common/constants/ui.ts | 2 + .../common/runtime_types/dynamic_settings.ts | 27 ++ .../uptime/common/runtime_types/index.ts | 1 + .../__snapshots__/data_missing.test.tsx.snap | 1 + .../__snapshots__/empty_state.test.tsx.snap | 4 + .../functional/empty_state/data_missing.tsx | 2 +- .../hooks/__tests__/use_breadcrumbs.test.tsx | 63 +++ .../uptime/public/hooks/use_breadcrumbs.ts | 41 ++ .../__snapshots__/page_header.test.tsx.snap | 368 +++++++++++++----- .../pages/__tests__/page_header.test.tsx | 71 +--- .../plugins/uptime/public/pages/index.ts | 1 + .../plugins/uptime/public/pages/monitor.tsx | 6 +- .../plugins/uptime/public/pages/overview.tsx | 4 +- .../uptime/public/pages/page_header.tsx | 100 +++-- .../plugins/uptime/public/pages/settings.tsx | 241 ++++++++++++ .../legacy/plugins/uptime/public/routes.tsx | 7 +- .../public/state/actions/dynamic_settings.ts | 20 + .../public/state/api/dynamic_settings.ts | 36 ++ .../plugins/uptime/public/state/api/index.ts | 1 + .../public/state/effects/dynamic_settings.ts | 60 +++ .../uptime/public/state/effects/index.ts | 3 + .../public/state/reducers/dynamic_settings.ts | 63 +++ .../uptime/public/state/reducers/index.ts | 2 + .../state/selectors/__tests__/index.test.ts | 3 + .../uptime/public/state/selectors/index.ts | 4 + .../graphql/monitor_states/resolvers.ts | 10 +- .../uptime/server/graphql/pings/resolvers.ts | 8 +- x-pack/plugins/uptime/server/graphql/types.ts | 3 +- x-pack/plugins/uptime/server/kibana.index.ts | 13 +- .../lib/adapters/framework/adapter_types.ts | 5 +- .../framework/kibana_framework_adapter.ts | 10 +- .../lib/alerts/__tests__/status_check.test.ts | 8 +- .../uptime/server/lib/alerts/status_check.ts | 7 +- .../__tests__/get_latest_monitor.test.ts | 4 +- .../__tests__/get_monitor_charts.test.ts | 4 + .../__tests__/get_monitor_status.test.ts | 5 + .../__tests__/get_ping_histogram.test.ts | 7 + .../lib/requests/__tests__/get_pings.test.ts | 9 +- .../server/lib/requests/get_filter_bar.ts | 4 +- .../server/lib/requests/get_index_pattern.ts | 23 +- .../server/lib/requests/get_index_status.ts | 8 +- .../server/lib/requests/get_latest_monitor.ts | 4 +- .../uptime/server/lib/requests/get_monitor.ts | 5 +- .../lib/requests/get_monitor_details.ts | 5 +- .../lib/requests/get_monitor_duration.ts | 5 +- .../lib/requests/get_monitor_locations.ts | 9 +- .../server/lib/requests/get_monitor_states.ts | 11 +- .../server/lib/requests/get_ping_histogram.ts | 6 +- .../uptime/server/lib/requests/get_pings.ts | 4 +- .../lib/requests/get_snapshot_counts.ts | 9 +- .../search/__tests__/query_context.test.ts | 4 +- .../requests/search/__tests__/test_helpers.ts | 11 +- .../requests/search/enrich_monitor_groups.ts | 6 +- .../requests/search/find_potential_matches.ts | 3 +- .../lib/requests/search/query_context.ts | 9 +- .../search/refine_potential_matches.ts | 3 +- .../server/lib/requests/uptime_requests.ts | 2 +- .../uptime/server/lib/saved_objects.ts | 57 +++ x-pack/plugins/uptime/server/plugin.ts | 2 + .../server/rest_api/dynamic_settings.ts | 59 +++ .../plugins/uptime/server/rest_api/index.ts | 3 + .../rest_api/index_state/get_index_pattern.ts | 6 +- .../rest_api/index_state/get_index_status.ts | 6 +- .../rest_api/monitors/monitor_locations.ts | 5 +- .../rest_api/monitors/monitors_details.ts | 5 +- .../rest_api/monitors/monitors_durations.ts | 5 +- .../uptime/server/rest_api/monitors/status.ts | 11 +- .../overview_filters/get_overview_filters.ts | 5 +- .../uptime/server/rest_api/pings/get_all.ts | 5 +- .../rest_api/pings/get_ping_histogram.ts | 5 +- .../uptime/server/rest_api/pings/get_pings.ts | 5 +- .../rest_api/snapshot/get_snapshot_count.ts | 5 +- .../rest_api/telemetry/log_monitor_page.ts | 2 +- .../rest_api/telemetry/log_overview_page.ts | 2 +- .../plugins/uptime/server/rest_api/types.ts | 2 + .../server/rest_api/uptime_route_wrapper.ts | 11 +- .../apis/uptime/feature_controls.ts | 11 +- .../graphql/helpers/expect_fixture_eql.ts | 16 +- .../uptime/graphql/helpers/make_checks.ts | 2 +- .../apis/uptime/rest/dynamic_settings.ts | 34 ++ .../api_integration/apis/uptime/rest/index.ts | 32 +- x-pack/test/functional/apps/uptime/index.ts | 32 +- .../test/functional/apps/uptime/locations.ts | 2 +- .../test/functional/apps/uptime/settings.ts | 71 ++++ .../es_archives/uptime/blank/mappings.json | 2 +- .../uptime/full_heartbeat/data.json.gz | Bin 113038 -> 128173 bytes .../uptime/full_heartbeat/mappings.json | 4 +- .../functional/page_objects/uptime_page.ts | 12 + x-pack/test/functional/services/uptime.ts | 34 ++ 89 files changed, 1462 insertions(+), 346 deletions(-) create mode 100644 x-pack/legacy/plugins/uptime/common/runtime_types/dynamic_settings.ts create mode 100644 x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx create mode 100644 x-pack/legacy/plugins/uptime/public/hooks/use_breadcrumbs.ts create mode 100644 x-pack/legacy/plugins/uptime/public/pages/settings.tsx create mode 100644 x-pack/legacy/plugins/uptime/public/state/actions/dynamic_settings.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/api/dynamic_settings.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/effects/dynamic_settings.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/reducers/dynamic_settings.ts create mode 100644 x-pack/plugins/uptime/server/lib/saved_objects.ts create mode 100644 x-pack/plugins/uptime/server/rest_api/dynamic_settings.ts create mode 100644 x-pack/test/api_integration/apis/uptime/rest/dynamic_settings.ts create mode 100644 x-pack/test/functional/apps/uptime/settings.ts diff --git a/x-pack/legacy/plugins/uptime/common/constants/ui.ts b/x-pack/legacy/plugins/uptime/common/constants/ui.ts index 8389d86fd20727..8d223dbbba5568 100644 --- a/x-pack/legacy/plugins/uptime/common/constants/ui.ts +++ b/x-pack/legacy/plugins/uptime/common/constants/ui.ts @@ -8,6 +8,8 @@ export const MONITOR_ROUTE = '/monitor/:monitorId?'; export const OVERVIEW_ROUTE = '/'; +export const SETTINGS_ROUTE = '/settings'; + export enum STATUS { UP = 'up', DOWN = 'down', diff --git a/x-pack/legacy/plugins/uptime/common/runtime_types/dynamic_settings.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/dynamic_settings.ts new file mode 100644 index 00000000000000..63f919612d0ac5 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/dynamic_settings.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import * as t from 'io-ts'; + +export const DynamicSettingsType = t.type({ + heartbeatIndices: t.string, +}); + +export const DynamicSettingsSaveType = t.intersection([ + t.type({ + success: t.boolean, + }), + t.partial({ + error: t.string, + }), +]); + +export type DynamicSettings = t.TypeOf; +export type DynamicSettingsSaveResponse = t.TypeOf; + +export const defaultDynamicSettings: DynamicSettings = { + heartbeatIndices: 'heartbeat*', +}; diff --git a/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts index 82fc9807300ede..5e3fb2326bdb97 100644 --- a/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts @@ -9,3 +9,4 @@ export * from './common'; export * from './monitor'; export * from './overview_filters'; export * from './snapshot'; +export * from './dynamic_settings'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/empty_state/__tests__/__snapshots__/data_missing.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/empty_state/__tests__/__snapshots__/data_missing.test.tsx.snap index ae1b017cc46ef5..20a66cacb50e73 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/empty_state/__tests__/__snapshots__/data_missing.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/components/functional/empty_state/__tests__/__snapshots__/data_missing.test.tsx.snap @@ -2,6 +2,7 @@ exports[`DataMissing component renders basePath and headingMessage 1`] = `
{ const { basePath } = useContext(UptimeSettingsContext); return ( - + diff --git a/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx b/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx new file mode 100644 index 00000000000000..85961003fce720 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_breadcrumbs.test.tsx @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ChromeBreadcrumb } from 'kibana/public'; +import React from 'react'; +import { Route } from 'react-router-dom'; +import { mountWithRouter } from '../../lib'; +import { OVERVIEW_ROUTE } from '../../../common/constants'; +import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public'; +import { UptimeUrlParams, getSupportedUrlParams } from '../../lib/helper'; +import { makeBaseBreadcrumb, useBreadcrumbs } from '../../hooks/use_breadcrumbs'; + +describe('useBreadcrumbs', () => { + it('sets the given breadcrumbs', () => { + const [getBreadcrumbs, core] = mockCore(); + + const expectedCrumbs: ChromeBreadcrumb[] = [ + { + text: 'Crumb: ', + href: 'http://href.example.net', + }, + { + text: 'Crumb II: Son of Crumb', + href: 'http://href2.example.net', + }, + ]; + + const Component = () => { + useBreadcrumbs(expectedCrumbs); + return <>Hello; + }; + + mountWithRouter( + + + + + + ); + + const urlParams: UptimeUrlParams = getSupportedUrlParams({}); + expect(getBreadcrumbs()).toStrictEqual([makeBaseBreadcrumb(urlParams)].concat(expectedCrumbs)); + }); +}); + +const mockCore: () => [() => ChromeBreadcrumb[], any] = () => { + let breadcrumbObj: ChromeBreadcrumb[] = []; + const get = () => { + return breadcrumbObj; + }; + const core = { + chrome: { + setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => { + breadcrumbObj = newBreadcrumbs; + }, + }, + }; + + return [get, core]; +}; diff --git a/x-pack/legacy/plugins/uptime/public/hooks/use_breadcrumbs.ts b/x-pack/legacy/plugins/uptime/public/hooks/use_breadcrumbs.ts new file mode 100644 index 00000000000000..d1cc8e18973868 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/hooks/use_breadcrumbs.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ChromeBreadcrumb } from 'kibana/public'; +import { i18n } from '@kbn/i18n'; +import { useEffect } from 'react'; +import { UptimeUrlParams } from '../lib/helper'; +import { stringifyUrlParams } from '../lib/helper/stringify_url_params'; +import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; +import { useUrlParams } from '.'; + +export const makeBaseBreadcrumb = (params?: UptimeUrlParams): ChromeBreadcrumb => { + let href = '#/'; + if (params) { + const crumbParams: Partial = { ...params }; + // We don't want to encode this values because they are often set to Date.now(), the relative + // values in dateRangeStart are better for a URL. + delete crumbParams.absoluteDateRangeStart; + delete crumbParams.absoluteDateRangeEnd; + href += stringifyUrlParams(crumbParams, true); + } + return { + text: i18n.translate('xpack.uptime.breadcrumbs.overviewBreadcrumbText', { + defaultMessage: 'Uptime', + }), + href, + }; +}; + +export const useBreadcrumbs = (extraCrumbs: ChromeBreadcrumb[]) => { + const params = useUrlParams()[0](); + const setBreadcrumbs = useKibana().services.chrome?.setBreadcrumbs; + useEffect(() => { + if (setBreadcrumbs) { + setBreadcrumbs([makeBaseBreadcrumb(params)].concat(extraCrumbs)); + } + }, [extraCrumbs, params, setBreadcrumbs]); +}; diff --git a/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/page_header.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/page_header.test.tsx.snap index 30e15ba132996e..646bfeba951dda 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/page_header.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/page_header.test.tsx.snap @@ -1,12 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PageHeader shallow renders with breadcrumbs and the date picker: page_header_with_date_picker 1`] = ` +exports[`PageHeader shallow renders extra links: page_header_with_extra_links 1`] = ` Array [

-
- -
-
-

-
-
- + +
-
-
+
- - +
+
+
+
+ +
+
+
+
+
- Refresh + - - - +
+
+ @@ -149,13 +197,13 @@ Array [ ] `; -exports[`PageHeader shallow renders with breadcrumbs without the date picker: page_header_no_date_picker 1`] = ` +exports[`PageHeader shallow renders with the date picker: page_header_with_date_picker 1`] = ` Array [

+
- +
+
+
+
+ +
+
+
+

+
- Alerts - - - + + + +
+
+ @@ -202,3 +327,38 @@ Array [ />, ] `; + +exports[`PageHeader shallow renders without the date picker: page_header_no_date_picker 1`] = ` +Array [ +
+
+

+ TestingHeading +

+
+
+
+
+
+
+
+
, +
, +] +`; diff --git a/x-pack/legacy/plugins/uptime/public/pages/__tests__/page_header.test.tsx b/x-pack/legacy/plugins/uptime/public/pages/__tests__/page_header.test.tsx index 92dceece3ef400..c9e4eef386764a 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/__tests__/page_header.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/__tests__/page_header.test.tsx @@ -5,67 +5,36 @@ */ import React from 'react'; -import { Route } from 'react-router-dom'; -import { PageHeader, makeBaseBreadcrumb } from '../page_header'; -import { mountWithRouter, renderWithRouter } from '../../lib'; -import { OVERVIEW_ROUTE } from '../../../common/constants'; -import { ChromeBreadcrumb } from 'kibana/public'; -import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public'; -import { UptimeUrlParams, getSupportedUrlParams } from '../../lib/helper'; +import { PageHeader } from '../page_header'; +import { renderWithRouter } from '../../lib'; import { Provider } from 'react-redux'; describe('PageHeader', () => { - const simpleBreadcrumbs: ChromeBreadcrumb[] = [ - { text: 'TestCrumb1', href: '#testHref1' }, - { text: 'TestCrumb2', href: '#testHref2' }, - ]; - - it('shallow renders with breadcrumbs and the date picker', () => { + it('shallow renders with the date picker', () => { const component = renderWithRouter( - + ); expect(component).toMatchSnapshot('page_header_with_date_picker'); }); - it('shallow renders with breadcrumbs without the date picker', () => { + it('shallow renders without the date picker', () => { const component = renderWithRouter( - + ); expect(component).toMatchSnapshot('page_header_no_date_picker'); }); - it('sets the given breadcrumbs', () => { - const [getBreadcrumbs, core] = mockCore(); - mountWithRouter( - - - - - - - - ); - - const urlParams: UptimeUrlParams = getSupportedUrlParams({}); - expect(getBreadcrumbs()).toStrictEqual( - [makeBaseBreadcrumb(urlParams)].concat(simpleBreadcrumbs) + it('shallow renders extra links', () => { + const component = renderWithRouter( + + + ); + expect(component).toMatchSnapshot('page_header_with_extra_links'); }); }); @@ -81,19 +50,3 @@ const MockReduxProvider = ({ children }: { children: React.ReactElement }) => ( {children} ); - -const mockCore: () => [() => ChromeBreadcrumb[], any] = () => { - let breadcrumbObj: ChromeBreadcrumb[] = []; - const get = () => { - return breadcrumbObj; - }; - const core = { - chrome: { - setBreadcrumbs: (newBreadcrumbs: ChromeBreadcrumb[]) => { - breadcrumbObj = newBreadcrumbs; - }, - }, - }; - - return [get, core]; -}; diff --git a/x-pack/legacy/plugins/uptime/public/pages/index.ts b/x-pack/legacy/plugins/uptime/public/pages/index.ts index 3f74bda79bd461..cea47d6ccf79c0 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/index.ts +++ b/x-pack/legacy/plugins/uptime/public/pages/index.ts @@ -5,4 +5,5 @@ */ export { MonitorPage } from './monitor'; +export { SettingsPage } from './settings'; export { NotFoundPage } from './not_found'; diff --git a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx index b9d29ed017a058..5871783dffdeb3 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx @@ -7,7 +7,6 @@ import { EuiSpacer } from '@elastic/eui'; import React, { useContext, useState, useEffect } from 'react'; import { useParams } from 'react-router-dom'; -import { ChromeBreadcrumb } from 'kibana/public'; import { connect, MapDispatchToPropsFunction, MapStateToPropsParam } from 'react-redux'; import { MonitorCharts, PingList } from '../components/functional'; import { UptimeRefreshContext } from '../contexts'; @@ -19,6 +18,7 @@ import { AppState } from '../state'; import { selectSelectedMonitor } from '../state/selectors'; import { getSelectedMonitorAction } from '../state/actions'; import { PageHeader } from './page_header'; +import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; interface StateProps { selectedMonitor: Ping | null; @@ -65,10 +65,10 @@ export const MonitorPageComponent: React.FC = ({ useTrackPageview({ app: 'uptime', path: 'monitor', delay: 15000 }); const nameOrId = selectedMonitor?.monitor?.name || selectedMonitor?.monitor?.id || ''; - const breadcrumbs: ChromeBreadcrumb[] = [{ text: nameOrId }]; + useBreadcrumbs([{ text: nameOrId }]); return ( <> - + diff --git a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx index f9184e2a0587fa..a8a35fd2681b6a 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx @@ -21,6 +21,7 @@ import { UptimeThemeContext } from '../contexts'; import { EmptyState, FilterGroup, KueryBar } from '../components/connected'; import { useUpdateKueryString } from '../hooks'; import { PageHeader } from './page_header'; +import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; interface OverviewPageProps { autocomplete: DataPublicPluginSetup['autocomplete']; @@ -77,9 +78,10 @@ export const OverviewPageComponent = ({ autocomplete, indexPattern, setEsKueryFi description: `The text that will be displayed in the app's heading when the Overview page loads.`, }); + useBreadcrumbs([]); // No extra breadcrumbs on overview return ( <> - + diff --git a/x-pack/legacy/plugins/uptime/public/pages/page_header.tsx b/x-pack/legacy/plugins/uptime/public/pages/page_header.tsx index 56d9ae2d5caa66..821a70c85dc7c5 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/page_header.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/page_header.tsx @@ -4,69 +4,63 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useEffect } from 'react'; -import { ChromeBreadcrumb } from 'kibana/public'; -import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiSpacer } from '@elastic/eui'; +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle, EuiSpacer, EuiButtonEmpty } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { Link } from 'react-router-dom'; import { UptimeDatePicker } from '../components/functional/uptime_date_picker'; -import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; -import { stringifyUrlParams } from '../lib/helper/stringify_url_params'; -import { useUrlParams } from '../hooks'; -import { UptimeUrlParams } from '../lib/helper'; +import { SETTINGS_ROUTE } from '../../common/constants'; import { ToggleAlertFlyoutButton } from '../components/connected'; interface PageHeaderProps { headingText: string; - breadcrumbs: ChromeBreadcrumb[]; - datePicker: boolean; + extraLinks?: boolean; + datePicker?: boolean; } -export const makeBaseBreadcrumb = (params?: UptimeUrlParams): ChromeBreadcrumb => { - let href = '#/'; - if (params) { - const crumbParams: Partial = { ...params }; - // We don't want to encode this values because they are often set to Date.now(), the relative - // values in dateRangeStart are better for a URL. - delete crumbParams.absoluteDateRangeStart; - delete crumbParams.absoluteDateRangeEnd; - href += stringifyUrlParams(crumbParams, true); - } - return { - text: i18n.translate('xpack.uptime.breadcrumbs.overviewBreadcrumbText', { - defaultMessage: 'Uptime', - }), - href, - }; -}; - -export const PageHeader = ({ headingText, breadcrumbs, datePicker = true }: PageHeaderProps) => { - const setBreadcrumbs = useKibana().services.chrome?.setBreadcrumbs!; - - const params = useUrlParams()[0](); - useEffect(() => { - setBreadcrumbs([makeBaseBreadcrumb(params)].concat(breadcrumbs)); - }, [breadcrumbs, params, setBreadcrumbs]); +export const PageHeader = React.memo( + ({ headingText, extraLinks = false, datePicker = true }: PageHeaderProps) => { + const datePickerComponent = datePicker ? ( + + + + ) : null; - const datePickerComponent = datePicker ? ( - - - - ) : null; - - return ( - <> - - - -

{headingText}

-
-
+ const settingsLinkText = i18n.translate('xpack.uptime.page_header.settingsLink', { + defaultMessage: 'Settings', + }); + const extraLinkComponents = !extraLinks ? null : ( + - {datePickerComponent} + + + + {settingsLinkText} + + + - - - ); -}; + ); + + return ( + <> + + + +

{headingText}

+
+
+ + + {extraLinkComponents} + {datePickerComponent} + + +
+ + + ); + } +); diff --git a/x-pack/legacy/plugins/uptime/public/pages/settings.tsx b/x-pack/legacy/plugins/uptime/public/pages/settings.tsx new file mode 100644 index 00000000000000..679a61686e4358 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/pages/settings.tsx @@ -0,0 +1,241 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useEffect, useState } from 'react'; +import { + EuiForm, + EuiTitle, + EuiSpacer, + EuiDescribedFormGroup, + EuiFieldText, + EuiFormRow, + EuiCode, + EuiPanel, + EuiFlexGroup, + EuiFlexItem, + EuiButton, + EuiButtonEmpty, + EuiCallOut, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { connect } from 'react-redux'; +import { isEqual } from 'lodash'; +import { i18n } from '@kbn/i18n'; +import { Link } from 'react-router-dom'; +import { AppState } from '../state'; +import { selectDynamicSettings } from '../state/selectors'; +import { DynamicSettingsState } from '../state/reducers/dynamic_settings'; +import { getDynamicSettings, setDynamicSettings } from '../state/actions/dynamic_settings'; +import { DynamicSettings, defaultDynamicSettings } from '../../common/runtime_types'; +import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; +import { OVERVIEW_ROUTE } from '../../common/constants'; +import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; + +interface Props { + dynamicSettingsState: DynamicSettingsState; +} + +interface DispatchProps { + dispatchGetDynamicSettings: typeof getDynamicSettings; + dispatchSetDynamicSettings: typeof setDynamicSettings; +} + +export const SettingsPageComponent = ({ + dynamicSettingsState: dss, + dispatchGetDynamicSettings, + dispatchSetDynamicSettings, +}: Props & DispatchProps) => { + const settingsBreadcrumbText = i18n.translate('xpack.uptime.settingsBreadcrumbText', { + defaultMessage: 'Settings', + }); + useBreadcrumbs([{ text: settingsBreadcrumbText }]); + + useEffect(() => { + dispatchGetDynamicSettings({}); + }, [dispatchGetDynamicSettings]); + + const [formFields, setFormFields] = useState(dss.settings || null); + + if (!dss.loadError && formFields == null && dss.settings) { + setFormFields({ ...dss.settings }); + } + + const fieldErrors = formFields && { + heartbeatIndices: formFields.heartbeatIndices.match(/^\S+$/) ? null : 'May not be blank', + }; + const isFormValid = !(fieldErrors && Object.values(fieldErrors).find(v => !!v)); + + const onChangeFormField = (field: keyof DynamicSettings, value: any) => { + if (formFields) { + formFields[field] = value; + setFormFields({ ...formFields }); + } + }; + + const onApply = () => { + if (formFields) { + dispatchSetDynamicSettings(formFields); + } + }; + + const resetForm = () => { + if (formFields && dss.settings) { + setFormFields({ ...dss.settings }); + } + }; + + const isFormDirty = dss.settings ? !isEqual(dss.settings, formFields) : true; + const canEdit: boolean = + !!useKibana().services?.application?.capabilities.uptime.configureSettings || false; + const isFormDisabled = dss.loading || !canEdit; + + const editNoticeTitle = i18n.translate('xpack.uptime.settings.cannotEditTitle', { + defaultMessage: 'You do not have permission to edit settings.', + }); + const editNoticeText = i18n.translate('xpack.uptime.settings.cannotEditText', { + defaultMessage: + "Your user currently has 'Read' permissions for the Uptime app. Enable a permissions-level of 'All' to edit these settings.", + }); + const cannotEditNotice = canEdit ? null : ( + <> + {editNoticeText} + + + ); + + return ( + <> + + + {i18n.translate('xpack.uptime.settings.returnToOverviewLinkLabel', { + defaultMessage: 'Return to overview', + })} + + + + + + {cannotEditNotice} + + + +
+ + +

+ +

+
+ + + + + } + description={ + + } + > + {defaultDynamicSettings.heartbeatIndices} + ), + }} + /> + } + isInvalid={!!fieldErrors?.heartbeatIndices} + label={ + + } + > + + onChangeFormField('heartbeatIndices', event.currentTarget.value) + } + /> + + + + + + + { + resetForm(); + }} + > + + + + + + + + + +
+
+
+
+
+ + ); +}; + +const mapStateToProps = (state: AppState) => ({ + dynamicSettingsState: selectDynamicSettings(state), +}); + +const mapDispatchToProps = (dispatch: any) => ({ + dispatchGetDynamicSettings: () => { + return dispatch(getDynamicSettings({})); + }, + dispatchSetDynamicSettings: (settings: DynamicSettings) => { + return dispatch(setDynamicSettings(settings)); + }, +}); + +export const SettingsPage = connect(mapStateToProps, mapDispatchToProps)(SettingsPageComponent); diff --git a/x-pack/legacy/plugins/uptime/public/routes.tsx b/x-pack/legacy/plugins/uptime/public/routes.tsx index 83be45083b6455..590e00e92e1fbb 100644 --- a/x-pack/legacy/plugins/uptime/public/routes.tsx +++ b/x-pack/legacy/plugins/uptime/public/routes.tsx @@ -8,8 +8,8 @@ import React, { FC } from 'react'; import { Route, Switch } from 'react-router-dom'; import { DataPublicPluginSetup } from '../../../../../src/plugins/data/public'; import { OverviewPage } from './components/connected/pages/overview_container'; -import { MONITOR_ROUTE, OVERVIEW_ROUTE } from '../common/constants'; -import { MonitorPage, NotFoundPage } from './pages'; +import { MONITOR_ROUTE, OVERVIEW_ROUTE, SETTINGS_ROUTE } from '../common/constants'; +import { MonitorPage, NotFoundPage, SettingsPage } from './pages'; interface RouterProps { autocomplete: DataPublicPluginSetup['autocomplete']; @@ -20,6 +20,9 @@ export const PageRouter: FC = ({ autocomplete }) => ( + + + diff --git a/x-pack/legacy/plugins/uptime/public/state/actions/dynamic_settings.ts b/x-pack/legacy/plugins/uptime/public/state/actions/dynamic_settings.ts new file mode 100644 index 00000000000000..d78c725c4b599d --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/actions/dynamic_settings.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { createAction } from 'redux-actions'; +import { DynamicSettings } from '../../../common/runtime_types'; + +export const getDynamicSettings = createAction<{}>('GET_DYNAMIC_SETTINGS'); +export const getDynamicSettingsSuccess = createAction( + 'GET_DYNAMIC_SETTINGS_SUCCESS' +); +export const getDynamicSettingsFail = createAction('GET_DYNAMIC_SETTINGS_FAIL'); + +export const setDynamicSettings = createAction('SET_DYNAMIC_SETTINGS'); +export const setDynamicSettingsSuccess = createAction( + 'SET_DYNAMIC_SETTINGS_SUCCESS' +); +export const setDynamicSettingsFail = createAction('SET_DYNAMIC_SETTINGS_FAIL'); +export const acknowledgeSetDynamicSettings = createAction<{}>('ACKNOWLEDGE_SET_DYNAMIC_SETTINGS'); diff --git a/x-pack/legacy/plugins/uptime/public/state/api/dynamic_settings.ts b/x-pack/legacy/plugins/uptime/public/state/api/dynamic_settings.ts new file mode 100644 index 00000000000000..8ade2aa4595dcd --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/api/dynamic_settings.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + DynamicSettingsType, + DynamicSettings, + DynamicSettingsSaveResponse, + DynamicSettingsSaveType, +} from '../../../common/runtime_types'; +import { apiService } from './utils'; + +const apiPath = '/api/uptime/dynamic_settings'; + +interface BaseApiRequest { + basePath: string; +} + +type SaveApiRequest = BaseApiRequest & { + settings: DynamicSettings; +}; + +export const getDynamicSettings = async ({ + basePath, +}: BaseApiRequest): Promise => { + return await apiService.get(apiPath, undefined, DynamicSettingsType); +}; + +export const setDynamicSettings = async ({ + basePath, + settings, +}: SaveApiRequest): Promise => { + return await apiService.post(apiPath, settings, DynamicSettingsSaveType); +}; diff --git a/x-pack/legacy/plugins/uptime/public/state/api/index.ts b/x-pack/legacy/plugins/uptime/public/state/api/index.ts index 518091cb36dded..793762c0f4a10a 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/index.ts @@ -8,6 +8,7 @@ export * from './monitor'; export * from './overview_filters'; export * from './snapshot'; export * from './monitor_status'; +export * from './dynamic_settings'; export * from './index_pattern'; export * from './index_status'; export * from './ping'; diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/dynamic_settings.ts b/x-pack/legacy/plugins/uptime/public/state/effects/dynamic_settings.ts new file mode 100644 index 00000000000000..9bc8bd95be68c6 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/effects/dynamic_settings.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { takeLatest, put, call, select } from 'redux-saga/effects'; +import { Action } from 'redux-actions'; +import { i18n } from '@kbn/i18n'; +import { fetchEffectFactory } from './fetch_effect'; +import { + getDynamicSettings, + getDynamicSettingsSuccess, + getDynamicSettingsFail, + setDynamicSettingsSuccess, + setDynamicSettingsFail, + setDynamicSettings, +} from '../actions/dynamic_settings'; +import { + getDynamicSettings as getDynamicSettingsAPI, + setDynamicSettings as setDynamicSettingsAPI, +} from '../api'; +import { DynamicSettings } from '../../../common/runtime_types'; +import { getBasePath } from '../selectors'; +import { kibanaService } from '../kibana_service'; + +export function* fetchDynamicSettingsEffect() { + yield takeLatest( + String(getDynamicSettings), + fetchEffectFactory(getDynamicSettingsAPI, getDynamicSettingsSuccess, getDynamicSettingsFail) + ); +} + +export function* setDynamicSettingsEffect() { + const couldNotSaveSettingsText = i18n.translate('xpack.uptime.settings.error.couldNotSave', { + defaultMessage: 'Could not save settings!', + }); + yield takeLatest(String(setDynamicSettings), function*(action: Action) { + try { + if (!action.payload) { + const err = new Error('Cannot fetch effect without a payload'); + yield put(setDynamicSettingsFail(err)); + + kibanaService.core.notifications.toasts.addError(err, { + title: couldNotSaveSettingsText, + }); + return; + } + const basePath = yield select(getBasePath); + yield call(setDynamicSettingsAPI, { settings: action.payload, basePath }); + yield put(setDynamicSettingsSuccess(action.payload)); + kibanaService.core.notifications.toasts.addSuccess('Settings saved!'); + } catch (err) { + kibanaService.core.notifications.toasts.addError(err, { + title: couldNotSaveSettingsText, + }); + yield put(setDynamicSettingsFail(err)); + } + }); +} diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts index 7c45aa142ecfda..d11b79d60d1547 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts @@ -9,6 +9,7 @@ import { fetchMonitorDetailsEffect } from './monitor'; import { fetchOverviewFiltersEffect } from './overview_filters'; import { fetchSnapshotCountEffect } from './snapshot'; import { fetchMonitorStatusEffect } from './monitor_status'; +import { fetchDynamicSettingsEffect, setDynamicSettingsEffect } from './dynamic_settings'; import { fetchIndexPatternEffect } from './index_pattern'; import { fetchPingHistogramEffect } from './ping'; import { fetchMonitorDurationEffect } from './monitor_duration'; @@ -19,6 +20,8 @@ export function* rootEffect() { yield fork(fetchSnapshotCountEffect); yield fork(fetchOverviewFiltersEffect); yield fork(fetchMonitorStatusEffect); + yield fork(fetchDynamicSettingsEffect); + yield fork(setDynamicSettingsEffect); yield fork(fetchIndexPatternEffect); yield fork(fetchPingHistogramEffect); yield fork(fetchMonitorDurationEffect); diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/dynamic_settings.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/dynamic_settings.ts new file mode 100644 index 00000000000000..f003565e9873e4 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/dynamic_settings.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { handleActions, Action } from 'redux-actions'; +import { + getDynamicSettings, + getDynamicSettingsSuccess, + getDynamicSettingsFail, + setDynamicSettings, + setDynamicSettingsSuccess, + setDynamicSettingsFail, +} from '../actions/dynamic_settings'; +import { DynamicSettings } from '../../../common/runtime_types'; + +export interface DynamicSettingsState { + settings?: DynamicSettings; + loadError?: Error; + saveError?: Error; + loading: boolean; +} + +const initialState: DynamicSettingsState = { + loading: true, +}; + +export const dynamicSettingsReducer = handleActions( + { + [String(getDynamicSettings)]: state => ({ + ...state, + loading: true, + }), + [String(getDynamicSettingsSuccess)]: (state, action: Action) => { + return { + loading: false, + settings: action.payload, + }; + }, + [String(getDynamicSettingsFail)]: (state, action: Action) => { + return { + loading: false, + loadError: action.payload, + }; + }, + [String(setDynamicSettings)]: state => ({ + ...state, + loading: true, + }), + [String(setDynamicSettingsSuccess)]: (state, action: Action) => ({ + settings: action.payload, + saveSucceded: true, + loading: false, + }), + [String(setDynamicSettingsFail)]: (state, action: Action) => ({ + ...state, + loading: false, + saveSucceeded: false, + saveError: action.payload, + }), + }, + initialState +); diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts index 4a83b54504ca87..6617627aadaf37 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts @@ -10,6 +10,7 @@ import { overviewFiltersReducer } from './overview_filters'; import { snapshotReducer } from './snapshot'; import { uiReducer } from './ui'; import { monitorStatusReducer } from './monitor_status'; +import { dynamicSettingsReducer } from './dynamic_settings'; import { indexPatternReducer } from './index_pattern'; import { pingReducer } from './ping'; import { monitorDurationReducer } from './monitor_duration'; @@ -21,6 +22,7 @@ export const rootReducer = combineReducers({ snapshot: snapshotReducer, ui: uiReducer, monitorStatus: monitorStatusReducer, + dynamicSettings: dynamicSettingsReducer, indexPattern: indexPatternReducer, ping: pingReducer, monitorDuration: monitorDurationReducer, diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts index b1da995709f937..1aea90c70cd0ef 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts @@ -19,6 +19,9 @@ describe('state selectors', () => { errors: [], loading: false, }, + dynamicSettings: { + loading: false, + }, monitor: { monitorDetailsList: [], monitorLocationsList: new Map(), diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts index 7b5a5ddf8d3ca7..6844b31d4973c5 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts @@ -29,6 +29,10 @@ export const selectMonitorStatus = (state: AppState) => { return state.monitorStatus.status; }; +export const selectDynamicSettings = (state: AppState) => { + return state.dynamicSettings; +}; + export const selectIndexPattern = ({ indexPattern }: AppState) => { return { indexPattern: indexPattern.index_pattern, loading: indexPattern.loading }; }; diff --git a/x-pack/plugins/uptime/server/graphql/monitor_states/resolvers.ts b/x-pack/plugins/uptime/server/graphql/monitor_states/resolvers.ts index 1560b78b3c0501..08973b217b96c3 100644 --- a/x-pack/plugins/uptime/server/graphql/monitor_states/resolvers.ts +++ b/x-pack/plugins/uptime/server/graphql/monitor_states/resolvers.ts @@ -12,6 +12,7 @@ import { MonitorSummaryResult, } from '../../../../../legacy/plugins/uptime/common/graphql/types'; import { CONTEXT_DEFAULTS } from '../../../../../legacy/plugins/uptime/common/constants'; +import { savedObjectsAdapter } from '../../lib/saved_objects'; export type UMGetMonitorStatesResolver = UMResolver< MonitorSummaryResult | Promise, @@ -32,8 +33,12 @@ export const createMonitorStatesResolvers: CreateUMGraphQLResolvers = ( async getMonitorStates( _resolver, { dateRangeStart, dateRangeEnd, filters, pagination, statusFilter }, - { APICaller } + { APICaller, savedObjectsClient } ): Promise { + const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( + savedObjectsClient + ); + const decodedPagination = pagination ? JSON.parse(decodeURIComponent(pagination)) : CONTEXT_DEFAULTS.CURSOR_PAGINATION; @@ -41,9 +46,10 @@ export const createMonitorStatesResolvers: CreateUMGraphQLResolvers = ( indexStatus, { summaries, nextPagePagination, prevPagePagination }, ] = await Promise.all([ - libs.requests.getIndexStatus({ callES: APICaller }), + libs.requests.getIndexStatus({ callES: APICaller, dynamicSettings }), libs.requests.getMonitorStates({ callES: APICaller, + dynamicSettings, dateRangeStart, dateRangeEnd, pagination: decodedPagination, diff --git a/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts b/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts index b383fc5d5fb154..8153d8c8f3b8cc 100644 --- a/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts +++ b/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts @@ -12,6 +12,7 @@ import { import { UMServerLibs } from '../../lib/lib'; import { UMContext } from '../types'; import { CreateUMGraphQLResolvers } from '../types'; +import { savedObjectsAdapter } from '../../lib/saved_objects'; export type UMAllPingsResolver = UMResolver< PingResults | Promise, @@ -35,10 +36,15 @@ export const createPingsResolvers: CreateUMGraphQLResolvers = ( async allPings( _resolver, { monitorId, sort, size, status, dateRangeStart, dateRangeEnd, location }, - { APICaller } + { APICaller, savedObjectsClient } ): Promise { + const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( + savedObjectsClient + ); + return await libs.requests.getPings({ callES: APICaller, + dynamicSettings, dateRangeStart, dateRangeEnd, monitorId, diff --git a/x-pack/plugins/uptime/server/graphql/types.ts b/x-pack/plugins/uptime/server/graphql/types.ts index 8508066a71f983..5f0a6749eb5999 100644 --- a/x-pack/plugins/uptime/server/graphql/types.ts +++ b/x-pack/plugins/uptime/server/graphql/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { RequestHandlerContext, CallAPIOptions } from 'src/core/server'; +import { RequestHandlerContext, CallAPIOptions, SavedObjectsClient } from 'src/core/server'; import { UMServerLibs } from '../lib/lib'; export type UMContext = RequestHandlerContext & { @@ -13,6 +13,7 @@ export type UMContext = RequestHandlerContext & { clientParams?: Record, options?: CallAPIOptions | undefined ) => Promise; + savedObjectsClient: SavedObjectsClient; }; export interface UMGraphQLResolver { diff --git a/x-pack/plugins/uptime/server/kibana.index.ts b/x-pack/plugins/uptime/server/kibana.index.ts index 2c1f34aa8a8e76..19506bb316a056 100644 --- a/x-pack/plugins/uptime/server/kibana.index.ts +++ b/x-pack/plugins/uptime/server/kibana.index.ts @@ -10,6 +10,7 @@ import { KibanaTelemetryAdapter } from './lib/adapters/telemetry'; import { compose } from './lib/compose/kibana'; import { initUptimeServer } from './uptime_server'; import { UptimeCorePlugins, UptimeCoreSetup } from './lib/adapters/framework'; +import { umDynamicSettings } from './lib/saved_objects'; export interface KibanaRouteOptions { path: string; @@ -37,20 +38,20 @@ export const initServerWithKibana = (server: UptimeCoreSetup, plugins: UptimeCor catalogue: ['uptime'], privileges: { all: { - api: ['uptime'], + api: ['uptime-read', 'uptime-write'], savedObject: { - all: [], + all: [umDynamicSettings.name], read: [], }, - ui: ['save'], + ui: ['save', 'configureSettings', 'show'], }, read: { - api: ['uptime'], + api: ['uptime-read'], savedObject: { all: [], - read: [], + read: [umDynamicSettings.name], }, - ui: [], + ui: ['show'], }, }, }); diff --git a/x-pack/plugins/uptime/server/lib/adapters/framework/adapter_types.ts b/x-pack/plugins/uptime/server/lib/adapters/framework/adapter_types.ts index 6fc488e949e9c2..a6dd8efd57c144 100644 --- a/x-pack/plugins/uptime/server/lib/adapters/framework/adapter_types.ts +++ b/x-pack/plugins/uptime/server/lib/adapters/framework/adapter_types.ts @@ -9,6 +9,7 @@ import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { IRouter, CallAPIOptions, SavedObjectsClientContract } from 'src/core/server'; import { UMKibanaRoute } from '../../../rest_api'; import { PluginSetupContract } from '../../../../../features/server'; +import { DynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; type APICaller = ( endpoint: string, @@ -17,12 +18,12 @@ type APICaller = ( ) => Promise; export type UMElasticsearchQueryFn = ( - params: { callES: APICaller } & P + params: { callES: APICaller; dynamicSettings: DynamicSettings } & P ) => Promise | R; export type UMSavedObjectsQueryFn = ( client: SavedObjectsClientContract, - params: P + params?: P ) => Promise | T; export interface UptimeCoreSetup { diff --git a/x-pack/plugins/uptime/server/lib/adapters/framework/kibana_framework_adapter.ts b/x-pack/plugins/uptime/server/lib/adapters/framework/kibana_framework_adapter.ts index 7ac3db9d0f3d7f..1f92c8212b393f 100644 --- a/x-pack/plugins/uptime/server/lib/adapters/framework/kibana_framework_adapter.ts +++ b/x-pack/plugins/uptime/server/lib/adapters/framework/kibana_framework_adapter.ts @@ -46,7 +46,7 @@ export class UMKibanaBackendFrameworkAdapter implements UMBackendFrameworkAdapte }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, }, async (context, request, resp): Promise => { @@ -60,13 +60,17 @@ export class UMKibanaBackendFrameworkAdapter implements UMBackendFrameworkAdapte const options = { graphQLOptions: (_req: any) => { return { - context: { ...context, APICaller: callAsCurrentUser }, + context: { + ...context, + APICaller: callAsCurrentUser, + savedObjectsClient: context.core.savedObjects.client, + }, schema, }; }, path: routePath, route: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, }; try { diff --git a/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts b/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts index 8a11270a4740a2..609d84cb521fc6 100644 --- a/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts +++ b/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts @@ -16,6 +16,7 @@ import { AlertType } from '../../../../../alerting/server'; import { IRouter } from 'kibana/server'; import { UMServerLibs } from '../../lib'; import { UptimeCoreSetup } from '../../adapters'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; /** * The alert takes some dependencies as parameters; these are things like @@ -43,7 +44,7 @@ const bootstrapDependencies = (customRequests?: any) => { */ const mockOptions = ( params = { numTimes: 5, locations: [], timerange: { from: 'now-15m', to: 'now' } }, - services = { callCluster: 'mockESFunction' }, + services = { callCluster: 'mockESFunction', savedObjectsClient: mockSavedObjectsClient }, state = {} ): any => ({ params, @@ -51,6 +52,9 @@ const mockOptions = ( state, }); +const mockSavedObjectsClient = { get: jest.fn() }; +mockSavedObjectsClient.get.mockReturnValue(defaultDynamicSettings); + describe('status check alert', () => { describe('executor', () => { it('does not trigger when there are no monitors down', async () => { @@ -69,6 +73,7 @@ describe('status check alert', () => { Array [ Object { "callES": "mockESFunction", + "dynamicSettings": undefined, "locations": Array [], "numTimes": 5, "timerange": Object { @@ -118,6 +123,7 @@ describe('status check alert', () => { Array [ Object { "callES": "mockESFunction", + "dynamicSettings": undefined, "locations": Array [], "numTimes": 5, "timerange": Object { diff --git a/x-pack/plugins/uptime/server/lib/alerts/status_check.ts b/x-pack/plugins/uptime/server/lib/alerts/status_check.ts index 3e90d2ce95a101..d999f0fda3937e 100644 --- a/x-pack/plugins/uptime/server/lib/alerts/status_check.ts +++ b/x-pack/plugins/uptime/server/lib/alerts/status_check.ts @@ -17,6 +17,7 @@ import { StatusCheckAlertStateType, StatusCheckAlertState, } from '../../../../../legacy/plugins/uptime/common/runtime_types'; +import { savedObjectsAdapter } from '../saved_objects'; const { MONITOR_STATUS } = ACTION_GROUP_DEFINITIONS; @@ -202,13 +203,17 @@ export const statusCheckAlertFactory: UptimeAlertTypeFactory = (server, libs) => } const params = decoded.right; - + const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( + options.services.savedObjectsClient, + undefined + ); /* This is called `monitorsByLocation` but it's really * monitors by location by status. The query we run to generate this * filters on the status field, so effectively there should be one and only one * status represented in the result set. */ const monitorsByLocation = await libs.requests.getMonitorStatus({ callES: options.services.callCluster, + dynamicSettings, ...params, }); diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts index 49771c4812972d..b7e340fddbd2cc 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts @@ -5,13 +5,14 @@ */ import { getLatestMonitor } from '../get_latest_monitor'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; describe('getLatestMonitor', () => { let expectedGetLatestSearchParams: any; let mockEsSearchResult: any; beforeEach(() => { expectedGetLatestSearchParams = { - index: 'heartbeat*', + index: defaultDynamicSettings.heartbeatIndices, body: { query: { bool: { @@ -81,6 +82,7 @@ describe('getLatestMonitor', () => { const mockEsClient = jest.fn(async (_request: any, _params: any) => mockEsSearchResult); const result = await getLatestMonitor({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateStart: 'now-1h', dateEnd: 'now', monitorId: 'testMonitor', diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_charts.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_charts.test.ts index 24411f48672cd5..e54a17f934bccb 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_charts.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_charts.test.ts @@ -8,6 +8,7 @@ import { get, set } from 'lodash'; import mockChartsData from './monitor_charts_mock.json'; import { assertCloseTo } from '../../helper'; import { getMonitorDurationChart } from '../get_monitor_duration'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; describe('ElasticsearchMonitorsAdapter', () => { it('getMonitorChartsData will run expected parameters when no location is specified', async () => { @@ -16,6 +17,7 @@ describe('ElasticsearchMonitorsAdapter', () => { const search = searchMock.bind({}); await getMonitorDurationChart({ callES: search, + dynamicSettings: defaultDynamicSettings, monitorId: 'fooID', dateStart: 'now-15m', dateEnd: 'now', @@ -51,6 +53,7 @@ describe('ElasticsearchMonitorsAdapter', () => { const search = searchMock.bind({}); await getMonitorDurationChart({ callES: search, + dynamicSettings: defaultDynamicSettings, monitorId: 'fooID', dateStart: 'now-15m', dateEnd: 'now', @@ -87,6 +90,7 @@ describe('ElasticsearchMonitorsAdapter', () => { expect( await getMonitorDurationChart({ callES: search, + dynamicSettings: defaultDynamicSettings, monitorId: 'id', dateStart: 'now-15m', dateEnd: 'now', diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_status.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_status.test.ts index 013da4b3602b8f..af85be11f583ab 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_status.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_monitor_status.test.ts @@ -7,6 +7,7 @@ import { elasticsearchServiceMock } from '../../../../../../../src/core/server/mocks'; import { getMonitorStatus } from '../get_monitor_status'; import { ScopedClusterClient } from 'src/core/server/elasticsearch'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; interface BucketItemCriteria { monitor_id: string; @@ -102,6 +103,7 @@ describe('getMonitorStatus', () => { }`; await getMonitorStatus({ callES, + dynamicSettings: defaultDynamicSettings, filters: exampleFilter, locations: [], numTimes: 5, @@ -204,6 +206,7 @@ describe('getMonitorStatus', () => { const [callES, esMock] = setupMock([]); await getMonitorStatus({ callES, + dynamicSettings: defaultDynamicSettings, locations: ['fairbanks', 'harrisburg'], numTimes: 1, timerange: { @@ -326,6 +329,7 @@ describe('getMonitorStatus', () => { }; const result = await getMonitorStatus({ callES, + dynamicSettings: defaultDynamicSettings, ...clientParameters, }); expect(esMock.callAsCurrentUser).toHaveBeenCalledTimes(1); @@ -490,6 +494,7 @@ describe('getMonitorStatus', () => { const [callES] = setupMock(criteria); const result = await getMonitorStatus({ callES, + dynamicSettings: defaultDynamicSettings, locations: [], numTimes: 5, timerange: { diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_ping_histogram.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_ping_histogram.test.ts index 7d98b770692648..faeb291bb533b2 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_ping_histogram.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_ping_histogram.test.ts @@ -5,6 +5,7 @@ */ import { getPingHistogram } from '../get_ping_histogram'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; describe('getPingHistogram', () => { const standardMockResponse: any = { @@ -58,6 +59,7 @@ describe('getPingHistogram', () => { const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: 'now-15m', to: 'now', filters: null, @@ -76,6 +78,7 @@ describe('getPingHistogram', () => { const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: 'now-15m', to: 'now', filters: null, @@ -137,6 +140,7 @@ describe('getPingHistogram', () => { const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: '1234', to: '5678', filters: JSON.stringify(searchFilter), @@ -192,6 +196,7 @@ describe('getPingHistogram', () => { const filters = `{"bool":{"must":[{"simple_query_string":{"query":"http"}}]}}`; const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: 'now-15m', to: 'now', filters, @@ -208,6 +213,7 @@ describe('getPingHistogram', () => { mockEsClient.mockReturnValue(standardMockResponse); const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: '1234', to: '5678', filters: '', @@ -228,6 +234,7 @@ describe('getPingHistogram', () => { const result = await getPingHistogram({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, from: '1234', to: '5678', filters: '', diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts index 4be1fb30ee7f6a..9145ccca1b6d17 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts @@ -6,6 +6,7 @@ import { getPings } from '../get_pings'; import { set } from 'lodash'; +import { defaultDynamicSettings } from '../../../../../../legacy/plugins/uptime/common/runtime_types'; describe('getAll', () => { let mockEsSearchResult: any; @@ -43,7 +44,7 @@ describe('getAll', () => { }, }; expectedGetAllParams = { - index: 'heartbeat*', + index: defaultDynamicSettings.heartbeatIndices, body: { query: { bool: { @@ -70,6 +71,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); const result = await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', sort: 'asc', @@ -92,6 +94,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', sort: 'asc', @@ -108,6 +111,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', size: 12, @@ -121,6 +125,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', sort: 'desc', @@ -136,6 +141,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', monitorId: 'testmonitorid', @@ -151,6 +157,7 @@ describe('getAll', () => { mockEsClient.mockReturnValue(mockEsSearchResult); await getPings({ callES: mockEsClient, + dynamicSettings: defaultDynamicSettings, dateRangeStart: 'now-1h', dateRangeEnd: 'now', status: 'down', diff --git a/x-pack/plugins/uptime/server/lib/requests/get_filter_bar.ts b/x-pack/plugins/uptime/server/lib/requests/get_filter_bar.ts index affe205a46844e..b533c990083ab2 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_filter_bar.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_filter_bar.ts @@ -7,7 +7,6 @@ import { UMElasticsearchQueryFn } from '../adapters'; import { OverviewFilters } from '../../../../../legacy/plugins/uptime/common/runtime_types'; import { generateFilterAggs } from './generate_filter_aggs'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; export interface GetFilterBarParams { /** @param dateRangeStart timestamp bounds */ @@ -67,6 +66,7 @@ export const extractFilterAggsResults = ( export const getFilterBar: UMElasticsearchQueryFn = async ({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, search, @@ -83,7 +83,7 @@ export const getFilterBar: UMElasticsearchQueryFn = async callES => { - const indexPatternsFetcher = new IndexPatternsFetcher((...rest: Parameters) => - callES(...rest) - ); +export const getUptimeIndexPattern: UMElasticsearchQueryFn<{}, {}> = async ({ + callES, + dynamicSettings, +}) => { + const callAsCurrentUser: APICaller = async ( + endpoint: string, + clientParams: Record = {}, + options?: CallAPIOptions + ) => callES(endpoint, clientParams, options); + const indexPatternsFetcher = new IndexPatternsFetcher(callAsCurrentUser); // Since `getDynamicIndexPattern` is called in setup_request (and thus by every endpoint) // and since `getFieldsForWildcard` will throw if the specified indices don't exist, @@ -20,12 +25,12 @@ export const getUptimeIndexPattern: UMElasticsearchQueryFn = async call // (would be a bad first time experience) try { const fields = await indexPatternsFetcher.getFieldsForWildcard({ - pattern: INDEX_NAMES.HEARTBEAT, + pattern: dynamicSettings.heartbeatIndices, }); const indexPattern: IIndexPattern = { fields, - title: INDEX_NAMES.HEARTBEAT, + title: dynamicSettings.heartbeatIndices, }; return indexPattern; @@ -34,7 +39,7 @@ export const getUptimeIndexPattern: UMElasticsearchQueryFn = async call if (notExists) { // eslint-disable-next-line no-console console.error( - `Could not get dynamic index pattern because indices "${INDEX_NAMES.HEARTBEAT}" don't exist` + `Could not get dynamic index pattern because indices "${dynamicSettings.heartbeatIndices}" don't exist` ); return; } diff --git a/x-pack/plugins/uptime/server/lib/requests/get_index_status.ts b/x-pack/plugins/uptime/server/lib/requests/get_index_status.ts index d8a05c08b14173..6f7854d35b308b 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_index_status.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_index_status.ts @@ -5,14 +5,16 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; import { StatesIndexStatus } from '../../../../../legacy/plugins/uptime/common/runtime_types'; -export const getIndexStatus: UMElasticsearchQueryFn<{}, StatesIndexStatus> = async ({ callES }) => { +export const getIndexStatus: UMElasticsearchQueryFn<{}, StatesIndexStatus> = async ({ + callES, + dynamicSettings, +}) => { const { _shards: { total }, count, - } = await callES('count', { index: INDEX_NAMES.HEARTBEAT }); + } = await callES('count', { index: dynamicSettings.heartbeatIndices }); return { indexExists: total > 0, docCount: count, diff --git a/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts b/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts index 2d549fce06884f..85749ac66b80cb 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts @@ -6,7 +6,6 @@ import { UMElasticsearchQueryFn } from '../adapters'; import { Ping } from '../../../../../legacy/plugins/uptime/common/graphql/types'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; export interface GetLatestMonitorParams { /** @member dateRangeStart timestamp bounds */ @@ -22,6 +21,7 @@ export interface GetLatestMonitorParams { // Get The monitor latest state sorted by timestamp with date range export const getLatestMonitor: UMElasticsearchQueryFn = async ({ callES, + dynamicSettings, dateStart, dateEnd, monitorId, @@ -29,7 +29,7 @@ export const getLatestMonitor: UMElasticsearchQueryFn = async ({ callES, + dynamicSettings, monitorId, }) => { const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { size: 1, _source: ['url', 'monitor', 'observer'], diff --git a/x-pack/plugins/uptime/server/lib/requests/get_monitor_details.ts b/x-pack/plugins/uptime/server/lib/requests/get_monitor_details.ts index eb3657e60a7bbb..8393370e1516b0 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_monitor_details.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_monitor_details.ts @@ -9,7 +9,6 @@ import { MonitorDetails, MonitorError, } from '../../../../../legacy/plugins/uptime/common/runtime_types'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; export interface GetMonitorDetailsParams { monitorId: string; @@ -20,7 +19,7 @@ export interface GetMonitorDetailsParams { export const getMonitorDetails: UMElasticsearchQueryFn< GetMonitorDetailsParams, MonitorDetails -> = async ({ callES, monitorId, dateStart, dateEnd }) => { +> = async ({ callES, dynamicSettings, monitorId, dateStart, dateEnd }) => { const queryFilters: any = [ { range: { @@ -38,7 +37,7 @@ export const getMonitorDetails: UMElasticsearchQueryFn< ]; const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { size: 1, _source: ['error', '@timestamp'], diff --git a/x-pack/plugins/uptime/server/lib/requests/get_monitor_duration.ts b/x-pack/plugins/uptime/server/lib/requests/get_monitor_duration.ts index 5fb9df3738533d..40156132aafcfd 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_monitor_duration.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_monitor_duration.ts @@ -5,7 +5,6 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; import { getHistogramIntervalFormatted } from '../helper'; import { LocationDurationLine, @@ -47,9 +46,9 @@ const formatStatusBuckets = (time: any, buckets: any, docCount: any) => { export const getMonitorDurationChart: UMElasticsearchQueryFn< GetMonitorChartsParams, MonitorDurationResult -> = async ({ callES, dateStart, dateEnd, monitorId }) => { +> = async ({ callES, dynamicSettings, dateStart, dateEnd, monitorId }) => { const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { query: { bool: { diff --git a/x-pack/plugins/uptime/server/lib/requests/get_monitor_locations.ts b/x-pack/plugins/uptime/server/lib/requests/get_monitor_locations.ts index 328ef54c404d37..f49e404ffb084b 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_monitor_locations.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_monitor_locations.ts @@ -5,10 +5,7 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { - INDEX_NAMES, - UNNAMED_LOCATION, -} from '../../../../../legacy/plugins/uptime/common/constants'; +import { UNNAMED_LOCATION } from '../../../../../legacy/plugins/uptime/common/constants'; import { MonitorLocations, MonitorLocation, @@ -29,9 +26,9 @@ export interface GetMonitorLocationsParams { export const getMonitorLocations: UMElasticsearchQueryFn< GetMonitorLocationsParams, MonitorLocations -> = async ({ callES, monitorId, dateStart, dateEnd }) => { +> = async ({ callES, dynamicSettings, monitorId, dateStart, dateEnd }) => { const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { size: 0, query: { diff --git a/x-pack/plugins/uptime/server/lib/requests/get_monitor_states.ts b/x-pack/plugins/uptime/server/lib/requests/get_monitor_states.ts index 5b02e2502a27e1..bfccb34ab94de4 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_monitor_states.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_monitor_states.ts @@ -47,13 +47,22 @@ const jsonifyPagination = (p: any): string | null => { export const getMonitorStates: UMElasticsearchQueryFn< GetMonitorStatesParams, GetMonitorStatesResult -> = async ({ callES, dateRangeStart, dateRangeEnd, pagination, filters, statusFilter }) => { +> = async ({ + callES, + dynamicSettings, + dateRangeStart, + dateRangeEnd, + pagination, + filters, + statusFilter, +}) => { pagination = pagination || CONTEXT_DEFAULTS.CURSOR_PAGINATION; statusFilter = statusFilter === null ? undefined : statusFilter; const size = 10; const queryContext = new QueryContext( callES, + dynamicSettings.heartbeatIndices, dateRangeStart, dateRangeEnd, pagination, diff --git a/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts b/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts index 339409b63a4f6f..00f1fc7de4c121 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_ping_histogram.ts @@ -5,7 +5,7 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { INDEX_NAMES, QUERY } from '../../../../../legacy/plugins/uptime/common/constants'; +import { QUERY } from '../../../../../legacy/plugins/uptime/common/constants'; import { getFilterClause } from '../helper'; import { HistogramQueryResult } from './types'; import { HistogramResult } from '../../../../../legacy/plugins/uptime/common/types'; @@ -26,7 +26,7 @@ export interface GetPingHistogramParams { export const getPingHistogram: UMElasticsearchQueryFn< GetPingHistogramParams, HistogramResult -> = async ({ callES, from, to, filters, monitorId, statusFilter }) => { +> = async ({ callES, dynamicSettings, from, to, filters, monitorId, statusFilter }) => { const boolFilters = filters ? JSON.parse(filters) : null; const additionalFilters = []; if (monitorId) { @@ -38,7 +38,7 @@ export const getPingHistogram: UMElasticsearchQueryFn< const filter = getFilterClause(from, to, additionalFilters); const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { query: { bool: { diff --git a/x-pack/plugins/uptime/server/lib/requests/get_pings.ts b/x-pack/plugins/uptime/server/lib/requests/get_pings.ts index ddca27d7820663..59d8aa1ab0e63c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_pings.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_pings.ts @@ -10,7 +10,6 @@ import { Ping, HttpBody, } from '../../../../../legacy/plugins/uptime/common/graphql/types'; -import { INDEX_NAMES } from '../../../../../legacy/plugins/uptime/common/constants'; export interface GetPingsParams { /** @member dateRangeStart timestamp bounds */ @@ -37,6 +36,7 @@ export interface GetPingsParams { export const getPings: UMElasticsearchQueryFn = async ({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, monitorId, @@ -61,7 +61,7 @@ export const getPings: UMElasticsearchQueryFn = asy } const queryContext = { bool: { filter } }; const params = { - index: INDEX_NAMES.HEARTBEAT, + index: dynamicSettings.heartbeatIndices, body: { query: { ...queryContext, diff --git a/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts b/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts index 1783c6e91df344..01f2ad88161cf0 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_snapshot_counts.ts @@ -6,10 +6,7 @@ import { UMElasticsearchQueryFn } from '../adapters'; import { Snapshot } from '../../../../../legacy/plugins/uptime/common/runtime_types'; -import { - CONTEXT_DEFAULTS, - INDEX_NAMES, -} from '../../../../../legacy/plugins/uptime/common/constants'; +import { CONTEXT_DEFAULTS } from '../../../../../legacy/plugins/uptime/common/constants'; import { QueryContext } from './search'; export interface GetSnapshotCountParams { @@ -21,6 +18,7 @@ export interface GetSnapshotCountParams { export const getSnapshotCount: UMElasticsearchQueryFn = async ({ callES, + dynamicSettings: { heartbeatIndices }, dateRangeStart, dateRangeEnd, filters, @@ -32,6 +30,7 @@ export const getSnapshotCount: UMElasticsearchQueryFn => { const res = await context.search({ - index: INDEX_NAMES.HEARTBEAT, + index: context.heartbeatIndices, body: statusCountBody(await context.dateAndCustomFilters()), }); diff --git a/x-pack/plugins/uptime/server/lib/requests/search/__tests__/query_context.test.ts b/x-pack/plugins/uptime/server/lib/requests/search/__tests__/query_context.test.ts index 020ada3bc25857..e6cd2fe1ae0b77 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/__tests__/query_context.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/__tests__/query_context.test.ts @@ -22,7 +22,9 @@ describe('QueryContext', () => { }; let qc: QueryContext; - beforeEach(() => (qc = new QueryContext({}, rangeStart, rangeEnd, pagination, null, 10))); + beforeEach( + () => (qc = new QueryContext({}, 'indexName', rangeStart, rangeEnd, pagination, null, 10)) + ); describe('dateRangeFilter()', () => { const expectedRange = { diff --git a/x-pack/plugins/uptime/server/lib/requests/search/__tests__/test_helpers.ts b/x-pack/plugins/uptime/server/lib/requests/search/__tests__/test_helpers.ts index d96f8dc95aa722..d1212daf5304fd 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/__tests__/test_helpers.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/__tests__/test_helpers.ts @@ -26,5 +26,14 @@ export const nextPagination = (key: any): CursorPagination => { }; }; export const simpleQueryContext = (): QueryContext => { - return new QueryContext(undefined, '', '', nextPagination('something'), undefined, 0, ''); + return new QueryContext( + undefined, + 'indexName', + '', + '', + nextPagination('something'), + undefined, + 0, + '' + ); }; diff --git a/x-pack/plugins/uptime/server/lib/requests/search/enrich_monitor_groups.ts b/x-pack/plugins/uptime/server/lib/requests/search/enrich_monitor_groups.ts index 9ad3928a3b1b22..bcb106eef0ba6a 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/enrich_monitor_groups.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/enrich_monitor_groups.ts @@ -7,7 +7,7 @@ import { get, sortBy } from 'lodash'; import { QueryContext } from './query_context'; import { getHistogramIntervalFormatted } from '../../helper'; -import { INDEX_NAMES, STATES } from '../../../../../../legacy/plugins/uptime/common/constants'; +import { STATES } from '../../../../../../legacy/plugins/uptime/common/constants'; import { MonitorSummary, SummaryHistogram, @@ -25,7 +25,7 @@ export const enrichMonitorGroups: MonitorEnricher = async ( // redundant with the way the code works now. This could be simplified // to a much simpler query + some JS processing. const params = { - index: INDEX_NAMES.HEARTBEAT, + index: queryContext.heartbeatIndices, body: { query: { bool: { @@ -292,7 +292,7 @@ const getHistogramForMonitors = async ( monitorIds: string[] ): Promise<{ [key: string]: SummaryHistogram }> => { const params = { - index: INDEX_NAMES.HEARTBEAT, + index: queryContext.heartbeatIndices, body: { size: 0, query: { diff --git a/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts b/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts index 9b3b1186472be8..424c097853ad3c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/find_potential_matches.ts @@ -6,7 +6,6 @@ import { get, set } from 'lodash'; import { CursorDirection } from '../../../../../../legacy/plugins/uptime/common/graphql/types'; -import { INDEX_NAMES } from '../../../../../../legacy/plugins/uptime/common/constants'; import { QueryContext } from './query_context'; // This is the first phase of the query. In it, we find the most recent check groups that matched the given query. @@ -56,7 +55,7 @@ const query = async (queryContext: QueryContext, searchAfter: any, size: number) const body = await queryBody(queryContext, searchAfter, size); const params = { - index: INDEX_NAMES.HEARTBEAT, + index: queryContext.heartbeatIndices, body, }; diff --git a/x-pack/plugins/uptime/server/lib/requests/search/query_context.ts b/x-pack/plugins/uptime/server/lib/requests/search/query_context.ts index c1f5d89ec1a388..6d62ae7ba2b29f 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/query_context.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/query_context.ts @@ -6,12 +6,12 @@ import moment from 'moment'; import { APICaller } from 'src/core/server'; -import { INDEX_NAMES } from '../../../../../../legacy/plugins/uptime/common/constants'; import { CursorPagination } from './types'; import { parseRelativeDate } from '../../helper'; export class QueryContext { callES: APICaller; + heartbeatIndices: string; dateRangeStart: string; dateRangeEnd: string; pagination: CursorPagination; @@ -22,6 +22,7 @@ export class QueryContext { constructor( database: any, + heartbeatIndices: string, dateRangeStart: string, dateRangeEnd: string, pagination: CursorPagination, @@ -30,6 +31,7 @@ export class QueryContext { statusFilter?: string ) { this.callES = database; + this.heartbeatIndices = heartbeatIndices; this.dateRangeStart = dateRangeStart; this.dateRangeEnd = dateRangeEnd; this.pagination = pagination; @@ -39,12 +41,12 @@ export class QueryContext { } async search(params: any): Promise { - params.index = INDEX_NAMES.HEARTBEAT; + params.index = this.heartbeatIndices; return this.callES('search', params); } async count(params: any): Promise { - params.index = INDEX_NAMES.HEARTBEAT; + params.index = this.heartbeatIndices; return this.callES('count', params); } @@ -135,6 +137,7 @@ export class QueryContext { clone(): QueryContext { return new QueryContext( this.callES, + this.heartbeatIndices, this.dateRangeStart, this.dateRangeEnd, this.pagination, diff --git a/x-pack/plugins/uptime/server/lib/requests/search/refine_potential_matches.ts b/x-pack/plugins/uptime/server/lib/requests/search/refine_potential_matches.ts index c55aff3e8c4cd4..7d69ff6751f055 100644 --- a/x-pack/plugins/uptime/server/lib/requests/search/refine_potential_matches.ts +++ b/x-pack/plugins/uptime/server/lib/requests/search/refine_potential_matches.ts @@ -4,7 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -import { INDEX_NAMES } from '../../../../../../legacy/plugins/uptime/common/constants'; import { QueryContext } from './query_context'; import { CursorDirection } from '../../../../../../legacy/plugins/uptime/common/graphql/types'; import { MonitorGroups, MonitorLocCheckGroup } from './fetch_page'; @@ -96,7 +95,7 @@ export const mostRecentCheckGroups = async ( potentialMatchMonitorIDs: string[] ): Promise => { const params = { - index: INDEX_NAMES.HEARTBEAT, + index: queryContext.heartbeatIndices, body: { size: 0, query: { diff --git a/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts b/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts index ddf506786f1455..6eeea5ba4c3e9c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts +++ b/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts @@ -37,7 +37,7 @@ type ESQ = UMElasticsearchQueryFn; export interface UptimeRequests { getFilterBar: ESQ; - getIndexPattern: ESQ; + getIndexPattern: ESQ<{}, {}>; getLatestMonitor: ESQ; getMonitor: ESQ; getMonitorDurationChart: ESQ; diff --git a/x-pack/plugins/uptime/server/lib/saved_objects.ts b/x-pack/plugins/uptime/server/lib/saved_objects.ts new file mode 100644 index 00000000000000..175634ef797ccc --- /dev/null +++ b/x-pack/plugins/uptime/server/lib/saved_objects.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + DynamicSettings, + defaultDynamicSettings, +} from '../../../../legacy/plugins/uptime/common/runtime_types/dynamic_settings'; +import { SavedObjectsType, SavedObjectsErrorHelpers } from '../../../../../src/core/server'; +import { UMSavedObjectsQueryFn } from './adapters'; + +export interface UMDynamicSettingsType { + heartbeatIndices: string; +} + +export interface UMSavedObjectsAdapter { + getUptimeDynamicSettings: UMSavedObjectsQueryFn; + setUptimeDynamicSettings: UMSavedObjectsQueryFn; +} + +export const settingsObjectType = 'uptime-dynamic-settings'; +export const settingsObjectId = 'uptime-dynamic-settings-singleton'; + +export const umDynamicSettings: SavedObjectsType = { + name: settingsObjectType, + hidden: false, + namespaceAgnostic: false, + mappings: { + properties: { + heartbeatIndices: { + type: 'keyword', + }, + }, + }, +}; + +export const savedObjectsAdapter: UMSavedObjectsAdapter = { + getUptimeDynamicSettings: async (client): Promise => { + try { + const obj = await client.get(umDynamicSettings.name, settingsObjectId); + return obj.attributes; + } catch (getErr) { + if (SavedObjectsErrorHelpers.isNotFoundError(getErr)) { + return defaultDynamicSettings; + } + throw getErr; + } + }, + setUptimeDynamicSettings: async (client, settings): Promise => { + await client.create(umDynamicSettings.name, settings, { + id: settingsObjectId, + overwrite: true, + }); + }, +}; diff --git a/x-pack/plugins/uptime/server/plugin.ts b/x-pack/plugins/uptime/server/plugin.ts index e217b0e2f1ad8d..00e36be50d24ee 100644 --- a/x-pack/plugins/uptime/server/plugin.ts +++ b/x-pack/plugins/uptime/server/plugin.ts @@ -7,11 +7,13 @@ import { PluginInitializerContext, CoreStart, CoreSetup } from '../../../../src/core/server'; import { initServerWithKibana } from './kibana.index'; import { UptimeCorePlugins } from './lib/adapters'; +import { umDynamicSettings } from './lib/saved_objects'; export class Plugin { constructor(_initializerContext: PluginInitializerContext) {} public setup(core: CoreSetup, plugins: UptimeCorePlugins) { initServerWithKibana({ route: core.http.createRouter() }, plugins); + core.savedObjects.registerType(umDynamicSettings); } public start(_core: CoreStart, _plugins: any) {} } diff --git a/x-pack/plugins/uptime/server/rest_api/dynamic_settings.ts b/x-pack/plugins/uptime/server/rest_api/dynamic_settings.ts new file mode 100644 index 00000000000000..2235379ba6f038 --- /dev/null +++ b/x-pack/plugins/uptime/server/rest_api/dynamic_settings.ts @@ -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 { schema } from '@kbn/config-schema'; +import { isRight } from 'fp-ts/lib/Either'; +import { PathReporter } from 'io-ts/lib/PathReporter'; +import { UMServerLibs } from '../lib/lib'; +import { + DynamicSettings, + DynamicSettingsType, +} from '../../../../legacy/plugins/uptime/common/runtime_types'; +import { UMRestApiRouteFactory } from '.'; +import { savedObjectsAdapter } from '../lib/saved_objects'; + +export const createGetDynamicSettingsRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ + method: 'GET', + path: '/api/uptime/dynamic_settings', + validate: false, + options: { + tags: ['access:uptime-read'], + }, + handler: async ({ dynamicSettings }, _context, _request, response): Promise => { + return response.ok({ + body: dynamicSettings, + }); + }, +}); + +export const createPostDynamicSettingsRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ + method: 'POST', + path: '/api/uptime/dynamic_settings', + validate: { + body: schema.object({}, { unknowns: 'allow' }), + }, + options: { + tags: ['access:uptime-write'], + }, + handler: async ({ savedObjectsClient }, _context, request, response): Promise => { + const decoded = DynamicSettingsType.decode(request.body); + if (isRight(decoded)) { + const newSettings: DynamicSettings = decoded.right; + await savedObjectsAdapter.setUptimeDynamicSettings(savedObjectsClient, newSettings); + + return response.ok({ + body: { + success: true, + }, + }); + } else { + const error = PathReporter.report(decoded).join(', '); + return response.badRequest({ + body: error, + }); + } + }, +}); diff --git a/x-pack/plugins/uptime/server/rest_api/index.ts b/x-pack/plugins/uptime/server/rest_api/index.ts index b0cc38ebfb4b6b..000fba69fab00f 100644 --- a/x-pack/plugins/uptime/server/rest_api/index.ts +++ b/x-pack/plugins/uptime/server/rest_api/index.ts @@ -6,6 +6,7 @@ import { createGetOverviewFilters } from './overview_filters'; import { createGetPingsRoute } from './pings'; +import { createGetDynamicSettingsRoute, createPostDynamicSettingsRoute } from './dynamic_settings'; import { createLogMonitorPageRoute, createLogOverviewPageRoute } from './telemetry'; import { createGetSnapshotCount } from './snapshot'; import { UMRestApiRouteFactory } from './types'; @@ -28,6 +29,8 @@ export const restApiRoutes: UMRestApiRouteFactory[] = [ createGetPingsRoute, createGetIndexPatternRoute, createGetIndexStatusRoute, + createGetDynamicSettingsRoute, + createPostDynamicSettingsRoute, createGetMonitorRoute, createGetMonitorDetailsRoute, createGetMonitorLocationsRoute, diff --git a/x-pack/plugins/uptime/server/rest_api/index_state/get_index_pattern.ts b/x-pack/plugins/uptime/server/rest_api/index_state/get_index_pattern.ts index 806d6e789a8909..cec5bb1be245f1 100644 --- a/x-pack/plugins/uptime/server/rest_api/index_state/get_index_pattern.ts +++ b/x-pack/plugins/uptime/server/rest_api/index_state/get_index_pattern.ts @@ -13,13 +13,13 @@ export const createGetIndexPatternRoute: UMRestApiRouteFactory = (libs: UMServer path: API_URLS.INDEX_PATTERN, validate: false, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, _request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, _request, response): Promise => { try { return response.ok({ body: { - ...(await libs.requests.getIndexPattern(callES)), + ...(await libs.requests.getIndexPattern({ callES, dynamicSettings })), }, }); } catch (e) { diff --git a/x-pack/plugins/uptime/server/rest_api/index_state/get_index_status.ts b/x-pack/plugins/uptime/server/rest_api/index_state/get_index_status.ts index d4d76c86870ee8..9c94ef92f9b6ed 100644 --- a/x-pack/plugins/uptime/server/rest_api/index_state/get_index_status.ts +++ b/x-pack/plugins/uptime/server/rest_api/index_state/get_index_status.ts @@ -13,13 +13,13 @@ export const createGetIndexStatusRoute: UMRestApiRouteFactory = (libs: UMServerL path: API_URLS.INDEX_STATUS, validate: false, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, _request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, _request, response): Promise => { try { return response.ok({ body: { - ...(await libs.requests.getIndexStatus({ callES })), + ...(await libs.requests.getIndexStatus({ callES, dynamicSettings })), }, }); } catch (e) { diff --git a/x-pack/plugins/uptime/server/rest_api/monitors/monitor_locations.ts b/x-pack/plugins/uptime/server/rest_api/monitors/monitor_locations.ts index 131b3cbe2ab449..befa5fd7e0e55d 100644 --- a/x-pack/plugins/uptime/server/rest_api/monitors/monitor_locations.ts +++ b/x-pack/plugins/uptime/server/rest_api/monitors/monitor_locations.ts @@ -20,15 +20,16 @@ export const createGetMonitorLocationsRoute: UMRestApiRouteFactory = (libs: UMSe }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { monitorId, dateStart, dateEnd } = request.query; return response.ok({ body: { ...(await libs.requests.getMonitorLocations({ callES, + dynamicSettings, monitorId, dateStart, dateEnd, diff --git a/x-pack/plugins/uptime/server/rest_api/monitors/monitors_details.ts b/x-pack/plugins/uptime/server/rest_api/monitors/monitors_details.ts index 66e952813eb3ea..b14eb2c138a751 100644 --- a/x-pack/plugins/uptime/server/rest_api/monitors/monitors_details.ts +++ b/x-pack/plugins/uptime/server/rest_api/monitors/monitors_details.ts @@ -20,14 +20,15 @@ export const createGetMonitorDetailsRoute: UMRestApiRouteFactory = (libs: UMServ }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { monitorId, dateStart, dateEnd } = request.query; return response.ok({ body: { ...(await libs.requests.getMonitorDetails({ callES, + dynamicSettings, monitorId, dateStart, dateEnd, diff --git a/x-pack/plugins/uptime/server/rest_api/monitors/monitors_durations.ts b/x-pack/plugins/uptime/server/rest_api/monitors/monitors_durations.ts index f4a4cadc999764..10008c4f6c7eaf 100644 --- a/x-pack/plugins/uptime/server/rest_api/monitors/monitors_durations.ts +++ b/x-pack/plugins/uptime/server/rest_api/monitors/monitors_durations.ts @@ -21,14 +21,15 @@ export const createGetMonitorDurationRoute: UMRestApiRouteFactory = (libs: UMSer }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { monitorId, dateStart, dateEnd } = request.query; return response.ok({ body: { ...(await libs.requests.getMonitorDurationChart({ callES, + dynamicSettings, monitorId, dateStart, dateEnd, diff --git a/x-pack/plugins/uptime/server/rest_api/monitors/status.ts b/x-pack/plugins/uptime/server/rest_api/monitors/status.ts index 08cbc2d70e515a..e1fcaf54f2824a 100644 --- a/x-pack/plugins/uptime/server/rest_api/monitors/status.ts +++ b/x-pack/plugins/uptime/server/rest_api/monitors/status.ts @@ -19,14 +19,14 @@ export const createGetMonitorRoute: UMRestApiRouteFactory = (libs: UMServerLibs) }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { monitorId } = request.query; return response.ok({ body: { - ...(await libs.requests.getMonitor({ callES, monitorId })), + ...(await libs.requests.getMonitor({ callES, dynamicSettings, monitorId })), }, }); }, @@ -44,12 +44,13 @@ export const createGetStatusBarRoute: UMRestApiRouteFactory = (libs: UMServerLib }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { monitorId, dateStart, dateEnd } = request.query; const result = await libs.requests.getLatestMonitor({ callES, + dynamicSettings, monitorId, dateStart, dateEnd, diff --git a/x-pack/plugins/uptime/server/rest_api/overview_filters/get_overview_filters.ts b/x-pack/plugins/uptime/server/rest_api/overview_filters/get_overview_filters.ts index 5525771539c639..05376f061c05f3 100644 --- a/x-pack/plugins/uptime/server/rest_api/overview_filters/get_overview_filters.ts +++ b/x-pack/plugins/uptime/server/rest_api/overview_filters/get_overview_filters.ts @@ -30,9 +30,9 @@ export const createGetOverviewFilters: UMRestApiRouteFactory = (libs: UMServerLi }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response) => { + handler: async ({ callES, dynamicSettings }, _context, request, response) => { const { dateRangeStart, dateRangeEnd, locations, schemes, search, ports, tags } = request.query; let parsedSearch: Record | undefined; @@ -46,6 +46,7 @@ export const createGetOverviewFilters: UMRestApiRouteFactory = (libs: UMServerLi const filtersResponse = await libs.requests.getFilterBar({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, search: parsedSearch, diff --git a/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts b/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts index e301a2cbf9af9e..d64c76fc18a809 100644 --- a/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts +++ b/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts @@ -24,13 +24,14 @@ export const createGetAllRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { dateRangeStart, dateRangeEnd, location, monitorId, size, sort, status } = request.query; const result = await libs.requests.getPings({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, monitorId, diff --git a/x-pack/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts b/x-pack/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts index dfaabcdf93a063..cbd9ada027b31f 100644 --- a/x-pack/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts +++ b/x-pack/plugins/uptime/server/rest_api/pings/get_ping_histogram.ts @@ -22,13 +22,14 @@ export const createGetPingHistogramRoute: UMRestApiRouteFactory = (libs: UMServe }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { dateStart, dateEnd, statusFilter, monitorId, filters } = request.query; const result = await libs.requests.getPingHistogram({ callES, + dynamicSettings, from: dateStart, to: dateEnd, monitorId, diff --git a/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts b/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts index 458107dd87a777..8129ad70e6d7da 100644 --- a/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts +++ b/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts @@ -24,13 +24,14 @@ export const createGetPingsRoute: UMRestApiRouteFactory = (libs: UMServerLibs) = }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { dateRangeStart, dateRangeEnd, location, monitorId, size, sort, status } = request.query; const result = await libs.requests.getPings({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, monitorId, diff --git a/x-pack/plugins/uptime/server/rest_api/snapshot/get_snapshot_count.ts b/x-pack/plugins/uptime/server/rest_api/snapshot/get_snapshot_count.ts index 697c49dc8300b1..4fda95bbf86da9 100644 --- a/x-pack/plugins/uptime/server/rest_api/snapshot/get_snapshot_count.ts +++ b/x-pack/plugins/uptime/server/rest_api/snapshot/get_snapshot_count.ts @@ -21,12 +21,13 @@ export const createGetSnapshotCount: UMRestApiRouteFactory = (libs: UMServerLibs }), }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, - handler: async ({ callES }, _context, request, response): Promise => { + handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { const { dateRangeStart, dateRangeEnd, filters, statusFilter } = request.query; const result = await libs.requests.getSnapshotCount({ callES, + dynamicSettings, dateRangeStart, dateRangeEnd, filters, diff --git a/x-pack/plugins/uptime/server/rest_api/telemetry/log_monitor_page.ts b/x-pack/plugins/uptime/server/rest_api/telemetry/log_monitor_page.ts index fca1e6c8d5d46d..71d6b8025dff2e 100644 --- a/x-pack/plugins/uptime/server/rest_api/telemetry/log_monitor_page.ts +++ b/x-pack/plugins/uptime/server/rest_api/telemetry/log_monitor_page.ts @@ -16,6 +16,6 @@ export const createLogMonitorPageRoute: UMRestApiRouteFactory = () => ({ return response.ok(); }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, }); diff --git a/x-pack/plugins/uptime/server/rest_api/telemetry/log_overview_page.ts b/x-pack/plugins/uptime/server/rest_api/telemetry/log_overview_page.ts index 37ed2e5ff5c2cf..de1ac5f4ed735d 100644 --- a/x-pack/plugins/uptime/server/rest_api/telemetry/log_overview_page.ts +++ b/x-pack/plugins/uptime/server/rest_api/telemetry/log_overview_page.ts @@ -16,6 +16,6 @@ export const createLogOverviewPageRoute: UMRestApiRouteFactory = () => ({ return response.ok(); }, options: { - tags: ['access:uptime'], + tags: ['access:uptime-read'], }, }); diff --git a/x-pack/plugins/uptime/server/rest_api/types.ts b/x-pack/plugins/uptime/server/rest_api/types.ts index a0566c225eae7f..8bb1e8a6a86c0b 100644 --- a/x-pack/plugins/uptime/server/rest_api/types.ts +++ b/x-pack/plugins/uptime/server/rest_api/types.ts @@ -16,6 +16,7 @@ import { KibanaResponseFactory, IKibanaResponse, } from 'src/core/server'; +import { DynamicSettings } from '../../../../legacy/plugins/uptime/common/runtime_types'; import { UMServerLibs } from '../lib/lib'; /** @@ -66,6 +67,7 @@ export interface UMRouteParams { clientParams?: Record, options?: CallAPIOptions | undefined ) => Promise; + dynamicSettings: DynamicSettings; savedObjectsClient: Pick< SavedObjectsClient, | 'errors' diff --git a/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts b/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts index fb874edebee609..676aced23a25e5 100644 --- a/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts +++ b/x-pack/plugins/uptime/server/rest_api/uptime_route_wrapper.ts @@ -5,6 +5,7 @@ */ import { UMKibanaRouteWrapper } from './types'; +import { savedObjectsAdapter } from '../lib/saved_objects'; export const uptimeRouteWrapper: UMKibanaRouteWrapper = uptimeRoute => { return { @@ -12,7 +13,15 @@ export const uptimeRouteWrapper: UMKibanaRouteWrapper = uptimeRoute => { handler: async (context, request, response) => { const { callAsCurrentUser: callES } = context.core.elasticsearch.dataClient; const { client: savedObjectsClient } = context.core.savedObjects; - return await uptimeRoute.handler({ callES, savedObjectsClient }, context, request, response); + const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( + savedObjectsClient + ); + return await uptimeRoute.handler( + { callES, savedObjectsClient, dynamicSettings }, + context, + request, + response + ); }, }; }; diff --git a/x-pack/test/api_integration/apis/uptime/feature_controls.ts b/x-pack/test/api_integration/apis/uptime/feature_controls.ts index 91ea1bedb061a7..4c3b7f97c9544f 100644 --- a/x-pack/test/api_integration/apis/uptime/feature_controls.ts +++ b/x-pack/test/api_integration/apis/uptime/feature_controls.ts @@ -40,10 +40,9 @@ export default function featureControlsTests({ getService }: FtrProviderContext) const executePingsRequest = async (username: string, password: string, spaceId?: string) => { const basePath = spaceId ? `/s/${spaceId}` : ''; + const url = `${basePath}${API_URLS.PINGS}?sort=desc&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}`; return await supertest - .get( - `${basePath}/api/uptime/pings?sort=desc&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}` - ) + .get(url) .auth(username, password) .set('kbn-xsrf', 'foo') .then((response: any) => ({ error: undefined, response })) @@ -51,9 +50,9 @@ export default function featureControlsTests({ getService }: FtrProviderContext) }; describe('feature controls', () => { - it(`APIs can't be accessed by heartbeat-* read privileges role`, async () => { - const username = 'logstash_read'; - const roleName = 'logstash_read'; + it(`APIs can be accessed by heartbeat-* read privileges role`, async () => { + const username = 'heartbeat_read'; + const roleName = 'heartbeat_read'; const password = `${username}-password`; try { await security.role.create(roleName, { diff --git a/x-pack/test/api_integration/apis/uptime/graphql/helpers/expect_fixture_eql.ts b/x-pack/test/api_integration/apis/uptime/graphql/helpers/expect_fixture_eql.ts index 45cc9011773a9c..d5a4f3976e0798 100644 --- a/x-pack/test/api_integration/apis/uptime/graphql/helpers/expect_fixture_eql.ts +++ b/x-pack/test/api_integration/apis/uptime/graphql/helpers/expect_fixture_eql.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import fs from 'fs'; import { join } from 'path'; -import { cloneDeep } from 'lodash'; +import { cloneDeep, isEqual } from 'lodash'; const fixturesDir = join(__dirname, '..', 'fixtures'); const restFixturesDir = join(__dirname, '../../rest/', 'fixtures'); @@ -21,14 +21,26 @@ const excludeFieldsFrom = (from: any, excluder?: (d: any) => any): any => { }; export const expectFixtureEql = (data: T, fixtureName: string, excluder?: (d: T) => void) => { + expect(data).not.to.eql(null); + expect(data).not.to.eql(undefined); + let fixturePath = join(fixturesDir, `${fixtureName}.json`); if (!fs.existsSync(fixturePath)) { fixturePath = join(restFixturesDir, `${fixtureName}.json`); } + excluder = excluder || (d => d); const dataExcluded = excludeFieldsFrom(data, excluder); expect(dataExcluded).not.to.be(undefined); - if (process.env.UPDATE_UPTIME_FIXTURES) { + const fixtureExists = () => fs.existsSync(dataExcluded); + const fixtureChanged = () => + !isEqual( + dataExcluded, + excludeFieldsFrom(JSON.parse(fs.readFileSync(fixturePath, 'utf8')), excluder) + ); + if (process.env.UPDATE_UPTIME_FIXTURES && (!fixtureExists() || fixtureChanged())) { + // Check if the data has changed. We can't simply write it because the order of attributes + // can change leading to different bytes on disk, which we don't care about fs.writeFileSync(fixturePath, JSON.stringify(dataExcluded, null, 2)); } const fileContents = fs.readFileSync(fixturePath, 'utf8'); diff --git a/x-pack/test/api_integration/apis/uptime/graphql/helpers/make_checks.ts b/x-pack/test/api_integration/apis/uptime/graphql/helpers/make_checks.ts index 02ae194be98a7d..ae326c8b2aee0c 100644 --- a/x-pack/test/api_integration/apis/uptime/graphql/helpers/make_checks.ts +++ b/x-pack/test/api_integration/apis/uptime/graphql/helpers/make_checks.ts @@ -7,7 +7,7 @@ import uuid from 'uuid'; import { merge, flattenDeep } from 'lodash'; -const INDEX_NAME = 'heartbeat-8.0.0'; +const INDEX_NAME = 'heartbeat-8-generated-test'; export const makePing = async ( es: any, diff --git a/x-pack/test/api_integration/apis/uptime/rest/dynamic_settings.ts b/x-pack/test/api_integration/apis/uptime/rest/dynamic_settings.ts new file mode 100644 index 00000000000000..f4dd7c244f8b51 --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/dynamic_settings.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { defaultDynamicSettings } from '../../../../../legacy/plugins/uptime/common/runtime_types/dynamic_settings'; + +export default function({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('dynamic settings', () => { + it('returns the defaults when no user settings have been saved', async () => { + const apiResponse = await supertest.get(`/api/uptime/dynamic_settings`); + expect(apiResponse.body).to.eql(defaultDynamicSettings as any); + }); + + it('can change the settings', async () => { + const newSettings = { heartbeatIndices: 'myIndex1*' }; + const postResponse = await supertest + .post(`/api/uptime/dynamic_settings`) + .set('kbn-xsrf', 'true') + .send(newSettings); + + expect(postResponse.body).to.eql({ success: true }); + expect(postResponse.status).to.eql(200); + + const getResponse = await supertest.get(`/api/uptime/dynamic_settings`); + expect(getResponse.body).to.eql(newSettings); + }); + }); +} diff --git a/x-pack/test/api_integration/apis/uptime/rest/index.ts b/x-pack/test/api_integration/apis/uptime/rest/index.ts index 67b94f19c638ff..712a8bc40c41c3 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/index.ts +++ b/x-pack/test/api_integration/apis/uptime/rest/index.ts @@ -5,18 +5,42 @@ */ import { FtrProviderContext } from '../../../ftr_provider_context'; +import { + settingsObjectId, + settingsObjectType, +} from '../../../../../plugins/uptime/server/lib/saved_objects'; export default function({ getService, loadTestFile }: FtrProviderContext) { const esArchiver = getService('esArchiver'); + const server = getService('kibanaServer'); + describe('uptime REST endpoints', () => { + beforeEach('clear settings', async () => { + try { + server.savedObjects.delete({ + type: settingsObjectType, + id: settingsObjectId, + }); + } catch (e) { + // a 404 just means the doc is already missing + if (e.statuscode !== 404) { + throw new Error( + `error attempting to delete settings (${e.statuscode}): ${JSON.stringify(e)}` + ); + } + } + }); + describe('with generated data', () => { - before('load heartbeat data', () => esArchiver.load('uptime/blank')); - after('unload', () => esArchiver.unload('uptime/blank')); + before('load heartbeat data', async () => await esArchiver.load('uptime/blank')); + after('unload', async () => await esArchiver.unload('uptime/blank')); + loadTestFile(require.resolve('./snapshot')); + loadTestFile(require.resolve('./dynamic_settings')); }); describe('with real-world data', () => { - before('load heartbeat data', () => esArchiver.load('uptime/full_heartbeat')); - after('unload', () => esArchiver.unload('uptime/full_heartbeat')); + before('load heartbeat data', async () => await esArchiver.load('uptime/full_heartbeat')); + after('unload', async () => await esArchiver.unload('uptime/full_heartbeat')); loadTestFile(require.resolve('./monitor_latest_status')); loadTestFile(require.resolve('./selected_monitor')); loadTestFile(require.resolve('./ping_histogram')); diff --git a/x-pack/test/functional/apps/uptime/index.ts b/x-pack/test/functional/apps/uptime/index.ts index 273b7659b5f464..446f28d1829262 100644 --- a/x-pack/test/functional/apps/uptime/index.ts +++ b/x-pack/test/functional/apps/uptime/index.ts @@ -5,23 +5,51 @@ */ import { FtrProviderContext } from '../../ftr_provider_context'; +import { + settingsObjectId, + settingsObjectType, +} from '../../../../plugins/uptime/server/lib/saved_objects'; const ARCHIVE = 'uptime/full_heartbeat'; export default ({ loadTestFile, getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const server = getService('kibanaServer'); describe('Uptime app', function() { this.tags('ciGroup6'); + + beforeEach('delete settings', async () => { + // delete the saved object + try { + await server.savedObjects.delete({ + type: settingsObjectType, + id: settingsObjectId, + }); + } catch (e) { + // If it's not found that's fine, we just want to ensure + // this is the default state + if (e.response?.status !== 404) { + throw e; + } + } + }); + describe('with generated data', () => { - before('load heartbeat data', async () => await esArchiver.load('uptime/blank')); - after('unload', async () => await esArchiver.unload('uptime/blank')); + beforeEach('load heartbeat data', async () => { + await esArchiver.load('uptime/blank'); + }); + afterEach('unload', async () => { + await esArchiver.unload('uptime/blank'); + }); loadTestFile(require.resolve('./locations')); + loadTestFile(require.resolve('./settings')); }); describe('with real-world data', () => { before(async () => { + await esArchiver.unload(ARCHIVE); await esArchiver.load(ARCHIVE); await kibanaServer.uiSettings.replace({ 'dateFormat:tz': 'UTC' }); }); diff --git a/x-pack/test/functional/apps/uptime/locations.ts b/x-pack/test/functional/apps/uptime/locations.ts index fe9030109145d8..7f6932ab503193 100644 --- a/x-pack/test/functional/apps/uptime/locations.ts +++ b/x-pack/test/functional/apps/uptime/locations.ts @@ -15,7 +15,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const end = new Date().toISOString(); const MONITOR_ID = 'location-testing-id'; - before(async () => { + beforeEach(async () => { /** * This mogrify function will strip the documents of their location * data (but preserve their location name), which is necessary for diff --git a/x-pack/test/functional/apps/uptime/settings.ts b/x-pack/test/functional/apps/uptime/settings.ts new file mode 100644 index 00000000000000..22d272bc9aa367 --- /dev/null +++ b/x-pack/test/functional/apps/uptime/settings.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; +import { + defaultDynamicSettings, + DynamicSettings, +} from '../../../../legacy/plugins/uptime/common/runtime_types/dynamic_settings'; +import { makeChecks } from '../../../api_integration/apis/uptime/graphql/helpers/make_checks'; + +export default ({ getPageObjects, getService }: FtrProviderContext) => { + const pageObjects = getPageObjects(['uptime']); + const es = getService('es'); + + describe('uptime settings page', () => { + const settingsPage = () => pageObjects.uptime.settings; + beforeEach('navigate to clean app root', async () => { + // make 10 checks + await makeChecks(es, 'myMonitor', 1, 1, 1); + await pageObjects.uptime.goToRoot(); + }); + + it('loads the default settings', async () => { + await pageObjects.uptime.settings.go(); + + const fields = await settingsPage().loadFields(); + expect(fields).to.eql(defaultDynamicSettings); + }); + + it('should disable the apply button when invalid or unchanged', async () => { + await pageObjects.uptime.settings.go(); + + // Disabled because it's the original value + expect(await settingsPage().applyButtonIsDisabled()).to.eql(true); + + // Enabled because it's a new, different, value + await settingsPage().changeHeartbeatIndicesInput('somethingNew'); + expect(await settingsPage().applyButtonIsDisabled()).to.eql(false); + + // Disabled because it's blank + await settingsPage().changeHeartbeatIndicesInput(''); + expect(await settingsPage().applyButtonIsDisabled()).to.eql(true); + }); + + it('changing index pattern setting is reflected elsewhere in UI', async () => { + const originalCount = await pageObjects.uptime.getSnapshotCount(); + // We should find 1 monitor up with the default index pattern + expect(originalCount.up).to.eql(1); + + await pageObjects.uptime.settings.go(); + + const newFieldValues: DynamicSettings = { heartbeatIndices: 'new*' }; + await settingsPage().changeHeartbeatIndicesInput(newFieldValues.heartbeatIndices); + await settingsPage().apply(); + + await pageObjects.uptime.goToRoot(); + + // We should no longer find any monitors since the new pattern matches nothing + await pageObjects.uptime.pageHasDataMissing(); + + // Verify that the settings page shows the value we previously saved + await pageObjects.uptime.settings.go(); + const fields = await settingsPage().loadFields(); + expect(fields).to.eql(newFieldValues); + }); + }); +}; diff --git a/x-pack/test/functional/es_archives/uptime/blank/mappings.json b/x-pack/test/functional/es_archives/uptime/blank/mappings.json index a1b0696cdaadc6..7879c82612a966 100644 --- a/x-pack/test/functional/es_archives/uptime/blank/mappings.json +++ b/x-pack/test/functional/es_archives/uptime/blank/mappings.json @@ -6,7 +6,7 @@ "is_write_index": true } }, - "index": "heartbeat-8-test", + "index": "heartbeat-8-generated-test", "mappings": { "_meta": { "beat": "heartbeat", diff --git a/x-pack/test/functional/es_archives/uptime/full_heartbeat/data.json.gz b/x-pack/test/functional/es_archives/uptime/full_heartbeat/data.json.gz index edc29c000e2e12cbcb823bce6b5da63f32602517..250db8c8471d795ea4db803706ad31291984e5b9 100644 GIT binary patch literal 128173 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 z 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 z z(4r5M!BOit62n6YJ~^Qa$#7j3zSjT z{O&V|*5dT+WK-D-K?t?A-Pw}w03*3&_gi8abKOqEfQbNG0QxsMSvO5&kJsWTw_Zz$ zQ1Z;(57i%r#cU})Ga_!*d-%{9$N>hUmAah&nIN(Riy=@YVW2CN=RbPp?3F<)ii4cA z#S^c0jxy4w!UYBq{B;cw9Q_pv0cCQY>4JolRWT(rGA)*KRZDp2px(Q#!+V&X)t zm~!jc7$pShydrdUV35Ml$bEXY5`aZ*rT=x{^B0MFH*E2iANKnx%Jc4Eja($h=UF}$ zmGBNOBOj>F09CI0g>g-WX1X$xzUV6JT2d+zymI4D6-(JyvQY)5xXBYh}3nP@`ouJ?fM3&-7Vj39@RPV{7D z^6*q@z>l*jv-{~n2N*)tT276^$?Sggsqsu9t|~;{aS**Icz^V)#j~;EfXJmG8fKJ=2nW-Gw; z-}drg3{iOwhAq=RPCxA{ZxE47{h}*Ea+8zl4sdubjJ%k+<2+1~Ou-?0bwOI5OhwL_ z>tKI1=bwN~|Ftgw$rVQ|8P8jegxvq!Bot76xE6`5bG3%=>IJ?g+Kg=X#Rd?n4&Ph_Aji&cf!OZ|;CT z8NJb71kbCF17zDS%FzrQ(`vM(YS96_(j|BnMal&Nt;9h<=>y!q+r9If0W#%hcAXO5 zzv=9-l;4G^h64deB6)}$Nq8=vRZM}%PhF>VJb!5sf4ZA-Y)0{y=m4CAz?*~mZ7zd= z_X++^^&1tvyMYV&T@`r(^;pgF=CIWnL4!+YadmKzR#vl~J3L;3O^&rPY)siJ^1ZNR z04~TYAS*(QmQJ6Y16^h5rLt1Qu^sx$Ze_r={SrQX3kZ?XI}S}Qq(fyi8fogen&r+$ zgBU1c)C}?oO8;vM+kvrlz{=#KyHg?0^4n(RXx9q8s3h_|jPK46J6K1gC0>D*z*gdJ z4PH!B!V8;MQeoR)qDkPS4GuLQqS)V^L^uz;McA{&w=u})dRck9l4R|GBLVn8gs9K} zk#+nw6DH0-3&Iu$o`aMniMV{!fXWbF_%Yad^}*(mEsXbR<@A_ts?lt!+bgDK8=2~% zDPs$B55^y7f~8oSxI$jr8F+H|T{p2S=D+tW!&I*b%-pyITrvCjgPLO_U7(SA(t-da zb1QBNH^T@_PzT)k_oj*<0!=Da%8KDO+Wz{;j373iU$SXRPORrsf{sMhLgsFG~WdF$E>lnU!Yc0%OAVvvVrmw4TxVN>#M4W)Lh{wS6BQ^l|>^y zc%-GsaZ8bNT`9!5QEUXmgOtJeb2~p3fProby)OEN>qy7fKt?Ki`_W#nt!Jc`AKSq{ zy+3bbXc>XqjwYMZEx7H&> zO15#M{*nz^WpSMEgl=2Ouqvm9;ey2hPY)1G=_ zD}P$s&Nm_c(AhRdl!;gg%t9WfjZ<>uL)BAz-81p8=GHwpfC)dCDF@G0-ry6j6#%sv z7)u(}Vb;8Md*9pd!S)P~Jg3kWFyhCESQ>QrNwmmXDq}=CF%1o#o7@sLX!eR{XXDyH#q(DY# zye>arh~a&{yR7@-vqevF?yHQuN1<9hQRm6#g@xa2RYPlr*zF&ryO}f+PD$?=qAYUv zGZZ-T08a7H_ux=k>q%{M4oM0|Fj}vluG7=)qQ{$=8EKB~QS+vC8MB7HjF`xUwzra= zKt&zsJzM5YItL$^{%P}_d|7(YaA~pFf8gpt`JvL23Evaiqn|$te)O{|r`@#w^JLcN zE58>N)4Ch(7+W7xKGtijVJQ4k@8PpMX_x=^#VzJprPj=4$Ehvy@x5sZ5rZnk=Gf^fKGxJQD6*N_*baoILtUeu&0eT?i$XdzZjb@vz? zqVjhd;g{n^dvZwB-fbW;8Y2MtD_7g|*%-uG%RJ;9HW=4eAKuW86hRhTMcg*3;vOpG zrF25}(8-i~go1PAo`h{l6XGUK|p`?(O0*9pR|x)1m1EgK(6 zleVG*6#TN5V@WWr6qN%bCuZ?n5^KK2%jT@?m>pE3zc9|#53 z@Ib}!kRR8P7}H%>q%h2qRvBY3`38y>s^=l*f>6*x3R#Q(32x!Dt!@l+zwlMWIOGq6YO%V6;vmMsq!ROty6tSbZiq?T_# z(X%Z$)UHoucOZ9}X2dVn029BnYlrFEE{>rv;RtvrZ9y3(!4?2}-!4M` z=J^|(>VZ{((rn?NP~g&VyQ{5nZwU3Cn(^fiY)kl+UpwKp!6tlZqN- z6tNj`ys$X$20q8#@J07Oqq;EZS+?%Qy;=?!@XQOhBQf- zaSb9Gq2_!;fT^%dzl?Tq;dRx38$M=-#47cZgW{KJd8Dnl5$%FBf0y#38aQl7>|`x) zoVOTBKf50q%VRyx(EP!Y$gL6Z|9ony^+vHk>!hZIbE0z~RT49?T39aX?AVcTat}?0 zXYbe89}y(Op7B#GSOXkh(~%$pztcphHxfPy#y;{Is&?fL9}nGmJ7!DS_G<2(1Yq@{ zm7qWd9GUXIT24%993z&%t%~LDO@QRXmcd#g(k7r9090afmteBa1P6ey#kD z7m-)XVkA#zM3J#+Ev|GgHE}ZMugQzYJJz~VuVFn1HT%_sJWoO zJsVn&2*|Dt|9+R7nc0^P zpy=WAov7CuwPq|{94Q$m4DuH&7OJjsm)iOZWsilovHJD1sEc>RvUVvcgQh}XL={RuL2m5xhHy^H-0;$wfC(1eYo=G?SepKv`62o)SKijLn zx0ebbL=D{F>_X7gNg0rad>a4?qwOcGJWRT?)qarA@eZtg?}vz8Cx~?TExScI{@B*J(PD{x594rVTe}8`tD~M%AH#&*V$FR{QP$?t zKFwH7y@TCBy}Vma)iqYTqcaX@Ygsnx;2gcN)k)z~duOt6#(#gSDDSrx8B-&ivQ7lz z_Kdn;xobonf5`smYU=J57V5L9Z)gO84#16pN9x0|=7L#Ci_p&uICnSXpNH){^TWEz zm$T>yk5iY0zN(n+j>*fX-@7to@)}z_nT8W2_CWKc3At?=84z#CRKuODFDxt3Ba;wl9Tb* z6RFUH8*8{TOhn^7mOZJY%4+rLim#)j5@lqI%hd?51)5I@Y!fDE{*yyXpIH60C4H-s zXl@q77bj-u-eQN#-o2ZIJnz-TU?td*D#{X-Fyp3i_0b{gcOi& zFsUEkDh$+<7&UFi+{f!R1-df7tSgyaf>X94z0qNI+#)j+c{mj&_!nsL(nUgULfEt+ z<<8-=u#4F`VP*{W67gu}GuQBJ%Dxj!Lsv+xxrKYio9EH6s%`SpN*pKHGS3l3-mwu< zW#f3$CA@B`)thd`9KU}*r0C)!m2KvUNjjHHTF45v_NFOHN9E4;;7?y^QH|H$VV}e= z@|pdmx1*Axm(dotFQFkNEq_Rbx|^+g9g}?|J3t_y8N$YzG_n13~XoR_!CW zq#r6qWV}xmRH{gfY&+nLZ>quk&b{;$KmWX@L0J5W`SQ>cX4~hY%or7Uy7>N&{Xat_ zfQ`;!g^uT9wtFJNb5-dySqxW#_b*-0+xkKwWBu0mu1ct14ddic*()YH;lWQ58xdNm z&-M9??O5bM$|OB=V9=91(9GW1;P!)2F|u96991&;DbXut*34*ds<8_ZQhWE~+RVX$ zp5+x3)YImWU$^w@VvtjHwb{8Op!k`zNCxUDdO2-z{s|5BY2HudBM!liu*xmP`Pu@1 ziAdXWvjcR{pR(%}RAKv*_gr!dxYk(iZAl%E1T|bO)&2>=ds{_s7X>Qpt{b6F^xff_ zfiq`zC~!IyXj#vN9`Pdou10u4fc&R%rjBUOK>Nq}5~V1P2Rcv!Mom{r$2(zmFT03c%EvXuvwpEjU~{UG zcvj$QT*jO2d6RJ5(u_1v2~n|@3~t*mT5g*e33`EB~(V6wUYP zLh!3B|GN~5pqv{X^vxVTh-=xVf&2P!FU~H@lO+k34Q~a@hEqJ%LrPqYs#Cx)Xm8{8 z$RYCOsHTyvh6X)8=dA4t$=x=(!Irv0&y^i7ZI4&m!f+jeFKf{MOT5s2)P1gi9%Su5 zd=0*c8R>*onpR*6X&2tHVsqL~=ycwqxJYLCEnKOV;S7KY%I{+TG1Ja3;+{||47f?2 z^q(>9p0CJjTN7sO%#2<)i11gMOKZ>vsu&vFwTVfqOkb2SKWXk?T0HsB)RvoJr?tLq zphWoQ5dEd6v(V44Upl9168cc*k-$7;4xu=YNL*mUm+3H}nUZ99&0&O);~;$TVEyX^ z($Q}Qy0<3ij7C9HQW{B%di1G!wA1>)hBzNplIStOxf~xP(kpo%$9w&Bcn6H*Zdgnp zpqB(~(`6nq#A&pT_PYsQaWb4S<*FU5-xqu60ypXm8oLFLcEVPF#Tm7K+u4!ChW<|< zf=Mf|>Y;UC-=&=9glB#4R*@P$NA=mH+HJ)beSc+rMsA)F3%Y$WNv&6rb37a}-e(Aj zqsqnNc@dXgZ{7rF?mD^gd+dCrbNi2t)6$unLQ@&(Bp<-f4xd)?D<}4JX31#eDQy)dW1o4vOjCM1 ziahqEKRA5|=#-YT`&-<0Wc4qjepf0gWjR&4u>8wc+XwdF{}*R(9uH;v{|(QaGh-Ip z7)y3z$)3iNwKVo62}PEcv4o23rHC23Y$LLTMz(|!N=h0_MIj`qOHA2Qky5Di97EUd zcfX$B_kNz&egAd+bzYlTtcqt}7rPJ=X)5EwWRipzPY3TY z@w+{}L3-^@xbmmjn|5gZjL1{y%lKUb(1#1x((x4$8QULXLO_{|zZzf1ui;QK@l}A==39JbR`S^QidXr2!u<|* z>9Ke>dchfMi4kVxH&c1}sXjS~qadh^m)MMdeztei>?(_=d(*}b}vA+h5;T&AzoIMZf zsY~W4E~+LR1ZIFacf!FY^%32_DNX zihw8cXqyDvwhR;vZPdJX$Hm*)~9q)Omb}A2f|0}11v(z!IAgZ@QM>{<9`>Sg^1V`wI)TsB; zNvx@`z@EdmcJqyhB(Wr>B-RC05e!7X(RuH37o!h{r5T_7+ii?5v9N^hIZAWqnUhhX zq2&DSfm+vsCA*O!3wTpg0AIi={tMTxF<22jg9%o^*hSadOXu6L8jV;Uza5V!68%2n z!`X9cT}TRo=LTFI{mbVrhxas0Ysbq!;~6i9kf-r`b2yC)xXZ>=eVmVnTgayT;WFvyiCY?e_wJLj;C!%=r&-p5rj~&B z!{F*-rDv|?mmhw)J!qsSw^hH+4W5K7@et?h*>%gZVn-Rm`jI}Gd2iG7JDiE#>6zwr zEXJpKX&izKYwt@Ikjbw{e7}CV+Bh>?EzxtCNL5bAD2Vb6slJEeah`$cZebtR0bL^W zxNnz*M!CUvMb0e}McxW8UbP^Ut;Nad8M`##;-plB22ej`zG!ok9l#4WW zT%|Pkv8uBU5 z@Ch)?x&R{O36Wt$k|t(l`AJZz(XIUiqR%}m=9A`BY^b#U9F@#S^V=#cfc92#47;Kk z14|$T<5zCh$#0(T!nB2oKJ7;m!nSDW9p7GhhsfGzQFLzlfaBuW5W=pLghy0Vz${3L zPnBT9NWf8p15morfTkoO2g*zC%n_v@6JWgUpz!843_24zj&KKJoW<`}P%5WkVz+K8 z&QObf!G(YpB`**0YfbicCL;J~lzsi%6kJ=kF0<)+b?>U#%)F5WcUR;InhKNZE==Bk zQ>9&;VFX?fHgW)t4nx$gNy)ltYG-=I7 z#x*jHQ};#A3&5VRbzI<-_CzPo=1M@|D)qCPv2|1t@q0g}W%vHU0nCT=%F7KwU6q1r`w*H`CRJ1 z_&P~|Dnkm?z~_SuFoNZ=1j9)kTj*ip?!TPgAIt0t?%cZ1yC+NI*GxD#vrdj^iTFA? zyXg@NN-q*wzd6uE&&ASn97PrtY%djla}HGrqArMY3A}m^Z?AhdEz~@m)YkCuP^d1$ zs~DjegLoXo9Ll0CHC7_T`yatc7@!~lPeW?yXSq0YXW!Xf)O#KA*4e$Np*?87WbJt_ zj?^Zdn;%OZ@h%+`WMWR00z%u<2UxFwcZ#ltB!s_`qkGPHF*`rky=(ud^wC3br+j6D zCgt#`uM83sdBBXS+7jczvvN`wx%tNO9-|ub)Fr%zdp(GWDT41wY79j5~Ys^GUVt4pc74pu#y{1M|@P74azU?N%+JtxulgOy{9BXchM_*tQ^~z?soYV z`lh);@QCZPEOOf#E3sGnly-9ra@Y!{_E#-pa^Yb%(&4ilykk-#Ad~EUC>>1AhYjm? zehIT=+Q0XQvdK_~CGklWu<|$B-lnqaVg7C5d1o+t4o_C$Bt%M?={@3whhPtI|Dq0TnifOMQqj&Z%@?z(t@jY!vnXYua8PyTj# zN*%Je_EBPSz2K(n1#&BUyyIBpivmy6rqh}R@->8}|9)^DSgRF*;Hg%bt_7jTZ^;b3 zfd_i0l434~5zk2?ab$`(W<{AEY)nv$i-+_uA14Wc0HX)i0DM^kt-TXnPh|Q1(WjL( z%fTbQxwged$%fZ4|AksJWI&G`@1m^M zeNLC{>1iynQtX!$DQtOlHTIIqPfiKd=q5a_SZd#1MUwl6eA>1^z6idD*ZmKEA(*jI-Php!T zy|LYOhDia1qIW4j#gUVQ7y6AmbONPs@=6qx!H++a@Aq6uU}whp#ohrioy(guqJ8ZO`AiABrDiX z9;X!;wL!vgc3KY{O#p!s$3Aa0Nnv<^ z{GmmjU-Jtz0BrMSK!f(QPd!RU?3iKCpq%_btz_uU`NxJ*VNX*&d(52`!1!(#y}O@P zahmTUnq4v$f0Dgdz;InJ5(n=c079)QH^DmFyq({?NLQ)QXF`z>&TEXEXLnR9_(5PW z!d;~ULJfn<+&3>HRnzXg zI$5!Jx7R>7O(0)oh>b$o+W=VQ#6u&fN9QLvlML#59DBiNn!7GQ_6;eAkIT@w*#F4o z8}q4(WIPJ=l2vaOX05I_>~lTfm0zi`TS~FqAgIeMUy*eQ!SQR!qFi9N@7_1Q+ZxF< zcMx&7FVjqu#gz2kiaXRG^?^*OGyo12j3dqC0)_(Q66E>oDKZaV1dgm216u1DwbR5T;gG)9>_vYjJl!H3pju}T?a_hViWjtXZa>mxNH`3 zsDbDC)K!6qk5zu*g7}jpJA!lTJ(uaIJQ#}QL@_`6UIYel=H0CJt8wdCC%T}_TMr&3NuN)ZJ5;x_CH^F16nPnzeD zG>WBNW?@m_W&5-7G&OCr@(W)4t4Xq)F02lHl;8ZJ4asTOj!oCWIQ?maFXK%9fSb2$ zPztKBX3M|{3-L?U(pw#w(`logaS}YCxSm}SizsurI<63~x@6&v)#p(PQxCHi$LUr~ zg>xe7dz8p;o*@#04?r}^_1*+Gq8$uEY=ujyXcf~@8p9xh0ap6=;~LfXuoW|+FO$?W zS}et<%G-KMbTRpC(2FD%Ho5C8wQt7L;XVB1$}!`NoJm?cbLhO~@dZCN$hOD{+W^_5 z8c%z6n#7E_B{zvz5nbYAn&u&Pte^~i zw=1$fGDAA>F{0QQYQQy{Nw*0~#{*zeE&H~j-0+b#x9dm`y2UH?(2HI3Wkj6?77=w; z!i?hfuhR2ad&SG~5o=_H&U>Qn<6n2Jkmi=iH@nitieep>+!wt&9w+ra&bYqE*|?8Z z2vS?~@;Qh$k-F~2A9FCBopOGZqy?!AF_>&`tTX#m0RkI>cJXgX=(>FSf~rasn+f9g4nqlnw+{p?T`t-DrcSy z34i0ty<}9Q0@9*%E2pVRiz=OyU05bpP=F$Mffan{#}}?ii~v(IHc4Y_Ub16NgM4zw z&{`brwz9y7eFp>Q6P_H#NvCt3zD`Q|;rMi6?<*N?VUF$l6F!GMJ^0#vS-oH<1v?Rn`Yh#kWQGYs@2kD z?azSpWziZ&OV{X8Ga7BX+i!0o3{fkFa#PeXqPM*D*(`+DeJ-bnT=!M6L8XlEr)1;w zOxe?4QkdgRoH!{~dvREgqA(89&fDOcAuuZg5r=U}M04GGc~mUoLeCD0+iu&-Q`8q` z7CeEkmn1Uzf|+El#nz_Fb74ZFS8goDAnxf>6#ii&RU}Px*Zq8(fP=DGc6D=7g}vHz zTYb*7XK0Qq;ldi06mhJs!49kdl`4+xkKd%CqUcx4iR2=9mo}%U=&>yLxU1R=WvpuM z=scA?3Zrr1g|Sf7hi({|%me*t%raq*sClBu&My#`^&*kE^7{^%cr!y5h#7s|P+zNN z{RH&)i8&eh3Gg7{1@{qfA_E3eGd3}T+gDL*WCm$0rnj3~1AjM1F`^-CzcBbUCu{zx z!<}Q_l)9H`J7m!x-(LJBsSEp!2CyAC5{fy(B*ayp_kLBo-$oJBp8%P7O$ ztuMhbgn}kR89lYQ#_KLHnj?OtC1Wq_I*2hlg{Qwk=J~g7+soJ;(En5jU3iYuNEanx zMa<_WbivsjwGL+xZ7Q{R!_|`;ZLx-iG%t47EMStle`Z$c9419PTsIy6#^vhWI1q<; znhb>+T2#g&Ui(CUT{5)AP_}@kqT9zpj72RmLKk0vPZV2KL-7{H&qLWobG34~)}x|b zeZUg@0>XqYXa$UeVh z`hEOt$LAvg8@W$Tcm7B2(--Nbbt(uK`>$q`^#7f=`Qv|THYpZ&4U)UISGi0qZ8&Vu zQuXZbGXeccX&OH~hHMQ&TNURBk6c@~s)L-H&YSxVP`h93aj%_AGc23&WsBO<~9 z6*Eir&x3S2dh(WrvG04Wg>0zg`Cl^MP6+88GlCo%=Q}dwbz)EN9n_OADkzKR=Q>KK z@SCQ%`?0PE)?ytwH88vB6R?k58-s?oL^t)&OtA@1>PQ_5VWs^L^JV~T;TeV_T+2(F zjg6yB0-4E7x*-OO;9|Gdcn6XPRhl>I&j9aOo@{PIN#Gv|PTMd!;!CFNDo zUi0W+^IvUU+Y*)4z_TTeh)ilNKCjcHZW>S?Vrv%^wS*Kk&ziT8m^IFRb!2aCmG92s z-^MQ5%3a;&nEPU{3yeP|NY3u*5YbLX9vKXhyhv0DG&{+QdF@+TMf(`Xl&SmSiz6C> z=ibGU&vvvK=)0A3qmTO2#*Aqg0pa6vazMf?fg;prPRUWPA~)?TX?ZM30%a*l+md-E zQP#~pvHsl0wkh#!WBSE?Vsl;Btb~2VwDxDg2KXzt+cD6nb+uo=Jkvmla>Gwv6MNzx zv5-WFgN-o=qY8CV$!mVG#j8gi9uwtie@CwFdILdo^}htm1MT7PD`%fEXhc%~R?=+ttApT+vUwO1=RqY$i>`HX)bC)DU3!m95q>)VTopp>h zLd3XGi1?nORGS+wr=WOn+@lC>9{0whzgs;)<_uryt}(W|2XeV?qGcc4JGrRBA#U|# zM;;`#!`H4*w_j5@-_1Q5N6O<*QesK{d-1#-OnqNS4&?DiNP5Cy)Pzg%fP;MrRako( ziNpz;!?kTC6sSyhZY~heyh#;k5?Iq}8syc*X<6*&dh5s4g=@*M4U* zQx}uxio*zFx};%u{$6sCzzh{xLeSPpC5q4Rb+uP2Yw`H@_|R9% zA~U~g29B+O>7ke#Po1q_cHLG6()BX25vFEZvg-{RPGGN&}JcVeR2MT$v z13;?714KX&22kpG!ceD?akGvpBSM^9(oH~b8u&B$k?cmrj{nf8*uZX7ydt)cv3-3B|8Jw>H@^STs7MIbm*BCO2sTvP z@>Bfz)V;|3*22;ULNlZ9LKRyt84efkAGej7hm5PmN_cl4`k1cXXrFWJquaChu3Its zN5eSyidR%UAKLZ3mEDIR1GN>g>#d2QdJ`g%_)XlXCnZ-!m+*aT@8WeNTb|276F(g+ zMVzX`BNY*#S>?1MV$WZXuKr%OiSj3WV3b(v|1yFE33;?v139L&P??m?dz&` zECGB26Kf0KR4J#G6-f$V-cG^v8fUQ{(Zv;s>3D)gPI7_6d5vcZ? z=;E(unvQQGW(^{EYmfc9;D$9Ze-n94GRy{D4yV1H-JQNsYm(nA_+0^RJans&oyxai zxgM{RUiO7DMcxGXLT`!8HGv;+TB*a&lH1Z_EsYPUR1_u^K~u0A17W3k(g#_!S+K%? zrA<~95_0(cl`?qYm=PFF!0UJ7hbhEZSy=~sU@_e&W2uyPp0Ei22jPL&?T`l?5aai3 z>1`>O4pj-Q>wMic2)Ni;aqBaPi+db)7(ZC07+DtePt1lV#+ac8%Yry=4$=f%7Y>CI zYeO(LIL(kQx5RiI70aaRylv`kNL4QS{3*{P>-t`jsLGuMilIGaLy38-1Ez6u>e85& z3v%xYJoQQ}YqDTAxW7uQj7}ax;4}Ym3n)i~lXUzMD180sb!qsdYHKQA{mz3 zt}752^r6vHjN+W#0Q19bnimrjuZD)WuL}Kh{J^43$Cn(>TO|AL2wkBR?t?`jH9a%j zg&B+D&=>NNhfCFUD$3J1Bme&BPu?w{Db(SnvYne`>sdqMsCy(qlp)Jmn7ePMgbVX$ z+EhG@or9NkSqLGMAxMFF!aGR%qM%PLr+DjALg+bS zpagHhknksTWukIC`gh>kx63zg-VK_~$V?I#=FiNznY$i(dU9zwSkKLK`$4zSB}~JH zf`V%K9~2bSseYWI(KbFSRZ3@=5^X%fE2gCB8>ckG>sW**ZcAmu9IL||79&PHN)((E zQqDPIe)f{H+|%C7Bh+kd%h%nXU|0m<@etwhnzEGlM#Q90m zt_l&Qf`&e=jv2zKBcm3#V7D-!i%i(#RKi<##_JkRA?IVXXj3)zsLXaxk(IZ?r>l4E z)>@ob$#yHC9(^VK-8s(Yvun1pz{RN@@RXs+%mT6(xLS{@@m)&562`-^aYAcIKhJzK zcpoQn&z`BT@@(%N(>MGvfrd(3_aulo1bN*HEOp>&tZ$urVb z5r&k*1P(coe@<)(;ITE_3fA6*ot(~Sb|FN_4<(lgALo$pc@pgYW*DD~l`v!ZiN?_e zRbMBs70+BgBbx!h@pd3of@r+Rw?+ zMvLfPBI=$QsF-l|Q2UF>!iRvl*&9pZkGpaI(0I$j*3jkB)|38A&bc#t_#=@TK<)TMoA+7(Gy>+ z(2OR%j(X1UiQ#&)GuAAE90;f_GQBs!2TxkG-xYg6rV#QFUg4_Tyf@$}5^v+~4(0Bc z-SY>cZErtpyzFFlIqY6`%$F8bmb)n1ICnjaOGDR+(e5Hl)6gH86Rvi! z{!4KBch|y@#1|ziPSBSV$o7$SQEc36lTnQ3>>b5URTcB4r<|!@T%X#jbW<0?ct9KC zE^|fGwK6MdTC>#Y1ryieH?`$QN=cp79$hI{zAFpYXYGZbLw-xj2c5DKHm2iE9kU<& z9|XkFyy8gx`XBtitK3U*sIj+f5zi!AfUnJD<*=;vh!}_sl>9P&re2Z3#mANq$Q`e- z?>ZlX^;tV8Ec>E(Xwt6##-54}_3Kn>gIF&byPALyglpb*`H~Mq<7XjSE>Aqa0PQ## z7Mq-*ok!gMQl@3z#woSjEd|4+yF=P?KDAlU=;Q0-m$siZbWwLFeaS@g9|%4PVL15b zg_j1Uz9NbHb`KFx6XfZi+UyUWDNeg zoDVHm9tFPOpx>8FzoYS_U!)x0vDWl+Z&r+-w$W1q{^ax{$0IJbo40sC>@VxRl@o?| z#zlM?NSug{n%fYZ8t%m6ldFZ#gTSewqxbL^Rh^P^6tdNLI-l)Oo`b@gr?!a)E~=(? z&}OF})8gKvP~sqSj_ri)NkyDK&v$E}G4GtF(0-8ftKj7V>3lS$Dk=umpo_u{tUKvjZ?>-iEBU&*%OO9-d@SRaFDn(2MM(^ zyQrn0>@)bQ*G98e9c~kW4#?&UW0Jide;2b#oIm=h=?=F1LC+hj#5RSZvJRHEM}qi0 z;U_fe?Nc9mJe6x7Nf2pa1YkbguqM|`2olGAM7h*%su0BF$nB2C)uVCQS8wT0q1z7n z+&6>x@}EeB>67_tdw_n0&uNoaZs?1o>OVoKhi>O}emvga4!4a+3v3RzzCaxp<_=Hg z;5f&zKb4(#jJ?Z+2YXuT=APy)Va8O4o2gsvr3r^}#rZX(5c~aGcyWc676M7j z=O%j}fmB~!0aWp~sOM;eF-zamAv~D$iFPflp zjHal`ef=QsNVUUb26v_ow@^6haS6GiYF8|06%1H@z@EBcTwM@F?ffbmEN98RKZ03PnYqG0~FL9hRlhx`8v zdi@_XT$et&Q3K;C=_Mkk(Q9@2TwLf`qkNOzg~W>x9`)@hFiNM=) zfnPYdyuA790lI&Zj(g2$==Gha{=BS6UG3BrP&|8rFme>+UdS!_I17>i&I#PmR`JFJ zhTX6r$RQ1$mEt#*uWs(XGa@SbDiz}7n`4lJBY7QY%A~;9lKRg!$x!X3F}6u~r29G^ zD6&B02e~k4(qtitfzcMOuOSRHeW>|#ooVkA+a{!}v;9-4GKB_p*ijXG52uUsMXG|- zw~r7wJEDhuSTu=vV}E& z5Z>^=V*MLNHV+h8!$-j~1iq*-6G2O9U2w!Y(%hKg4PW6vuW?lWJOPSQYG01AccYPR z6>69<`%FOGf|B`4p0T1@VMYW{@7MfFs^pq?Xx(rTNXjkSpXU1^aiDe;W=Uablql`b zmA%-ZQBnx%!f?b@VK(=IoYRmlA9|g5K=?|#5T}>C$1N*CyC2-=PKL&ytlu|b`Pb;? z@=}RaKk0;+j44If-yy-}cs!%nKUxfjxz4BA(9|CXJ*_8~IJ68>8H@kKiJZ4YJb;dW z;6VZdw%j7hY4d2;Fi0h;E47PbojWFx{ug209LO~%T8N?2HoS8b*^V6tqO!Ib2XX_% zftchmZEJb#PJQ|gYKY$*G?L&x^{eL~94WA|;Q&IAV>p=X9PQLVCHK7g{i&+Wi;8b> zdP9Btl-M~$5f|#Ls*US?MzX^V1M%Tc7#!J8m-9&d@rEw<*1N9aMH6KkKeNS%n3IRK z;-@uMbl>4sQPWRJo3p|%a6{5sa%tssx{cT8q_-*;2gmf#3k>Nw&KA!9nm$P+5){5#8kKW8}upQ$wYZX(XAvmTbUhDo4iuJes00ESQ zX>0rM*|^+t29bU(z!1MJ>rNvaQJflhMjG|$jo1G7j`8TL4J~I#CE91jdHX>kH`jaK zM_P-TJrKwb1S8LbEFMdIyy{+kVrkL2?3(A+CeVes=||@qIT@-!lx@a}J-u}X+|Hen zN=(=we$;Vh7~u3GUS~6JJN4~IlzdbwgprG~wi72)gfX4E zx80bZTlcO=l3`W<8l~^ z26crO`|v=MVT(|U;h5B_%kqRx8});jUScud-Fn0CGbj1l&zTP793{Kbht_D|!?JQx z|3e=7@Q(X;%^-L;gy@aUo>trQjYBNnLty1f9VZ*p1+neU9}MiM##h4nHPvE!dyHJ_ z$i8VA{^{a23e}p#z+?qlD!fgXQ1{yQFx{)_kMuc|ZEBS#)CfsBCtG#|ylZZNMWUzx3$ z3ne{JrQe@HBT?x-K2}C!694tRiqHT0d@kz+)T?FuX{8f z*Sy_FvEXx_^s{U|?OwEN$Ug;JFgJ=rEs2w9dyP5S?OS(xBvdJ!PS{7p#fKD-3%YT} zpi)0+;hdkR%HM&|`EO%|2whLBxyxe6_~WL2Z{*9oF1<+1+FO}|<8ziu9+!2FdNMQB{K z>gKu0F$UjM?;voq`yq+!en=Wt{nxMUJLG@e==`Ha;BRSuf<)NB*^uw= z<9+tziuLQp-sS@pDBpBk>k0Tf@h}o&u{!=S#colw8Wpk+x5OnGb4E+iGMZx}Ht*%` zoh!@nf%w6-0*DjcEXE_#EeBQZQXoCMz2807Sj>+~YR}MD@NGR_g0C?FNwS+jdt!i? zF{aLDKMW1ux~wCpZoub%+W0W$Zq74Dg<$GObG^2uRR|Xzwez-FhgO)6yG`w~D~syL z)3wM+-4NG?5t6rk-Ra|Y!REtf`M}fX^>3juha3(Ba}yjnd7H>o`YtU3(tDa}YAJa! z1SXEyU|GE-c&=3+d6)*G5>EwDbHfCx)V7R?p=$@;!5Rd0sLQkggBpO~bV4|4Yu(Y)4-?bK^WG$BOC!MB}cQ@4-$Eh{)ScK`$h!RZM0T8Ia8m zA-?itiXamA5w01_WEUWv`VR$2Z`lP%-Cx#)C${r0{VhPUB>tZjAR*tsj7tg=aj(N0 zwHowUDw{g@%E#S5+xf+>@eK5ttVA4(KxyECm29nsjF1ksdb{DSM(rja&g}b(NeveH{Va{r?|+a6cy-Q=HzPZeI$Wvtab?1pz~ z{JOR$WnZN`ld8rw(k(@e@uDz$gqb@##hL_r)((d7AVA>tPycNyNSA+Tz}>W~Vrt*f zt^K-wWY|?M^gYD;q0dw#j=mq(!#-58Ba>%iy2`L$rePJ$zWcfG1qj#Oc5aD~nq2uT zG!vdnIV=nQ0i-GAWsOldW7j#xD#$lZo zR=g3hMQybEKv&^UOFev&LH&F_FAr%!&*bNE%#$E!h~7QlQtNGZ_28d5%~i z0pIi!0b?R}Rim#fE7G~76fJ#sNhU(CZT&02lr`Io?`F>Q39r5 z`FF$A7e^$uZOc{tvw-=&1QYP1#L-k}P z6_^PE{|0YIzwYL*h7#Ja>8L{Y$NX-pOh=&|RZy+e_1>#YC8cD@YjxcyHn4S(&vNAEup20X^H$m)ABAc*5(Mfhx@w{P*XEOEaPQHFSm^kTW9{=_E?&~cTz!W~ zP|d-jFF;v3gjnEKXCsuGqWzdWq=Qc@ed~wkTb|ndap%WgyUg*xUX-`9a}NZ!k40E9 zoY|dq$gYj>=b}O=kQ-v_#ysxP{&A)>?>9JzJ^v@1>00r~m)DUM$*oW{;y$B|!vJIB z|GV!o7*Gy*-WUlkQ1f51n%jl4AvWYaX0uDTZr}O)WSW`)HSsSXH6gv2%1>3GH5%5B5aG{T8d1oC zJ>#xMEYXVu%*uz3^=SwARSt7CVcT6QUAMyCfVx05To(gqQ+94Ck+@AIG_^KEg4fym zMjaed!&V~p9k~I65`*t5??oq};b=1o>$H2pz3U|W)ubun;-J#vK|2s#CnbT*yF@iN zqb4h}I4=mRdmxZ8hYw1-l9?(xghLs9`VwZugKd2PFEZv67BSr!reM@(hwLOSUd~mc z9fSig2u8~{V(u|w>c3LLA~}q;Lz1%UuG_s<58w7A#r8ctCC36DyWF0cZlt*!N)`Xk zIit2~?2=#0fAisj#=o@I zkrz@Y0y`MQI%SRJ3-@cb-7Vd%cuXAGy8ZR#4N)cO$B*p}^ERT26;Y!O!O@?UR)4ifSzU=0^vxAq>#qK7$-w47Ic3 zn4w)_`*DQUOCB5Cq2FH`FVPq&jb$fYQT(H=JiLfkW)}I#zAYz)kikB<`W^E}KQ?it80W?uJmTI` z=4n5O?E0z}KeZoDT>KS&E+{d-S>!Ytz9h*Gued9)In3$AE%6W-eJ@c@I;H(r1$(`Y zbt~u}&Q3tkcy&`1EydB0whf5euHC=we|$jS^4&|h*!nV3Zs1mBK7@ezMtjjUjNo)g4_ zs-N%EWxd%_u#|E8MLLhyC0Blv_q_;gxh2AfL*4f91=F($cRHIut^@BTs2tEWBSEC+ z7ezbqC-v01$09HA_i;5^v4WQs%0V(Nnz*G#h-V1-0eJ&!MbuvC+;B;K{?{e-fKEp` zY{!P1?-?P|KEA3=iMWgIn+boJyzAS6h&KUrY6=m=(NjDN^uLqh6ryW4SoD1qZvy$_ zJByTEse>aO#zj?$MnrSVkaX9GQvAUIJ0IT6j->`WB&gQ&Ag52FM z1?gjcyLftb&mPteFZzb)BzC(~6!yW{J|Ru6$>p|4&oJXdXV!ug?efAWY7Zm4jXW|0 z%D(O>svTZrEDm(>xVD{y(W*bG@ypOcG=(|GvYcUA@D*4jAX}x=4xiBfR^DLHMv|n} zenw6Y8H6fK&cFLmYO6(i4U0?aoTUAev~_Q-K=_Lj+3^PeqW3WN!RCUGEH!7uB7kXFsN$@TBd_TM487CtcN_C0%bm+6cVG+{}6F_hfh*C^_-;bB9wyQ094 z7b832W)IFko4l9Hb2W3TyxXz8ERR0W_F>a<-d&0x+g}9oVtx&kLRad7!S*nM-rOEQ ztM#DwlXX)4$y1Y6%77sbIb1 zDb@Tj>Q|y7e2Ujzyvw)}^=Daj?nOXr>-)zgyUml0owwUNw;ot~@jCO_t7lVwX%7zh z2W{d1v`V>YxUDC1ur02EJ2xdLsQDpR(bKte`d7AS>owL}+BIlcpOJbn=f!8v`Rmw|K(3??7LoL z+*;9?`@{WoSB08|l;am}{G;bCGVaY^;A^1p@zL>P+K-vr-Q>R+aGMjZ4@b+J681za z9Bhe=s{F(IJvm=}vbLf9vP6MtkY(1MJ1@xZ_Wl{0S~{81V^Xq9zj^ZNkp5mnlwom`9^mE?(_8P<_nj_tJ>2ClJ;LvwqgiBiH7PrUKjKEY~d zFfmWJc&1w~I~Xb)xm?#TZ+?>hfnMfKnZ2D(2?-jv(q#gJdQxQqinff^XtZS;H7fJJ z{vl-R;PU4a_v*m>_EQe>*_tIco`hST7@)UQHxQTHDO!`G5yjfl;tr{ZKYUSGFdcvi z?Sa2hIwF29j1|Px{PgNFL4y z(oaA>7U%304mJzuRh#uW!r?<&?6+d28@@2eU8d}gA$_}x&sNvuZ;b|3=HRdBSK> zbj+1=PUN!-(VQG{oG2%Qb;Z2W9Cs$N zRqv^>pfCnef#c7kqY4w_?fRfVuFb!7VfUfV{V{bnzBSat8WQWwAhVnSKevZ&JD#JL z)P1|5;_x0g5uiSs>~6RkBNElDvTL@16dA z5=&10wRMZDi9GxPBGWBXdG$0|24dAX?*nIe&1ta z@kTlx40>tsu&XR1@at1Uc^;QKCP^sot@g;M9tXi$0UnOpe8YJ=ETpj`eJgF0dmZR) znyw=qN`bqk%8*c7SsIUpDQBtx%GhyyhcwQvGZGXu0M2t0n>1Z~@II2NSRQt{y~5wl zSIDjye<`wZ8yjeg*nrO6{Sr(K+?b$x)<-Mm9mIctE}@;JKBUiIx)n$P^p zaU1BvEhw?(_FiGXX)9uzwk{oMlXs5B^dJ)zXn(jirU$Trt#_D>7WGUb7LU-fQAcRY zx!P6GzQ;1bLU->@77{pDm<`OOSDZosXWAy@Y{*rqW~&yFE7*$u@0iy=D7Sli@~RqI z@?`i$?$RK=r*`D~`LpL5b4znn=_`k5T>r4TzP$s24zFv#S_c@~O~1J8WKjzu(QMX(QvbNMNRr)%EY zebUa^h;r%Vh3!fLwR7afNEFQi{8lOT%KgebE?}fmg;j2jcP>?z>D}9=otgRTX6=e6 zx2C>1W{MWec1ScKMYh<*?4vN0=^t#nRxKH10l)}H{#CjB{K8zze#niC^!ZJ;d7Ixs z8}th#N(&yEGF1Bya+^^{cSd9YeR8>`O_xO@?) zsS?j}2XX076WZp#;6s-Z4);YCkT0-5NtBR0{ZqOd<`D}2CcylMuqf*d-&gbrF{~ky zcv&x2{zk^uf^hOKN5-{Fe2?ng#Z3P&$;X)YtF~Zp*OMl9g3&n~wi7JA9R8|A4x1T` zk}vZQ&pp%i^@5w&>V>YHJ5(I3tjJ26@j*(i8q2-~rL*HiZzN7}5i$Dr-Avp|t_tc` zpM!m*Q?2CR$idyG>uxC8wYaVO-ZrImR^m*B(H3t|(>G+6oTcr^@R5Jbm8}0@u5A6= z-uZvk@A0p<(rX*%!etRTYZD&+ZdEj zGH<<&dZfs`!!8GTV@mWkAtPjL){rVsq9gr^3y{U179n=QwHj)ZAMFdJ+63@9P@ITO zLLz#VZEB>zz=IOcuAb3;+tQfv72YVtRmfYWtHT*LJjSz;Y^?;_NVabMvzYZ1@{(xy z!+atdHz*O@`0I`0D8+94*v`k-%DDv$*X|N$e9N>+I=pr<+QbN@O$p?6Ac5p|hjJ@D?V0olIn6qL-fI9tI{jlExYP6|3VF)&H1%6) z=A1=HfG{X;o`EpKG}saLhVlOp_U7?WzTw;d?3*zLlYJTc&RDX?Sh6LJHCq{LRI)@; zsu}xkBvL55Hf0S_jh)DrUCEwk5h+UbyQeea2#K4$%h0t3<5``i-kOwI+#a}<@vwDO2n{89qfjG?n=}DgnkQ= zL^p;Wfgo5tom|-KC-%=ntns-dA`X5Ub61a^DDG|SZzUNOEoRK8J@kIgeMrvsv7Gef zZYG~L`Z%3UKIUbr1Add>i2mGTwbA_cV>^n%#zd*BM@MZjRXyIgm?bKIdnBeiFHk&T zE%W0AYQC7;-oJ$7_e$rlIL;m;RX#JsSvNGw2?FQYX;)UHi2w5mCT>G!0M+9TDnENn zZhE})lNmvK_q2+xW;BmT# z|5C)?z?Adw_=|KuegXM*VHmCSxOXRQ7)+&>mH|q2lc3=W*#uzw1Os}lfa{;iUCFWJ zR*NZkFUZ|UIDEw*Q@#J07aLw9p|v3e+Ibh$y4htaf+Whtp%a2=fe{v~uIN&QrgYjZ? zlYBC~BN{OtK$V#wL)d8u>2f-89HFRs@4ykL=C&KE($^=AM}Qb8fJ(SC8th;2W>Pmc zA-GVJ6!8O83TC;r1Zf%|zFa{>N1569s~;;w4(RLIxyKreSWnYw5~H1dtrYy6)59G? zrSf4*?`;7VqMkddj8{y9F0cgv&ua=GKcnESgDP#Y>yKWS((!Q`LnpgWZgb{r4a-_W zlXhM#VrQ6S0M=X(O)^i1K)FK!xpqbvfScq>uY|Gb81Gk#-T2 zXp<)Q@G!cU+HG~b7+dOV<$Qja{yDZ~A}#knZPa)w@y2%cpR~5<$=io^N{gQz+Bft- zyCsjaG^|DbB`S6P1PnYAw@58ap327~=0qH5^kY~k1rDU3kw}7Ai#IWyJ2sBYt}~8> zjLb|>J*Ki!GC1+ziOj;rlir)<@}PHf=Ha*t+DIV3Amu1iFc!#rC`W+r9wn-XemVvy zK|dcC?`iGpg05X3hML`>Ujvt2X?+5oc?5>0x zPw?(H9p4s&=Xm7B-K2#E4$DoS9e0&cY>}O#oX`hSQUwtDJg6m7Rf;3%75#(?7~7)7 zC#$)g&3~QRe2~8IKrwDo{yKNT>+K68H*lu4s>0;FFTl3sLKdm;g)J~|AJ@x zwSJ7hr+u!)uJoKHo;i%v=RQ(*vw_sWSE1X;m@aSS-(1tbY*GF8wauL}7PzcK$ya~?(g zrFZEpx6$e`sjrqG=)(sYnyyslT?MFt&^0R20nVxQ5`yCUQPl*=UZQntKYL{azJ$H_Wa)aganT7g65Z^!deUmcKX`)KBet^ntEy6?K{TPv~SX~yHvCxE`4(6$`c)XZ-m ziEfyx#_m41G>?}TOna^Fvl)ExMD#}e*}hxRN*ug`mtAW9y$!#BV})41Z51dv8pleo zb|k{!D0Pz_H<`GG`xX{1w9_^P$+7Cbzq0d^O~vM=OCAS&p(^WYlheg-hvim1+pwMB z?GbxpVFUe{yN^o}J;WTAE*hG zig5VQ)#{JZZw9$Dney1ZcLn_z2H=3VZ)ZN~daKAjdA!y*(*o);9bcLXmAMk``X;gI zbe-72IVMS{C!1g>h9i7X1$gL6sK0UwKc#iA^mS;|WeVBzSgt=G0p*6T>!io@>P~ep zB|pCuDH;Hp?_TsL?%sWsp)@YAFBtTUHDY2NB9)as8a1wOf2_1RE`t4~%_v3p9I;XA zre~>$$U3g(i`(hzGZykZ$zP3dVm11GEzyaSNqQ+K=mz0Z70+lAVnrZgs-6 z9!2v{>T-?FWtQ~AZrU_ZN2VKG{T2E2(?Bp3keko^CpTAM*NJG5;^{4P^KL9sO+P z3_6&Eu$!EeBioOVxjk=AoATieB+Kc4FmFNs*fqVTtEua0;&tV>5&4#F+0imWk`?q< zUl>4uL9bvp2S%2K7bV}g(2kFUVl-&yV1Ie`TP7O?3`D5ki&Pyx*=Xkl_uR6s@=K6q z)z%`0ou!f3U>3RK8nw`udJ^gx?F;B?e>x)=mRNkQAgnZpF4X^H;;cbdW5+hSlLrm! z+L<(k99cbR1CbHUF@J6&UCkbKDKuJ^6nX1xJ|y(v$i4Ddx>GV7`=E`<@skhua|V)V zkY$deg)I-iXpKu|j~o({lrW zFT%558OUzpPF}l0?rH6p-5igcf4RmbkcWM&zSXlL>2GckQlr}0JC$YEV}yABU!rZyO&ZphY?=*onOi}a7A^4i)b=c6YqSbP;;8cdv(UMC+WS$WT;Y? zc;9|Xgpx>pwLForWu|3k{QHYGP^{HJILaJo62|-s@cVw>ZG;lj+}8GN7^Gt_Ic8zI zB2+i6365y=hl|+F#jvXZhpb}e==*LoiI@PMg#G(stlVIIR}P7?@kwl;eY)OO9h&wG zi4UVN75{kK5^nE)Hz!Vg;75CIpxvD$^-UDCbkPCCVnf>6FNtOP} zwWVmv{)4m8bUYZ^PNf06jTyzWbYQmxa)SH|jIc8(s;v%!X6B#pNjfYLEXgJjJgt{# zkW+XNdgD3*a+4dOEN1gjvT)^%%MeqZeUE(sMFuuKK)pJZs1yEJcDY|eJFt^eQe}&C zwVQKk@t|BfF>n%vr|cLlqJ$j4I!I#rzm%y5+z!^7*TdZw%!KIVeN~;6@5D9v5w7em zFJ*%b0$eb?L3KPdcvm%$hgw2DwRz7+?mj~6&S`=nH!Jun9?tpe$ z!|nqh1jBn~$ZICpM{{^ogAA533l*Yyv$zXDAl9FQ7Okp`iy_3N-y7g}xoa`fLPH|l z`O!{0v_rSPb4-JT0KfmaGti<0Uvet+N^_Pk$TN;fzY#)q_caBaZUID%^xcnc+Ew~T zeb!+Q!!7UYr1VIa+0sMeG8C{Bq`^rG&wR1cjmmZ=+gtKZ#t`uBiwYxhG11>-i;o8~ z%RlAQo2Q;A`ZG^uVAA8SJw~@oO)B;Cv&y(#t}b0xEP!kSRY`?DGJytjMkC70!A&Vc z>XBezos&gL*NseyZI{y9zZBL|s#;V9TVrt}O!GIg{!dS}0weE@w*4Sq5RlS?=M~OM z33)R;r~sY97$;|O#uHA}GKb+6O9HYvZ)H)5L?J#S?TA(}eJC)qZRWj2pPTv3@Nzk;Hm3OzxH(q?ptfd3rHgI8jt}L&$4mO71WZ?J+16A zD+WZiZ>Su{<`^o+d-YeXSB|2EybuPfsh}q;dAZ2tf2Pk`JIlE<%W7}LZyo-&X_LqkgPh$ehMC)8d6I;#H~!v5eD2%xjFw3>cW0Zjgt8_zPeeI%1i zBo$C;vLGfmVA#W- zAfNX2d(E9wpmRP!raZnx`mwCy7=vh05VVI_G3g=NqO@CR0^7$(CYkO_NFg@y(xnulEM;N?dL|>t6P{z1ZabS4F?R$v*R!W~I|Hn01C~>^!J2ZK3<(S9OB) zwe7l2X#f#}l!n_=A_flkuJI`U#h zs(W4~32LfhxE32OwGSzwLX$GfptH%ELNwBs`B=1S93e}0abI%9Z`8_Wzs>KDgv}0B z`3gpy`a`o51`CImsZC7>!Jb}N^#Uyg8r*PY} zSZ6AQuPFL--(hp3FqGQWFIp?ud=h#(q88T>H4q)6LEk$l%l%Z5mdi3Q0ZjxuPw(od z%P%|C^MrsI1ba=tR3LqhoLPfoyG98=`PK`ZqPRj|ApdnO(iHuHQlK}*!z!*o1kl4% zpDH!TcWa+DotLIW<{@%Zi4-JWQ&2`CW;n=%Vuf!$>Nip>p5j#ZQ?0 z(rk0E@RJBzYooDQwUL27h#Ku$3_S z1YQ5|>&H#D43P8W`s3d}J}Gdd4tL3IKRN=#D}@R1EFoh0urZdU6OT4@3o*|`SD!h z3vFgVGra#xsYCCamKVo$4n8XDZ(XTjb3kfiHPC5}cIgAe*$afUehE&^dmdg=%{tDV zzVUf`rWqFSrlRW5Cr_Q**`XY@_hZfn4bjX;hb>+K$6L_nLLnep5KAWfix$i&?VsF@ zv@N`%&nO}Nac-*kLQOfki7QXbHjdd@4B?ww7!|5|?F#~{qCWWSV;YMA1YtbBL9D|| zuM*N5|64QGIrn^-^nLRE@#%Y**!x>n8gu>4JF*$4Noy`>ly{{%;Z05(WdyYI7%U;(sQK2gVg;Xojh$1Om^{T`iO$bTl z{TD#~c99lVRCR6OP7$+C;mkMjNPbL*%!!;5CSBP`;Z)D&JOq9S2EC3dS2nKVBodKe z4KW}P=rp%63Gk@@35&Qb{Cns9cMn5`!LOBdg)>4wyu-v}w{2kDX@&*DO;JzX2gWD+ z#&{xBhi`FwTYJ?eBqwaGJrmr-$9w%}-_YIshZS3qo>?XeDX@AQSV*H$sP$#B&(0QR zL;Xv+2VWd3Mc+=fnI7KkI=x>VNRoQ{>+tWL-FJ^BoS=t?(t=O<53l=1WuJ+yi_mHl zKFrFoH*Wf(?h#}EP)~;+pM+}l@@s9g3{2DfR;hd8vp;}FB1ZcfU%#1(t$e#Tt;fZq zIFw|9?Wm9t43os>AKPil%ZG+?EXh{cA7=SgHXhnCRlQ*%@Y8D|#~USIVJ!4esvcQ3 zpsU}*dlr=lJ;15ml&%dJtIs+kS>=Ip?LX)RCuoQcnf-oH?84{Vz)p6;M&zaa#l2la z_nI^_*sVsZRTT}zH`2RcqU``u&OSnhXGyfzk}4_+WhoH%qe;R&XLtw|9X3k2(p^gZaG#*8bVYKys;rd_g7O5JPc zf_k*6wZg*6fC*2$)cvFK(k3!eSw-wE3Ct6B;EO%flO$RU8H~Wk|9kzMqUmMI~UW~6!6~e{EL{VdbiLkVh zoW#;>T#Q$93HSBqI8IU6$5_~*FAvlysDT|otr;>8;(q~E*!Oxg8?z*C1Tg!`Bc9vUP6%5Oqxz zQa1jD_iMDY=}yHlEMk_d0ut{}MJ*6Yy!?Ne2gg!m&qb*6wmX<=R7%Nn5O86MPIpg= zoj0&o)j=WJ?@&L+DNf?$o*z<_eK>g1Kds@7=fS>5hik%N;nl>7 zK1WN%jWP4zN_Xl^TBgKVKFuqu^%!D|izN$Jqoc-}T>IIgkrsPor4MWE+T*PCG) z_;1%6T&+pHtI|v&Z6zsjQD5vke(4?2L#1;$)M1|HzmpD)sVb&JqwhB72KtZHkiqu} z8_%!&j|-!*g0}sVR_%+(yc-N?FBtsr2jv1)6f&;Y9f09qG`Q0vNnvVZ?wFSIs}j96 zh}|?p;0O)~tJg%slCjb6xuIO)K?GRWjg7UWxClOcpw23l+;quBR26ilmCiR;ffFX` znY^5L11|g=0}e)kptD*ClE`Hqs9nSWnZYA?au9YJ2wg=?ec_{WT51o;tmd*1PX6&n zDNJ2Blb@sx|9?S*I7q)Y3I78T+WCJ%gse1=4-6kqIr}MCm+&@O^f+Nt7`(woAUm-;$o@8XwNd@pH8D?eZPlvx30^-1wdpTyqkWfZ;0TuU^#& zG2vhqFIb#i=qFI~Y8%L40C8^*0p|Func3%KR^aNvJZI|$9{kH6PNr<|^DlRb^)RwN z;nrxWt@7CDgPk0Qz_<{2D265n1~lq`_P6S{WGSsjL#B$r#O^f65??$>dN#K9=Gh&K z<8s5fnob0Ur#4_E*e`!G6AI~10$A>bC`HiU$g{VG>1FEl4?jmiYE5o9+2gr>4^DIS z&j$}#DmwpO(-LRXXF1Qb)xSS12BUh6Kr1Y{F-tA;#s&lM3ag0Z@{2Cjuqk))B{!x> z$}2Fq*^!?ht7n&=(0r$zpoASUEx0)LS(yh77_!|aX z^Q7p99K`9AGL5&_fC)O(5*X11o8rO~0D*(~KY>G(_wm^n$Y=`Wp`j6V_nc(E`k7zn z#!?}>g|EUbdN=c8x>#!IVvoyvds`Fh7}*^S2qr&I?`6**Ne1;lYH0*<&!YpwGJOL> zdOL6|jl$P4w_6CU6Txq-t7QsQ-59MwC`J9boH@qJ-du&LM=Bfuz#EK%UoQ(baQ z=5ROuLgzEVF0lV^QKl)~OrR(A7_9`nemY`Rbzi*Kw<2(8sWDX3vB_5J1UERkgTxgK z#A-s#C;b>DAPDY1!OvUuQdx@oZ4y~{tk{5y7SwV$}%7F#%2qJPq5ljeLzejQz9fNnP`d6r=nWUs*Isl&+`gnr^$8~)ZQe)R0o0UtS}6S= zc(V(Dzk&|41r$laEc&&D#*Tjy!qSSU`Bhn2k#GDkF*8=D@5RZEP;dqS8c|V(NeWos zvuLp@rtiP_NcCBaDKupu?mtbRqvYlf`}$0T_?CpWKyXJ(uv-Rxgm!K^wB=T1`r+1~ zuj+QOBC6@ImDyv#yXcnBG{|RiW|iI)K@q4$BvlM)k*-PD=sy}}FhmR!@z(1(YTi+*8_l8vmn|aX*j=Ei+z?cPaffpx@~V) z__rw#UIy!cS)*Io1ju?meWyU=R>XLVb$okxh5YrMB8M_vy9Sp%_fyiF;j05*)?BTjq}hDVs;#S5rE9LD zrRWpAp_@m3Q<>lcLUZ$!f3;XaN}qS;MlmHr``K6#h3}EKJ+$;2tx(9ORD+lpbrVOn6!6L8o zY;J!8*^fhnubb5eBdCfowm<@+|3n|(y_y?2rgvW--Ko<5n)~+IVW@S%SCMRv&XwAM zACM+5%?~k?9y@n5s7l{>mo#W2$bXX^AifFh^}+fMd}Yq!`}q)N~i>kJt4?!!5!X%Kd%J}V^|;4R`sIyIQ} z3STtvl}xMEmrouH6AqM~mg<+$l^dotWLGQz8OA;wX(e=REga=+8DB7UA5y#paF5Qh z=1~d7=WCg6X4JU?C_Rb%It(`{xo%lAeK2kOSonpjK>h>9zvaCo442wYzbgah0h?k- zG%wiSUdL8UCP~%!N=fEW?rbNd=9iiA^<*qEUl-@zV&6t@srOG@SfQ_xi2x-;6ot`b zTO!k5|M!I2ooEb1&O5a%sk-VDvemd!NkN`F30$rb6Vj#8fVQC+a^l&a7WXj~!^^*S z*X!YYQ34QzwEFkXPgHW**e^9MENj>z@^{#R4koZ(IKc9)FW+p2qVMwSOG>VtAp!k- zE@jb^L4t}C_Uv5ZhQ=ExnICt48yAoNl7TZ(!eWu1oM%h&;X_?kOKkq+`}BspJOZOp>IlhxEIPE8sUz)p{*;6*p2DoQWRtwMf@xaG?kLTnkaHgC*4)t* zxWjLKEG{3b0R<92B1MI0ejuS-0VLrud+4L*B-P54ncv2GGoR*FPwld8nURgiQS$)n zSO5`q)`*u%6-KlfkmkU^1p9_3*){sKNrf6Yb684~!c+^yG%E^}ZpDR>X*Kgkg-mB{ z3QyHpEuveUP?Bxo9`4D1Qls`P_e4m?SINLIA=SaH!;a*52tZlOPwTU~N$YF5PZH1Y zr#g7%KN+Qk=8N6ms05}1Ijnv^(2c_PL6(4psIl6YX)P=87`tL6`J&gg%(R$#Z@yPa zgt)b=?j0 zU4$&|X#co_Fg`WM&v*sW|F73y5MMHK!;q}}^}49r)HBbmrFwqYRok1~lz}indF+Z{ z9M-1r-WmBLEeSq}8-}1CTxEU-rX^J_C{`}dQYXB;aX^)x68WYIARCvXnsL4Q3IPtp z=qOz?VR7eYCa3Y>HJnEb`-jo}Jr0{$&z}}d&IwE5qn>9KfRe%5o+oV>u55upzd>=Uo5tSsP43&5BYJfaK@ zrSHxT>Y)=|LMHpgllxO5mi&`951CdC^D|$=v3C<{-mvhb5(w0Y}BL`q0!} z5vz5NLANrnv}Nu)@ZhL;;3iqxvnlh!l&3+!L2kbWPBQ`%+J2tdc~>1}OfMp1VSm{9 z0ec+?@IU=bXmS=Iwks-Z#7B306%U*TDP_2D;uvx+Q(n1890sgR=hQs{sGLW%(@`U@ z4nn3ypf9(_ zF4I$!TFvYCJ=rtmgW|&GL04H}R={}DN_+0u`@`ZrW|ZS|mXAZI^%LwZ&Hi_xk=}2J z#3U+}i|%v=lr2QbEB`vojo@)%^O z=>F@8`pN77uOrAK7pV^vmyP)V@);3;{60zI^K%K#L-=1Z9$u1i7)NYo=1*Xhlv}P3 z6|L-)jL=jjl>m_l+al{$Ac4g7Z+lLQv_9ag$1NhNR_az&O$_a8Z#cxq^FS16^^BkotDrr zJ0!G0_fY#yy(>_N(}G_b|gxldY%+drV3G2Z18%?=8F z;!0e1+4&nRBw5DAJq>5p=qN2pW=MKfClweRU2nH|tq1A7U-OrhrwDo5)~~oZPM?2i z#ce$ka$mzX>QTzDx<-xM;cJRB0jTL`aqTzi5c}fJc+7UQcVh#*_^{`-wv$VOj=zl4 zs7{Ce+~Em@07XK&3tS#v$cfY)qq{EdoC_o)Ak)J=eG(oO@~ubZG8#yQRAW`rw>vB& zFoEnBWIK0&!nC;zFC|7p%FAitY*Yn!<0O9=J~2RdQXIU#d7;(BUb!aRMsI!2hfD4~ z#NqrgqWC%hy0#9aN}fD}LUKOfYW)N4g8*p~z$r1nx=O!UcS6v_=9f`o>-5yPV7oCy zUK{_>>}zH%lkTZK=jHP${!Jv23kF0reOMF#n%&wYEu2L+3<#>Dnl!{P?gpN&;W(+H zwsc?b9+ft;fg#k%;52YH2P9=Fuq6~N779ooSaYg9PtrrJd7_%|p}b_8r;}VB0sJu* zns>~}4wgU9jZ=hVbhVPd+6yAv?N8x?3)%j69c4#7aQPEDxClBLRCRzDtk%c0$J;UK zACjE}LM1Pg8Qj5CKHSjg7I;SJC0M|@jD7{#{O?3T)6Rs-LZ^v5r)=DV7J z#q74X%fBuO=|ZTe3Ef=|Ail4ZzTXxGy5J>i8sZ8 z1HuV0H^FOa3B^a=uPk43mm;x*#%uqC#?ufs1NPQv=4+m2Z@Q9tm?W#ytJ?^4dgD0f zq(KriPT&xi#^L2<#W-))^Xp;T@`M^~xC3>h$7}$l1HXNZuZZsnuvFjAhVsp~b8xBQ zjd(dJ#UN9VI1mhK4C^CEd`V>FrWPGG4X*o?{o2H=r=tD+gBVoOJ$kp2=|-*`*4^lV zK$?ssG>EE-Ut|LR{?|S~FMDo|mge^~C#ej46bKR?qNQQG>zL%xx$xbuD5O} zVkMXM;bOr@(Nyjc+IFQ*ULiePV6xYnwhd*8&4@fm#Y#7x-OHU0Pb!e(Y%b)B+eG-{ zH7AY{Gex6l5-A<-r*c$d()3yh=mCuU*GhAdfKT8xwi;S}HitO^k)VgED_2^NdlG>tuDlf^m$B+s zv+|1OB^pu|&o+``!Dy&N0|q#Pd;^3)mnd}jkQcxaV|6s45s@dZxXxBJ^TGie_%~(7 z_L2W1`S@~Fa*N^IPM`g+PfELh2K0BdgtWjFUA@pg^|jE)UB@3jZcIt~7FBihHqZYh z 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

SY%O+>`;)1X@#H>G7Mt)8_P1gdzOsg?@d;Ax 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

K__{V8ok)6Go1JXV~+Yb0`AP%6MvWG5m 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 Q%r7M|sMg}0R11Os0sF9vlK=n! diff --git a/x-pack/test/functional/es_archives/uptime/full_heartbeat/mappings.json b/x-pack/test/functional/es_archives/uptime/full_heartbeat/mappings.json index be0e98a5a49278..2b6002ddb3fab1 100644 --- a/x-pack/test/functional/es_archives/uptime/full_heartbeat/mappings.json +++ b/x-pack/test/functional/es_archives/uptime/full_heartbeat/mappings.json @@ -2,11 +2,11 @@ "type": "index", "value": { "aliases": { - "heartbeat-8.0.0": { + "heartbeat-8.0.0-full": { "is_write_index": true } }, - "index": "heartbeat-8.0.0-2019.09.11-000001", + "index": "heartbeat-8-full-test", "mappings": { "_meta": { "beat": "heartbeat", diff --git a/x-pack/test/functional/page_objects/uptime_page.ts b/x-pack/test/functional/page_objects/uptime_page.ts index 57842ffbb2c5d3..e18c7d41547281 100644 --- a/x-pack/test/functional/page_objects/uptime_page.ts +++ b/x-pack/test/functional/page_objects/uptime_page.ts @@ -13,6 +13,14 @@ export function UptimePageProvider({ getPageObjects, getService }: FtrProviderCo const retry = getService('retry'); return new (class UptimePage { + public get settings() { + return uptimeService.settings; + } + + public async goToRoot() { + await pageObjects.common.navigateToApp('uptime'); + } + public async goToUptimePageAndSetDateRange( datePickerStartValue: string, datePickerEndValue: string @@ -54,6 +62,10 @@ export function UptimePageProvider({ getPageObjects, getService }: FtrProviderCo await uptimeService.setFilterText(filterQuery); } + public async pageHasDataMissing() { + return await uptimeService.pageHasDataMissing(); + } + public async pageHasExpectedIds(monitorIdsToCheck: string[]) { await Promise.all(monitorIdsToCheck.map(id => uptimeService.monitorPageLinkExists(id))); } diff --git a/x-pack/test/functional/services/uptime.ts b/x-pack/test/functional/services/uptime.ts index 7994a7e9340333..57beedc5e0f298 100644 --- a/x-pack/test/functional/services/uptime.ts +++ b/x-pack/test/functional/services/uptime.ts @@ -11,7 +11,38 @@ export function UptimeProvider({ getService }: FtrProviderContext) { const browser = getService('browser'); const retry = getService('retry'); + const settings = { + go: async () => { + await testSubjects.click('settings-page-link', 5000); + }, + changeHeartbeatIndicesInput: async (text: string) => { + const input = await testSubjects.find('heartbeat-indices-input', 5000); + await input.clearValueWithKeyboard(); + await input.type(text); + }, + loadFields: async () => { + const heartbeatIndices = await ( + await testSubjects.find('heartbeat-indices-input', 5000) + ).getAttribute('value'); + return { heartbeatIndices }; + }, + applyButtonIsDisabled: async () => { + return !!(await (await testSubjects.find('apply-settings-button')).getAttribute('disabled')); + }, + apply: async () => { + await (await testSubjects.find('apply-settings-button')).click(); + await retry.waitFor('submit to succeed', async () => { + // When the form submit is complete the form will no longer be disabled + const disabled = await ( + await testSubjects.find('heartbeat-indices-input', 5000) + ).getAttribute('disabled'); + return disabled === null; + }); + }, + }; + return { + settings, alerts: { async openFlyout() { await testSubjects.click('xpack.uptime.alertsPopover.toggleButton', 5000); @@ -120,6 +151,9 @@ export function UptimeProvider({ getService }: FtrProviderContext) { async getMonitorNameDisplayedOnPageTitle() { return await testSubjects.getVisibleText('monitor-page-title'); }, + async pageHasDataMissing() { + return await testSubjects.find('data-missing', 5000); + }, async setKueryBarText(attribute: string, value: string) { await testSubjects.click(attribute); await testSubjects.setValue(attribute, value);