From c14c552bbcb01ed4dd8de274e8e83f842ef3f331 Mon Sep 17 00:00:00 2001 From: Andrew Cholakian Date: Sun, 22 Mar 2020 15:06:19 -0500 Subject: [PATCH] [7.x] [Uptime] Add Settings Page (#53550) (#60869) * [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 * Fix tests to use heartbeat-7 instead of heartbeat-8 --- .../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__/overview.test.tsx.snap | 2 +- .../__snapshots__/page_header.test.tsx.snap | 368 +++- .../public/pages/__tests__/overview.test.tsx | 2 +- .../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 | 4 +- .../uptime/full_heartbeat/data.json.gz | Bin 113038 -> 128173 bytes .../uptime/full_heartbeat/mappings.json | 4 +- .../es_archives/uptime/location/data.json.gz | Bin 16449 -> 16481 bytes .../es_archives/uptime/location/mappings.json | 1690 +++++++++++++++++ .../uptime/location/mappings.json.gz | Bin 2361 -> 0 bytes .../functional/page_objects/uptime_page.ts | 12 + x-pack/test/functional/services/uptime.ts | 34 + 94 files changed, 3155 insertions(+), 349 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 create mode 100644 x-pack/test/functional/es_archives/uptime/location/mappings.json delete mode 100644 x-pack/test/functional/es_archives/uptime/location/mappings.json.gz 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__/overview.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/overview.test.tsx.snap index 71b3fb5c7146af..4a7c9f606106bd 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/overview.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/pages/__tests__/__snapshots__/overview.test.tsx.snap @@ -154,7 +154,7 @@ exports[`MonitorPage shallow renders expected elements for valid props 1`] = ` "type": "string", }, ], - "title": "heartbeat-8*", + "title": "heartbeat-7*", } } setEsKueryFilters={[MockFunction]} 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__/overview.test.tsx b/x-pack/legacy/plugins/uptime/public/pages/__tests__/overview.test.tsx index 86713c606c1bb6..3e1e702269e047 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/__tests__/overview.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/__tests__/overview.test.tsx @@ -85,7 +85,7 @@ describe('MonitorPage', () => { readFromDocValues: true, }, ], - title: 'heartbeat-8*', + title: 'heartbeat-7*', }; const autocomplete = { 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..cb41512ec749f1 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-7-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..716026037e8f6b 100644 --- a/x-pack/test/functional/es_archives/uptime/blank/mappings.json +++ b/x-pack/test/functional/es_archives/uptime/blank/mappings.json @@ -2,11 +2,11 @@ "type": "index", "value": { "aliases": { - "heartbeat-8.0.0": { + "heartbeat-7.0.0": { "is_write_index": true } }, - "index": "heartbeat-8-test", + "index": "heartbeat-7-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..ed5ee095683dcc84963b50de91d985007208ae5e 100644 GIT binary patch literal 128173 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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..d00ddbd89f64ae 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-7.0.0-full": { "is_write_index": true } }, - "index": "heartbeat-8.0.0-2019.09.11-000001", + "index": "heartbeat-7-full-test", "mappings": { "_meta": { "beat": "heartbeat", diff --git a/x-pack/test/functional/es_archives/uptime/location/data.json.gz b/x-pack/test/functional/es_archives/uptime/location/data.json.gz index 58754d4fe4d3a2ed3a831fc8e55e9cca397b10f2..78c0a6826e374180ea763902850326c9c320056f 100644 GIT binary patch literal 16481 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 az=#UdMN~+J2`9q7|LqXBPhggU0Q@gJP7&4s literal 16449 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 diff --git a/x-pack/test/functional/es_archives/uptime/location/mappings.json b/x-pack/test/functional/es_archives/uptime/location/mappings.json new file mode 100644 index 00000000000000..475b2347631b93 --- /dev/null +++ b/x-pack/test/functional/es_archives/uptime/location/mappings.json @@ -0,0 +1,1690 @@ +{ + "type": "index", + "value": { + "index": "heartbeat-7.0.0", + "mappings": { + "_meta": { + "beat": "heartbeat", + "version": "8.0.0" + }, + "dynamic_templates": [ + { + "labels": { + "path_match": "labels.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "container.labels": { + "path_match": "container.labels.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "fields": { + "path_match": "fields.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "docker.container.labels": { + "path_match": "docker.container.labels.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "strings_as_keyword": { + "match_mapping_type": "string", + "mapping": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + ], + "date_detection": false, + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "properties": { + "ephemeral_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "hostname": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "client": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "bytes": { + "type": "long" + }, + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "availability_zone": { + "type": "keyword", + "ignore_above": 1024 + }, + "instance": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "machine": { + "properties": { + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "project": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "provider": { + "type": "keyword", + "ignore_above": 1024 + }, + "region": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "container": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "image": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "tag": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "runtime": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "destination": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "bytes": { + "type": "long" + }, + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "error": { + "properties": { + "code": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "message": { + "type": "text", + "norms": false + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "event": { + "properties": { + "action": { + "type": "keyword", + "ignore_above": 1024 + }, + "category": { + "type": "keyword", + "ignore_above": 1024 + }, + "created": { + "type": "date" + }, + "dataset": { + "type": "keyword", + "ignore_above": 1024 + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "kind": { + "type": "keyword", + "ignore_above": 1024 + }, + "module": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + }, + "outcome": { + "type": "keyword", + "ignore_above": 1024 + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "ctime": { + "type": "date" + }, + "device": { + "type": "keyword", + "ignore_above": 1024 + }, + "extension": { + "type": "keyword", + "ignore_above": 1024 + }, + "gid": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "type": "keyword", + "ignore_above": 1024 + }, + "inode": { + "type": "keyword", + "ignore_above": 1024 + }, + "mode": { + "type": "keyword", + "ignore_above": 1024 + }, + "mtime": { + "type": "date" + }, + "owner": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "size": { + "type": "long" + }, + "target_path": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "uid": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "host": { + "properties": { + "architecture": { + "type": "keyword", + "ignore_above": 1024 + }, + "containerized": { + "type": "boolean" + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hostname": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "os": { + "properties": { + "build": { + "type": "keyword", + "ignore_above": 1024 + }, + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "bytes": { + "type": "long" + }, + "method": { + "type": "keyword", + "ignore_above": 1024 + }, + "referrer": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "bytes": { + "type": "long" + }, + "status_code": { + "type": "long" + } + } + }, + "rtt": { + "properties": { + "content": { + "properties": { + "us": { + "type": "long" + } + } + }, + "response_header": { + "properties": { + "us": { + "type": "long" + } + } + }, + "total": { + "properties": { + "us": { + "type": "long" + } + } + }, + "validate": { + "properties": { + "us": { + "type": "long" + } + } + }, + "validate_body": { + "properties": { + "us": { + "type": "long" + } + } + }, + "write_request": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "icmp": { + "properties": { + "requests": { + "type": "long" + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "jolokia": { + "properties": { + "agent": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "secured": { + "type": "boolean" + }, + "server": { + "properties": { + "product": { + "type": "keyword", + "ignore_above": 1024 + }, + "vendor": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "url": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "kubernetes": { + "properties": { + "annotations": { + "type": "object" + }, + "container": { + "properties": { + "image": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "deployment": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "labels": { + "type": "object" + }, + "namespace": { + "type": "keyword", + "ignore_above": 1024 + }, + "node": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "pod": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "uid": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "replicaset": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "statefulset": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "level": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "message": { + "type": "text", + "norms": false + }, + "monitor": { + "properties": { + "check_group": { + "type": "keyword", + "ignore_above": 1024 + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "ip": { + "type": "ip" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "network": { + "properties": { + "application": { + "type": "keyword", + "ignore_above": 1024 + }, + "bytes": { + "type": "long" + }, + "community_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "direction": { + "type": "keyword", + "ignore_above": 1024 + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "packets": { + "type": "long" + }, + "protocol": { + "type": "keyword", + "ignore_above": 1024 + }, + "transport": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "observer": { + "properties": { + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hostname": { + "type": "keyword", + "ignore_above": 1024 + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "serial_number": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "vendor": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "organization": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "process": { + "properties": { + "args": { + "type": "keyword", + "ignore_above": 1024 + }, + "executable": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + } + } + }, + "title": { + "type": "keyword", + "ignore_above": 1024 + }, + "working_directory": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "related": { + "properties": { + "ip": { + "type": "ip" + } + } + }, + "requests": { + "type": "long" + }, + "resolve": { + "properties": { + "ip": { + "type": "ip" + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + }, + "server": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "bytes": { + "type": "long" + }, + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "service": { + "properties": { + "ephemeral_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "state": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "socks5": { + "properties": { + "rtt": { + "properties": { + "connect": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "source": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "bytes": { + "type": "long" + }, + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "geo": { + "properties": { + "city_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "continent_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "country_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "location": { + "type": "geo_point" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_iso_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "region_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "summary": { + "properties": { + "down": { + "type": "long" + }, + "up": { + "type": "long" + } + } + }, + "tags": { + "type": "keyword", + "ignore_above": 1024 + }, + "tcp": { + "properties": { + "rtt": { + "properties": { + "connect": { + "properties": { + "us": { + "type": "long" + } + } + }, + "validate": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "tls": { + "properties": { + "certificate_not_valid_after": { + "type": "date" + }, + "certificate_not_valid_before": { + "type": "date" + }, + "rtt": { + "properties": { + "handshake": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "url": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "fragment": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + }, + "password": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "port": { + "type": "long" + }, + "query": { + "type": "keyword", + "ignore_above": 1024 + }, + "scheme": { + "type": "keyword", + "ignore_above": 1024 + }, + "username": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "user": { + "properties": { + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + } + } +} diff --git a/x-pack/test/functional/es_archives/uptime/location/mappings.json.gz b/x-pack/test/functional/es_archives/uptime/location/mappings.json.gz deleted file mode 100644 index 00bba8f647f55a95b2d8b11b9c1f5088c22a3fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2361 zcmV-93C8vxiwFosH1%8n18re&aA|I5b1rIgZ*BnX9ovqhHuQbIVwA^fJK9#QRQ0L< zQB}x+li&^5tZg!zUCqDOkjcydzF;l}vVPgkVC-|TeSEIw$HU{}PFxDu{r$MZB!O?c zPt~I{%F6255BbOAtwp|)0%BqhNc{TO)90tp^~pN!5NG`?cxi_RcQ35R~IM5|9@e5>SEr_icc8IP%pD?IGh0==Jjgi8RWQ zh|>zr^{uC0KA`bRj(j0{B`UhHhYKeE?7myS)dBT^uP3-XQxew4M}-vW&X3|V5O?E2Og=t*dNk`v%Mb((Hlp!f=#M~Fwa(K^IVgf%`A${<2} zdaefe?ep({e42u?*I)m=3mqwFq67rQ;wqgEDC6+fTrgSy6BwHFy8B1q9JoMv(Zc=> zt7_n#ilsYr1R~nqG=S=I#4qnIYkBC!}3G8!YH76c98a+O5|#d6d3 z8g?;y7#t-v%TDSm4t{v>VEVgrT(&ii1~RhM*gHqD7l~FNspX2161bqOeZV-5P;y{H zBr8bKpDnWR4rP`tCrXZtma6qtH(Ho>1*}r$oN(`rzlMgozkz`>A)!n zTx+LlUa)HrsXdfiTDI9^)@|cj4HzP8e9VK>34_j3_@O<{D)sU^C7#ScBF$+MD}k+n zg)3dk-Sa)g>KU^!QDe6*NsUDL3&i)at0cl_oT$~2$v4wgeO<~kaC2?C2vAR6Ae^J) zpxv>UN+yuXK{_#9r&Tw&jri684}i)r3W(WKeI~eR5Zk^ELqTK2XL|ezYU2A>RttJa( z3SuE{gEmsSY=|BhqmC1!R3SE-^N~vvN@MTeU{DWC$lE(^(-73LB7-Bx{b-&2IM- zHgjY;xk8gN^CKxK!$(YzO2M81SSe!a%PoibDdMs0V*+=`D6%*b-v^2+u|0A$E~P5N z!YH`xTayc9HplFnv+`Mb3%)IQiYe2=wR&8$XJ-$ZwHuooxW^#@XRHoUPCg}4F99;2 z^4RvOdJ@q(qj`>avM*&e_XcSE0;bOzvug&gmhhuoaQxlK6uY#R!ukjz@`kau4DoWV zU2T=>-6)M&G#jEbGuR8ZXv`cStc&d52{WnKs@kOCM-OrI5J$iD3vqM2lxS zUeJ4y6_hu6R<>$4K|?wC3O1675f&z>hRZ>ubeS!}-~fy%Pp*l9JDu7LctHtQp4?%T z*Dr2vm2-ha$$NPWG=sV=Au&isny0AO0xHL@p20JA+cr@ONL@X-0U`ty$_$W zBNslYE;#H(<3dK&I^8@R;*w1e=;Of7!~8h1Jt>vfFEp^2X--JeDPHgedX3AWWHaRe zTP47$+*gk0uI6kO0)$Adr-~7dzA9i;y^!w4hXxjR>#J#TGJztamwcdjULir#-9^C* z8eLrKzdVYz#>W7LN6=Da5D9UyXvP4saoRaEr+} z-jZal{$4Mj7OcpUs=gfh_K6 z+}^^7poo9aCQppecU(%C~g`>kI{ zXE$KyIh}nIdFI2?ze5tXSI{8|dsf&^GDK=97-c>+V{d8S+R)n^pq7mPQ+7lIe|Nr| z`TlERJI8^MAKGJJ2D4Tz_NND=74ut~=eD(~7vuM~wdHb+yZ5JC>bZ}8Tzl{h;!>c! zryIolEibcN?BPurJ;D_CZlw&+ps1!jwm5}HUSQ#A;Z#oG>Lb2a$K`C7Ia>EJgG_O~ zqxpn(GrD@9pv?T!Ol-3!r`fp^*qRXec0hSs>4jZ%jl3~OUlanuih#STF?^dt2P!yW zgA+D5VQ>9{6V`y;M*O1T+Z>@1e;Dq)@z>B$_Yal$cEF($zxlhZ+;%T4Hfpy}q>uwc znXkN<&3jY3J_u#GB3{M}G)%REP&V5L#JP3ZH;Z?TyR z#)ibD1nQ(C79Ct z%^`4L=%~A4W4rl~UcW 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);