diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index fb530de8d68cf..438e601a6d947 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -55,7 +55,7 @@ disabled: # Elastic Synthetics configs - x-pack/plugins/synthetics/e2e/config.ts - - x-pack/plugins/synthetics/e2e/uptime/synthetics_run.ts + - x-pack/plugins/uptime/e2e/uptime/synthetics_run.ts - x-pack/plugins/synthetics/e2e/synthetics/synthetics_run.ts - x-pack/plugins/ux/e2e/synthetics_run.ts - x-pack/plugins/exploratory_view/e2e/synthetics_run.ts diff --git a/.buildkite/scripts/steps/functional/uptime_plugin.sh b/.buildkite/scripts/steps/functional/uptime_plugin.sh index aba449dfdbba4..b1ae17ff3d9fc 100755 --- a/.buildkite/scripts/steps/functional/uptime_plugin.sh +++ b/.buildkite/scripts/steps/functional/uptime_plugin.sh @@ -13,4 +13,4 @@ echo "--- Uptime plugin @elastic/synthetics Tests" cd "$XPACK_DIR" -node plugins/synthetics/scripts/uptime_e2e.js --kibana-install-dir "$KIBANA_BUILD_LOCATION" ${GREP:+--grep \"${GREP}\"} +node plugins/uptime/scripts/uptime_e2e.js --kibana-install-dir "$KIBANA_BUILD_LOCATION" ${GREP:+--grep \"${GREP}\"} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index dc56b21ae393b..4ea35b9550fba 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -726,6 +726,7 @@ examples/unified_field_list_examples @elastic/kibana-data-discovery src/plugins/unified_histogram @elastic/kibana-data-discovery src/plugins/unified_search @elastic/kibana-visualizations x-pack/plugins/upgrade_assistant @elastic/platform-deployment-management +x-pack/plugins/uptime @elastic/uptime x-pack/plugins/drilldowns/url_drilldown @elastic/kibana-app-services src/plugins/url_forwarding @elastic/kibana-visualizations packages/kbn-url-state @elastic/security-threat-hunting-investigations diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index e06c03a3a5b2f..03f7f3335698a 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -800,6 +800,11 @@ As a developer you can reuse and extend built-in alerts and actions UI functiona |Upgrade Assistant helps users prepare their Stack for being upgraded to the next version of the Elastic stack. +|{kib-repo}blob/{branch}/x-pack/plugins/uptime/README.md[uptime] +|The purpose of this plugin is to provide users of Heartbeat more visibility of what's happening +in their infrastructure. + + |{kib-repo}blob/{branch}/x-pack/plugins/drilldowns/url_drilldown/README.md[urlDrilldown] |NOTE: This plugin contains implementation of URL drilldown. For drilldowns infrastructure code refer to ui_actions_enhanced plugin. diff --git a/package.json b/package.json index 51c4c29da929c..c6c06f6703ca4 100644 --- a/package.json +++ b/package.json @@ -716,6 +716,7 @@ "@kbn/unified-histogram-plugin": "link:src/plugins/unified_histogram", "@kbn/unified-search-plugin": "link:src/plugins/unified_search", "@kbn/upgrade-assistant-plugin": "link:x-pack/plugins/upgrade_assistant", + "@kbn/uptime-plugin": "link:x-pack/plugins/uptime", "@kbn/url-drilldown-plugin": "link:x-pack/plugins/drilldowns/url_drilldown", "@kbn/url-forwarding-plugin": "link:src/plugins/url_forwarding", "@kbn/url-state": "link:packages/kbn-url-state", diff --git a/packages/kbn-babel-preset/styled_components_files.js b/packages/kbn-babel-preset/styled_components_files.js index 125f859be347b..67218847cec65 100644 --- a/packages/kbn-babel-preset/styled_components_files.js +++ b/packages/kbn-babel-preset/styled_components_files.js @@ -14,7 +14,7 @@ module.exports = { USES_STYLED_COMPONENTS: [ /packages[\/\\]kbn-ui-shared-deps-(npm|src)[\/\\]/, /src[\/\\]plugins[\/\\](kibana_react)[\/\\]/, - /x-pack[\/\\]plugins[\/\\](apm|beats_management|cases|fleet|infra|lists|observability|observability_shared|exploratory_view|osquery|security_solution|timelines|synthetics|ux)[\/\\]/, + /x-pack[\/\\]plugins[\/\\](apm|beats_management|cases|fleet|infra|lists|observability|observability_shared|exploratory_view|osquery|security_solution|timelines|synthetics|ux|uptime)[\/\\]/, /x-pack[\/\\]test[\/\\]plugin_functional[\/\\]plugins[\/\\]resolver_test[\/\\]/, /x-pack[\/\\]packages[\/\\]elastic_assistant[\/\\]/, /x-pack[\/\\]packages[\/\\]security-solution[\/\\]ecs_data_quality_dashboard[\/\\]/, diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index b16cfa97146e8..5b42f0ccd6edf 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -140,6 +140,7 @@ pageLoadAssetSize: unifiedHistogram: 19928 unifiedSearch: 71059 upgradeAssistant: 81241 + uptime: 37842 urlDrilldown: 30063 urlForwarding: 32579 usageCollection: 39762 diff --git a/tsconfig.base.json b/tsconfig.base.json index e6c7091676eda..cd3d75fbdc91e 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1446,6 +1446,8 @@ "@kbn/unified-search-plugin/*": ["src/plugins/unified_search/*"], "@kbn/upgrade-assistant-plugin": ["x-pack/plugins/upgrade_assistant"], "@kbn/upgrade-assistant-plugin/*": ["x-pack/plugins/upgrade_assistant/*"], + "@kbn/uptime-plugin": ["x-pack/plugins/uptime"], + "@kbn/uptime-plugin/*": ["x-pack/plugins/uptime/*"], "@kbn/url-drilldown-plugin": ["x-pack/plugins/drilldowns/url_drilldown"], "@kbn/url-drilldown-plugin/*": ["x-pack/plugins/drilldowns/url_drilldown/*"], "@kbn/url-forwarding-plugin": ["src/plugins/url_forwarding"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 08d1e0a7fbe3d..3ca91c4711833 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -87,6 +87,7 @@ "xpack.upgradeAssistant": "plugins/upgrade_assistant", "xpack.synthetics": ["plugins/synthetics"], "xpack.ux": ["plugins/ux"], + "xpack.uptime": ["plugins/uptime"], "xpack.urlDrilldown": "plugins/drilldowns/url_drilldown", "xpack.watcher": "plugins/watcher" }, diff --git a/x-pack/plugins/synthetics/common/requests/get_certs_request_body.ts b/x-pack/plugins/synthetics/common/requests/get_certs_request_body.ts index 3c1c0d48d633a..f98de286aa5a2 100644 --- a/x-pack/plugins/synthetics/common/requests/get_certs_request_body.ts +++ b/x-pack/plugins/synthetics/common/requests/get_certs_request_body.ts @@ -7,10 +7,10 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import DateMath from '@kbn/datemath'; +import type { CertificatesResults } from '../../server/queries/get_certs'; import { CertResult, GetCertsParams, Ping } from '../runtime_types'; import { createEsQuery } from '../utils/es_search'; -import type { CertificatesResults } from '../../server/legacy_uptime/lib/requests/get_certs'; import { asMutableArray } from '../utils/as_mutable_array'; enum SortFields { diff --git a/x-pack/plugins/synthetics/e2e/synthetics/journeys/alert_rules/default_status_alert.journey.ts b/x-pack/plugins/synthetics/e2e/synthetics/journeys/alert_rules/default_status_alert.journey.ts index 72d9c63808914..95a74d77db810 100644 --- a/x-pack/plugins/synthetics/e2e/synthetics/journeys/alert_rules/default_status_alert.journey.ts +++ b/x-pack/plugins/synthetics/e2e/synthetics/journeys/alert_rules/default_status_alert.journey.ts @@ -9,8 +9,8 @@ import { journey, step, before, after, expect } from '@elastic/synthetics'; import { byTestId } from '@kbn/ux-plugin/e2e/journeys/utils'; import { RetryService } from '@kbn/ftr-common-functional-services'; import { v4 as uuidv4 } from 'uuid'; +import { getReasonMessage } from '../../../../server/alert_rules/status_rule/message_utils'; import { recordVideo } from '../../../helpers/record_video'; -import { getReasonMessage } from '../../../../server/legacy_uptime/lib/alerts/status_check'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; import { SyntheticsServices } from '../services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/kibana.jsonc b/x-pack/plugins/synthetics/kibana.jsonc index 9ed7f52cb67c7..bfef1566d7e9c 100644 --- a/x-pack/plugins/synthetics/kibana.jsonc +++ b/x-pack/plugins/synthetics/kibana.jsonc @@ -30,13 +30,11 @@ "taskManager", "triggersActionsUi", "usageCollection", - "unifiedSearch", "bfetch" ], "optionalPlugins": ["cloud", "data", "fleet", "home", "ml", "spaces", "telemetry"], "requiredBundles": [ "data", - "unifiedSearch", "fleet", "kibanaReact", "kibanaUtils", @@ -45,4 +43,4 @@ "indexLifecycleManagement" ] } -} \ No newline at end of file +} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/translations.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/translations.ts deleted file mode 100644 index fa91fdc8b45fa..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/translations.ts +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const OK = i18n.translate('xpack.synthetics.certs.ok', { - defaultMessage: 'OK', -}); - -export const EXPIRED = i18n.translate('xpack.synthetics.certs.expired', { - defaultMessage: 'Expired', -}); - -export const EXPIRES_SOON = i18n.translate('xpack.synthetics.certs.expireSoon', { - defaultMessage: 'Expires soon', -}); - -export const EXPIRES = i18n.translate('xpack.synthetics.certs.expires', { - defaultMessage: 'Expires', -}); - -export const SEARCH_CERTS = i18n.translate('xpack.synthetics.certs.searchCerts', { - defaultMessage: 'Search certificates', -}); - -export const STATUS_COL = i18n.translate('xpack.synthetics.certs.list.status', { - defaultMessage: 'Status', -}); - -export const TOO_OLD = i18n.translate('xpack.synthetics.certs.list.status.old', { - defaultMessage: 'Too old', -}); - -export const COMMON_NAME_COL = i18n.translate('xpack.synthetics.certs.list.commonName', { - defaultMessage: 'Common name', -}); - -export const MONITORS_COL = i18n.translate('xpack.synthetics.certs.list.monitors', { - defaultMessage: 'Monitors', -}); - -export const ISSUED_BY_COL = i18n.translate('xpack.synthetics.certs.list.issuedBy', { - defaultMessage: 'Issued by', -}); - -export const VALID_UNTIL_COL = i18n.translate('xpack.synthetics.certs.list.validUntil', { - defaultMessage: 'Valid until', -}); - -export const AGE_COL = i18n.translate('xpack.synthetics.certs.list.ageCol', { - defaultMessage: 'Age', -}); - -export const DAYS = i18n.translate('xpack.synthetics.certs.list.days', { - defaultMessage: 'days', -}); - -export const FINGERPRINTS_COL = i18n.translate('xpack.synthetics.certs.list.expirationDate', { - defaultMessage: 'Fingerprints', -}); - -export const COPY_FINGERPRINT = i18n.translate('xpack.synthetics.certs.list.copyFingerprint', { - defaultMessage: 'Click to copy fingerprint value', -}); - -export const NO_CERTS_AVAILABLE = i18n.translate('xpack.synthetics.certs.list.noCerts', { - defaultMessage: 'No Certificates found.', -}); - -export const LOADING_CERTIFICATES = i18n.translate('xpack.synthetics.certificates.loading', { - defaultMessage: 'Loading certificates ...', -}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.ts deleted file mode 100644 index 065af8f7ff5d2..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const prevAriaLabel = i18n.translate( - 'xpack.synthetics.synthetics.prevStepButton.airaLabel', - { - defaultMessage: 'Previous step', - } -); - -export const nextAriaLabel = i18n.translate( - 'xpack.synthetics.synthetics.nextStepButton.ariaLabel', - { - defaultMessage: 'Next step', - } -); - -export const imageLoadingSpinnerAriaLabel = i18n.translate( - 'xpack.synthetics.synthetics.imageLoadingSpinner.ariaLabel', - { - defaultMessage: 'An animated spinner indicating the image is loading', - } -); - -export const fullSizeImageAlt = i18n.translate( - 'xpack.synthetics.synthetics.thumbnail.fullSize.alt', - { - defaultMessage: `A larger version of the screenshot for this journey step's thumbnail.`, - } -); - -export const formatCaptionContent = (stepNumber: number, totalSteps?: number) => - i18n.translate('xpack.synthetics.synthetics.pingTimestamp.captionContent', { - defaultMessage: 'Step: {stepNumber} of {totalSteps}', - values: { - stepNumber, - totalSteps, - }, - }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/translations.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/translations.ts deleted file mode 100644 index 81e4451f9103f..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/translations.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const STATUS_LABEL = i18n.translate('xpack.synthetics.pingList.statusColumnLabel', { - defaultMessage: 'Status', -}); - -export const RES_CODE_LABEL = i18n.translate('xpack.synthetics.pingList.responseCodeColumnLabel', { - defaultMessage: 'Response code', -}); -export const ERROR_TYPE_LABEL = i18n.translate('xpack.synthetics.pingList.errorTypeColumnLabel', { - defaultMessage: 'Error type', -}); -export const ERROR_LABEL = i18n.translate('xpack.synthetics.pingList.errorColumnLabel', { - defaultMessage: 'Error', -}); - -export const LOCATION_LABEL = i18n.translate('xpack.synthetics.pingList.locationNameColumnLabel', { - defaultMessage: 'Location', -}); - -export const TIMESTAMP_LABEL = i18n.translate('xpack.synthetics.pingList.timestampColumnLabel', { - defaultMessage: 'Timestamp', -}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts deleted file mode 100644 index 05d736826a48b..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const alertFilterLabels = { - USING: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.using', { - defaultMessage: 'Using', - }), - - USING_PORT: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.usingPort', { - defaultMessage: 'Using port', - }), - - ANY_PORT: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.anyPort', { - defaultMessage: 'any port', - }), - - WITH: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.with', { - defaultMessage: 'Using', - }), - - WITH_TAG: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.withTag', { - defaultMessage: 'With tag', - }), - - ANY_TAG: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.anyTag', { - defaultMessage: 'any tag', - }), - - OF: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.of', { - defaultMessage: 'Of', - }), - - OF_TYPE: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.ofType', { - defaultMessage: 'Of type', - }), - - ANY_TYPE: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.anyType', { - defaultMessage: 'any type', - }), - - FROM: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.from', { - defaultMessage: 'From', - }), - - FROM_LOCATION: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.fromLocation', { - defaultMessage: 'From location', - }), - - ANY_LOCATION: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.anyLocation', { - defaultMessage: 'any location', - }), - - REMOVE_FILTER_LABEL: (title: string) => - i18n.translate('xpack.synthetics.alerts.monitorExpression.label', { - defaultMessage: 'Remove filter {title}', - values: { title }, - }), -}; - -export const statusExpLabels = { - ENABLED_CHECKBOX: i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.statusEnabledCheck.label', - { - defaultMessage: 'Status check', - } - ), -}; - -export const timeExpLabels = { - OPEN_TIME_POPOVER: i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeUnitExpression.ariaLabel', - { - defaultMessage: 'Open the popover for time range unit select field', - } - ), - SELECT_TIME_RANGE_ARIA: i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeUnitSelectable', - { - defaultMessage: 'Selectable field for the time range units alerts should use', - } - ), - SELECT_TIME_RANGE_HEADLINE: i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeSelectionHeader', - { - defaultMessage: 'Select time range unit', - } - ), -}; - -export const filterAriaLabels = { - PORT: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.port.label', { - defaultMessage: `Select port filters to apply to the alert's query.`, - }), - TAG: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.tag.label', { - defaultMessage: `Select tag filters to apply to the alert's query.`, - }), - SCHEME: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.scheme.label', { - defaultMessage: `Select protocol scheme filters to apply to the alert's query.`, - }), - LOCATION: i18n.translate('xpack.synthetics.alerts.monitorStatus.filters.location.label', { - defaultMessage: `Select location filters to apply to the alert's query.`, - }), -}; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts b/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts deleted file mode 100644 index d2a7e3672bc87..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; - -export const ENABLE_STATUS_ALERT = i18n.translate('xpack.synthetics.monitorList.enableDownAlert', { - defaultMessage: 'Enable status alerts', -}); - -export const DISABLE_STATUS_ALERT = i18n.translate( - 'xpack.synthetics.monitorList.disableDownAlert', - { - defaultMessage: 'Disable status alerts', - } -); - -export const EXPAND_TAGS_LABEL = i18n.translate('xpack.synthetics.monitorList.tags.expand', { - defaultMessage: 'Click to view remaining tags', -}); - -export const EXPAND_LOCATIONS_LABEL = i18n.translate( - 'xpack.synthetics.monitorList.locations.expand', - { - defaultMessage: 'Click to view remaining locations', - } -); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.test.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.test.tsx deleted file mode 100644 index 0dcfc1d31f66d..0000000000000 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.test.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { renderHook } from '@testing-library/react-hooks'; -import { useMonitorHistogram } from './use_monitor_histogram'; -import { WrappedHelper } from '../../../../apps/synthetics/utils/testing'; -import * as searchHooks from '@kbn/observability-shared-plugin/public/hooks/use_es_search'; -import * as reduxHooks from 'react-redux'; - -describe('useMonitorHistogram', () => { - const dynamicIndexPattern = 'synthetics-*'; - const useEsSearch = jest.fn().mockReturnValue({}); - jest - .spyOn(reduxHooks, 'useSelector') - .mockReturnValue({ settings: { heartbeatIndices: dynamicIndexPattern } }); - jest.spyOn(searchHooks, 'useEsSearch').mockImplementation(useEsSearch); - - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('calls dynamic heartbeat index', () => { - renderHook(() => useMonitorHistogram({ items: [] }), { - wrapper: WrappedHelper, - }); - expect(useEsSearch).toBeCalledWith( - expect.objectContaining({ index: dynamicIndexPattern }), - ['[]', 0], - { name: 'getMonitorDownHistory' } - ); - }); -}); diff --git a/x-pack/plugins/synthetics/public/plugin.ts b/x-pack/plugins/synthetics/public/plugin.ts index 6764eb4fd5c65..28802415c38bf 100644 --- a/x-pack/plugins/synthetics/public/plugin.ts +++ b/x-pack/plugins/synthetics/public/plugin.ts @@ -12,7 +12,7 @@ import { PluginInitializerContext, AppMountParameters, } from '@kbn/core/public'; -import { BehaviorSubject, from } from 'rxjs'; +import { from } from 'rxjs'; import { map } from 'rxjs/operators'; import { i18n } from '@kbn/i18n'; import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; @@ -34,8 +34,6 @@ import { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/p import { FleetStart } from '@kbn/fleet-plugin/public'; import { - enableLegacyUptimeApp, - FetchDataParams, ObservabilityPublicSetup, ObservabilityPublicStart, } from '@kbn/observability-plugin/public'; @@ -51,18 +49,8 @@ import type { ObservabilitySharedPluginSetup, ObservabilitySharedPluginStart, } from '@kbn/observability-shared-plugin/public'; -import { AppStatus, AppUpdater } from '@kbn/core-application-browser'; import { PLUGIN } from '../common/constants/plugin'; import { OVERVIEW_ROUTE } from '../common/constants/ui'; -import { - LazySyntheticsPolicyCreateExtension, - LazySyntheticsPolicyEditExtension, -} from './legacy_uptime/components/fleet_package'; -import { LazySyntheticsCustomAssetsExtension } from './legacy_uptime/components/fleet_package/lazy_synthetics_custom_assets_extension'; -import { - uptimeAlertTypeInitializers, - legacyAlertTypeInitializers, -} from './legacy_uptime/lib/alert_types'; import { locators } from './apps/locators'; import { setStartServices } from './kibana_services'; import { syntheticsAlertTypeInitializers } from './apps/synthetics/lib/alert_types'; @@ -119,61 +107,13 @@ export class UptimePlugin { constructor(private readonly initContext: PluginInitializerContext) {} - private uptimeAppUpdater = new BehaviorSubject(() => ({})); - public setup(core: CoreSetup, plugins: ClientPluginsSetup): void { - if (plugins.home) { - plugins.home.featureCatalogue.register({ - id: PLUGIN.ID, - title: PLUGIN.TITLE, - description: PLUGIN.DESCRIPTION, - icon: 'uptimeApp', - path: '/app/uptime', - showOnHomePage: false, - category: 'data', - }); - } - const getUptimeDataHelper = async () => { - const [coreStart] = await core.getStartServices(); - const { UptimeDataHelper } = await import('./legacy_uptime/app/uptime_overview_fetcher'); - - return UptimeDataHelper(coreStart); - }; - locators.forEach((locator) => { plugins.share.url.locators.create(locator); }); - plugins.observability.dashboard.register({ - appName: 'uptime', - hasData: async () => { - const dataHelper = await getUptimeDataHelper(); - const status = await dataHelper.indexStatus(); - return { hasData: status.indexExists, indices: status.indices }; - }, - fetchData: async (params: FetchDataParams) => { - const dataHelper = await getUptimeDataHelper(); - return await dataHelper.overviewData(params); - }, - }); - - plugins.exploratoryView.register({ - appName: 'uptime', - hasData: async () => { - const dataHelper = await getUptimeDataHelper(); - const status = await dataHelper.indexStatus(); - return { hasData: status.indexExists, indices: status.indices }; - }, - fetchData: async (params: FetchDataParams) => { - const dataHelper = await getUptimeDataHelper(); - return await dataHelper.overviewData(params); - }, - }); - registerSyntheticsRoutesWithNavigation(core, plugins); - core.getStartServices().then(([coreStart, clientPluginsStart]) => {}); - const appKeywords = [ 'Synthetics', 'availability', @@ -192,27 +132,6 @@ export class UptimePlugin 'web perf', ]; - core.application.register({ - id: PLUGIN.ID, - euiIconType: 'logoObservability', - - order: 8400, - title: PLUGIN.TITLE, - category: DEFAULT_APP_CATEGORIES.observability, - keywords: appKeywords, - deepLinks: [ - { id: 'Down monitors', title: 'Down monitors', path: '/?statusFilter=down' }, - { id: 'Certificates', title: 'TLS Certificates', path: '/certificates' }, - { id: 'Settings', title: 'Settings', path: '/settings' }, - ], - mount: async (params: AppMountParameters) => { - const [coreStart, corePlugins] = await core.getStartServices(); - const { renderApp } = await import('./legacy_uptime/app/render_app'); - return renderApp(coreStart, plugins, corePlugins, params, this.initContext.env.mode.dev); - }, - updater$: this.uptimeAppUpdater, - }); - // Register the Synthetics UI plugin core.application.register({ id: 'synthetics', @@ -234,9 +153,7 @@ export class UptimePlugin public start(coreStart: CoreStart, pluginsStart: ClientPluginsStart): void { const { triggersActionsUi } = pluginsStart; - const { registerExtension } = pluginsStart.fleet; setStartServices(coreStart); - registerUptimeFleetExtensions(registerExtension); syntheticsAlertTypeInitializers.forEach((init) => { const { observabilityRuleTypeRegistry } = pluginsStart.observability; @@ -249,69 +166,11 @@ export class UptimePlugin observabilityRuleTypeRegistry.register(alertInitializer); } }); - - uptimeAlertTypeInitializers.forEach((init) => { - const { observabilityRuleTypeRegistry } = pluginsStart.observability; - - const alertInitializer = init({ - core: coreStart, - plugins: pluginsStart, - }); - if (!triggersActionsUi.ruleTypeRegistry.has(alertInitializer.id)) { - observabilityRuleTypeRegistry.register(alertInitializer); - } - }); - - legacyAlertTypeInitializers.forEach((init) => { - const alertInitializer = init({ - core: coreStart, - plugins: pluginsStart, - }); - if (!triggersActionsUi.ruleTypeRegistry.has(alertInitializer.id)) { - triggersActionsUi.ruleTypeRegistry.register(alertInitializer); - } - }); - - setUptimeAppStatus(coreStart, pluginsStart, this.uptimeAppUpdater); } public stop(): void {} } -function registerUptimeRoutesWithNavigation(coreStart: CoreStart, plugins: ClientPluginsStart) { - async function getUptimeSections() { - if (coreStart.application.capabilities.uptime.show) { - return [ - { - label: 'Uptime', - sortKey: 500, - entries: [ - { - label: i18n.translate('xpack.synthetics.overview.uptimeHeading', { - defaultMessage: 'Uptime Monitors', - }), - app: 'uptime', - path: '/', - matchFullPath: true, - ignoreTrailingSlash: true, - }, - { - label: i18n.translate('xpack.synthetics.certificatesPage.heading', { - defaultMessage: 'TLS Certificates', - }), - app: 'uptime', - path: '/certificates', - matchFullPath: true, - }, - ], - }, - ]; - } - return []; - } - plugins.observabilityShared.navigation.registerSections(from(getUptimeSections())); -} - function registerSyntheticsRoutesWithNavigation( core: CoreSetup, plugins: ClientPluginsSetup @@ -353,48 +212,3 @@ function registerSyntheticsRoutesWithNavigation( ) ); } - -function registerUptimeFleetExtensions(registerExtension: FleetStart['registerExtension']) { - registerExtension({ - package: 'synthetics', - view: 'package-policy-create', - Component: LazySyntheticsPolicyCreateExtension, - }); - - registerExtension({ - package: 'synthetics', - view: 'package-policy-edit', - useLatestPackageVersion: true, - Component: LazySyntheticsPolicyEditExtension, - }); - - registerExtension({ - package: 'synthetics', - view: 'package-detail-assets', - Component: LazySyntheticsCustomAssetsExtension, - }); -} - -function setUptimeAppStatus( - coreStart: CoreStart, - pluginsStart: ClientPluginsStart, - updater: BehaviorSubject -) { - import('./legacy_uptime/app/uptime_overview_fetcher').then(({ UptimeDataHelper }) => { - const isEnabled = coreStart.uiSettings.get(enableLegacyUptimeApp); - if (isEnabled) { - registerUptimeRoutesWithNavigation(coreStart, pluginsStart); - updater.next(() => ({ status: AppStatus.accessible })); - } else { - const indexStatusPromise = UptimeDataHelper(coreStart).indexStatus('now-7d', 'now'); - indexStatusPromise.then((indexStatus) => { - if (indexStatus.indexExists) { - registerUptimeRoutesWithNavigation(coreStart, pluginsStart); - updater.next(() => ({ status: AppStatus.accessible })); - } else { - updater.next(() => ({ status: AppStatus.inaccessible })); - } - }); - } - }); -} diff --git a/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts b/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts index 3e70b51298ec8..0518da81a35bc 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import { UptimeCorePluginsSetup } from '../legacy_uptime/lib/adapters'; +import { SyntheticsPluginsSetupDependencies } from '../types'; import { commonMonitorStateI18, commonStateTranslations } from './translations'; export const MESSAGE = 'message'; @@ -15,7 +15,11 @@ export const ALERT_DETAILS_URL = 'alertDetailsUrl'; export const VIEW_IN_APP_URL = 'viewInAppUrl'; export const RECOVERY_REASON = 'recoveryReason'; -export const getActionVariables = ({ plugins }: { plugins: UptimeCorePluginsSetup }) => { +export const getActionVariables = ({ + plugins, +}: { + plugins: SyntheticsPluginsSetupDependencies; +}) => { return { context: [ ACTION_VARIABLES[MESSAGE], diff --git a/x-pack/plugins/synthetics/server/alert_rules/common.ts b/x-pack/plugins/synthetics/server/alert_rules/common.ts index 8699540ab2782..dc8bb9c25afe2 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/common.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/common.ts @@ -8,9 +8,20 @@ import moment, { Moment } from 'moment'; import { isRight } from 'fp-ts/lib/Either'; import Mustache from 'mustache'; import { IBasePath } from '@kbn/core/server'; -import { RuleExecutorServices } from '@kbn/alerting-plugin/server'; +import { IRuleTypeAlerts, RuleExecutorServices } from '@kbn/alerting-plugin/server'; import { addSpaceIdToPath } from '@kbn/spaces-plugin/common'; import { i18n } from '@kbn/i18n'; +import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; +import { legacyExperimentalFieldMap } from '@kbn/alerts-as-data-utils'; +import { combineFiltersAndUserSearch, stringifyKueries } from '../../common/lib'; +import { SYNTHETICS_RULE_TYPES_ALERT_CONTEXT } from '../../common/constants/synthetics_alerts'; +import { uptimeRuleFieldMap } from '../../common/rules/uptime_rule_field_map'; +import { + getUptimeIndexPattern, + IndexPatternTitleAndFields, +} from '../legacy_uptime/lib/requests/get_index_pattern'; +import { StatusCheckFilters } from '../../common/runtime_types'; +import { UptimeEsClient } from '../lib'; import { getMonitorSummary } from './status_rule/message_utils'; import { SyntheticsCommonState, @@ -286,3 +297,53 @@ export const setRecoveredAlertsContext = ({ export const RECOVERED_LABEL = i18n.translate('xpack.synthetics.monitorStatus.recoveredLabel', { defaultMessage: 'recovered', }); + +export const formatFilterString = async ( + uptimeEsClient: UptimeEsClient, + filters?: StatusCheckFilters, + search?: string +) => + await generateFilterDSL( + () => + getUptimeIndexPattern({ + uptimeEsClient, + }), + filters, + search + ); + +export const hasFilters = (filters?: StatusCheckFilters) => { + if (!filters) return false; + for (const list of Object.values(filters)) { + if (list.length > 0) { + return true; + } + } + return false; +}; + +export const generateFilterDSL = async ( + getIndexPattern: () => Promise, + filters?: StatusCheckFilters, + search?: string +) => { + const filtersExist = hasFilters(filters); + if (!filtersExist && !search) return undefined; + + let filterString = ''; + if (filtersExist) { + filterString = stringifyKueries(new Map(Object.entries(filters ?? {}))); + } + + const combinedString = combineFiltersAndUserSearch(filterString, search); + + return toElasticsearchQuery(fromKueryExpression(combinedString ?? ''), await getIndexPattern()); +}; + +export const uptimeRuleTypeFieldMap = { ...uptimeRuleFieldMap, ...legacyExperimentalFieldMap }; + +export const UptimeRuleTypeAlertDefinition: IRuleTypeAlerts = { + context: SYNTHETICS_RULE_TYPES_ALERT_CONTEXT, + mappings: { fieldMap: uptimeRuleTypeFieldMap }, + useLegacyAlerts: true, +}; diff --git a/x-pack/plugins/synthetics/server/alert_rules/status_rule/message_utils.ts b/x-pack/plugins/synthetics/server/alert_rules/status_rule/message_utils.ts index 7b2918ed4c1c1..f05309dbd8511 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/status_rule/message_utils.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/status_rule/message_utils.ts @@ -8,6 +8,7 @@ import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { ALERT_REASON } from '@kbn/rule-data-utils'; +import { ALERT_REASON_MSG } from '../action_variables'; import { MonitorSummaryStatusRule } from './types'; import { MONITOR_ID, @@ -21,7 +22,6 @@ import { } from '../../../common/field_names'; import { OverviewPing } from '../../../common/runtime_types'; import { UNNAMED_LOCATION } from '../../../common/constants'; -import { ALERT_REASON_MSG } from '../../legacy_uptime/lib/alerts/action_variables'; export const getMonitorAlertDocument = (monitorSummary: MonitorSummaryStatusRule) => ({ [MONITOR_ID]: monitorSummary.monitorId, diff --git a/x-pack/plugins/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts b/x-pack/plugins/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts index 749a7748ea422..4704afa1ce8cf 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts @@ -7,12 +7,12 @@ import { isEmpty } from 'lodash'; import { ActionGroupIdsOf } from '@kbn/alerting-plugin/common'; import { createLifecycleRuleTypeFactory, IRuleDataClient } from '@kbn/rule-registry-plugin/server'; +import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types'; import { DOWN_LABEL, getMonitorAlertDocument, getMonitorSummary } from './message_utils'; import { SyntheticsCommonState, SyntheticsMonitorStatusAlertState, } from '../../../common/runtime_types/alert_rules/common'; -import { UptimeCorePluginsSetup, UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { OverviewStatus } from '../../../common/runtime_types'; import { StatusRuleExecutor } from './status_rule_executor'; import { StatusRulePramsSchema } from '../../../common/rules/status_rule'; @@ -27,23 +27,17 @@ import { getViewInAppUrl, getRelativeViewInAppUrl, getFullViewInAppMessage, + UptimeRuleTypeAlertDefinition, } from '../common'; -import { getActionVariables } from '../action_variables'; +import { ALERT_DETAILS_URL, getActionVariables, VIEW_IN_APP_URL } from '../action_variables'; import { STATUS_RULE_NAME } from '../translations'; -import { - ALERT_DETAILS_URL, - VIEW_IN_APP_URL, -} from '../../legacy_uptime/lib/alerts/action_variables'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { UptimeRuleTypeAlertDefinition } from '../../legacy_uptime/lib/alerts/common'; export type ActionGroupIds = ActionGroupIdsOf; export const registerSyntheticsStatusCheckRule = ( - server: UptimeServerSetup, - libs: UMServerLibs, - plugins: UptimeCorePluginsSetup, + server: SyntheticsServerSetup, + plugins: SyntheticsPluginsSetupDependencies, syntheticsMonitorClient: SyntheticsMonitorClient, ruleDataClient: IRuleDataClient ) => { diff --git a/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.test.ts b/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.test.ts index bb7cd4317b494..bb9183b661b04 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.test.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.test.ts @@ -8,7 +8,6 @@ import moment from 'moment'; import { loggerMock } from '@kbn/logging-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { StatusRuleExecutor } from './status_rule_executor'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { mockEncryptedSO } from '../../synthetics_service/utils/mocks'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; @@ -16,6 +15,7 @@ import { SyntheticsService } from '../../synthetics_service/synthetics_service'; import * as monitorUtils from '../../saved_objects/synthetics_monitor/get_all_monitors'; import * as locationsUtils from '../../synthetics_service/get_all_locations'; import type { PublicLocation } from '../../../common/runtime_types'; +import { SyntheticsServerSetup } from '../../types'; describe('StatusRuleExecutor', () => { const mockEsClient = elasticsearchClientMock.createElasticsearchClient(); @@ -36,7 +36,7 @@ describe('StatusRuleExecutor', () => { privateLocations: [], }); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: soClient, @@ -53,7 +53,7 @@ describe('StatusRuleExecutor', () => { }, }, encryptedSavedObjects: mockEncryptedSO(), - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const syntheticsService = new SyntheticsService(serverMock); diff --git a/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.ts b/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.ts index d7d85141b6603..8823ec5bb4929 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/status_rule/status_rule_executor.ts @@ -10,6 +10,8 @@ import { SavedObjectsFindResult, } from '@kbn/core-saved-objects-api-server'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { SyntheticsServerSetup } from '../../types'; +import { UptimeEsClient } from '../../lib'; import { SYNTHETICS_INDEX_PATTERN } from '../../../common/constants'; import { getAllLocations } from '../../synthetics_service/get_all_locations'; import { @@ -17,7 +19,6 @@ import { processMonitors, } from '../../saved_objects/synthetics_monitor/get_all_monitors'; import { queryMonitorStatus } from '../../queries/query_monitor_status'; -import { UptimeEsClient } from '../../legacy_uptime/lib/lib'; import { StatusRuleParams } from '../../../common/rules/status_rule'; import { ConfigKey, @@ -26,7 +27,6 @@ import { OverviewStatusMetaData, } from '../../../common/runtime_types'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { monitorAttributes } from '../../../common/types/saved_objects'; import { AlertConfigKey } from '../../../common/constants/monitor_management'; @@ -45,7 +45,7 @@ export class StatusRuleExecutor { params: StatusRuleParams; esClient: UptimeEsClient; soClient: SavedObjectsClientContract; - server: UptimeServerSetup; + server: SyntheticsServerSetup; syntheticsMonitorClient: SyntheticsMonitorClient; monitors: Array> = []; @@ -56,7 +56,7 @@ export class StatusRuleExecutor { p: StatusRuleParams, soClient: SavedObjectsClientContract, scopedClient: ElasticsearchClient, - server: UptimeServerSetup, + server: SyntheticsServerSetup, syntheticsMonitorClient: SyntheticsMonitorClient ) { this.previousStartedAt = previousStartedAt; diff --git a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/message_utils.ts b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/message_utils.ts index 6f87c5242ec79..e92cc37b24166 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/message_utils.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/message_utils.ts @@ -6,8 +6,13 @@ */ import moment from 'moment/moment'; -import { tlsTranslations } from '../translations'; +import { IBasePath } from '@kbn/core-http-server'; +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { AlertsLocatorParams, getAlertUrl } from '@kbn/observability-plugin/common'; +import { RuleExecutorServices } from '@kbn/alerting-plugin/server'; +import { ALERT_DETAILS_URL } from '../action_variables'; import { Cert } from '../../../common/runtime_types'; +import { tlsTranslations } from '../translations'; interface TLSContent { summary: string; status?: string; @@ -68,3 +73,43 @@ export const getCertSummary = (cert: Cert, expirationThreshold: number, ageThres monitorUrl: cert.monitorUrl, }; }; + +export const setRecoveredAlertsContext = async ({ + alertFactory, + basePath, + defaultStartedAt, + getAlertStartedDate, + spaceId, + alertsLocator, + getAlertUuid, +}: { + alertFactory: RuleExecutorServices['alertFactory']; + defaultStartedAt: string; + getAlertStartedDate: (alertInstanceId: string) => string | null; + basePath: IBasePath; + spaceId: string; + alertsLocator?: LocatorPublic; + getAlertUuid?: (alertId: string) => string | null; +}) => { + const { getRecoveredAlerts } = alertFactory.done(); + + for await (const alert of getRecoveredAlerts()) { + const recoveredAlertId = alert.getId(); + const alertUuid = getAlertUuid?.(recoveredAlertId) || null; + const indexedStartedAt = getAlertStartedDate(recoveredAlertId) ?? defaultStartedAt; + + const state = alert.getState(); + const alertUrl = await getAlertUrl( + alertUuid, + spaceId, + indexedStartedAt, + alertsLocator, + basePath.publicBaseUrl + ); + + alert.setContext({ + ...state, + [ALERT_DETAILS_URL]: alertUrl, + }); + } +}; diff --git a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule.ts b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule.ts index fd31b5e8140ff..5cec364cc7634 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule.ts @@ -15,6 +15,7 @@ import { } from '@kbn/observability-plugin/common'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { schema } from '@kbn/config-schema'; +import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types'; import { TlsTranslations } from '../../../common/rules/synthetics/translations'; import { CERT_COMMON_NAME, @@ -23,31 +24,22 @@ import { CERT_VALID_NOT_AFTER, CERT_VALID_NOT_BEFORE, } from '../../../common/field_names'; -import { getCertSummary } from './message_utils'; +import { getCertSummary, setRecoveredAlertsContext } from './message_utils'; import { SyntheticsCommonState } from '../../../common/runtime_types/alert_rules/common'; -import { UptimeCorePluginsSetup, UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { TLSRuleExecutor } from './tls_rule_executor'; import { SYNTHETICS_ALERT_RULE_TYPES, TLS_CERTIFICATE, } from '../../../common/constants/synthetics_alerts'; -import { updateState } from '../common'; -import { getActionVariables } from '../action_variables'; -import { ALERT_DETAILS_URL } from '../../legacy_uptime/lib/alerts/action_variables'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; +import { generateAlertMessage, updateState, UptimeRuleTypeAlertDefinition } from '../common'; +import { ALERT_DETAILS_URL, getActionVariables } from '../action_variables'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { - generateAlertMessage, - setRecoveredAlertsContext, - UptimeRuleTypeAlertDefinition, -} from '../../legacy_uptime/lib/alerts/common'; export type ActionGroupIds = ActionGroupIdsOf; export const registerSyntheticsTLSCheckRule = ( - server: UptimeServerSetup, - libs: UMServerLibs, - plugins: UptimeCorePluginsSetup, + server: SyntheticsServerSetup, + plugins: SyntheticsPluginsSetupDependencies, syntheticsMonitorClient: SyntheticsMonitorClient, ruleDataClient: IRuleDataClient ) => { diff --git a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.test.ts b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.test.ts index a1377e19dbd29..ac89f6f6bbbba 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.test.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.test.ts @@ -8,7 +8,6 @@ import moment from 'moment'; import { loggerMock } from '@kbn/logging-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { TLSRuleExecutor } from './tls_rule_executor'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { mockEncryptedSO } from '../../synthetics_service/utils/mocks'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; @@ -16,6 +15,7 @@ import { SyntheticsService } from '../../synthetics_service/synthetics_service'; import * as monitorUtils from '../../saved_objects/synthetics_monitor/get_all_monitors'; import * as locationsUtils from '../../synthetics_service/get_all_locations'; import type { PublicLocation } from '../../../common/runtime_types'; +import { SyntheticsServerSetup } from '../../types'; describe('tlsRuleExecutor', () => { const mockEsClient = elasticsearchClientMock.createElasticsearchClient(); @@ -36,7 +36,7 @@ describe('tlsRuleExecutor', () => { privateLocations: [], }); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: soClient, @@ -53,7 +53,7 @@ describe('tlsRuleExecutor', () => { }, }, encryptedSavedObjects: mockEncryptedSO(), - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const syntheticsService = new SyntheticsService(serverMock); diff --git a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts index 5949aed727740..ad5f6ad2b88d0 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/tls_rule/tls_rule_executor.ts @@ -11,28 +11,28 @@ import { import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import moment from 'moment'; +import { formatFilterString } from '../common'; +import { SyntheticsServerSetup } from '../../types'; import { getSyntheticsCerts } from '../../queries/get_certs'; import { TLSParams } from '../../../common/runtime_types/alerts/tls'; -import { savedObjectsAdapter } from '../../legacy_uptime/lib/saved_objects'; +import { savedObjectsAdapter } from '../../saved_objects'; import { DYNAMIC_SETTINGS_DEFAULTS, SYNTHETICS_INDEX_PATTERN } from '../../../common/constants'; import { getAllMonitors, processMonitors, } from '../../saved_objects/synthetics_monitor/get_all_monitors'; -import { UptimeEsClient } from '../../legacy_uptime/lib/lib'; import { CertResult, EncryptedSyntheticsMonitor } from '../../../common/runtime_types'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { monitorAttributes } from '../../../common/types/saved_objects'; import { AlertConfigKey } from '../../../common/constants/monitor_management'; -import { formatFilterString } from '../../legacy_uptime/lib/alerts/status_check'; +import { UptimeEsClient } from '../../lib'; export class TLSRuleExecutor { previousStartedAt: Date | null; params: TLSParams; esClient: UptimeEsClient; soClient: SavedObjectsClientContract; - server: UptimeServerSetup; + server: SyntheticsServerSetup; syntheticsMonitorClient: SyntheticsMonitorClient; monitors: Array> = []; @@ -41,7 +41,7 @@ export class TLSRuleExecutor { p: TLSParams, soClient: SavedObjectsClientContract, scopedClient: ElasticsearchClient, - server: UptimeServerSetup, + server: SyntheticsServerSetup, syntheticsMonitorClient: SyntheticsMonitorClient ) { this.previousStartedAt = previousStartedAt; diff --git a/x-pack/plugins/synthetics/server/common/pings/query_pings.ts b/x-pack/plugins/synthetics/server/common/pings/query_pings.ts index 0a15640502248..23c4ce5357819 100644 --- a/x-pack/plugins/synthetics/server/common/pings/query_pings.ts +++ b/x-pack/plugins/synthetics/server/common/pings/query_pings.ts @@ -10,7 +10,7 @@ import { QueryDslFieldAndFormat, QueryDslQueryContainer, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { UMElasticsearchQueryFnParams } from '../../legacy_uptime/lib/adapters/framework'; +import { UptimeEsClient } from '../../lib'; import { GetPingsParams, HttpResponseBody, @@ -65,21 +65,23 @@ function isStringArray(value: unknown): value is string[] { } type QueryFields = Array; -type GetParamsWithFields = UMElasticsearchQueryFnParams< - GetPingsParams & { fields: QueryFields; fieldsExtractorFn: (doc: any) => F } ->; -type GetParamsWithoutFields = UMElasticsearchQueryFnParams; +type GetParamsWithFields = GetPingsParams & { + fields: QueryFields; + fieldsExtractorFn: (doc: any) => F; +}; + +type GetParamsWithoutFields = GetPingsParams; export function queryPings( - params: UMElasticsearchQueryFnParams + params: GetPingsParams & { uptimeEsClient: UptimeEsClient } ): Promise; export function queryPings( - params: UMElasticsearchQueryFnParams> + params: GetParamsWithFields & { uptimeEsClient: UptimeEsClient } ): Promise<{ total: number; pings: F[] }>; export async function queryPings( - params: GetParamsWithFields | GetParamsWithoutFields + params: (GetParamsWithFields | GetParamsWithoutFields) & { uptimeEsClient: UptimeEsClient } ): Promise { const { uptimeEsClient, diff --git a/x-pack/plugins/synthetics/server/feature.ts b/x-pack/plugins/synthetics/server/feature.ts index 75e9a27f1119f..4c2fa529f4690 100644 --- a/x-pack/plugins/synthetics/server/feature.ts +++ b/x-pack/plugins/synthetics/server/feature.ts @@ -11,8 +11,8 @@ import { SYNTHETICS_RULE_TYPES } from '../common/constants/synthetics_alerts'; import { privateLocationsSavedObjectName } from '../common/saved_objects/private_locations'; import { PLUGIN } from '../common/constants/plugin'; import { UPTIME_RULE_TYPES } from '../common/constants/uptime_alerts'; -import { umDynamicSettings } from './legacy_uptime/lib/saved_objects/uptime_settings'; -import { syntheticsApiKeyObjectType } from './legacy_uptime/lib/saved_objects/service_api_key'; +import { umDynamicSettings } from './saved_objects/uptime_settings'; +import { syntheticsApiKeyObjectType } from './saved_objects/service_api_key'; export const uptimeFeature = { id: PLUGIN.ID, diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_index_pattern.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_index_pattern.ts index 6e9dcf2c4ba85..ae7c96b2f3c5d 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_index_pattern.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_index_pattern.ts @@ -6,8 +6,8 @@ */ import { FieldDescriptor, IndexPatternsFetcher } from '@kbn/data-plugin/server'; -import { UptimeEsClient } from '../lib'; -import { savedObjectsAdapter } from '../saved_objects/saved_objects'; +import { SYNTHETICS_INDEX_PATTERN } from '../../../../common/constants'; +import { UptimeEsClient } from '../../../lib'; export interface IndexPatternTitleAndFields { title: string; @@ -21,28 +21,21 @@ export const getUptimeIndexPattern = async ({ }): Promise => { const indexPatternsFetcher = new IndexPatternsFetcher(uptimeEsClient.baseESClient); - const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( - uptimeEsClient.getSavedObjectsClient()! - ); - // Since `getDynamicIndexPattern` is called in setup_request (and thus by every endpoint) - // and since `getFieldsForWildcard` will throw if the specified indices don't exist, - // we have to catch errors here to avoid all endpoints returning 500 for users without APM data - // (would be a bad first time experience) try { const { fields } = await indexPatternsFetcher.getFieldsForWildcard({ - pattern: dynamicSettings.heartbeatIndices, + pattern: SYNTHETICS_INDEX_PATTERN, }); return { fields, - title: dynamicSettings.heartbeatIndices, + title: SYNTHETICS_INDEX_PATTERN, }; } catch (e) { const notExists = e.output?.statusCode === 404; if (notExists) { // eslint-disable-next-line no-console console.error( - `Could not get dynamic index pattern because indices "${dynamicSettings.heartbeatIndices}" don't exist` + `Could not get dynamic index pattern because indices "${SYNTHETICS_INDEX_PATTERN}" don't exist` ); return; } diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_failed_steps.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_failed_steps.ts index c48aecd8cf1dd..ff42e8a5e07dc 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_failed_steps.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_failed_steps.ts @@ -6,18 +6,20 @@ */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { UptimeEsClient } from '../../../lib'; import { asMutableArray } from '../../../../common/utils/as_mutable_array'; -import { UMElasticsearchQueryFn } from '../adapters/framework'; import { JourneyStep } from '../../../../common/runtime_types/ping/synthetics'; export interface GetJourneyStepsParams { checkGroups: string[]; } -export const getJourneyFailedSteps: UMElasticsearchQueryFn< - GetJourneyStepsParams, - JourneyStep[] -> = async ({ uptimeEsClient, checkGroups }) => { +export const getJourneyFailedSteps = async ({ + uptimeEsClient, + checkGroups, +}: GetJourneyStepsParams & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const params = { query: { bool: { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot.ts index a7cbc0cb50d33..318ea118f22ae 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot.ts @@ -6,7 +6,7 @@ */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { UMElasticsearchQueryFn } from '../adapters'; +import { UptimeEsClient } from '../../../lib'; import { RefResult, FullScreenshot } from '../../../../common/runtime_types/ping/synthetics'; interface ResultType { @@ -17,10 +17,16 @@ export type ScreenshotReturnTypesUnion = | ((FullScreenshot | RefResult) & { totalSteps: number }) | null; -export const getJourneyScreenshot: UMElasticsearchQueryFn< - { checkGroup: string; stepIndex: number }, - ScreenshotReturnTypesUnion -> = async ({ checkGroup, stepIndex, uptimeEsClient }) => { +export const getJourneyScreenshot = async ({ + checkGroup, + stepIndex, + uptimeEsClient, +}: { + checkGroup: string; + stepIndex: number; +} & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const body = { track_total_hits: true, size: 0, diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot_blocks.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot_blocks.ts index 954fa1d76e113..44b25ee66259b 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot_blocks.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_screenshot_blocks.ts @@ -5,8 +5,8 @@ * 2.0. */ +import { UptimeEsClient } from '../../../lib'; import { ScreenshotBlockDoc } from '../../../../common/runtime_types'; -import { UMElasticsearchQueryFn } from '../adapters/framework'; interface ScreenshotBlockResultType { _id: string; @@ -18,10 +18,14 @@ interface ScreenshotBlockResultType { }; } -export const getJourneyScreenshotBlocks: UMElasticsearchQueryFn< - { blockIds: string[] }, - ScreenshotBlockDoc[] -> = async ({ blockIds, uptimeEsClient }) => { +export const getJourneyScreenshotBlocks = async ({ + blockIds, + uptimeEsClient, +}: { + blockIds: string[]; +} & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const body = { query: { bool: { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_steps.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_steps.ts index c200a4c22a671..7873268faa9da 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_steps.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_journey_steps.ts @@ -6,8 +6,8 @@ */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { UptimeEsClient } from '../../../lib'; import { asMutableArray } from '../../../../common/utils/as_mutable_array'; -import { UMElasticsearchQueryFn } from '../adapters/framework'; import { JourneyStep } from '../../../../common/runtime_types/ping/synthetics'; export interface GetJourneyStepsParams { @@ -33,10 +33,13 @@ export const formatSyntheticEvents = (eventTypes?: string | string[]) => { type ResultType = JourneyStep & { '@timestamp': string }; -export const getJourneySteps: UMElasticsearchQueryFn< - GetJourneyStepsParams, - JourneyStep[] -> = async ({ uptimeEsClient, checkGroup, syntheticEventTypes }) => { +export const getJourneySteps = async ({ + uptimeEsClient, + checkGroup, + syntheticEventTypes, +}: GetJourneyStepsParams & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const params = { query: { bool: { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_last_successful_check.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_last_successful_check.ts index 99a75c28bf566..d90f694315015 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_last_successful_check.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_last_successful_check.ts @@ -6,7 +6,7 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { UMElasticsearchQueryFn } from '../adapters/framework'; +import { UptimeEsClient } from '../../../lib'; import { Ping } from '../../../../common/runtime_types/ping'; export interface GetStepScreenshotParams { @@ -80,10 +80,14 @@ export const getLastSuccessfulStepParams = ({ }; }; -export const getLastSuccessfulCheck: UMElasticsearchQueryFn< - GetStepScreenshotParams, - Ping | null -> = async ({ uptimeEsClient, monitorId, timestamp, location }) => { +export const getLastSuccessfulCheck = async ({ + uptimeEsClient, + monitorId, + timestamp, + location, +}: GetStepScreenshotParams & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const lastSuccessCheckParams = getLastSuccessfulStepParams({ monitorId, timestamp, diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts index ec0642409dc01..d2c97acb4eba1 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.test.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { getUptimeESMockClient } from './test_helpers'; import { getNetworkEvents, secondsToMillis } from './get_network_events'; +import { getUptimeESMockClient } from './test_helpers'; describe('getNetworkEvents', () => { describe('secondsToMillis conversion', () => { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.ts index 74c8e85ff3cb2..d860e944a8c06 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_network_events.ts @@ -6,7 +6,7 @@ */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { UMElasticsearchQueryFn } from '../adapters/framework'; +import { UptimeEsClient } from '../../../lib'; import { NetworkEvent } from '../../../../common/runtime_types'; export interface GetNetworkEventsParams { @@ -18,15 +18,18 @@ export const secondsToMillis = (seconds: number) => // -1 is a special case where a value was unavailable seconds === -1 ? -1 : seconds * 1000; -export const getNetworkEvents: UMElasticsearchQueryFn< - GetNetworkEventsParams, - { - events: NetworkEvent[]; - total: number; - isWaterfallSupported: boolean; - hasNavigationRequest: boolean; - } -> = async ({ uptimeEsClient, checkGroup, stepIndex }) => { +export const getNetworkEvents = async ({ + uptimeEsClient, + checkGroup, + stepIndex, +}: GetNetworkEventsParams & { + uptimeEsClient: UptimeEsClient; +}): Promise<{ + events: NetworkEvent[]; + total: number; + isWaterfallSupported: boolean; + hasNavigationRequest: boolean; +}> => { const params = { track_total_hits: true, query: { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/test_helpers.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/test_helpers.ts index e2a9fc4d7c608..48ac588be8c63 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/test_helpers.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/test_helpers.ts @@ -8,8 +8,7 @@ import { AggregationsAggregate } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { ElasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; - -import { UptimeEsClient } from '../lib'; +import { UptimeEsClient } from '../../../lib'; export interface MultiPageCriteria { after_key?: K; diff --git a/x-pack/plugins/synthetics/server/lib.ts b/x-pack/plugins/synthetics/server/lib.ts new file mode 100644 index 0000000000000..9a7c280d3434e --- /dev/null +++ b/x-pack/plugins/synthetics/server/lib.ts @@ -0,0 +1,243 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + ElasticsearchClient, + SavedObjectsClientContract, + KibanaRequest, + CoreRequestHandlerContext, +} from '@kbn/core/server'; +import chalk from 'chalk'; +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { ESSearchResponse } from '@kbn/es-types'; +import { RequestStatus } from '@kbn/inspector-plugin/common'; +import { InspectResponse } from '@kbn/observability-plugin/typings/common'; +import { enableInspectEsQueries } from '@kbn/observability-plugin/common'; +import { getInspectResponse } from '@kbn/observability-shared-plugin/common'; +import { API_URLS } from '../common/constants'; +import { SyntheticsServerSetup } from './types'; +import { savedObjectsAdapter } from './saved_objects/saved_objects'; + +export interface CountResponse { + result: { + body: { + count: number; + _shards: { + total: number; + successful: number; + skipped: number; + failed: number; + }; + }; + }; + indices: string; +} + +export class UptimeEsClient { + isDev: boolean; + request?: KibanaRequest; + baseESClient: ElasticsearchClient; + heartbeatIndices: string; + isInspectorEnabled?: Promise; + inspectableEsQueries: InspectResponse = []; + uiSettings?: CoreRequestHandlerContext['uiSettings']; + savedObjectsClient: SavedObjectsClientContract; + + constructor( + savedObjectsClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + options?: { + isDev?: boolean; + uiSettings?: CoreRequestHandlerContext['uiSettings']; + request?: KibanaRequest; + heartbeatIndices?: string; + } + ) { + const { isDev = false, uiSettings, request, heartbeatIndices = '' } = options ?? {}; + this.uiSettings = uiSettings; + this.baseESClient = esClient; + this.savedObjectsClient = savedObjectsClient; + this.request = request; + this.heartbeatIndices = heartbeatIndices; + this.isDev = isDev; + this.inspectableEsQueries = []; + this.getInspectEnabled(); + } + + async initSettings() { + const self = this; + const heartbeatIndices = await this.getIndices(); + self.heartbeatIndices = heartbeatIndices || ''; + } + + async search( + params: TParams, + operationName?: string, + index?: string + ): Promise<{ body: ESSearchResponse }> { + let res: any; + let esError: any; + + await this.initSettings(); + + const esParams = { index: index ?? this.heartbeatIndices, ...params }; + const startTime = process.hrtime(); + + const startTimeNow = Date.now(); + + let esRequestStatus: RequestStatus = RequestStatus.PENDING; + + try { + res = await this.baseESClient.search(esParams, { meta: true }); + esRequestStatus = RequestStatus.OK; + } catch (e) { + esError = e; + esRequestStatus = RequestStatus.ERROR; + } + if (this.request) { + this.inspectableEsQueries.push( + getInspectResponse({ + esError, + esRequestParams: esParams, + esRequestStatus, + esResponse: res?.body, + kibanaRequest: this.request, + operationName: operationName ?? '', + startTime: startTimeNow, + }) + ); + } + const isInspectorEnabled = await this.getInspectEnabled(); + if (isInspectorEnabled && this.request) { + debugESCall({ + startTime, + request: this.request, + esError, + operationName: 'search', + params: esParams, + }); + } + + if (esError) { + throw esError; + } + + return res; + } + async count(params: TParams): Promise { + let res: any; + let esError: any; + + await this.initSettings(); + + const esParams = { index: this.heartbeatIndices, ...params }; + const startTime = process.hrtime(); + + try { + res = await this.baseESClient.count(esParams, { meta: true }); + } catch (e) { + esError = e; + } + + const isInspectorEnabled = await this.getInspectEnabled(); + + if (isInspectorEnabled && this.request) { + debugESCall({ + startTime, + request: this.request, + esError, + operationName: 'count', + params: esParams, + }); + } + + if (esError) { + throw esError; + } + + return { result: res, indices: this.heartbeatIndices }; + } + getSavedObjectsClient() { + return this.savedObjectsClient; + } + + async getInspectData(path: string) { + const isInspectorEnabled = await this.getInspectEnabled(); + const showInspectData = + (isInspectorEnabled || this.isDev) && path !== API_URLS.DYNAMIC_SETTINGS; + + if (showInspectData) { + return { _inspect: this.inspectableEsQueries }; + } + return {}; + } + async getInspectEnabled() { + if (this.isInspectorEnabled !== undefined) { + return this.isInspectorEnabled; + } + + if (!this.uiSettings) { + return false; + } + + this.isInspectorEnabled = this.uiSettings.client.get(enableInspectEsQueries); + } + + async getIndices() { + if (this.heartbeatIndices) { + return this.heartbeatIndices; + } + const settings = await savedObjectsAdapter.getUptimeDynamicSettings(this.savedObjectsClient); + return settings?.heartbeatIndices || ''; + } +} + +export function createEsParams(params: T): T { + return params; +} + +/* eslint-disable no-console */ + +function formatObj(obj: Record) { + return JSON.stringify(obj); +} + +export function debugESCall({ + operationName, + params, + request, + esError, + startTime, +}: { + operationName: string; + params: Record; + request: KibanaRequest; + esError: any; + startTime: [number, number]; +}) { + const highlightColor = esError ? 'bgRed' : 'inverse'; + const diff = process.hrtime(startTime); + const duration = `${Math.round(diff[0] * 1000 + diff[1] / 1e6)}ms`; + const routeInfo = `${request.route.method.toUpperCase()} ${request.route.path}`; + + console.log(chalk.bold[highlightColor](`=== Debug: ${routeInfo} (${duration}) ===`)); + + if (operationName === 'search') { + console.log(`GET ${params.index}/_${operationName}`); + console.log(formatObj(params.body)); + } else { + console.log(chalk.bold('ES operation:'), operationName); + + console.log(chalk.bold('ES query:')); + console.log(formatObj(params)); + } + console.log(`\n`); +} + +export const isTestUser = (server: SyntheticsServerSetup) => { + return server.config.service?.username === 'localKibanaIntegrationTestsUser'; +}; diff --git a/x-pack/plugins/synthetics/server/plugin.ts b/x-pack/plugins/synthetics/server/plugin.ts index fb5fa62eabefb..d308dccab2093 100644 --- a/x-pack/plugins/synthetics/server/plugin.ts +++ b/x-pack/plugins/synthetics/server/plugin.ts @@ -15,33 +15,28 @@ import { } from '@kbn/core/server'; import { mappingFromFieldMap } from '@kbn/alerting-plugin/common'; import { Dataset } from '@kbn/rule-registry-plugin/server'; +import { + SyntheticsPluginsSetupDependencies, + SyntheticsPluginsStartDependencies, + SyntheticsServerSetup, +} from './types'; +import { TelemetryEventsSender } from './telemetry/sender'; import { SyntheticsMonitorClient } from './synthetics_service/synthetics_monitor/synthetics_monitor_client'; import { initSyntheticsServer } from './server'; -import { initUptimeServer } from './legacy_uptime/uptime_server'; import { uptimeFeature } from './feature'; -import { - UptimeCorePluginsSetup, - UptimeCorePluginsStart, - UptimeServerSetup, -} from './legacy_uptime/lib/adapters'; -import { TelemetryEventsSender } from './legacy_uptime/lib/telemetry/sender'; -import { - registerUptimeSavedObjects, - savedObjectsAdapter, -} from './legacy_uptime/lib/saved_objects/saved_objects'; + +import { registerUptimeSavedObjects, savedObjectsAdapter } from './saved_objects/saved_objects'; import { UptimeConfig } from '../common/config'; import { SyntheticsService } from './synthetics_service/synthetics_service'; -import { syntheticsServiceApiKey } from './legacy_uptime/lib/saved_objects/service_api_key'; +import { syntheticsServiceApiKey } from './saved_objects/service_api_key'; import { SYNTHETICS_RULE_TYPES_ALERT_CONTEXT } from '../common/constants/synthetics_alerts'; -import { uptimeRuleTypeFieldMap } from './legacy_uptime/lib/alerts/common'; - -export type UptimeRuleRegistry = ReturnType['ruleRegistry']; +import { uptimeRuleTypeFieldMap } from './alert_rules/common'; export class Plugin implements PluginType { private savedObjectsClient?: SavedObjectsClientContract; private initContext: PluginInitializerContext; private logger: Logger; - private server?: UptimeServerSetup; + private server?: SyntheticsServerSetup; private syntheticsService?: SyntheticsService; private syntheticsMonitorClient?: SyntheticsMonitorClient; private readonly telemetryEventsSender: TelemetryEventsSender; @@ -52,7 +47,7 @@ export class Plugin implements PluginType { this.telemetryEventsSender = new TelemetryEventsSender(this.logger); } - public setup(core: CoreSetup, plugins: UptimeCorePluginsSetup) { + public setup(core: CoreSetup, plugins: SyntheticsPluginsSetupDependencies) { const config = this.initContext.config.get(); savedObjectsAdapter.config = config; @@ -83,7 +78,7 @@ export class Plugin implements PluginType { telemetry: this.telemetryEventsSender, isDev: this.initContext.env.mode.dev, share: plugins.share, - } as UptimeServerSetup; + } as SyntheticsServerSetup; this.syntheticsService = new SyntheticsService(this.server); @@ -95,18 +90,14 @@ export class Plugin implements PluginType { plugins.features.registerKibanaFeature(uptimeFeature); - initUptimeServer(this.server, plugins, ruleDataClient, this.logger); - initSyntheticsServer(this.server, this.syntheticsMonitorClient, plugins, ruleDataClient); registerUptimeSavedObjects(core.savedObjects, plugins.encryptedSavedObjects); - return { - ruleRegistry: ruleDataClient, - }; + return {}; } - public start(coreStart: CoreStart, pluginsStart: UptimeCorePluginsStart) { + public start(coreStart: CoreStart, pluginsStart: SyntheticsPluginsStartDependencies) { this.savedObjectsClient = new SavedObjectsClient( coreStart.savedObjects.createInternalRepository([syntheticsServiceApiKey.name]) ); diff --git a/x-pack/plugins/synthetics/server/queries/get_certs.ts b/x-pack/plugins/synthetics/server/queries/get_certs.ts index 0f3ea6d2a4294..cecfe8ba851d3 100644 --- a/x-pack/plugins/synthetics/server/queries/get_certs.ts +++ b/x-pack/plugins/synthetics/server/queries/get_certs.ts @@ -5,12 +5,13 @@ * 2.0. */ +import { PromiseType } from 'utility-types'; import { CertResult, GetCertsParams, Ping } from '../../common/runtime_types'; import { getCertsRequestBody, processCertsResult, } from '../../common/requests/get_certs_request_body'; -import { UptimeEsClient } from '../legacy_uptime/lib/lib'; +import type { UptimeEsClient } from '../lib'; export const getSyntheticsCerts = async ( requestParams: GetCertsParams & { uptimeEsClient: UptimeEsClient } @@ -20,6 +21,8 @@ export const getSyntheticsCerts = async ( return processCertsResult(result); }; +export type CertificatesResults = PromiseType>; + const getCertsResults = async ( requestParams: GetCertsParams & { uptimeEsClient: UptimeEsClient } ) => { diff --git a/x-pack/plugins/synthetics/server/queries/get_journey_details.ts b/x-pack/plugins/synthetics/server/queries/get_journey_details.ts index 551696614d749..bc60f32046ed1 100644 --- a/x-pack/plugins/synthetics/server/queries/get_journey_details.ts +++ b/x-pack/plugins/synthetics/server/queries/get_journey_details.ts @@ -6,9 +6,8 @@ */ import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { createEsParams, UptimeEsClient } from '../lib'; import { JourneyStep, Ping, SyntheticsJourneyApiResponse } from '../../common/runtime_types'; -import { UMElasticsearchQueryFn } from '../legacy_uptime/lib/adapters'; -import { createEsParams } from '../legacy_uptime/lib/lib'; export interface GetJourneyDetails { checkGroup: string; @@ -16,10 +15,12 @@ export interface GetJourneyDetails { type DocumentSource = (Ping & { '@timestamp': string; synthetics: { type: string } }) | JourneyStep; -export const getJourneyDetails: UMElasticsearchQueryFn< - GetJourneyDetails, - SyntheticsJourneyApiResponse['details'] -> = async ({ uptimeEsClient, checkGroup }) => { +export const getJourneyDetails = async ({ + uptimeEsClient, + checkGroup, +}: GetJourneyDetails & { + uptimeEsClient: UptimeEsClient; +}): Promise => { const params = createEsParams({ body: { query: { diff --git a/x-pack/plugins/synthetics/server/queries/journey_screenshots.ts b/x-pack/plugins/synthetics/server/queries/journey_screenshots.ts new file mode 100644 index 0000000000000..bf8e806d5c363 --- /dev/null +++ b/x-pack/plugins/synthetics/server/queries/journey_screenshots.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { IKibanaResponse } from '@kbn/core-http-server'; +import { + getJourneyScreenshot, + ScreenshotReturnTypesUnion, +} from '../legacy_uptime/lib/requests/get_journey_screenshot'; +import { isFullScreenshot, isRefResult, RefResult } from '../../common/runtime_types'; +import { RouteContext, UptimeRouteContext } from '../routes/types'; + +export type ClientContract = Buffer | { screenshotRef: RefResult }; + +function getSharedHeaders(stepName: string, totalSteps: number) { + return { + 'cache-control': 'max-age=600', + 'caption-name': stepName, + 'max-steps': String(totalSteps), + }; +} + +export const journeyScreenshotHandler = async ({ + response, + request, + uptimeEsClient, +}: RouteContext | UptimeRouteContext): Promise> => { + const { checkGroup, stepIndex } = request.params; + + const result: ScreenshotReturnTypesUnion | null = await getJourneyScreenshot({ + uptimeEsClient, + checkGroup, + stepIndex, + }); + + if (isFullScreenshot(result) && typeof result.synthetics?.blob !== 'undefined') { + return response.ok({ + body: Buffer.from(result.synthetics.blob, 'base64'), + headers: { + 'content-type': result.synthetics.blob_mime || 'image/png', // falls back to 'image/png' for earlier versions of synthetics + ...getSharedHeaders(result.synthetics.step.name, result.totalSteps), + }, + }); + } else if (isRefResult(result)) { + return response.ok({ + body: { + screenshotRef: result, + }, + headers: getSharedHeaders(result.synthetics.step.name, result.totalSteps), + }); + } + + return response.notFound(); +}; diff --git a/x-pack/plugins/synthetics/server/queries/query_monitor_status.ts b/x-pack/plugins/synthetics/server/queries/query_monitor_status.ts index dff791a6b535a..b714177e6cee9 100644 --- a/x-pack/plugins/synthetics/server/queries/query_monitor_status.ts +++ b/x-pack/plugins/synthetics/server/queries/query_monitor_status.ts @@ -10,13 +10,13 @@ import times from 'lodash/times'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { cloneDeep, intersection } from 'lodash'; import { SUMMARY_FILTER } from '../../common/constants/client_defaults'; -import { createEsParams, UptimeEsClient } from '../legacy_uptime/lib/lib'; import { OverviewPendingStatusMetaData, OverviewPing, OverviewStatus, OverviewStatusMetaData, } from '../../common/runtime_types'; +import { createEsParams, UptimeEsClient } from '../lib'; const DEFAULT_MAX_ES_BUCKET_SIZE = 10000; diff --git a/x-pack/plugins/synthetics/server/routes/certs/get_certificates.ts b/x-pack/plugins/synthetics/server/routes/certs/get_certificates.ts index 93b95738e1b8c..0054e4cf9d73b 100644 --- a/x-pack/plugins/synthetics/server/routes/certs/get_certificates.ts +++ b/x-pack/plugins/synthetics/server/routes/certs/get_certificates.ts @@ -6,16 +6,16 @@ */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { getAllMonitors, processMonitors, } from '../../saved_objects/synthetics_monitor/get_all_monitors'; import { monitorAttributes } from '../../../common/types/saved_objects'; -import { getCerts } from '../../legacy_uptime/lib/requests/get_certs'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { CertResult, GetCertsParams } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { AlertConfigKey } from '../../../common/constants/monitor_management'; +import { getSyntheticsCerts } from '../../queries/get_certs'; export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< { data: CertResult }, @@ -55,7 +55,7 @@ export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< syntheticsMonitorClient ); - const data = await getCerts({ + const data = await getSyntheticsCerts({ ...queryParams, uptimeEsClient, monitorIds: enabledMonitorQueryIds, diff --git a/x-pack/plugins/synthetics/server/routes/common.ts b/x-pack/plugins/synthetics/server/routes/common.ts index 8dc2897024b83..1f37b9e0ae6ba 100644 --- a/x-pack/plugins/synthetics/server/routes/common.ts +++ b/x-pack/plugins/synthetics/server/routes/common.ts @@ -7,11 +7,11 @@ import { schema, TypeOf } from '@kbn/config-schema'; import { SavedObjectsFindResponse } from '@kbn/core/server'; +import { RouteContext } from './types'; import { MonitorSortFieldSchema } from '../../common/runtime_types/monitor_management/sort_field'; import { getAllLocations } from '../synthetics_service/get_all_locations'; import { EncryptedSyntheticsMonitor, ServiceLocations } from '../../common/runtime_types'; import { monitorAttributes, syntheticsMonitorType } from '../../common/types/saved_objects'; -import { RouteContext } from '../legacy_uptime/routes'; const StringOrArraySchema = schema.maybe( schema.oneOf([schema.string(), schema.arrayOf(schema.string())]) diff --git a/x-pack/plugins/synthetics/server/routes/create_route_with_auth.ts b/x-pack/plugins/synthetics/server/routes/create_route_with_auth.ts index 2fc733dcd4b38..af9a308d2ac63 100644 --- a/x-pack/plugins/synthetics/server/routes/create_route_with_auth.ts +++ b/x-pack/plugins/synthetics/server/routes/create_route_with_auth.ts @@ -4,26 +4,26 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { UMServerLibs } from '../legacy_uptime/lib/lib'; + +import { ILicense } from '@kbn/licensing-plugin/server'; import { - SyntheticsRestApiRouteFactory, - SyntheticsStreamingRouteFactory, - SyntheticsRoute, - SyntheticsRouteHandler, -} from '../legacy_uptime/routes'; + LICENSE_MISSING_ERROR, + LICENSE_NOT_ACTIVE_ERROR, + LICENSE_NOT_SUPPORTED_ERROR, +} from '../../common/constants'; +import { SyntheticsRestApiRouteFactory, SyntheticsRoute, SyntheticsRouteHandler } from './types'; export const createSyntheticsRouteWithAuth = ( - libs: UMServerLibs, - routeCreator: SyntheticsRestApiRouteFactory | SyntheticsStreamingRouteFactory + routeCreator: SyntheticsRestApiRouteFactory ): SyntheticsRoute => { - const restRoute = routeCreator(libs); + const restRoute = routeCreator(); const { handler, method, path, options, ...rest } = restRoute; const licenseCheckHandler: SyntheticsRouteHandler = async ({ context, response, ...restProps }) => { - const { statusCode, message } = libs.license((await context.licensing).license); + const { statusCode, message } = licenseCheck((await context.licensing).license); if (statusCode === 200) { return handler({ context, @@ -51,3 +51,36 @@ export const createSyntheticsRouteWithAuth = ( ...rest, }; }; + +export interface UMLicenseStatusResponse { + statusCode: number; + message: string; +} +export type UMLicenseCheck = ( + license?: Pick +) => UMLicenseStatusResponse; + +export const licenseCheck: UMLicenseCheck = (license) => { + if (license === undefined) { + return { + message: LICENSE_MISSING_ERROR, + statusCode: 400, + }; + } + if (!license.hasAtLeast('basic')) { + return { + message: LICENSE_NOT_SUPPORTED_ERROR, + statusCode: 401, + }; + } + if (license.isActive === false) { + return { + message: LICENSE_NOT_ACTIVE_ERROR, + statusCode: 403, + }; + } + return { + message: 'License is valid and active', + statusCode: 200, + }; +}; diff --git a/x-pack/plugins/synthetics/server/routes/default_alerts/enable_default_alert.ts b/x-pack/plugins/synthetics/server/routes/default_alerts/enable_default_alert.ts index f483ffa186b38..47c033191f7ce 100644 --- a/x-pack/plugins/synthetics/server/routes/default_alerts/enable_default_alert.ts +++ b/x-pack/plugins/synthetics/server/routes/default_alerts/enable_default_alert.ts @@ -5,9 +5,9 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { TLSAlertService } from './tls_alert_service'; import { StatusAlertService } from './status_alert_service'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const enableDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/default_alerts/get_default_alert.ts b/x-pack/plugins/synthetics/server/routes/default_alerts/get_default_alert.ts index c495a0f8d1804..2351619e16058 100644 --- a/x-pack/plugins/synthetics/server/routes/default_alerts/get_default_alert.ts +++ b/x-pack/plugins/synthetics/server/routes/default_alerts/get_default_alert.ts @@ -5,8 +5,8 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { StatusAlertService } from './status_alert_service'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const getDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/default_alerts/status_alert_service.ts b/x-pack/plugins/synthetics/server/routes/default_alerts/status_alert_service.ts index c6da83c73681f..ab078c5245212 100644 --- a/x-pack/plugins/synthetics/server/routes/default_alerts/status_alert_service.ts +++ b/x-pack/plugins/synthetics/server/routes/default_alerts/status_alert_service.ts @@ -7,11 +7,10 @@ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { FindActionResult } from '@kbn/actions-plugin/server'; -import { savedObjectsAdapter } from '../../legacy_uptime/lib/saved_objects'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; +import { savedObjectsAdapter } from '../../saved_objects'; import { populateAlertActions } from '../../../common/rules/alert_actions'; import { SyntheticsMonitorStatusTranslations } from '../../../common/rules/synthetics/translations'; -import { UptimeRequestHandlerContext } from '../../types'; +import { SyntheticsServerSetup, UptimeRequestHandlerContext } from '../../types'; import { ACTION_GROUP_DEFINITIONS, SYNTHETICS_ALERT_RULE_TYPES, @@ -20,11 +19,11 @@ import { export class StatusAlertService { context: UptimeRequestHandlerContext; soClient: SavedObjectsClientContract; - server: UptimeServerSetup; + server: SyntheticsServerSetup; constructor( context: UptimeRequestHandlerContext, - server: UptimeServerSetup, + server: SyntheticsServerSetup, soClient: SavedObjectsClientContract ) { this.context = context; diff --git a/x-pack/plugins/synthetics/server/routes/default_alerts/tls_alert_service.ts b/x-pack/plugins/synthetics/server/routes/default_alerts/tls_alert_service.ts index 62c400281f28b..be27369bca204 100644 --- a/x-pack/plugins/synthetics/server/routes/default_alerts/tls_alert_service.ts +++ b/x-pack/plugins/synthetics/server/routes/default_alerts/tls_alert_service.ts @@ -8,11 +8,10 @@ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { FindActionResult } from '@kbn/actions-plugin/server'; import { TLSParams } from '../../../common/runtime_types/alerts/tls'; -import { savedObjectsAdapter } from '../../legacy_uptime/lib/saved_objects'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; +import { savedObjectsAdapter } from '../../saved_objects'; import { populateAlertActions } from '../../../common/rules/alert_actions'; import { TlsTranslations } from '../../../common/rules/synthetics/translations'; -import { UptimeRequestHandlerContext } from '../../types'; +import { SyntheticsServerSetup, UptimeRequestHandlerContext } from '../../types'; import { ACTION_GROUP_DEFINITIONS, SYNTHETICS_ALERT_RULE_TYPES, @@ -24,11 +23,11 @@ const TLS_DEFAULT_ALERT_ID = '7a532181-ff1d-4317-9367-7ca789133920'; export class TLSAlertService { context: UptimeRequestHandlerContext; soClient: SavedObjectsClientContract; - server: UptimeServerSetup; + server: SyntheticsServerSetup; constructor( context: UptimeRequestHandlerContext, - server: UptimeServerSetup, + server: SyntheticsServerSetup, soClient: SavedObjectsClientContract ) { this.context = context; diff --git a/x-pack/plugins/synthetics/server/routes/default_alerts/update_default_alert.ts b/x-pack/plugins/synthetics/server/routes/default_alerts/update_default_alert.ts index 4435a4e962daf..f94d172b1abfc 100644 --- a/x-pack/plugins/synthetics/server/routes/default_alerts/update_default_alert.ts +++ b/x-pack/plugins/synthetics/server/routes/default_alerts/update_default_alert.ts @@ -5,9 +5,9 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { TLSAlertService } from './tls_alert_service'; import { StatusAlertService } from './status_alert_service'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const updateDefaultAlertingRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/filters/filters.ts b/x-pack/plugins/synthetics/server/routes/filters/filters.ts index c8f9829a77c23..a140974f2d737 100644 --- a/x-pack/plugins/synthetics/server/routes/filters/filters.ts +++ b/x-pack/plugins/synthetics/server/routes/filters/filters.ts @@ -4,10 +4,10 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { ConfigKey, MonitorFiltersResult } from '../../../common/runtime_types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; type Buckets = Array<{ key: string; diff --git a/x-pack/plugins/synthetics/server/routes/fleet/get_has_integration_monitors.ts b/x-pack/plugins/synthetics/server/routes/fleet/get_has_integration_monitors.ts index c291e56532476..5c3d961b7fa2b 100644 --- a/x-pack/plugins/synthetics/server/routes/fleet/get_has_integration_monitors.ts +++ b/x-pack/plugins/synthetics/server/routes/fleet/get_has_integration_monitors.ts @@ -4,8 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; export const getHasIntegrationMonitorsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', diff --git a/x-pack/plugins/synthetics/server/routes/index.ts b/x-pack/plugins/synthetics/server/routes/index.ts index 52eef241efd11..8fe8ad595f2ee 100644 --- a/x-pack/plugins/synthetics/server/routes/index.ts +++ b/x-pack/plugins/synthetics/server/routes/index.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from './types'; import { getSyntheticsCertsRoute } from './certs/get_certificates'; import { getAgentPoliciesRoute } from './settings/private_locations/get_agent_policies'; import { inspectSyntheticsMonitorRoute } from './monitor_cruds/inspect_monitor'; @@ -40,7 +41,6 @@ import { addSyntheticsMonitorRoute } from './monitor_cruds/add_monitor'; import { addSyntheticsProjectMonitorRoute } from './monitor_cruds/add_monitor_project'; import { syntheticsGetPingsRoute, syntheticsGetPingStatusesRoute } from './pings'; import { createGetCurrentStatusRoute } from './overview_status/overview_status'; -import { SyntheticsRestApiRouteFactory } from '../legacy_uptime/routes'; import { getHasIntegrationMonitorsRoute } from './fleet/get_has_integration_monitors'; import { addSyntheticsParamsRoute } from './settings/add_param'; import { deleteSyntheticsParamsRoute } from './settings/delete_param'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor.ts index 699072b20b547..04460fde15a68 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor.ts @@ -14,9 +14,11 @@ import { } from '@kbn/core/server'; import { isValidNamespace } from '@kbn/fleet-plugin/common'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsServerSetup } from '../../types'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { formatKibanaNamespace } from '../../synthetics_service/formatters/private_formatters'; -import { getSyntheticsPrivateLocations } from '../../legacy_uptime/lib/saved_objects/private_locations'; +import { getSyntheticsPrivateLocations } from '../../saved_objects/private_locations'; import { ConfigKey, MonitorFields, @@ -24,7 +26,6 @@ import { EncryptedSyntheticsMonitor, PrivateLocation, } from '../../../common/runtime_types'; -import { RouteContext, SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { DEFAULT_FIELDS, @@ -33,7 +34,6 @@ import { import { validateMonitor } from './monitor_validation'; import { sendTelemetryEvents, formatTelemetryEvent } from '../telemetry/monitor_upgrade_sender'; import { formatSecrets } from '../../synthetics_service/utils/secrets'; -import type { UptimeServerSetup } from '../../legacy_uptime/lib/adapters/framework'; import { deleteMonitor } from './delete_monitor'; import { StatusAlertService } from '../default_alerts/status_alert_service'; @@ -290,7 +290,7 @@ export const getPrivateLocations = async ( }; export const getMonitorNamespace = ( - server: UptimeServerSetup, + server: SyntheticsServerSetup, request: KibanaRequest, configuredNamespace: string ) => { diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts index 1f66fb42df946..0fb8cba181933 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/add_monitor_project.ts @@ -7,9 +7,9 @@ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { ProjectMonitor } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { ProjectMonitorFormatter } from '../../synthetics_service/project_monitor/project_monitor_formatter'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts index f46c526cfec3d..22c8378559bcc 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts @@ -10,11 +10,11 @@ import { SavedObjectsBulkResponse } from '@kbn/core-saved-objects-api-server'; import { v4 as uuidV4 } from 'uuid'; import { NewPackagePolicy } from '@kbn/fleet-plugin/common'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; -import { RouteContext } from '../../../legacy_uptime/routes'; +import { SyntheticsServerSetup } from '../../../types'; +import { RouteContext } from '../../types'; import { deleteMonitorIfCreated } from '../add_monitor'; import { formatTelemetryEvent, sendTelemetryEvents } from '../../telemetry/monitor_upgrade_sender'; import { deleteMonitor } from '../delete_monitor'; -import { UptimeServerSetup } from '../../../legacy_uptime/lib/adapters'; import { formatSecrets } from '../../../synthetics_service/utils'; import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; import { @@ -168,7 +168,7 @@ const rollBackNewMonitorBulk = async ( }; const sendNewMonitorTelemetry = ( - server: UptimeServerSetup, + server: SyntheticsServerSetup, monitors: Array>, errors?: ServiceLocationErrors | null ) => { diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/delete_monitor_bulk.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/delete_monitor_bulk.ts index 90130ccaae2dc..2ea835875725c 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/delete_monitor_bulk.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/delete_monitor_bulk.ts @@ -7,6 +7,7 @@ import { SavedObjectsClientContract, KibanaRequest } from '@kbn/core/server'; import { SavedObject } from '@kbn/core-saved-objects-server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsServerSetup } from '../../../types'; import { formatTelemetryDeleteEvent, sendTelemetryEvents, @@ -18,7 +19,6 @@ import { EncryptedSyntheticsMonitor, SyntheticsMonitorWithId, } from '../../../../common/runtime_types'; -import { UptimeServerSetup } from '../../../legacy_uptime/lib/adapters'; import { SyntheticsMonitorClient } from '../../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; @@ -30,7 +30,7 @@ export const deleteMonitorBulk = async ({ request, }: { savedObjectsClient: SavedObjectsClientContract; - server: UptimeServerSetup; + server: SyntheticsServerSetup; monitors: Array>; syntheticsMonitorClient: SyntheticsMonitorClient; request: KibanaRequest; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts index 2aad04ffcad8a..113d27ba32df7 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts @@ -6,9 +6,9 @@ */ import { SavedObject, SavedObjectsUpdateResponse } from '@kbn/core/server'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; +import { RouteContext } from '../../types'; import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; import { FailedPolicyUpdate } from '../../../synthetics_service/private_location/synthetics_private_location'; -import { RouteContext } from '../../../legacy_uptime/routes'; import { ConfigKey, EncryptedSyntheticsMonitor, diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_integration.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_integration.ts index dcddf4c723be9..c65844614a68e 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_integration.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_integration.ts @@ -5,7 +5,7 @@ * 2.0. */ import { schema } from '@kbn/config-schema'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const deletePackagePolicyRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor.ts index ed1513b650362..032a48695ec97 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor.ts @@ -7,6 +7,8 @@ import { schema } from '@kbn/config-schema'; import { SavedObjectsClientContract, SavedObjectsErrorHelpers } from '@kbn/core/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsServerSetup } from '../../types'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { ConfigKey, @@ -15,7 +17,6 @@ import { SyntheticsMonitorWithId, SyntheticsMonitorWithSecrets, } from '../../../common/runtime_types'; -import { RouteContext, SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitorNotFoundResponse } from '../synthetics_service/service_errors'; import { @@ -24,7 +25,6 @@ import { sendTelemetryEvents, } from '../telemetry/monitor_upgrade_sender'; import { formatSecrets, normalizeSecrets } from '../../synthetics_service/utils/secrets'; -import type { UptimeServerSetup } from '../../legacy_uptime/lib/adapters/framework'; export const deleteSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'DELETE', @@ -140,7 +140,7 @@ export const deleteMonitor = async ({ const getMonitorToDelete = async ( monitorId: string, soClient: SavedObjectsClientContract, - server: UptimeServerSetup + server: SyntheticsServerSetup ) => { const encryptedSOClient = server.encryptedSavedObjects.getClient(); diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts index e04f68dc7201a..b5c8dc2b4f0b1 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/delete_monitor_project.ts @@ -6,9 +6,9 @@ */ import { schema } from '@kbn/config-schema'; import { i18n } from '@kbn/i18n'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { ConfigKey } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitors, getKqlFilter } from '../common'; import { deleteMonitorBulk } from './bulk_cruds/delete_monitor_bulk'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.test.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.test.ts index 3a742e3c08e90..6904acfd9423b 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.test.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.test.ts @@ -13,10 +13,10 @@ import { SyntheticsMonitor, SyntheticsMonitorWithSecrets, } from '../../../common/runtime_types'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { SyntheticsService } from '../../synthetics_service/synthetics_service'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; import { mockEncryptedSO } from '../../synthetics_service/utils/mocks'; +import { SyntheticsServerSetup } from '../../types'; jest.mock('../telemetry/monitor_upgrade_sender', () => ({ sendTelemetryEvents: jest.fn(), @@ -26,7 +26,7 @@ jest.mock('../telemetry/monitor_upgrade_sender', () => ({ describe('syncEditedMonitor', () => { const logger = loggerMock.create(); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { uptimeEsClient: { search: jest.fn() }, stackVersion: null, authSavedObjectsClient: { @@ -49,7 +49,7 @@ describe('syncEditedMonitor', () => { }, }, encryptedSavedObjects: mockEncryptedSO(), - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const editedMonitor = { type: 'http', diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts index 495b236b75c71..3c11ce7423676 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -9,8 +9,9 @@ import { schema } from '@kbn/config-schema'; import { SavedObjectsUpdateResponse, SavedObject } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { getSyntheticsPrivateLocations } from '../../legacy_uptime/lib/saved_objects/private_locations'; +import { getSyntheticsPrivateLocations } from '../../saved_objects/private_locations'; import { MonitorFields, EncryptedSyntheticsMonitor, @@ -18,7 +19,6 @@ import { SyntheticsMonitor, ConfigKey, } from '../../../common/runtime_types'; -import { RouteContext, SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { validateMonitor } from './monitor_validation'; import { getMonitorNotFoundResponse } from '../synthetics_service/service_errors'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts index 6a3dc6b7af23a..481bf6b1b542c 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_api_key.ts @@ -4,11 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { generateAPIKey } from '../../synthetics_service/get_api_key'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -export const getAPIKeySyntheticsRoute: SyntheticsRestApiRouteFactory = (libs) => ({ +export const getAPIKeySyntheticsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.SYNTHETICS_APIKEY, validate: {}, diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts index d6bfa7fe69818..24e2d895f18e0 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor.ts @@ -6,6 +6,7 @@ */ import { schema } from '@kbn/config-schema'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { getAllMonitors } from '../../saved_objects/synthetics_monitor/get_all_monitors'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { isStatusEnabled } from '../../../common/runtime_types/monitor_management/alert_config'; @@ -14,14 +15,13 @@ import { EncryptedSyntheticsMonitor, MonitorOverviewItem, } from '../../../common/runtime_types'; -import { UMServerLibs } from '../../legacy_uptime/lib/lib'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitorNotFoundResponse } from '../synthetics_service/service_errors'; import { getMonitorFilters, MonitorsQuery, QuerySchema, SEARCH_FIELDS } from '../common'; import { mapSavedObjectToMonitor } from './helper'; +import { getSyntheticsMonitor } from '../../legacy_uptime/lib/requests/get_monitor'; -export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.GET_SYNTHETICS_MONITOR, validate: { @@ -56,7 +56,7 @@ export const getSyntheticsMonitorRoute: SyntheticsRestApiRouteFactory = (libs: U const encryptedSavedObjectsClient = encryptedSavedObjects.getClient(); - return libs.requests.getSyntheticsMonitor({ + return getSyntheticsMonitor({ monitorId, encryptedSavedObjectsClient, savedObjectsClient, diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts index 0a8db86ab7987..b0b4eee392d56 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitor_project.ts @@ -5,9 +5,9 @@ * 2.0. */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { ConfigKey } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitors } from '../common'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitors_list.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitors_list.ts index 9cd15fcd4e0d0..563a7fde740bb 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitors_list.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/get_monitors_list.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { getMonitors, isMonitorsQueryFiltered, QuerySchema } from '../common'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; diff --git a/x-pack/plugins/synthetics/server/routes/monitor_cruds/inspect_monitor.ts b/x-pack/plugins/synthetics/server/routes/monitor_cruds/inspect_monitor.ts index baef55d4f3e53..ca8fd63b2745d 100644 --- a/x-pack/plugins/synthetics/server/routes/monitor_cruds/inspect_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/monitor_cruds/inspect_monitor.ts @@ -6,6 +6,7 @@ */ import { v4 as uuidV4 } from 'uuid'; import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { unzipFile } from '../../common/unzipt_project_code'; import { ConfigKey, @@ -13,7 +14,6 @@ import { SyntheticsMonitor, PrivateLocation, } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { DEFAULT_FIELDS } from '../../../common/constants/monitor_defaults'; import { validateMonitor } from './monitor_validation'; diff --git a/x-pack/plugins/synthetics/server/routes/network_events/get_network_events.ts b/x-pack/plugins/synthetics/server/routes/network_events/get_network_events.ts index 114cb88d508b1..fce38c3ac69d9 100644 --- a/x-pack/plugins/synthetics/server/routes/network_events/get_network_events.ts +++ b/x-pack/plugins/synthetics/server/routes/network_events/get_network_events.ts @@ -7,11 +7,10 @@ import { schema } from '@kbn/config-schema'; import { getNetworkEvents } from '../../legacy_uptime/lib/requests/get_network_events'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; -export const createNetworkEventsRoute: SyntheticsRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const createNetworkEventsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.NETWORK_EVENTS, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.test.ts b/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.test.ts index 635b964c922ab..2d77a4a3f7081 100644 --- a/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.test.ts +++ b/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.test.ts @@ -6,14 +6,14 @@ */ import { SavedObjectsFindResult } from '@kbn/core-saved-objects-api-server'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; -import { getUptimeESMockClient } from '../../legacy_uptime/lib/requests/test_helpers'; import { periodToMs } from './overview_status'; import { queryMonitorStatus } from '../../queries/query_monitor_status'; -import { RouteContext } from '../../legacy_uptime/routes'; import { getStatus } from './overview_status'; import times from 'lodash/times'; import * as monitorsFns from '../../saved_objects/synthetics_monitor/get_all_monitors'; import { EncryptedSyntheticsMonitor } from '../../../common/runtime_types'; +import { RouteContext } from '../types'; +import { getUptimeESMockClient } from '../../legacy_uptime/lib/requests/test_helpers'; jest.mock('../../saved_objects/synthetics_monitor/get_all_monitors', () => ({ ...jest.requireActual('../../saved_objects/synthetics_monitor/get_all_monitors'), @@ -47,14 +47,6 @@ jest.mock('../common', () => ({ getMonitorFilters: () => '', })); -jest.mock('../../legacy_uptime/lib/requests/get_snapshot_counts', () => ({ - getSnapshotCount: jest.fn().mockReturnValue({ - up: 2, - down: 1, - total: 3, - }), -})); - describe('current status route', () => { describe('periodToMs', () => { it('returns 0 for unsupported unit type', () => { diff --git a/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.ts b/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.ts index 35672937c0ffd..4de7341d10626 100644 --- a/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.ts +++ b/x-pack/plugins/synthetics/server/routes/overview_status/overview_status.ts @@ -7,6 +7,7 @@ import { intersection } from 'lodash'; import datemath, { Unit } from '@kbn/datemath'; import moment from 'moment'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; import { ConfigKey } from '../../../common/runtime_types'; import { getAllMonitors, @@ -14,8 +15,6 @@ import { } from '../../saved_objects/synthetics_monitor/get_all_monitors'; import { queryMonitorStatus } from '../../queries/query_monitor_status'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; -import { RouteContext, SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { getMonitorFilters, OverviewStatusSchema, OverviewStatusQuery } from '../common'; /** @@ -124,7 +123,7 @@ export async function getStatus(context: RouteContext, params: OverviewStatusQue }; } -export const createGetCurrentStatusRoute: SyntheticsRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const createGetCurrentStatusRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.OVERVIEW_STATUS, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/pings/get_ping_statuses.ts b/x-pack/plugins/synthetics/server/routes/pings/get_ping_statuses.ts index 7e232208de39f..2d1fa867430f7 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/get_ping_statuses.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/get_ping_statuses.ts @@ -5,15 +5,14 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { PingError, PingStatus } from '../../../common/runtime_types'; -import { UMServerLibs } from '../../legacy_uptime/lib/lib'; -import { UMRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { queryPings } from '../../common/pings/query_pings'; import { getPingsRouteQuerySchema } from './get_pings'; -export const syntheticsGetPingStatusesRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const syntheticsGetPingStatusesRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.PING_STATUSES, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/pings/get_pings.ts b/x-pack/plugins/synthetics/server/routes/pings/get_pings.ts index 80424cbe78902..156a2e5dd62c8 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/get_pings.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/get_pings.ts @@ -6,9 +6,8 @@ */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UMServerLibs } from '../../legacy_uptime/lib/lib'; -import { UMRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { queryPings } from '../../common/pings/query_pings'; export const getPingsRouteQuerySchema = schema.object({ @@ -24,7 +23,7 @@ export const getPingsRouteQuerySchema = schema.object({ status: schema.maybe(schema.string()), }); -export const syntheticsGetPingsRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const syntheticsGetPingsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.PINGS, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/pings/journey_screenshot_blocks.ts b/x-pack/plugins/synthetics/server/routes/pings/journey_screenshot_blocks.ts index 6cf0f92b41b40..a8f282330c893 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/journey_screenshot_blocks.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/journey_screenshot_blocks.ts @@ -6,14 +6,15 @@ */ import { schema } from '@kbn/config-schema'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; -import { journeyScreenshotBlocksHandler } from '../../legacy_uptime/routes/pings/journey_screenshot_blocks'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; +import { IKibanaResponse } from '@kbn/core-http-server'; +import { isRight } from 'fp-ts/Either'; +import * as t from 'io-ts'; +import { getJourneyScreenshotBlocks } from '../../legacy_uptime/lib/requests/get_journey_screenshot_blocks'; +import { ScreenshotBlockDoc } from '../../../common/runtime_types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; -export const createJourneyScreenshotBlocksRoute: SyntheticsRestApiRouteFactory = ( - libs: UMServerLibs -) => ({ +export const createJourneyScreenshotBlocksRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'POST', path: SYNTHETICS_API_URLS.JOURNEY_SCREENSHOT_BLOCKS, validate: { @@ -25,3 +26,30 @@ export const createJourneyScreenshotBlocksRoute: SyntheticsRestApiRouteFactory = return await journeyScreenshotBlocksHandler(routeProps); }, }); + +export const journeyScreenshotBlocksHandler = async ({ + response, + request, + uptimeEsClient, +}: RouteContext): Promise> => { + const { hashes: blockIds } = request.body; + + if (!isStringArray(blockIds)) return response.badRequest(); + + const result = await getJourneyScreenshotBlocks({ + blockIds, + uptimeEsClient, + }); + + if (result.length === 0) { + return response.notFound(); + } + + return response.ok({ + body: result, + }); +}; + +function isStringArray(data: unknown): data is string[] { + return isRight(t.array(t.string).decode(data)); +} diff --git a/x-pack/plugins/synthetics/server/routes/pings/journey_screenshots.ts b/x-pack/plugins/synthetics/server/routes/pings/journey_screenshots.ts index a92cf73f1711b..fcc941193c5be 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/journey_screenshots.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/journey_screenshots.ts @@ -6,14 +6,11 @@ */ import { schema } from '@kbn/config-schema'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; +import { journeyScreenshotHandler } from '../../queries/journey_screenshots'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; -import { journeyScreenshotHandler } from '../../legacy_uptime/routes/pings/journey_screenshots'; -export const createJourneyScreenshotRoute: SyntheticsRestApiRouteFactory = ( - libs: UMServerLibs -) => ({ +export const createJourneyScreenshotRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.JOURNEY_SCREENSHOT, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/pings/journeys.ts b/x-pack/plugins/synthetics/server/routes/pings/journeys.ts index 212f79bd867d8..0f15d261f0b33 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/journeys.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/journeys.ts @@ -7,15 +7,12 @@ import { schema } from '@kbn/config-schema'; import { getJourneyFailedSteps } from '../../legacy_uptime/lib/requests/get_journey_failed_steps'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; -import { - SyntheticsRestApiRouteFactory, - UMRestApiRouteFactory, -} from '../../legacy_uptime/routes/types'; import { getJourneyDetails } from '../../queries/get_journey_details'; +import { getJourneySteps } from '../../legacy_uptime/lib/requests/get_journey_steps'; -export const createJourneyRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ +export const createJourneyRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.JOURNEY, validate: { @@ -36,7 +33,7 @@ export const createJourneyRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => try { const [result, details] = await Promise.all([ - await libs.requests.getJourneySteps({ + await getJourneySteps({ uptimeEsClient, checkGroup, syntheticEventTypes, @@ -58,9 +55,7 @@ export const createJourneyRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => }, }); -export const createJourneyFailedStepsRoute: SyntheticsRestApiRouteFactory = ( - libs: UMServerLibs -) => ({ +export const createJourneyFailedStepsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.JOURNEY_FAILED_STEPS, validate: { diff --git a/x-pack/plugins/synthetics/server/routes/pings/last_successful_check.ts b/x-pack/plugins/synthetics/server/routes/pings/last_successful_check.ts index 7ebc25adec373..c933288c50d86 100644 --- a/x-pack/plugins/synthetics/server/routes/pings/last_successful_check.ts +++ b/x-pack/plugins/synthetics/server/routes/pings/last_successful_check.ts @@ -6,14 +6,13 @@ */ import { schema } from '@kbn/config-schema'; -import { getLastSuccessfulCheckScreenshot } from '../../legacy_uptime/routes/synthetics/last_successful_check'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; -import { UMServerLibs } from '../../legacy_uptime/uptime_server'; +import { getJourneyScreenshot } from '../../legacy_uptime/lib/requests/get_journey_screenshot'; +import { isFullScreenshot, isRefResult, Ping } from '../../../common/runtime_types'; +import { getLastSuccessfulCheck } from '../../legacy_uptime/lib/requests/get_last_successful_check'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; +import { RouteContext, SyntheticsRestApiRouteFactory } from '../types'; -export const createLastSuccessfulCheckRoute: SyntheticsRestApiRouteFactory = ( - libs: UMServerLibs -) => ({ +export const createLastSuccessfulCheckRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.SYNTHETICS_SUCCESSFUL_CHECK, validate: { @@ -28,3 +27,45 @@ export const createLastSuccessfulCheckRoute: SyntheticsRestApiRouteFactory = ( return await getLastSuccessfulCheckScreenshot(routeProps); }, }); + +export const getLastSuccessfulCheckScreenshot = async ({ + response, + request, + uptimeEsClient, +}: RouteContext) => { + const { timestamp, monitorId, stepIndex, location } = request.query; + + const check: Ping | null = await getLastSuccessfulCheck({ + uptimeEsClient, + monitorId, + timestamp, + location, + }); + + if (check === null) { + return response.notFound(); + } + + if (!check.monitor.check_group) { + return response.ok({ body: check }); + } + + const screenshot = await getJourneyScreenshot({ + uptimeEsClient, + checkGroup: check.monitor.check_group, + stepIndex, + }); + + if (screenshot === null) { + return response.ok({ body: check }); + } + + if (check.synthetics) { + check.synthetics.isScreenshotRef = isRefResult(screenshot); + check.synthetics.isFullScreenshot = isFullScreenshot(screenshot); + } + + return response.ok({ + body: check, + }); +}; diff --git a/x-pack/plugins/synthetics/server/routes/settings/add_param.ts b/x-pack/plugins/synthetics/server/routes/settings/add_param.ts index 401dda0ce3045..b27ddf27a88b3 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/add_param.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/add_param.ts @@ -8,9 +8,9 @@ import { schema } from '@kbn/config-schema'; import { ALL_SPACES_ID } from '@kbn/security-plugin/common/constants'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SyntheticsParamRequest, SyntheticsParamSO } from '../../../common/runtime_types'; import { syntheticsParamType } from '../../../common/types/saved_objects'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const addSyntheticsParamsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/settings/delete_param.ts b/x-pack/plugins/synthetics/server/routes/settings/delete_param.ts index ab8b1fefbbd1b..7dd839a321088 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/delete_param.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/delete_param.ts @@ -6,8 +6,8 @@ */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsParamType } from '../../../common/types/saved_objects'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const deleteSyntheticsParamsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/settings/edit_param.ts b/x-pack/plugins/synthetics/server/routes/settings/edit_param.ts index 2d1925f4c0182..0201f350249c6 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/edit_param.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/edit_param.ts @@ -7,9 +7,9 @@ import { schema } from '@kbn/config-schema'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SyntheticsParamRequest } from '../../../common/runtime_types'; import { syntheticsParamType } from '../../../common/types/saved_objects'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const editSyntheticsParamsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/settings/params.ts b/x-pack/plugins/synthetics/server/routes/settings/params.ts index 31e6770e598a1..5622438ab47c0 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/params.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/params.ts @@ -7,8 +7,8 @@ import { SavedObjectsFindResult } from '@kbn/core-saved-objects-api-server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsParamType } from '../../../common/types/saved_objects'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const getSyntheticsParamsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/add_private_location.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/add_private_location.ts index 9edd4bf53f81a..34c5224ddf831 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/add_private_location.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/add_private_location.ts @@ -6,12 +6,12 @@ */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../../types'; import { getAllPrivateLocations } from './get_private_locations'; import { privateLocationsSavedObjectId, privateLocationsSavedObjectName, } from '../../../../common/saved_objects/private_locations'; -import { SyntheticsRestApiRouteFactory } from '../../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../../common/constants'; import { PrivateLocation } from '../../../../common/runtime_types'; diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/delete_private_location.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/delete_private_location.ts index 7360adfbc0b60..bbe81d1b1e628 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/delete_private_location.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/delete_private_location.ts @@ -6,8 +6,8 @@ */ import { schema } from '@kbn/config-schema'; +import { SyntheticsRestApiRouteFactory } from '../../types'; import { getAllPrivateLocations } from './get_private_locations'; -import { SyntheticsRestApiRouteFactory } from '../../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../../common/constants'; import { privateLocationsSavedObjectId, diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_agent_policies.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_agent_policies.ts index 4ac087976c248..370cfb8d13261 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_agent_policies.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_agent_policies.ts @@ -5,14 +5,14 @@ * 2.0. */ -import { SyntheticsRestApiRouteFactory } from '../../../legacy_uptime/routes'; +import { SyntheticsRestApiRouteFactory } from '../../types'; import { SYNTHETICS_API_URLS } from '../../../../common/constants'; export const getAgentPoliciesRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', path: SYNTHETICS_API_URLS.AGENT_POLICIES, validate: {}, - handler: async ({ server, context, uptimeEsClient }): Promise => { + handler: async ({ server }): Promise => { const soClient = server.coreStart.savedObjects.createInternalRepository(); const esClient = server.coreStart.elasticsearch.client.asInternalUser; diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_location_monitors.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_location_monitors.ts index 9213a64cf0e80..38d0c5953cf49 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_location_monitors.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_location_monitors.ts @@ -6,7 +6,7 @@ */ import { IKibanaResponse } from '@kbn/core/server'; -import { SyntheticsRestApiRouteFactory } from '../../../legacy_uptime/routes'; +import { SyntheticsRestApiRouteFactory } from '../../types'; import { SYNTHETICS_API_URLS } from '../../../../common/constants'; import { monitorAttributes, syntheticsMonitorType } from '../../../../common/types/saved_objects'; diff --git a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_private_locations.ts b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_private_locations.ts index 82b1f4f4e0e8a..2e16646e217d0 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_private_locations.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/private_locations/get_private_locations.ts @@ -6,8 +6,8 @@ */ import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { SyntheticsRestApiRouteFactory } from '../../types'; import { SyntheticsPrivateLocations } from '../../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../../common/constants'; import { privateLocationsSavedObjectId, diff --git a/x-pack/plugins/synthetics/server/routes/settings/settings.ts b/x-pack/plugins/synthetics/server/routes/settings/settings.ts index b0afa067cacf5..959e4277d9335 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/settings.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/settings.ts @@ -5,7 +5,7 @@ * 2.0. */ import { CatIndicesResponse } from '@elastic/elasticsearch/lib/api/types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const getIndexSizesRoute: SyntheticsRestApiRouteFactory<{ diff --git a/x-pack/plugins/synthetics/server/routes/settings/sync_global_params.ts b/x-pack/plugins/synthetics/server/routes/settings/sync_global_params.ts index 7eb7d30356013..ea88d8ddf5bef 100644 --- a/x-pack/plugins/synthetics/server/routes/settings/sync_global_params.ts +++ b/x-pack/plugins/synthetics/server/routes/settings/sync_global_params.ts @@ -6,8 +6,8 @@ */ import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { getPrivateLocations } from '../../synthetics_service/get_private_locations'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const syncParamsSyntheticsParamsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/enablement.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/enablement.ts index 26c9822100322..0aae10b340e8c 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/enablement.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/enablement.ts @@ -4,23 +4,27 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { syntheticsServiceAPIKeySavedObject } from '../../legacy_uptime/lib/saved_objects/service_api_key'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; +import { SyntheticsRestApiRouteFactory } from '../types'; +import { syntheticsServiceAPIKeySavedObject } from '../../saved_objects/service_api_key'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { generateAndSaveServiceAPIKey } from '../../synthetics_service/get_api_key'; +import { + generateAndSaveServiceAPIKey, + getAPIKeyForSyntheticsService, + getSyntheticsEnablement, +} from '../../synthetics_service/get_api_key'; -export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = (libs) => ({ +export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'PUT', path: SYNTHETICS_API_URLS.SYNTHETICS_ENABLEMENT, validate: {}, handler: async ({ savedObjectsClient, request, server }): Promise => { try { - const result = await libs.requests.getSyntheticsEnablement({ + const result = await getSyntheticsEnablement({ server, }); const { canEnable, isEnabled } = result; const { security } = server; - const { apiKey, isValid } = await libs.requests.getAPIKeyForSyntheticsService({ + const { apiKey, isValid } = await getAPIKeyForSyntheticsService({ server, }); if (apiKey && !isValid) { @@ -42,7 +46,7 @@ export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = (libs return result; } - return libs.requests.getSyntheticsEnablement({ + return getSyntheticsEnablement({ server, }); } catch (e) { @@ -52,13 +56,12 @@ export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = (libs }, }); -export const disableSyntheticsRoute: SyntheticsRestApiRouteFactory = (libs) => ({ +export const disableSyntheticsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'DELETE', path: SYNTHETICS_API_URLS.SYNTHETICS_ENABLEMENT, validate: {}, handler: async ({ response, - request, server, syntheticsMonitorClient, savedObjectsClient, @@ -66,12 +69,12 @@ export const disableSyntheticsRoute: SyntheticsRestApiRouteFactory = (libs) => ( const { security } = server; const { syntheticsService } = syntheticsMonitorClient; try { - const { canEnable } = await libs.requests.getSyntheticsEnablement({ server }); + const { canEnable } = await getSyntheticsEnablement({ server }); if (!canEnable) { return response.forbidden(); } await syntheticsService.deleteAllConfigs(); - const { apiKey } = await libs.requests.getAPIKeyForSyntheticsService({ + const { apiKey } = await getAPIKeyForSyntheticsService({ server, }); await syntheticsServiceAPIKeySavedObject.delete(savedObjectsClient); diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_allowed.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_allowed.ts index 164f1a1d74bf8..9b53e814fc1b8 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_allowed.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_allowed.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const getServiceAllowedRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_locations.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_locations.ts index c076d2393a884..01f4946b3508f 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_locations.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/get_service_locations.ts @@ -5,8 +5,8 @@ * 2.0. */ +import { SyntheticsRestApiRouteFactory } from '../types'; import { getAllLocations } from '../../synthetics_service/get_all_locations'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; export const getServiceLocationsRoute: SyntheticsRestApiRouteFactory = () => ({ diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/install_index_templates.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/install_index_templates.ts index 5eb8581d9dd84..c9ee257335c99 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/install_index_templates.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/install_index_templates.ts @@ -5,9 +5,9 @@ * 2.0. */ -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; +import { SyntheticsRestApiRouteFactory } from '../types'; +import { SyntheticsServerSetup } from '../../types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; export const installIndexTemplatesRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'GET', @@ -18,7 +18,7 @@ export const installIndexTemplatesRoute: SyntheticsRestApiRouteFactory = () => ( }, }); -export async function installSyntheticsIndexTemplates(server: UptimeServerSetup) { +export async function installSyntheticsIndexTemplates(server: SyntheticsServerSetup) { // no need to add error handling here since fleetSetupCompleted is already wrapped in try/catch and will log // warning if setup fails to complete await server.fleet.fleetSetupCompleted(); diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/run_once_monitor.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/run_once_monitor.ts index deae289bc2471..b87848a2b71ba 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/run_once_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/run_once_monitor.ts @@ -6,8 +6,8 @@ */ import { schema } from '@kbn/config-schema'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { MonitorFields } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { validateMonitor } from '../monitor_cruds/monitor_validation'; diff --git a/x-pack/plugins/synthetics/server/routes/synthetics_service/test_now_monitor.ts b/x-pack/plugins/synthetics/server/routes/synthetics_service/test_now_monitor.ts index d70390122b2ca..0300c81ed3e8f 100644 --- a/x-pack/plugins/synthetics/server/routes/synthetics_service/test_now_monitor.ts +++ b/x-pack/plugins/synthetics/server/routes/synthetics_service/test_now_monitor.ts @@ -7,6 +7,7 @@ import { schema } from '@kbn/config-schema'; import { v4 as uuidv4 } from 'uuid'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { SyntheticsRestApiRouteFactory } from '../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { TestNowResponse } from '../../../common/types'; import { @@ -14,7 +15,6 @@ import { MonitorFields, SyntheticsMonitorWithSecrets, } from '../../../common/runtime_types'; -import { SyntheticsRestApiRouteFactory } from '../../legacy_uptime/routes/types'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { normalizeSecrets } from '../../synthetics_service/utils/secrets'; diff --git a/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.test.ts b/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.test.ts index 6dc14565b6289..097367de05cad 100644 --- a/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.test.ts +++ b/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.test.ts @@ -17,13 +17,10 @@ import { } from '../../../common/runtime_types/monitor_management'; import { DEFAULT_FIELDS } from '../../../common/constants/monitor_defaults'; -import type { TelemetryEventsSender } from '../../legacy_uptime/lib/telemetry/sender'; -import { createMockTelemetryEventsSender } from '../../legacy_uptime/lib/telemetry/__mocks__'; +import type { TelemetryEventsSender } from '../../telemetry/sender'; +import { createMockTelemetryEventsSender } from '../../telemetry/__mocks__'; -import { - MONITOR_UPDATE_CHANNEL, - MONITOR_CURRENT_CHANNEL, -} from '../../legacy_uptime/lib/telemetry/constants'; +import { MONITOR_UPDATE_CHANNEL, MONITOR_CURRENT_CHANNEL } from '../../telemetry/constants'; import { formatTelemetryEvent, diff --git a/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.ts b/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.ts index 80fb8c517ddca..aff7197dc10b7 100644 --- a/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.ts +++ b/x-pack/plugins/synthetics/server/routes/telemetry/monitor_upgrade_sender.ts @@ -7,7 +7,15 @@ import { sha256 } from 'js-sha256'; import type { Logger } from '@kbn/core/server'; import { SavedObjectsUpdateResponse, SavedObject } from '@kbn/core/server'; -import { scheduleToMilli } from '../../../common/lib/schedule_to_time'; +import type { MonitorUpdateEvent } from '../../telemetry/types'; + +import { TelemetryEventsSender } from '../../telemetry/sender'; +import { + MONITOR_UPDATE_CHANNEL, + MONITOR_CURRENT_CHANNEL, + MONITOR_ERROR_EVENTS_CHANNEL, +} from '../../telemetry/constants'; +import { MonitorErrorEvent } from '../../telemetry/types'; import { MonitorFields, EncryptedSyntheticsMonitor, @@ -15,15 +23,7 @@ import { ServiceLocationErrors, SourceType, } from '../../../common/runtime_types'; -import type { MonitorUpdateEvent } from '../../legacy_uptime/lib/telemetry/types'; - -import { TelemetryEventsSender } from '../../legacy_uptime/lib/telemetry/sender'; -import { - MONITOR_UPDATE_CHANNEL, - MONITOR_CURRENT_CHANNEL, - MONITOR_ERROR_EVENTS_CHANNEL, -} from '../../legacy_uptime/lib/telemetry/constants'; -import { MonitorErrorEvent } from '../../legacy_uptime/lib/telemetry/types'; +import { scheduleToMilli } from '../../../common/lib/schedule_to_time'; export function sendTelemetryEvents( logger: Logger, diff --git a/x-pack/plugins/synthetics/server/routes/types.ts b/x-pack/plugins/synthetics/server/routes/types.ts new file mode 100644 index 0000000000000..b372c6fd11a7f --- /dev/null +++ b/x-pack/plugins/synthetics/server/routes/types.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Subject } from 'rxjs'; +import { ObjectType } from '@kbn/config-schema'; +import { + RequestHandler, + RouteConfig, + RouteMethod, + SavedObjectsClientContract, + KibanaRequest, + KibanaResponseFactory, + IKibanaResponse, +} from '@kbn/core/server'; +import { UptimeEsClient } from '../lib'; +import { SyntheticsServerSetup, UptimeRequestHandlerContext } from '../types'; +import { SyntheticsMonitorClient } from '../synthetics_service/synthetics_monitor/synthetics_monitor_client'; +export type SyntheticsRequest = KibanaRequest< + Record, + Record, + Record +>; + +/** + * Defines the basic properties employed by Uptime routes. + */ +export interface UMServerRoute { + method: 'GET' | 'PUT' | 'POST' | 'DELETE'; + writeAccess?: boolean; + handler: T; + streamHandler?: ( + context: UptimeRequestHandlerContext, + request: SyntheticsRequest, + subject: Subject + ) => IKibanaResponse | Promise>; +} + +/** + * Merges basic uptime route properties with the route config type + * provided by Kibana core. + */ +export type UMRouteDefinition = UMServerRoute & + RouteConfig; + +/** + * This type represents an Uptime route definition that corresponds to the contract + * provided by the Kibana platform. Route objects must conform to this type in order + * to successfully interact with the Kibana platform. + */ +export type UMKibanaRoute = UMRouteDefinition< + RequestHandler +>; + +export type SyntheticsRestApiRouteFactory< + ClientContract = any, + QueryParams = Record +> = () => SyntheticsRoute; + +export type SyntheticsRoute< + ClientContract = unknown, + QueryParams = Record +> = UMRouteDefinition>; + +export type SyntheticsRouteWrapper = ( + uptimeRoute: SyntheticsRoute>, + server: SyntheticsServerSetup, + syntheticsMonitorClient: SyntheticsMonitorClient +) => UMKibanaRoute; + +export interface UptimeRouteContext { + uptimeEsClient: UptimeEsClient; + context: UptimeRequestHandlerContext; + request: SyntheticsRequest; + response: KibanaResponseFactory; + savedObjectsClient: SavedObjectsClientContract; + server: SyntheticsServerSetup; + subject?: Subject; +} + +export interface RouteContext> { + uptimeEsClient: UptimeEsClient; + context: UptimeRequestHandlerContext; + request: KibanaRequest, Query, Record>; + response: KibanaResponseFactory; + savedObjectsClient: SavedObjectsClientContract; + server: SyntheticsServerSetup; + syntheticsMonitorClient: SyntheticsMonitorClient; + subject?: Subject; + spaceId: string; +} + +export type SyntheticsRouteHandler> = ({ + uptimeEsClient, + context, + request, + response, + server, + savedObjectsClient, + subject: Subject, +}: RouteContext) => Promise | ClientContract>; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/index.ts b/x-pack/plugins/synthetics/server/saved_objects/index.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/index.ts rename to x-pack/plugins/synthetics/server/saved_objects/index.ts diff --git a/x-pack/plugins/synthetics/server/saved_objects/migrations.test.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations.test.ts new file mode 100644 index 0000000000000..ba97a9753f86a --- /dev/null +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations.test.ts @@ -0,0 +1,165 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { add820Indices, remove890Indices } from './migrations'; +import { SavedObject, SavedObjectMigrationContext } from '@kbn/core/server'; +import { DynamicSettingsAttributes } from '../runtime_types/settings'; + +describe('add820Indices migration', () => { + const context = { log: { warning: () => {} } } as unknown as SavedObjectMigrationContext; + + const makeSettings = (heartbeatIndices: string): SavedObject => { + return { + id: '1', + type: 't', + references: [], + attributes: { + heartbeatIndices, + certAgeThreshold: 1, + certExpirationThreshold: 2, + defaultConnectors: ['example'], + }, + }; + }; + + it("adds the synthetics-* index if it's not in the indices settings", () => { + const doc = makeSettings('heartbeat-8*,something_else'); + const result = add820Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'heartbeat-8*,something_else,synthetics-*', + }, + }); + }); + + it("adds the heartbeat-8* index if it's not in the indices settings", () => { + const doc = makeSettings('synthetics-*,something_else'); + const result = add820Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'synthetics-*,something_else,heartbeat-8*', + }, + }); + }); + + it("adds both synthetics-* and heartbeat-8* index if they're not present in the indices", () => { + const doc = makeSettings('something-*,something_else'); + const result = add820Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'something-*,something_else,synthetics-*,heartbeat-8*', + }, + }); + }); + + it('works for empty heartbeat indices fields', () => { + const doc = makeSettings(''); + const result = add820Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'synthetics-*,heartbeat-8*', + }, + }); + }); + + it('works for undefined heartbeat indices fields', () => { + const doc = makeSettings(''); + + // We must TS ignore this so that we can delete this + // non-optional field and test that the migration still works + // when the field does not exist in the document + // @ts-expect-error + delete doc.attributes.heartbeatIndices; + const result = add820Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'synthetics-*,heartbeat-8*', + }, + }); + }); +}); + +describe('remove890Indices migration', () => { + const context = { log: { warning: () => {} } } as unknown as SavedObjectMigrationContext; + + const makeSettings = (heartbeatIndices: string): SavedObject => { + return { + id: '1', + type: 't', + references: [], + attributes: { + heartbeatIndices, + certAgeThreshold: 1, + certExpirationThreshold: 2, + defaultConnectors: ['example'], + }, + }; + }; + + it("removes the synthetics-* index if it's in the indices settings", () => { + const doc = makeSettings('heartbeat-8*,synthetics-*,something_else'); + const result = remove890Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'heartbeat-8*,something_else', + }, + }); + }); + + it("adds the heartbeat-8* index if it's not in the indices settings", () => { + const doc = makeSettings('synthetics-*,something_else'); + const result = remove890Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'something_else,heartbeat-8*', + }, + }); + }); + + it('works for empty heartbeat indices fields', () => { + const doc = makeSettings(''); + const result = remove890Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'heartbeat-8*', + }, + }); + }); + + it('works for undefined heartbeat indices fields', () => { + const doc = makeSettings(''); + + // We must TS ignore this so that we can delete this + // non-optional field and test that the migration still works + // when the field does not exist in the document + // @ts-expect-error + delete doc.attributes.heartbeatIndices; + const result = remove890Indices(doc, context); + expect(result).toEqual({ + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: 'heartbeat-8*', + }, + }); + }); +}); diff --git a/x-pack/plugins/synthetics/server/saved_objects/migrations.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations.ts new file mode 100644 index 0000000000000..2b7e15e37d83a --- /dev/null +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SavedObjectMigrationFn } from '@kbn/core/server'; +import { DynamicSettingsAttributes } from '../runtime_types/settings'; + +export const add820Indices: SavedObjectMigrationFn< + DynamicSettingsAttributes, + DynamicSettingsAttributes +> = (doc) => { + const heartbeatIndices = doc.attributes?.heartbeatIndices; + + const indicesArr = !heartbeatIndices ? [] : heartbeatIndices.split(','); + + if (!indicesArr.includes('synthetics-*')) { + indicesArr.push('synthetics-*'); + } + + if (!indicesArr.includes('heartbeat-8*')) { + indicesArr.push('heartbeat-8*'); + } + + const migratedObj = { + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: indicesArr.join(','), + }, + }; + + return migratedObj; +}; + +export const remove890Indices: SavedObjectMigrationFn< + DynamicSettingsAttributes, + DynamicSettingsAttributes +> = (doc) => { + const heartbeatIndices = doc.attributes?.heartbeatIndices; + + const indicesArr = !heartbeatIndices ? [] : heartbeatIndices.split(','); + + // remove synthetics-* from the array + const indexToRemove = indicesArr.indexOf('synthetics-*'); + if (indexToRemove > -1) { + indicesArr.splice(indexToRemove, 1); + } + + if (!indicesArr.includes('heartbeat-8*')) { + indicesArr.push('heartbeat-8*'); + } + + return { + ...doc, + attributes: { + ...doc.attributes, + heartbeatIndices: indicesArr.join(','), + }, + }; +}; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.test.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts similarity index 99% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.test.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts index 3f046a5ed3115..296c48457d44d 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.test.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.test.ts @@ -11,7 +11,7 @@ import { ConfigKey, LocationStatus, SyntheticsMonitorWithSecrets, -} from '../../../../../../common/runtime_types'; +} from '../../../../common/runtime_types'; const context = migrationMocks.createContext(); const encryptedSavedObjectsSetup = encryptedSavedObjectsMock.createSetup(); diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.ts similarity index 97% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.ts index ea070bd07dc16..44713fb371809 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.6.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.6.0.ts @@ -6,7 +6,7 @@ */ import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { SavedObjectUnsanitizedDoc } from '@kbn/core/server'; -import { ConfigKey, SyntheticsMonitorWithSecrets } from '../../../../../../common/runtime_types'; +import { ConfigKey, SyntheticsMonitorWithSecrets } from '../../../../common/runtime_types'; import { LEGACY_SYNTHETICS_MONITOR_ENCRYPTED_TYPE } from '../../synthetics_monitor'; export const migration860 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) => { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.test.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.test.ts similarity index 98% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.test.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.test.ts index 65768459dc96e..8f3b5e3c85a64 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.test.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.test.ts @@ -7,12 +7,12 @@ import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { migration880 } from './8.8.0'; import { migrationMocks } from '@kbn/core/server/mocks'; -import { ConfigKey, ScheduleUnit } from '../../../../../../common/runtime_types'; +import { ConfigKey, ScheduleUnit } from '../../../../common/runtime_types'; import { ALLOWED_SCHEDULES_IN_MINUTES, PROFILE_VALUES_ENUM, PROFILES_MAP, -} from '../../../../../../common/constants/monitor_defaults'; +} from '../../../../common/constants/monitor_defaults'; import { browserUI, browserProject, @@ -22,7 +22,7 @@ import { httpUptimeUI, } from './test_fixtures/8.7.0'; import { httpUI as httpUI850 } from './test_fixtures/8.5.0'; -import { LegacyConfigKey } from '../../../../../../common/constants/monitor_management'; +import { LegacyConfigKey } from '../../../../common/constants/monitor_management'; import { omit } from 'lodash'; const context = migrationMocks.createContext(); diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.ts similarity index 95% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.ts index 9aec3104fc2bf..0cf1dd2374ee7 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.8.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.8.0.ts @@ -7,7 +7,7 @@ import { omit } from 'lodash'; import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { SavedObjectMigrationContext, SavedObjectUnsanitizedDoc } from '@kbn/core/server'; -import { LegacyConfigKey } from '../../../../../../common/constants/monitor_management'; +import { LegacyConfigKey } from '../../../../common/constants/monitor_management'; import { BrowserFields, ConfigKey, @@ -15,23 +15,23 @@ import { ScheduleUnit, SyntheticsMonitorWithSecrets, ThrottlingConfig, -} from '../../../../../../common/runtime_types'; +} from '../../../../common/runtime_types'; import { ALLOWED_SCHEDULES_IN_MINUTES, CUSTOM_LABEL, PROFILE_VALUES, PROFILE_VALUES_ENUM, PROFILES_MAP, -} from '../../../../../../common/constants/monitor_defaults'; +} from '../../../../common/constants/monitor_defaults'; import { LEGACY_SYNTHETICS_MONITOR_ENCRYPTED_TYPE, SYNTHETICS_MONITOR_ENCRYPTED_TYPE, } from '../../synthetics_monitor'; -import { validateMonitor } from '../../../../../routes/monitor_cruds/monitor_validation'; +import { validateMonitor } from '../../../routes/monitor_cruds/monitor_validation'; import { formatSecrets, normalizeMonitorSecretAttributes, -} from '../../../../../synthetics_service/utils/secrets'; +} from '../../../synthetics_service/utils/secrets'; export const migration880 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) => { return encryptedSavedObjects.createMigration< diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.test.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.test.ts similarity index 97% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.test.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.test.ts index 3c23c008824a4..aa849d57265f3 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.test.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.test.ts @@ -6,7 +6,7 @@ */ import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { migrationMocks } from '@kbn/core/server/mocks'; -import { ConfigKey } from '../../../../../../common/runtime_types'; +import { ConfigKey } from '../../../../common/runtime_types'; import { browserUI } from './test_fixtures/8.7.0'; import { httpUI as httpUI850 } from './test_fixtures/8.5.0'; import { migration890 } from './8.9.0'; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.ts similarity index 98% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.ts index d18c6473cc729..9032ac2e63aab 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/8.9.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/8.9.0.ts @@ -6,7 +6,7 @@ */ import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { SavedObjectUnsanitizedDoc } from '@kbn/core/server'; -import { ConfigKey, SyntheticsMonitorWithSecrets } from '../../../../../../common/runtime_types'; +import { ConfigKey, SyntheticsMonitorWithSecrets } from '../../../../common/runtime_types'; import { SYNTHETICS_MONITOR_ENCRYPTED_TYPE } from '../../synthetics_monitor'; export const migration890 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) => { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/index.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/index.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/index.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/index.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts similarity index 95% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts index 48a7a0db3cb79..5513a695fa807 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.5.0.ts @@ -5,7 +5,7 @@ * 2.0. */ import { SavedObjectUnsanitizedDoc } from '@kbn/core/server'; -import { SyntheticsMonitorWithSecrets } from '../../../../../../../common/runtime_types'; +import { SyntheticsMonitorWithSecrets } from '../../../../../common/runtime_types'; export const httpUI = { type: 'synthetics-monitor', diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts similarity index 99% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts rename to x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts index 75bc3d0452ba7..dd1e7fdfb6c35 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/migrations/monitors/test_fixtures/8.7.0.ts @@ -5,7 +5,7 @@ * 2.0. */ import { SavedObjectUnsanitizedDoc } from '@kbn/core/server'; -import { SyntheticsMonitorWithSecrets } from '../../../../../../../common/runtime_types'; +import { SyntheticsMonitorWithSecrets } from '../../../../../common/runtime_types'; export const browserUI = { type: 'synthetics-monitor', diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/private_locations.ts b/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts similarity index 93% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/private_locations.ts rename to x-pack/plugins/synthetics/server/saved_objects/private_locations.ts index c640340b65a26..2861c16f6cc9f 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/private_locations.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/private_locations.ts @@ -10,8 +10,8 @@ import { SavedObjectsErrorHelpers, SavedObjectsType, } from '@kbn/core/server'; -import { privateLocationsSavedObjectName } from '../../../../common/saved_objects/private_locations'; -import { PrivateLocation, SyntheticsPrivateLocations } from '../../../../common/runtime_types'; +import { privateLocationsSavedObjectName } from '../../common/saved_objects/private_locations'; +import { PrivateLocation, SyntheticsPrivateLocations } from '../../common/runtime_types'; export const privateLocationsSavedObjectId = 'synthetics-privates-locations-singleton'; export const privateLocationsSavedObject: SavedObjectsType = { diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/saved_objects.ts b/x-pack/plugins/synthetics/server/saved_objects/saved_objects.ts similarity index 84% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/saved_objects.ts rename to x-pack/plugins/synthetics/server/saved_objects/saved_objects.ts index 5673c84d33d72..2ae631214e9e1 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/saved_objects.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/saved_objects.ts @@ -5,7 +5,11 @@ * 2.0. */ -import { SavedObjectsErrorHelpers, SavedObjectsServiceSetup } from '@kbn/core/server'; +import { + SavedObjectsClientContract, + SavedObjectsErrorHelpers, + SavedObjectsServiceSetup, +} from '@kbn/core/server'; import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { @@ -13,11 +17,10 @@ import { syntheticsParamSavedObjectType, } from './synthetics_param'; import { privateLocationsSavedObject } from './private_locations'; -import { DYNAMIC_SETTINGS_DEFAULT_ATTRIBUTES } from '../../../constants/settings'; -import { DynamicSettingsAttributes } from '../../../runtime_types/settings'; -import { ConfigKey } from '../../../../common/runtime_types'; -import { UMSavedObjectsQueryFn } from '../adapters'; -import { UptimeConfig } from '../../../../common/config'; +import { DYNAMIC_SETTINGS_DEFAULT_ATTRIBUTES } from '../constants/settings'; +import { DynamicSettingsAttributes } from '../runtime_types/settings'; +import { ConfigKey } from '../../common/runtime_types'; +import { UptimeConfig } from '../../common/config'; import { settingsObjectId, umDynamicSettings } from './uptime_settings'; import { getSyntheticsMonitorSavedObjectType, @@ -25,11 +28,15 @@ import { } from './synthetics_monitor'; import { syntheticsServiceApiKey } from './service_api_key'; +export type UMSavedObjectsQueryFn = ( + client: SavedObjectsClientContract, + params?: P +) => Promise | T; + export const registerUptimeSavedObjects = ( savedObjectsService: SavedObjectsServiceSetup, encryptedSavedObjects: EncryptedSavedObjectsPluginSetup ) => { - savedObjectsService.registerType(umDynamicSettings); savedObjectsService.registerType(privateLocationsSavedObject); savedObjectsService.registerType(getSyntheticsMonitorSavedObjectType(encryptedSavedObjects)); diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/service_api_key.ts b/x-pack/plugins/synthetics/server/saved_objects/service_api_key.ts similarity index 89% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/service_api_key.ts rename to x-pack/plugins/synthetics/server/saved_objects/service_api_key.ts index 3c62f99f7e67b..1fec6ccbbd3a4 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/service_api_key.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/service_api_key.ts @@ -11,8 +11,8 @@ import { SavedObjectsErrorHelpers, SavedObjectsType, } from '@kbn/core/server'; -import { SyntheticsServiceApiKey } from '../../../../common/runtime_types/synthetics_service_api_key'; -import { UptimeServerSetup } from '../adapters'; +import { SyntheticsServerSetup } from '../types'; +import { SyntheticsServiceApiKey } from '../../common/runtime_types/synthetics_service_api_key'; export const syntheticsApiKeyID = 'ba997842-b0cf-4429-aa9d-578d9bf0d391'; export const syntheticsApiKeyObjectType = 'uptime-synthetics-api-key'; @@ -49,14 +49,14 @@ export const syntheticsServiceApiKey: SavedObjectsType = { }, }; -const getEncryptedSOClient = (server: UptimeServerSetup) => { +const getEncryptedSOClient = (server: SyntheticsServerSetup) => { const encryptedClient = server.encryptedSavedObjects.getClient({ includedHiddenTypes: [syntheticsServiceApiKey.name], }); return encryptedClient; }; -const getSyntheticsServiceAPIKey = async (server: UptimeServerSetup) => { +const getSyntheticsServiceAPIKey = async (server: SyntheticsServerSetup) => { try { const soClient = getEncryptedSOClient(server); const obj = await soClient.getDecryptedAsInternalUser( diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_monitor.ts b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor.ts similarity index 96% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_monitor.ts rename to x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor.ts index 8b57943b3b7ce..c5bd20b4c968b 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_monitor.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor.ts @@ -7,12 +7,8 @@ import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { SavedObjectsType } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; -import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; -import { - secretKeys, - ConfigKey, - LegacyConfigKey, -} from '../../../../common/constants/monitor_management'; +import { syntheticsMonitorType } from '../../common/types/saved_objects'; +import { secretKeys, ConfigKey, LegacyConfigKey } from '../../common/constants/monitor_management'; import { monitorMigrations } from './migrations/monitors'; const legacyConfigKeys = Object.values(LegacyConfigKey); diff --git a/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts index 8850f3b32c8df..1d25503159c58 100644 --- a/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.test.ts @@ -6,13 +6,13 @@ */ import { processMonitors } from './get_all_monitors'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { mockEncryptedSO } from '../../synthetics_service/utils/mocks'; import { loggerMock } from '@kbn/logging-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; import { SyntheticsService } from '../../synthetics_service/synthetics_service'; import * as getLocations from '../../synthetics_service/get_all_locations'; +import { SyntheticsServerSetup } from '../../types'; describe('processMonitors', () => { const mockEsClient = { @@ -21,7 +21,7 @@ describe('processMonitors', () => { const logger = loggerMock.create(); const soClient = savedObjectsClientMock.create(); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: soClient, @@ -38,7 +38,7 @@ describe('processMonitors', () => { }, }, encryptedSavedObjects: mockEncryptedSO(), - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const syntheticsService = new SyntheticsService(serverMock); diff --git a/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts index 1ff64bb30f089..75c11aa5b5e9a 100644 --- a/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/synthetics_monitor/get_all_monitors.ts @@ -12,9 +12,9 @@ import { } from '@kbn/core-saved-objects-api-server'; import pMap from 'p-map'; import { intersection } from 'lodash'; +import { SyntheticsServerSetup } from '../../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { periodToMs } from '../../routes/overview_status/overview_status'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { getAllLocations } from '../../synthetics_service/get_all_locations'; import { ConfigKey, @@ -61,7 +61,7 @@ export const getAllMonitors = async ({ export const processMonitors = async ( allMonitors: Array>, - server: UptimeServerSetup, + server: SyntheticsServerSetup, soClient: SavedObjectsClientContract, syntheticsMonitorClient: SyntheticsMonitorClient, queryLocations?: string[] | string diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_param.ts b/x-pack/plugins/synthetics/server/saved_objects/synthetics_param.ts similarity index 90% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_param.ts rename to x-pack/plugins/synthetics/server/saved_objects/synthetics_param.ts index ed876ca6a5340..b59b099858890 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/synthetics_param.ts +++ b/x-pack/plugins/synthetics/server/saved_objects/synthetics_param.ts @@ -5,7 +5,7 @@ * 2.0. */ import { SavedObjectsType } from '@kbn/core/server'; -import { syntheticsParamType } from '../../../../common/types/saved_objects'; +import { syntheticsParamType } from '../../common/types/saved_objects'; export const SYNTHETICS_SECRET_ENCRYPTED_TYPE = { type: syntheticsParamType, diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/uptime_settings.ts b/x-pack/plugins/synthetics/server/saved_objects/uptime_settings.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/saved_objects/uptime_settings.ts rename to x-pack/plugins/synthetics/server/saved_objects/uptime_settings.ts diff --git a/x-pack/plugins/synthetics/server/server.ts b/x-pack/plugins/synthetics/server/server.ts index f6f9a137ed756..9e829045013d4 100644 --- a/x-pack/plugins/synthetics/server/server.ts +++ b/x-pack/plugins/synthetics/server/server.ts @@ -7,28 +7,21 @@ import { IRuleDataClient } from '@kbn/rule-registry-plugin/server'; import { registerSyntheticsTLSCheckRule } from './alert_rules/tls_rule/tls_rule'; import { registerSyntheticsStatusCheckRule } from './alert_rules/status_rule/monitor_status_rule'; +import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from './types'; import { createSyntheticsRouteWithAuth } from './routes/create_route_with_auth'; import { SyntheticsMonitorClient } from './synthetics_service/synthetics_monitor/synthetics_monitor_client'; import { syntheticsRouteWrapper } from './synthetics_route_wrapper'; -import { uptimeRequests } from './legacy_uptime/lib/requests'; import { syntheticsAppRestApiRoutes } from './routes'; -import { UptimeServerSetup, UptimeCorePluginsSetup } from './legacy_uptime/lib/adapters'; -import { licenseCheck } from './legacy_uptime/lib/domains'; export const initSyntheticsServer = ( - server: UptimeServerSetup, + server: SyntheticsServerSetup, syntheticsMonitorClient: SyntheticsMonitorClient, - plugins: UptimeCorePluginsSetup, + plugins: SyntheticsPluginsSetupDependencies, ruleDataClient: IRuleDataClient ) => { - const libs = { - requests: uptimeRequests, - license: licenseCheck, - }; - syntheticsAppRestApiRoutes.forEach((route) => { const { method, options, handler, validate, path } = syntheticsRouteWrapper( - createSyntheticsRouteWithAuth(libs, route), + createSyntheticsRouteWithAuth(route), server, syntheticsMonitorClient ); @@ -63,7 +56,6 @@ export const initSyntheticsServer = ( const statusAlert = registerSyntheticsStatusCheckRule( server, - libs, plugins, syntheticsMonitorClient, ruleDataClient @@ -73,7 +65,6 @@ export const initSyntheticsServer = ( const tlsRule = registerSyntheticsTLSCheckRule( server, - libs, plugins, syntheticsMonitorClient, ruleDataClient diff --git a/x-pack/plugins/synthetics/server/synthetics_route_wrapper.ts b/x-pack/plugins/synthetics/server/synthetics_route_wrapper.ts index e8deab315d697..7b4b67f63207f 100644 --- a/x-pack/plugins/synthetics/server/synthetics_route_wrapper.ts +++ b/x-pack/plugins/synthetics/server/synthetics_route_wrapper.ts @@ -6,11 +6,11 @@ */ import { KibanaResponse } from '@kbn/core-http-router-server-internal'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { isTestUser, UptimeEsClient } from './lib'; import { checkIndicesReadPrivileges } from './synthetics_service/authentication/check_has_privilege'; import { SYNTHETICS_INDEX_PATTERN } from '../common/constants'; -import { isTestUser, UptimeEsClient } from './legacy_uptime/lib/lib'; -import { syntheticsServiceApiKey } from './legacy_uptime/lib/saved_objects/service_api_key'; -import { SyntheticsRouteWrapper, SyntheticsStreamingRouteHandler } from './legacy_uptime/routes'; +import { syntheticsServiceApiKey } from './saved_objects/service_api_key'; +import { SyntheticsRouteWrapper } from './routes/types'; export const syntheticsRouteWrapper: SyntheticsRouteWrapper = ( uptimeRoute, @@ -22,39 +22,6 @@ export const syntheticsRouteWrapper: SyntheticsRouteWrapper = ( tags: ['access:uptime-read', ...(uptimeRoute?.writeAccess ? ['access:uptime-write'] : [])], ...(uptimeRoute.options ?? {}), }, - streamHandler: async (context, request, subject) => { - const coreContext = await context.core; - const { client: esClient } = coreContext.elasticsearch; - const savedObjectsClient = coreContext.savedObjects.getClient({ - includedHiddenTypes: [syntheticsServiceApiKey.name], - }); - - // specifically needed for the synthetics service api key generation - server.authSavedObjectsClient = savedObjectsClient; - - const uptimeEsClient = new UptimeEsClient(savedObjectsClient, esClient.asCurrentUser, { - request, - isDev: false, - uiSettings: coreContext.uiSettings, - }); - - server.uptimeEsClient = uptimeEsClient; - - const spaceId = server.spaces?.spacesService.getSpaceId(request) ?? DEFAULT_SPACE_ID; - - const res = await (uptimeRoute.handler as SyntheticsStreamingRouteHandler)({ - uptimeEsClient, - savedObjectsClient, - context, - request, - server, - syntheticsMonitorClient, - subject, - spaceId, - }); - - return res; - }, handler: async (context, request, response) => { const { elasticsearch, savedObjects, uiSettings } = await context.core; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/authentication/check_has_privilege.ts b/x-pack/plugins/synthetics/server/synthetics_service/authentication/check_has_privilege.ts index 7a2dcb5446725..17286ac368276 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/authentication/check_has_privilege.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/authentication/check_has_privilege.ts @@ -6,13 +6,13 @@ */ import { SecurityIndexPrivilege } from '@elastic/elasticsearch/lib/api/types'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; +import { UptimeEsClient } from '../../lib'; +import { SyntheticsServerSetup } from '../../types'; import { getFakeKibanaRequest } from '../utils/fake_kibana_request'; import { serviceApiKeyPrivileges, syntheticsIndex } from '../get_api_key'; -import { UptimeEsClient } from '../../legacy_uptime/lib/lib'; export const checkHasPrivileges = async ( - server: UptimeServerSetup, + server: SyntheticsServerSetup, apiKey: { id: string; apiKey: string } ) => { return await server.coreStart.elasticsearch.client diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_all_locations.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_all_locations.ts index d36e0928a62aa..e3f5f2691d37f 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_all_locations.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_all_locations.ts @@ -5,17 +5,17 @@ * 2.0. */ import { SavedObjectsClientContract } from '@kbn/core/server'; +import { SyntheticsServerSetup } from '../types'; import { getPrivateLocations } from './get_private_locations'; import { getServiceLocations } from './get_service_locations'; import { SyntheticsMonitorClient } from './synthetics_monitor/synthetics_monitor_client'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters/framework'; export async function getAllLocations({ syntheticsMonitorClient, savedObjectsClient, server, }: { - server: UptimeServerSetup; + server: SyntheticsServerSetup; syntheticsMonitorClient: SyntheticsMonitorClient; savedObjectsClient: SavedObjectsClientContract; }) { @@ -37,7 +37,7 @@ export async function getAllLocations({ } const getServicePublicLocations = async ( - server: UptimeServerSetup, + server: SyntheticsServerSetup, syntheticsMonitorClient: SyntheticsMonitorClient ) => { if (syntheticsMonitorClient.syntheticsService.locations.length === 0) { diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.test.ts index ca4a18e88d5d9..172888435d338 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.test.ts @@ -9,13 +9,13 @@ import { getAPIKeyForSyntheticsService, syntheticsIndex } from './get_api_key'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { securityMock } from '@kbn/security-plugin/server/mocks'; import { coreMock } from '@kbn/core/server/mocks'; -import { syntheticsServiceApiKey } from '../legacy_uptime/lib/saved_objects/service_api_key'; +import { syntheticsServiceApiKey } from '../saved_objects/service_api_key'; import { KibanaRequest } from '@kbn/core/server'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; -import { getUptimeESMockClient } from '../legacy_uptime/lib/requests/test_helpers'; import { loggerMock } from '@kbn/logging-mocks'; import * as authUtils from './authentication/check_has_privilege'; +import { SyntheticsServerSetup } from '../types'; +import { getUptimeESMockClient } from '../legacy_uptime/lib/requests/test_helpers'; describe('getAPIKeyTest', function () { const core = coreMock.createStart(); @@ -31,7 +31,7 @@ describe('getAPIKeyTest', function () { encryptedSavedObjects, savedObjectsClient: core.savedObjects.getScopedClient(request), uptimeEsClient: getUptimeESMockClient().uptimeEsClient, - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; security.authc.apiKeys.areAPIKeysEnabled = jest.fn().mockReturnValue(true); security.authc.apiKeys.validate = jest.fn().mockReturnValue(true); diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts index e41b4c0775d00..b4b424f018267 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_api_key.ts @@ -11,9 +11,9 @@ import type { import { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server'; import { ALL_SPACES_ID } from '@kbn/security-plugin/common/constants'; -import { syntheticsServiceAPIKeySavedObject } from '../legacy_uptime/lib/saved_objects/service_api_key'; +import { SyntheticsServerSetup } from '../types'; +import { syntheticsServiceAPIKeySavedObject } from '../saved_objects/service_api_key'; import { SyntheticsServiceApiKey } from '../../common/runtime_types/synthetics_service_api_key'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; import { checkHasPrivileges } from './authentication/check_has_privilege'; export const syntheticsIndex = 'synthetics-*'; @@ -37,7 +37,7 @@ export const serviceApiKeyPrivileges = { export const getAPIKeyForSyntheticsService = async ({ server, }: { - server: UptimeServerSetup; + server: SyntheticsServerSetup; }): Promise<{ apiKey?: SyntheticsServiceApiKey; isValid: boolean }> => { try { const apiKey = await syntheticsServiceAPIKeySavedObject.get(server); @@ -81,7 +81,7 @@ export const generateAPIKey = async ({ request, projectAPIKey = false, }: { - server: UptimeServerSetup; + server: SyntheticsServerSetup; request: KibanaRequest; projectAPIKey?: boolean; }) => { @@ -140,7 +140,7 @@ export const generateAndSaveServiceAPIKey = async ({ request, authSavedObjectsClient, }: { - server: UptimeServerSetup; + server: SyntheticsServerSetup; request: KibanaRequest; // authSavedObject is needed for write operations authSavedObjectsClient?: SavedObjectsClientContract; @@ -158,7 +158,7 @@ export const generateAndSaveServiceAPIKey = async ({ } }; -export const getSyntheticsEnablement = async ({ server }: { server: UptimeServerSetup }) => { +export const getSyntheticsEnablement = async ({ server }: { server: SyntheticsServerSetup }) => { const { security, config } = server; const [apiKey, hasPrivileges, areApiKeysEnabled] = await Promise.all([ @@ -188,7 +188,7 @@ export const getSyntheticsEnablement = async ({ server }: { server: UptimeServer }; }; -const hasEnablePermissions = async ({ uptimeEsClient }: UptimeServerSetup) => { +const hasEnablePermissions = async ({ uptimeEsClient }: SyntheticsServerSetup) => { const hasPrivileges = await uptimeEsClient.baseESClient.security.hasPrivileges({ body: { cluster: [ diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_private_locations.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_private_locations.ts index 69ce2c6c09f3a..483ef8b029171 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_private_locations.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_private_locations.ts @@ -7,7 +7,7 @@ import { SavedObjectsClientContract } from '@kbn/core/server'; import { SyntheticsMonitorClient } from './synthetics_monitor/synthetics_monitor_client'; -import { getSyntheticsPrivateLocations } from '../legacy_uptime/lib/saved_objects/private_locations'; +import { getSyntheticsPrivateLocations } from '../saved_objects/private_locations'; export async function getPrivateLocations( syntheticsMonitorClient: SyntheticsMonitorClient, diff --git a/x-pack/plugins/synthetics/server/synthetics_service/get_service_locations.ts b/x-pack/plugins/synthetics/server/synthetics_service/get_service_locations.ts index 5fdf931b5605e..21a8278e8d165 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/get_service_locations.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/get_service_locations.ts @@ -7,6 +7,7 @@ import axios from 'axios'; import { pick } from 'lodash'; +import { SyntheticsServerSetup } from '../types'; import { ManifestLocation, PublicLocation, @@ -15,7 +16,6 @@ import { BandwidthLimitKey, LocationStatus, } from '../../common/runtime_types'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters/framework'; export const getDevLocation = (devUrl: string): PublicLocation => ({ id: 'localhost', @@ -27,7 +27,7 @@ export const getDevLocation = (devUrl: string): PublicLocation => ({ isInvalid: false, }); -export async function getServiceLocations(server: UptimeServerSetup) { +export async function getServiceLocations(server: SyntheticsServerSetup) { let locations: PublicLocations = []; if (server.config.service?.devUrl) { diff --git a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts index 96b6b20a3fc32..74b9a3672a768 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts @@ -6,7 +6,6 @@ */ import { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server'; import { loggerMock } from '@kbn/logging-mocks'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { DataStream, MonitorFields, @@ -19,6 +18,7 @@ import { SyntheticsPrivateLocation } from './synthetics_private_location'; import { testMonitorPolicy } from './test_policy'; import { formatSyntheticsPolicy } from '../formatters/private_formatters/format_synthetics_policy'; import { savedObjectsServiceMock } from '@kbn/core-saved-objects-server-mocks'; +import { SyntheticsServerSetup } from '../../types'; describe('SyntheticsPrivateLocation', () => { const mockPrivateLocation: PrivateLocation = { @@ -53,7 +53,7 @@ describe('SyntheticsPrivateLocation', () => { username: '', } as unknown as HeartbeatConfig; - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { uptimeEsClient: { search: jest.fn() }, logger: loggerMock.create(), config: { @@ -77,7 +77,7 @@ describe('SyntheticsPrivateLocation', () => { coreStart: { savedObjects: savedObjectsServiceMock.createStartContract(), }, - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; it.each([['Unable to create Synthetics package policy template for private location']])( 'throws errors for create monitor', diff --git a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts index 479b1b6f375b0..ed7a733fc5e0b 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts @@ -9,6 +9,7 @@ import { NewPackagePolicy } from '@kbn/fleet-plugin/common'; import { NewPackagePolicyWithId } from '@kbn/fleet-plugin/server/services/package_policy'; import { cloneDeep } from 'lodash'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; +import { SyntheticsServerSetup } from '../../types'; import { formatSyntheticsPolicy } from '../formatters/private_formatters/format_synthetics_policy'; import { ConfigKey, @@ -17,7 +18,6 @@ import { PrivateLocation, SourceType, } from '../../../common/runtime_types'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { stringifyString } from '../formatters/private_formatters/formatting_utils'; export interface PrivateConfig { @@ -32,9 +32,9 @@ export interface FailedPolicyUpdate { } export class SyntheticsPrivateLocation { - private readonly server: UptimeServerSetup; + private readonly server: SyntheticsServerSetup; - constructor(_server: UptimeServerSetup) { + constructor(_server: SyntheticsServerSetup) { this.server = _server; } diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts index c5e04cc795776..e224592b431fc 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.test.ts @@ -17,7 +17,6 @@ import { import { DEFAULT_FIELDS } from '../../../common/constants/monitor_defaults'; import { times } from 'lodash'; import { SyntheticsService } from '../synthetics_service'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client'; import { httpServerMock } from '@kbn/core-http-server-mocks'; @@ -27,6 +26,7 @@ import * as telemetryHooks from '../../routes/telemetry/monitor_upgrade_sender'; import { formatLocation } from '../../../common/utils/location_formatter'; import * as locationsUtil from '../get_all_locations'; import { mockEncryptedSO } from '../utils/mocks'; +import { SyntheticsServerSetup } from '../../types'; const testMonitors = [ { @@ -103,7 +103,7 @@ describe('ProjectMonitorFormatter', () => { const soClient = savedObjectsClientMock.create(); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: soClient, @@ -123,7 +123,7 @@ describe('ProjectMonitorFormatter', () => { coreStart: { savedObjects: savedObjectsServiceMock.createStartContract(), }, - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const syntheticsService = new SyntheticsService(serverMock); diff --git a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts index d9540da65ec11..e9787cb37ae80 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts @@ -12,8 +12,9 @@ import { } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; +import { SyntheticsServerSetup } from '../../types'; +import { RouteContext } from '../../routes/types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { RouteContext } from '../../legacy_uptime/routes'; import { getAllLocations } from '../get_all_locations'; import { syncNewMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/add_monitor_bulk'; import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client'; @@ -29,7 +30,6 @@ import { MonitorFields, PrivateLocation, } from '../../../common/runtime_types'; -import type { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { formatSecrets, normalizeSecrets } from '../utils/secrets'; import { validateProjectMonitor, @@ -65,7 +65,7 @@ export class ProjectMonitorFormatter { public createdMonitors: string[] = []; public updatedMonitors: string[] = []; public failedMonitors: FailedError = []; - private server: UptimeServerSetup; + private server: SyntheticsServerSetup; private projectFilter: string; private syntheticsMonitorClient: SyntheticsMonitorClient; private routeContext: RouteContext; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts index 15fc1f50ab6c2..f7abdde1755f4 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.test.ts @@ -10,11 +10,11 @@ import { CoreStart } from '@kbn/core/server'; import { coreMock } from '@kbn/core/server/mocks'; import { Logger } from '@kbn/core/server'; import { ServiceAPIClient } from './service_api_client'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; import { ServiceConfig } from '../../common/config'; import axios from 'axios'; import { LocationStatus, PublicLocations } from '../../common/runtime_types'; import { LicenseGetResponse } from '@elastic/elasticsearch/lib/api/types'; +import { SyntheticsServerSetup } from '../types'; const licenseMock: LicenseGetResponse = { license: { @@ -63,7 +63,7 @@ describe('getHttpsAgent', () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, { username: 'u', password: 'p' }, - { isDev: true, coreStart: mockCoreStart } as UptimeServerSetup + { isDev: true, coreStart: mockCoreStart } as SyntheticsServerSetup ); const { options: result } = apiClient.getHttpsAgent('https://localhost:10001'); expect(result).not.toHaveProperty('cert'); @@ -74,7 +74,7 @@ describe('getHttpsAgent', () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, { tls: { certificate: 'crt', key: 'k' } } as ServiceConfig, - { isDev: true, coreStart: mockCoreStart } as UptimeServerSetup + { isDev: true, coreStart: mockCoreStart } as SyntheticsServerSetup ); const { options: result } = apiClient.getHttpsAgent('https://example.com'); @@ -85,7 +85,7 @@ describe('getHttpsAgent', () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, { tls: { certificate: 'crt', key: 'k' } } as ServiceConfig, - { isDev: false, coreStart: mockCoreStart } as UptimeServerSetup + { isDev: false, coreStart: mockCoreStart } as SyntheticsServerSetup ); const { options: result } = apiClient.getHttpsAgent('https://localhost:10001'); @@ -96,7 +96,7 @@ describe('getHttpsAgent', () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, { tls: { certificate: 'crt', key: 'k' } } as ServiceConfig, - { isDev: false, coreStart: mockCoreStart } as UptimeServerSetup + { isDev: false, coreStart: mockCoreStart } as SyntheticsServerSetup ); const { options: result } = apiClient.getHttpsAgent('https://localhost:10001'); @@ -115,7 +115,7 @@ describe('checkAccountAccessStatus', () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, { tls: { certificate: 'crt', key: 'k' } } as ServiceConfig, - { isDev: false, stackVersion: '8.4', coreStart: mockCoreStart } as UptimeServerSetup + { isDev: false, stackVersion: '8.4', coreStart: mockCoreStart } as SyntheticsServerSetup ); apiClient.locations = [ @@ -174,7 +174,7 @@ describe('callAPI', () => { isDev: true, stackVersion: '8.7.0', coreStart: mockCoreStart, - } as UptimeServerSetup); + } as SyntheticsServerSetup); const spy = jest.spyOn(apiClient, 'callServiceEndpoint'); @@ -323,7 +323,7 @@ describe('callAPI', () => { isDev: true, stackVersion: '8.7.0', coreStart: mockCoreStart, - } as UptimeServerSetup + } as SyntheticsServerSetup ); apiClient.locations = testLocations; @@ -375,7 +375,7 @@ describe('callAPI', () => { manifestUrl: 'http://localhost:8080/api/manifest', tls: { certificate: 'test-certificate', key: 'test-key' } as any, }, - { isDev: true, stackVersion: '8.7.0' } as UptimeServerSetup + { isDev: true, stackVersion: '8.7.0' } as SyntheticsServerSetup ); apiClient.locations = testLocations; @@ -432,7 +432,7 @@ describe('callAPI', () => { isDev: true, stackVersion: '8.7.0', cloud: { cloudId: 'test-id', deploymentId: 'deployment-id' }, - } as UptimeServerSetup + } as SyntheticsServerSetup ); apiClient.locations = testLocations; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts index 0e709c8958976..02779526c8421 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/service_api_client.ts @@ -12,11 +12,11 @@ import * as https from 'https'; import { SslConfig } from '@kbn/server-http-tools'; import { Logger } from '@kbn/core/server'; import { LicenseGetLicenseInformation } from '@elastic/elasticsearch/lib/api/types'; +import { SyntheticsServerSetup } from '../types'; import { convertToDataStreamFormat, DataStreamConfig, } from './formatters/public_formatters/convert_to_data_stream'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; import { sendErrorTelemetryEvents } from '../routes/telemetry/monitor_upgrade_sender'; import { MonitorFields, PublicLocations, ServiceLocationErrors } from '../../common/runtime_types'; import { ServiceConfig } from '../../common/config'; @@ -55,9 +55,9 @@ export class ServiceAPIClient { private logger: Logger; private readonly config?: ServiceConfig; private readonly stackVersion: string; - private readonly server: UptimeServerSetup; + private readonly server: SyntheticsServerSetup; - constructor(logger: Logger, config: ServiceConfig, server: UptimeServerSetup) { + constructor(logger: Logger, config: ServiceConfig, server: SyntheticsServerSetup) { this.config = config; const { username, password } = config ?? {}; this.username = username; diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts index aa22fe9229cc2..32590b4dfa06c 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts @@ -8,7 +8,6 @@ import { loggerMock } from '@kbn/logging-mocks'; import { KibanaRequest, SavedObjectsClientContract, CoreStart } from '@kbn/core/server'; import { coreMock } from '@kbn/core/server/mocks'; import { SyntheticsMonitorClient } from './synthetics_monitor_client'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { SyntheticsService } from '../synthetics_service'; import times from 'lodash/times'; import { @@ -18,6 +17,7 @@ import { SyntheticsMonitorWithId, } from '../../../common/runtime_types'; import { mockEncryptedSO } from '../utils/mocks'; +import { SyntheticsServerSetup } from '../../types'; const mockCoreStart = coreMock.createStart() as CoreStart; @@ -50,7 +50,7 @@ describe('SyntheticsMonitorClient', () => { const logger = loggerMock.create(); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: { @@ -65,7 +65,7 @@ describe('SyntheticsMonitorClient', () => { }, }, encryptedSavedObjects: mockEncryptedSO(), - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const syntheticsService = new SyntheticsService(serverMock); diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts index 997dfe842507e..6f9a4baf6ff4b 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts @@ -11,10 +11,10 @@ import { SavedObjectsFindResult, } from '@kbn/core/server'; import { EncryptedSavedObjectsPluginStart } from '@kbn/encrypted-saved-objects-plugin/server'; +import { RouteContext } from '../../routes/types'; +import { SyntheticsServerSetup } from '../../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; -import { RouteContext } from '../../legacy_uptime/routes'; import { normalizeSecrets } from '../utils'; -import { UptimeServerSetup } from '../../legacy_uptime/lib/adapters'; import { PrivateConfig, SyntheticsPrivateLocation, @@ -40,7 +40,7 @@ export class SyntheticsMonitorClient { public syntheticsService: SyntheticsService; public privateLocationAPI: SyntheticsPrivateLocation; - constructor(syntheticsService: SyntheticsService, server: UptimeServerSetup) { + constructor(syntheticsService: SyntheticsService, server: SyntheticsServerSetup) { this.syntheticsService = syntheticsService; this.privateLocationAPI = new SyntheticsPrivateLocation(server); } diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.test.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.test.ts index a14447c47575a..594d4fbfbb633 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.test.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.test.ts @@ -10,12 +10,12 @@ import { coreMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; import { CoreStart } from '@kbn/core/server'; import { SyntheticsService } from './synthetics_service'; import { loggerMock } from '@kbn/logging-mocks'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; import axios, { AxiosResponse } from 'axios'; import times from 'lodash/times'; import { LocationStatus, HeartbeatConfig } from '../../common/runtime_types'; import { mockEncryptedSO } from './utils/mocks'; import * as apiKeys from './get_api_key'; +import { SyntheticsServerSetup } from '../types'; jest.mock('axios', () => jest.fn()); @@ -68,7 +68,7 @@ describe('SyntheticsService', () => { const logger = loggerMock.create(); - const serverMock: UptimeServerSetup = { + const serverMock: SyntheticsServerSetup = { logger, uptimeEsClient: mockEsClient, authSavedObjectsClient: { @@ -85,7 +85,7 @@ describe('SyntheticsService', () => { coreStart: mockCoreStart, encryptedSavedObjects: mockEncryptedSO(), savedObjectsClient: savedObjectsClientMock.create()!, - } as unknown as UptimeServerSetup; + } as unknown as SyntheticsServerSetup; const getMockedService = (locationsNum: number = 1) => { const locations = times(locationsNum).map((n) => { diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts index 470ba51a44577..a464e4ea0f971 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts @@ -19,9 +19,9 @@ import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin import pMap from 'p-map'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { ALL_SPACES_ID } from '@kbn/spaces-plugin/common/constants'; +import { SyntheticsServerSetup } from '../types'; import { syntheticsMonitorType, syntheticsParamType } from '../../common/types/saved_objects'; import { sendErrorTelemetryEvents } from '../routes/telemetry/monitor_upgrade_sender'; -import { UptimeServerSetup } from '../legacy_uptime/lib/adapters'; import { installSyntheticsIndexTemplates } from '../routes/synthetics_service/install_index_templates'; import { getAPIKeyForSyntheticsService } from './get_api_key'; import { getEsHosts } from './get_es_hosts'; @@ -57,7 +57,7 @@ const SYNTHETICS_SERVICE_SYNC_INTERVAL_DEFAULT = '5m'; export class SyntheticsService { private logger: Logger; private esClient?: ElasticsearchClient; - private readonly server: UptimeServerSetup; + private readonly server: SyntheticsServerSetup; public apiClient: ServiceAPIClient; private readonly config: ServiceConfig; @@ -76,7 +76,7 @@ export class SyntheticsService { public invalidApiKeyError?: boolean; - constructor(server: UptimeServerSetup) { + constructor(server: SyntheticsServerSetup) { this.logger = server.logger; this.server = server; this.config = server.config.service ?? {}; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/__mocks__/index.ts b/x-pack/plugins/synthetics/server/telemetry/__mocks__/index.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/__mocks__/index.ts rename to x-pack/plugins/synthetics/server/telemetry/__mocks__/index.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/constants.ts b/x-pack/plugins/synthetics/server/telemetry/constants.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/constants.ts rename to x-pack/plugins/synthetics/server/telemetry/constants.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/queue.test.ts b/x-pack/plugins/synthetics/server/telemetry/queue.test.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/queue.test.ts rename to x-pack/plugins/synthetics/server/telemetry/queue.test.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/queue.ts b/x-pack/plugins/synthetics/server/telemetry/queue.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/queue.ts rename to x-pack/plugins/synthetics/server/telemetry/queue.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/sender.test.ts b/x-pack/plugins/synthetics/server/telemetry/sender.test.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/sender.test.ts rename to x-pack/plugins/synthetics/server/telemetry/sender.test.ts diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/sender.ts b/x-pack/plugins/synthetics/server/telemetry/sender.ts similarity index 100% rename from x-pack/plugins/synthetics/server/legacy_uptime/lib/telemetry/sender.ts rename to x-pack/plugins/synthetics/server/telemetry/sender.ts diff --git a/x-pack/plugins/synthetics/server/telemetry/types.ts b/x-pack/plugins/synthetics/server/telemetry/types.ts new file mode 100644 index 0000000000000..d225265e67f48 --- /dev/null +++ b/x-pack/plugins/synthetics/server/telemetry/types.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { ServiceLocationErrors } from '../../common/runtime_types/monitor_management'; +import { MONITOR_ERROR_EVENTS_CHANNEL } from './constants'; + +export interface MonitorSyncEvent { + total: number; + totalTests: number; + browserTests24h: number; + httpTests24h: number; + icmpTests24h: number; + tcpTests24h: number; + [key: string]: number; +} + +export interface MonitorUpdateEvent { + updatedAt?: string; + lastUpdatedAt?: string; + durationSinceLastUpdated?: number; + deletedAt?: string; + type: string; + stackVersion: string; + monitorNameLength: number; + monitorInterval: number; + locations: string[]; + locationsCount: number; + scriptType?: 'inline' | 'recorder' | 'zip' | 'project'; + revision?: number; + errors?: ServiceLocationErrors; + configId: string; +} + +export interface MonitorErrorEvent { + type: string; + message: string; + reason?: string; + code?: string; + status?: number; + url?: string; + stackVersion: string; +} + +export interface MonitorUpdateTelemetryChannelEvents { + // channel name => event type + 'synthetics-monitor-update': MonitorUpdateEvent; + 'synthetics-monitor-current': MonitorUpdateEvent; + [MONITOR_ERROR_EVENTS_CHANNEL]: MonitorErrorEvent; + 'synthetics-monitor-sync-state': MonitorSyncEvent; + 'synthetics-monitor-sync-events': MonitorSyncEvent; +} + +export type MonitorUpdateTelemetryChannel = keyof MonitorUpdateTelemetryChannelEvents; diff --git a/x-pack/plugins/synthetics/server/types.ts b/x-pack/plugins/synthetics/server/types.ts index 5c064fc94d02d..847d91579ed2d 100644 --- a/x-pack/plugins/synthetics/server/types.ts +++ b/x-pack/plugins/synthetics/server/types.ts @@ -5,14 +5,85 @@ * 2.0. */ -import type { IRouter, CustomRequestHandlerContext } from '@kbn/core/server'; +import type { CustomRequestHandlerContext } from '@kbn/core/server'; import type { AlertingApiRequestHandlerContext } from '@kbn/alerting-plugin/server'; import type { LicensingApiRequestHandlerContext } from '@kbn/licensing-plugin/server'; import type { ActionsApiRequestHandlerContext } from '@kbn/actions-plugin/server'; +import { FleetStartContract } from '@kbn/fleet-plugin/server'; +import { + CoreStart, + IBasePath, + IRouter, + Logger, + SavedObjectsClientContract, +} from '@kbn/core/server'; +import { SharePluginSetup } from '@kbn/share-plugin/server'; +import { ObservabilityPluginSetup } from '@kbn/observability-plugin/server'; +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { TelemetryPluginSetup, TelemetryPluginStart } from '@kbn/telemetry-plugin/server'; +import { BfetchServerSetup } from '@kbn/bfetch-plugin/server'; +import { CloudSetup } from '@kbn/cloud-plugin/server'; +import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; +import { SecurityPluginStart } from '@kbn/security-plugin/server'; +import { MlPluginSetup as MlSetup } from '@kbn/ml-plugin/server'; +import { + EncryptedSavedObjectsPluginSetup, + EncryptedSavedObjectsPluginStart, +} from '@kbn/encrypted-saved-objects-plugin/server'; +import { PluginSetupContract } from '@kbn/features-plugin/server'; +import { RuleRegistryPluginSetupContract } from '@kbn/rule-registry-plugin/server'; +import { + TaskManagerSetupContract, + TaskManagerStartContract, +} from '@kbn/task-manager-plugin/server'; +import { TelemetryEventsSender } from './telemetry/sender'; +import { UptimeConfig } from '../common/config'; +import { UptimeEsClient } from './lib'; + +export interface SyntheticsServerSetup { + router: UptimeRouter; + config: UptimeConfig; + cloud?: CloudSetup; + spaces?: SpacesPluginStart; + fleet: FleetStartContract; + security: SecurityPluginStart; + savedObjectsClient?: SavedObjectsClientContract; + authSavedObjectsClient?: SavedObjectsClientContract; + encryptedSavedObjects: EncryptedSavedObjectsPluginStart; + share: SharePluginSetup; + stackVersion: string; + logger: Logger; + telemetry: TelemetryEventsSender; + uptimeEsClient: UptimeEsClient; + basePath: IBasePath; + isDev?: boolean; + coreStart: CoreStart; +} + +export interface SyntheticsPluginsSetupDependencies { + features: PluginSetupContract; + alerting: any; + observability: ObservabilityPluginSetup; + usageCollection: UsageCollectionSetup; + ml: MlSetup; + cloud?: CloudSetup; + ruleRegistry: RuleRegistryPluginSetupContract; + encryptedSavedObjects: EncryptedSavedObjectsPluginSetup; + taskManager: TaskManagerSetupContract; + telemetry: TelemetryPluginSetup; + bfetch: BfetchServerSetup; + share: SharePluginSetup; +} + +export interface SyntheticsPluginsStartDependencies { + security: SecurityPluginStart; + fleet: FleetStartContract; + encryptedSavedObjects: EncryptedSavedObjectsPluginStart; + taskManager: TaskManagerStartContract; + telemetry: TelemetryPluginStart; + spaces?: SpacesPluginStart; +} -/** - * @internal - */ export type UptimeRequestHandlerContext = CustomRequestHandlerContext<{ licensing: LicensingApiRequestHandlerContext; alerting: AlertingApiRequestHandlerContext; diff --git a/x-pack/plugins/synthetics/tsconfig.json b/x-pack/plugins/synthetics/tsconfig.json index 21261820072d0..e1f54877ade5c 100644 --- a/x-pack/plugins/synthetics/tsconfig.json +++ b/x-pack/plugins/synthetics/tsconfig.json @@ -7,9 +7,7 @@ "common/**/*", "scripts/**/*", "public/**/*", - "public/legacy_uptime/components/monitor/status_details/location_map/embeddables/low_poly_layer.json", "server/**/*", - "server/legacy_uptime/lib/requests/__fixtures__/monitor_charts_mock.json", "../../../typings/**/*" ], "kbn_references": [ @@ -41,14 +39,11 @@ "@kbn/kibana-react-plugin", "@kbn/i18n-react", "@kbn/securitysolution-io-ts-utils", - "@kbn/shared-ux-page-kibana-template", "@kbn/ui-theme", "@kbn/es-query", - "@kbn/test-jest-helpers", "@kbn/stack-connectors-plugin", "@kbn/rule-data-utils", "@kbn/core-http-browser", - "@kbn/core-http-browser-mocks", "@kbn/core-notifications-browser", "@kbn/rison", "@kbn/core-http-router-server-internal", @@ -73,15 +68,11 @@ "@kbn/core-saved-objects-server", "@kbn/shared-ux-prompt-not-found", "@kbn/logging", - "@kbn/safer-lodash-set", "@kbn/shared-ux-router", "@kbn/alerts-as-data-utils", "@kbn/exploratory-view-plugin", "@kbn/observability-shared-plugin", - "@kbn/ml-error-utils", - "@kbn/ml-anomaly-utils", "@kbn/core-http-server", - "@kbn/core-application-browser", "@kbn/std", "@kbn/core-saved-objects-server-mocks", ], diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 167fd710848b5..f9e6dcf58d465 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -35437,34 +35437,18 @@ "xpack.synthetics.alertRules.monitorStatus.reasonMessage": "Le moniteur \"{name}\" de {location} est {status}. Vérifié à {checkedAt}.", "xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "Temps de réponse anormal (niveau {severity}) détecté sur le {monitor} avec l'URL {monitorUrl} à {anomalyStartTimestamp}. La note de sévérité d'anomalie est {severityScore}.\nDes temps de réponse aussi élevés que {slowestAnomalyResponse} ont été détectés à partir de l'emplacement {observerLocation}. Le temps de réponse attendu est {expectedResponseTime}.", "xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "L'alerte pour temps de réponse anormal (niveau {severity}) détecté sur le moniteur {monitor} possédant l'URL {monitorUrl} depuis l'emplacement {observerLocation} à {anomalyStartTimestamp} a été résolue", - "xpack.synthetics.alerts.monitorExpression.label": "Supprimer le filtre {title}", - "xpack.synthetics.alerts.monitorStatus.actionVariables.down": "a échoué {count} fois au cours des derniers {interval}. Alerte lorsque > {numTimes}.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} Le {availabilityBreachMessage}", "xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "Moniteur {monitorName} avec l'URL {monitorUrl} depuis {observerLocation} {statusMessage} Le dernier message d'erreur est {latestErrorMessage}, vérifié à {checkedAt}", "xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "L'alerte pour le moniteur {monitorName} avec l'URL {monitorUrl} depuis {observerLocation} a été résolue", "xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "Le moniteur {monitorName} avec l'URL {monitorUrl} a récupéré", "xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "Le moniteur {monitorName} avec l'URL {monitorUrl} est arrêté", - "xpack.synthetics.alerts.monitorStatus.monitorCallOut.title": "Cette alerte s'appliquera à environ {snapshotCount} moniteurs.", - "xpack.synthetics.alerts.monitorStatus.reasonMessage": "Moniteur \"{name}\" depuis {location} {status} Vérifié à {checkedAt}.", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.value": "dernière {value}", "xpack.synthetics.alerts.tls.defaultActionMessage": "Le certificat TLS {commonName} détecté de l'émetteur {issuer} est {status}. Certificat {summary}", "xpack.synthetics.alerts.tls.defaultRecoveryMessage": "L'alerte pour le certificat TLS {commonName} de l'émetteur {issuer} a été résolue", "xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "Détection de {count} certificats TLS sur le point d'expirer ou devenant trop anciens.\n{expiringConditionalOpen}\nNombre de certificats sur le point d'expirer : {expiringCount}\nCertificats sur le point d'expirer : {expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\nNombre de certificats vieillissants : {agingCount}\nCertificats vieillissants : {agingCommonNameAndDate}\n{agingConditionalClose}\n", - "xpack.synthetics.alerts.tls.validAfterExpiredString": "expiré le {date}, il y a {relativeDate} jours.", - "xpack.synthetics.alerts.tls.validAfterExpiringString": "expire le {date}, dans {relativeDate} jours.", - "xpack.synthetics.alerts.tls.validBeforeExpiredString": "valide depuis {date}, il y a {relativeDate} jours.", - "xpack.synthetics.alerts.tls.validBeforeExpiringString": "non valide jusqu'au {date}, dans {relativeDate} jours.", - "xpack.synthetics.availabilityLabelText": "{value} %", "xpack.synthetics.certificates.heading": "Certificats TLS ({total})", "xpack.synthetics.certificatesRoute.title": "Certificats | {baseTitle}", "xpack.synthetics.certs.status.ok.label": " pour {okRelativeDate}", - "xpack.synthetics.charts.mlAnnotation.header": "Score : {score}", - "xpack.synthetics.charts.mlAnnotation.severity": "Sévérité : {severity}", - "xpack.synthetics.controls.selectSeverity.scoreDetailsDescription": "score {value} et supérieur", "xpack.synthetics.createMonitorRoute.title": "Créer le moniteur | {baseTitle}", "xpack.synthetics.createPackagePolicy.stepConfigure.browserAdvancedSettings.throttling.throttling_exceeded.message": "Vous avez dépassé la limite de {throttlingField} pour les nœuds synthétiques. La valeur {throttlingField} ne peut pas être supérieure à {limit} Mbits/s.", - "xpack.synthetics.deprecateNoticeModal.forMoreInformation": "Pour en savoir plus, {docsLink}", - "xpack.synthetics.durationChart.emptyPrompt.description": "Ce moniteur n'a jamais été {emphasizedText} au cours de la plage temporelle sélectionnée.", "xpack.synthetics.editMonitorRoute.title": "Modifier le moniteur | {baseTitle}", "xpack.synthetics.errorDetails.errorDuration.days": "{value} jours", "xpack.synthetics.errorDetails.errorDuration.hours": "{value} heures", @@ -35477,7 +35461,6 @@ "xpack.synthetics.gettingStarted.createLocationDescription": "Pour commencer à créer des moniteurs, vous devez d'abord créer un {link}. Les emplacements privés vous permettent d'exploiter des moniteurs depuis vos propres locaux. Ils nécessitent un agent Elastic et une politique d'agent que vous pouvez contrôler et maintenir via Fleet.", "xpack.synthetics.gettingStarted.publicLocationDescription": "Dans {link}, vous pouvez également utiliser {elasticManagedLink}. Avec lui, vous pouvez créer et exécuter des moniteurs à plusieurs endroits sans avoir à gérer votre propre infrastructure. Elastic s'occupe des mises à jour logicielles et de la planification des capacités pour vous.", "xpack.synthetics.gettingStartedRoute.title": "Premiers pas avec Synthetics | {baseTitle}", - "xpack.synthetics.integration.deprecation.content": "Au moins un moniteur est configuré à l'aide de l'intégration Elastic Synthetics. Depuis Elastic 8.8, l'intégration est abandonnée et vous ne pouvez plus modifier ces moniteurs. Veuillez migrer vers des moniteurs Projet ou les ajouter à la nouvelle application Synthetics disponible directement dans Observability. Pour en savoir plus, consultez notre {link}.", "xpack.synthetics.keyValuePairsField.deleteItem.label": "Supprimer le numéro d'élément {index}, {key} :{value}", "xpack.synthetics.lastUpdated.label": "Mis à jour {updatedDate}", "xpack.synthetics.management.filter.clickTypeMessage": "Cliquez pour filtrer les enregistrements pour le type {typeName}.", @@ -35490,11 +35473,8 @@ "xpack.synthetics.management.monitorList.recordRange": "Affichage de {range} sur {total} {monitorsLabel}", "xpack.synthetics.management.monitorList.recordRangeLabel": "{monitorCount, plural, one {Moniteur} many {Moniteurs} other {Moniteurs}}", "xpack.synthetics.management.monitorList.recordTotal": "Affichage de {total} {monitorsLabel}", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "Une fois qu'une tâche a été créée, vous pouvez la gérer et afficher davantage de détails sur le {mlJobsPageLink}.", "xpack.synthetics.monitor.stepOfSteps": "Étape : {stepNumber} sur {totalSteps}", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile": "({download} Mbits/s, {upload} Mbits/s, {latency} ms)", - "xpack.synthetics.monitorCharts.durationChart.leftAxis.title": "Durée en {unit}", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabelWithAnomaly": "Durée du moniteur (Anomalies : {noOfAnomalies})", "xpack.synthetics.monitorConfig.monitorScriptEditStep.description": "Utilisez l'enregistreur Elastic Synthetics pour générer et charger un script. Vous pouvez également modifier le script {playwright} existant (ou en coller un nouveau) dans l'éditeur de script.", "xpack.synthetics.monitorConfig.monitorScriptStep.description": "Utilisez l'enregistreur Elastic Synthetics pour générer un script, puis chargez-le. Vous pouvez également écrire votre propre script {playwright} et le coller dans l'éditeur de script.", "xpack.synthetics.monitorConfig.params.helpText": "Utilisez JSON pour définir les paramètres qui peuvent être référencés dans votre script avec {paramsValue}", @@ -35510,33 +35490,8 @@ "xpack.synthetics.monitorErrors.title": "Erreurs du moniteur Synthetics | {baseTitle}", "xpack.synthetics.monitorFilters.frequencyLabel": "Toutes les {count} minutes", "xpack.synthetics.monitorHistory.title": "Historique du moniteur Synthetics | {baseTitle}", - "xpack.synthetics.monitorList.defineConnector.description": "Définissez un connecteur par défaut dans {link} pour activer les alertes de statut du moniteur.", - "xpack.synthetics.monitorList.drawer.missingLocation": "Certaines instances Heartbeat n'ont pas d'emplacement défini. {link} vers votre configuration Heartbeat.", - "xpack.synthetics.monitorList.drawer.statusRowLocationList": "Liste d'emplacements ayant le statut \"{status}\" lors de la dernière vérification.", - "xpack.synthetics.monitorList.expandDrawerButton.ariaLabel": "Développer la ligne du moniteur avec l'ID {id}", "xpack.synthetics.monitorList.flyout.unitStr": "Toutes les {unitMsg}", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'ID de conteneur \"{containerId}\"", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'IP \"{ip}\"", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'UID de pod \"{podUid}\".", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.tooltip": "Vérifier l'interface utilisateur de logging pour l'ID de conteneur \"{containerId}\"", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.tooltip": "Vérifier l'interface utilisateur de logging pour l'IP \"{ip}\"", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.tooltip": "Rechercher les logs pour l'UID de pod \"{podUid}\"", - "xpack.synthetics.monitorList.monitorType.filter": "Filtrer tous les moniteurs ayant le type {type}", - "xpack.synthetics.monitorList.mostRecentError.title": "Erreur la plus récente ({timestamp})", - "xpack.synthetics.monitorList.noDownHistory": "Ce moniteur n'a jamais été {emphasizedText} au cours de la plage temporelle sélectionnée.", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "Cliquez ici pour vérifier les APM pour le domaine \"{domain}\" ou le \"nom de service\" explicitement défini.", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "Ouvre la fenêtre contextuelle des intégrations pour le moniteur avec l'URL {monitorUrl}", - "xpack.synthetics.monitorList.pageSizePopoverButtonText": "Lignes par page : {size}", - "xpack.synthetics.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows} lignes", "xpack.synthetics.monitorList.redirects.description": "Heartbeat a suivi {number} redirections lors de l'exécution du ping.", - "xpack.synthetics.monitorList.redirects.title.number": "{number}", - "xpack.synthetics.monitorList.statusColumn.checkedTimestamp": "Vérifié {timestamp}", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage": "dans {noLoc} emplacement", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.multiple": "dans {noLoc} emplacements", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.down": "Arrêté dans {locs}", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.up": "Opérationnel dans {locs}", - "xpack.synthetics.monitorList.table.description": "Tableau de statut de moniteur avec les colonnes Statut, Nom, URL, IP, Historique d'indisponibilité et Intégrations. Le tableau affiche actuellement {length} éléments.", - "xpack.synthetics.monitorList.tags.filter": "Filtrer tous les moniteurs avec la balise {tag}", "xpack.synthetics.monitorManagement.agentCallout.content": "Pour exécuter les moniteurs \"Navigateur\" dans cet emplacement privé, assurez-vous d'utiliser le conteneur Docker {code}, qui contient les dépendances permettant de les exécuter. Pour en savoir plus, {link}.", "xpack.synthetics.monitorManagement.agentMissingCallout.content": "Vous avez sélectionné une politique d'agent à laquelle aucun agent n'est attaché. Assurez-vous que vous avez au moins un agent enregistré dans cette politique. Vous pouvez ajouter un agent avant ou après la création d'un emplacement. Pour en savoir plus, {link}.", "xpack.synthetics.monitorManagement.anotherPrivateLocation": "Cette politique d'agent est déjà associée à l'emplacement {locationName}.", @@ -35555,16 +35510,12 @@ "xpack.synthetics.monitorManagement.viewMonitors": "L'emplacement {name} a {count, number} {count, plural, one {moniteur} many {moniteurs} other {moniteurs}} en cours d'exécution.", "xpack.synthetics.monitorManagementRoute.title": "Gestion des moniteurs | {baseTitle}", "xpack.synthetics.monitorNotFound.title": "Moniteur Synthetics introuvable | {baseTitle}", - "xpack.synthetics.monitorRoute.title": "Moniteur | {baseTitle}", - "xpack.synthetics.monitorStatusBar.locations.oneLocStatus": "{status} dans l'emplacement {loc}", - "xpack.synthetics.monitorStatusBar.locations.upStatus": "{status} dans les emplacement {loc}", "xpack.synthetics.overview.actions.disabledSuccessLabel": "Moniteur \"{name}\" désactivé.", "xpack.synthetics.overview.actions.disabledSuccessLabel.alert": "Les alertes sont maintenant désactivées pour le moniteur \"{name}\".", "xpack.synthetics.overview.actions.enabledFailLabel": "Impossible de mettre à jour le moniteur \"{name}\".", "xpack.synthetics.overview.actions.enabledFailLabel.alert": "Impossible d'activer les alertes de statut pour le moniteur \"{name}\".", "xpack.synthetics.overview.actions.enabledSuccessLabel": "Moniteur \"{name}\" activé", "xpack.synthetics.overview.actions.enabledSuccessLabel.alert": "Les alertes sont maintenant activées pour le moniteur \"{name}\".", - "xpack.synthetics.overview.alerts.enabled.success.description": "Un message sera envoyé à {actionConnectors} lorsque ce moniteur sera arrêté.", "xpack.synthetics.overview.duration.description.values": "Moy. : {avg}, Min : {min}, Max : {max}", "xpack.synthetics.overview.durationMsFormatting": "{millis} ms", "xpack.synthetics.overview.durationMsFormattingNoSpace": "{millis} ms", @@ -35576,18 +35527,12 @@ "xpack.synthetics.paramManagement.paramDeleteFailuresMessage.name": "Paramètre {name} supprimé.", "xpack.synthetics.paramManagement.paramDeleteSuccessMessage.name": "Paramètre {name} supprimé.", "xpack.synthetics.params.description": "Définissez les variables et paramètres que vous pouvez utiliser dans la configuration du navigateur et des moniteurs légers, tels que des informations d'identification ou des URL. {learnMore}", - "xpack.synthetics.pingist.durationSecondsColumnFormatting": "{seconds} secondes", - "xpack.synthetics.pingist.durationSecondsColumnFormatting.singular": "{seconds} seconde", - "xpack.synthetics.pingList.durationMsColumnFormatting": "{millis} ms", "xpack.synthetics.pingList.expandedRow.bodySize": "La taille du corps est de {bodyBytes}.", - "xpack.synthetics.pingList.expandedRow.response_body.notRecorded": "Corps non enregistré. Lisez notre {docsLink} pour en savoir plus sur l'enregistrement des corps de réponse.", "xpack.synthetics.pingList.expandedRow.truncated": "Affichage des {contentBytes} premiers octets.", "xpack.synthetics.pingList.recencyMessage": "Vérifié {fromNow}", "xpack.synthetics.project.readOnly.callout.content": "Ce moniteur a été ajouté depuis un projet externe : {projectId}. Vous pouvez uniquement l'activer, le désactiver ou le retirer à partir de cette page. Pour effectuer des changements de configuration, vous devez modifier son fichier source et le transmettre à nouveau à partir de ce projet.", "xpack.synthetics.projectMonitorApi.validation.invalidUrlOrHosts.description": "Les moniteurs du projet \"{monitorType}\" doivent contenir exactement une valeur pour le champ \"{key}\" dans la version \"{version}\". Votre moniteur n'a pas été créé ni mis à jour.", "xpack.synthetics.prompt.errors.notFound.body": "Désolé, le moniteur portant l'ID {monitorId} est introuvable. Il a peut-être été supprimé ou vous n'êtes pas autorisé à le visualiser.", - "xpack.synthetics.public.pages.mappingError.bodyDocsLink": "Vous pouvez apprendre à corriger ce problème dans la {docsLink}.", - "xpack.synthetics.public.pages.mappingError.bodyMessage": "Mappings incorrects détectés ! Vous avez peut-être oublié d'exécuter la commande {setup} Heartbeat ?", "xpack.synthetics.server.projectMonitors.invalidPrivateLocationError": "Emplacement privé non valide : \"{location}\". Supprimez-le ou remplacez-le par un emplacement privé valide.", "xpack.synthetics.server.projectMonitors.invalidPublicLocationError": "Emplacement non valide : \"{location}\". Supprimez-le ou remplacez-le par un emplacement valide.", "xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentTypeDetails": "Le moniteur {monitorId} de type {previousType} ne peut pas être mis à jour en type {currentType}. Veuillez d'abord supprimer ce moniteur et réessayer.", @@ -35595,37 +35540,19 @@ "xpack.synthetics.settingsRoute.retentionCalloutDescription": "Pour modifier vos paramètres de conservation des données, nous vous recommandons de créer votre propre politique de cycle de vie des index et de l'attacher au modèle de composant personnalisé approprié dans {stackManagement}. Pour en savoir plus, {docsLink}.", "xpack.synthetics.settingsRoute.table.retentionPeriodValue": "{value} jours + substitution", "xpack.synthetics.settingsRoute.title": "Paramètres | {baseTitle}", - "xpack.synthetics.snapshot.donutChart.ariaLabel": "Camembert affichant le statut actuel. {down} moniteurs sur {total} sont arrêtés.", - "xpack.synthetics.snapshotHistogram.description": "Graphique à barres affichant le statut de disponibilité au fil du temps de {startTime} à {endTime}.", - "xpack.synthetics.sourceConfiguration.ageThresholdDefaultValue": "La valeur par défaut est {defaultValue}", "xpack.synthetics.sourceConfiguration.alertDefaultForm.invalidEmail": "{val} n'est pas un e-mail valide.", - "xpack.synthetics.sourceConfiguration.expirationThresholdDefaultValue": "La valeur par défaut est {defaultValue}", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDefaultValue": "La valeur par défaut est {defaultValue}", "xpack.synthetics.step.duration.label": "après {value}", - "xpack.synthetics.stepDetailRoute.title": "Détails sur Synthetics | {baseTitle}", "xpack.synthetics.stepDetails.palette.decreased": "{delta} % plus bas", "xpack.synthetics.stepDetails.palette.increased": "{delta} % plus élevé", "xpack.synthetics.stepDetails.palette.previous": "Médiane (24 heures) : {previous}", "xpack.synthetics.stepDetails.palette.tooltip": "La valeur {deltaLabel} est comparée aux étapes précédentes sur les dernières 24 heures.", "xpack.synthetics.stepDetails.palette.tooltip.label": "La valeur {deltaLabel} est comparée aux étapes des dernières 24 heures.", "xpack.synthetics.stepDetailsRoute.title": "Détails de l'étape | {baseTitle}", - "xpack.synthetics.synthetics.emptyJourney.message.checkGroupField": "Le groupe de vérification du parcours est {codeBlock}.", - "xpack.synthetics.synthetics.executedStep.screenshot.notSucceeded": "Capture d'écran pour la vérification du statut {status}", "xpack.synthetics.synthetics.executedStep.screenshot.successfulLink": "Capture d'écran de {link}", - "xpack.synthetics.synthetics.journey.allFailedMessage": "{total} étapes - toutes ont échoué ou ont été ignorées", - "xpack.synthetics.synthetics.journey.allSucceededMessage": "{total} étapes - toutes ont réussi", - "xpack.synthetics.synthetics.journey.partialSuccessMessage": "{total} étapes - {succeeded} ont réussi", - "xpack.synthetics.synthetics.pingTimestamp.captionContent": "Étape : {stepNumber} sur {totalSteps}", - "xpack.synthetics.synthetics.screenshotDisplay.altText": "Capture d'écran de l'étape portant le nom \"{stepName}\"", - "xpack.synthetics.synthetics.step.duration": "{value} secondes", "xpack.synthetics.synthetics.stepDetail.stepNumber": "Étape {stepIndex}", "xpack.synthetics.synthetics.stepDetail.totalSteps": "Étape {stepIndex} sur {totalSteps}", "xpack.synthetics.synthetics.testDetail.totalSteps": "Étape {stepIndex} sur {totalSteps}", "xpack.synthetics.synthetics.testDetails.stepNav": "{stepIndex} / {totalSteps}", - "xpack.synthetics.synthetics.waterfall.offsetUnit": "{offset} ms", - "xpack.synthetics.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests} correspondent au filtre)", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests} requêtes réseau", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage.first": "{count} premier(s)", "xpack.synthetics.tableTitle.showing": "Affichage de {count} sur {total} {label}", "xpack.synthetics.tagsList.filter": "Cliquez pour filtrer la liste avec la balise {tag}", "xpack.synthetics.testRun.runErrorLocation.reason": "Impossible d'exécuter le moniteur sur l'emplacement {locationName}. {reason}", @@ -35633,12 +35560,10 @@ "xpack.synthetics.waterfall.networkRequests.count": "Affichage de {countShown} sur {total} {networkRequestsLabel}", "xpack.synthetics.waterfall.networkRequests.pluralizedCount": "{total, plural, one {requête réseau} many {requêtes réseau} other {requêtes réseau}}", "xpack.synthetics.active.label": "Actif", - "xpack.synthetics.addDataButtonLabel": "Ajouter des données", "xpack.synthetics.addEditMonitor.scriptEditor.ariaLabel": "Éditeur de code JavaScript", "xpack.synthetics.addEditMonitor.scriptEditor.helpText": "Exécute des scripts de tests synthétiques définis en ligne.", "xpack.synthetics.addEditMonitor.scriptEditor.label": "Éditeur de script", "xpack.synthetics.addEditMonitor.scriptEditor.placeholder": "// Collez votre script Playwright ici...", - "xpack.synthetics.alertDropdown.noWritePermissions": "Vous devez disposer d'un accès en lecture-écriture à Uptime pour créer des alertes dans cette application.", "xpack.synthetics.alerting.noConnectorsCallout.button": "Configurer maintenant", "xpack.synthetics.alerting.noConnectorsCallout.content": "Vous avez des moniteurs pour lesquels des alertes sont activées, mais aucun connecteur par défaut n'est configuré pour envoyer ces alertes.", "xpack.synthetics.alerting.noConnectorsCallout.header": "Les alertes ne sont pas envoyées", @@ -35666,140 +35591,30 @@ "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.monitorUrl": "URL du moniteur.", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.observerHostname": "Nom d'hôte de l'emplacement à partir duquel la vérification est effectuée.", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.status": "Statut du moniteur (par ex. \"arrêté\").", - "xpack.synthetics.alerts.anomaly.criteriaExpression.ariaLabel": "Expression affichant les critères d'un moniteur sélectionné.", - "xpack.synthetics.alerts.anomaly.criteriaExpression.description": "Quand le moniteur", - "xpack.synthetics.alerts.anomaly.scoreExpression.ariaLabel": "Expression affichant les critères d'un seuil d'alerte d'anomalie.", - "xpack.synthetics.alerts.anomaly.scoreExpression.description": "comporte une anomalie avec sévérité", - "xpack.synthetics.alerts.createRulesPanel.title": "Créer des règles", - "xpack.synthetics.alerts.durationAnomaly": "Anomalie de durée Uptime", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "Horodatage ISO8601 du début de l'anomalie.", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "Temps de réponse attendu", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitor": "Rendu convivial du nom ou de l'ID, ou nom préféré (par ex. Mon moniteur)", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorId": "ID du moniteur.", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorUrl": "URL du moniteur.", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.observerLocation": "Emplacement de l'observateur à partir duquel la vérification des pulsations est effectuée.", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severity": "Sévérité de l'anomalie.", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severityScore": "Note de sévérité d'anomalie", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "Temps de réponse le plus lent dans le compartiment d'anomalies avec des unités associées (ms, s).", "xpack.synthetics.alerts.durationAnomaly.clientName": "Anomalie de durée Uptime", "xpack.synthetics.alerts.durationAnomaly.description": "Alerte lorsque la durée du moniteur Uptime est anormale.", - "xpack.synthetics.alerts.monitorStatus": "Statut du moniteur Uptime", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "Liaison vers la vue dans Elastic qui affiche davantage de détails et de contexte concernant cette alerte", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "Une description concise de la raison du signalement", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.message.description": "Message généré résumant les moniteurs actuellement arrêtés", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "Lien vers la vue ou la fonctionnalité d'Elastic qui peut être utilisée pour examiner l'alerte et son contexte de manière plus approfondie", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.checkedAt": "Horodatage de la vérification du moniteur.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "Horodatage indiquant à quel moment l'état de déclenchement actuel a commencé, si l'alerte est déclenchée", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "Horodatage indiquant à quel moment cette alerte a effectué des vérifications pour la première fois", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "Horodatage indiquant à quel moment cette alerte a été déclenchée pour la première fois", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.isTriggered": "Indicateur spécifiant si l'alerte est en cours de déclenchement", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "Horodatage indiquant l'heure de vérification la plus récente de l'alerte", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "Dernier message d'erreur du moniteur", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "Horodatage indiquant l'heure de résolution la plus récente pour cette alerte", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "Horodatage indiquant l'heure de déclenchement la plus récente de l'alerte", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitor": "Rendu convivial du nom ou de l'ID, ou nom préféré (par ex. Mon moniteur)", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorId": "ID du moniteur.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorType": "Type (par ex. HTTP/TCP) du moniteur.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorUrl": "URL du moniteur.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerHostname": "Nom d'hôte de l'observateur à partir duquel la vérification des pulsations est effectuée.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerLocation": "Emplacement de l'observateur à partir duquel la vérification des pulsations est effectuée.", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.statusMessage": "Message de statut, par ex. \"arrêté\" ou \"se trouve au-dessous du seuil de disponibilité\" en cas de vérification de disponibilité, ou les deux.", - "xpack.synthetics.alerts.monitorStatus.addFilter": "Ajouter un filtre", - "xpack.synthetics.alerts.monitorStatus.addFilter.location": "Emplacement", - "xpack.synthetics.alerts.monitorStatus.addFilter.port": "Port", - "xpack.synthetics.alerts.monitorStatus.addFilter.tag": "Balise", - "xpack.synthetics.alerts.monitorStatus.addFilter.type": "Type", - "xpack.synthetics.alerts.monitorStatus.availability.isEnabledCheckbox.label": "Disponibilité", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "tout moniteur est opérationnel dans", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.ariaLabel": "Spécifier les seuils de disponibilité pour cette alerte", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.description": "les moniteurs correspondants sont opérationnels dans", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.input.ariaLabel": "Saisir un seuil de disponibilité à vérifier pour cette alerte", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "Entrez le nombre d'unités pour la vérification de disponibilité de l'alerte.", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.expression": "ces derniers/dernières", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "Spécifier la plage temporelle de suivi de disponibilité", - "xpack.synthetics.alerts.monitorStatus.availability.unit.headline": "Sélectionner l'unité de la plage temporelle", - "xpack.synthetics.alerts.monitorStatus.availability.unit.selectable": "Utiliser cette sélection pour définir les unités de la plage temporelle pour cette alerte", "xpack.synthetics.alerts.monitorStatus.clientName": "Statut du moniteur Uptime", "xpack.synthetics.alerts.monitorStatus.description": "Alerte lorsqu'un monitoring est arrêté ou qu'un seuil de disponibilité est dépassé.", "xpack.synthetics.alerts.monitorStatus.downLabel": "bas", - "xpack.synthetics.alerts.monitorStatus.filterBar.ariaLabel": "Entrée qui permet le filtrage de critères pour l'alerte de statut du moniteur", - "xpack.synthetics.alerts.monitorStatus.filters.anyLocation": "tout emplacement", - "xpack.synthetics.alerts.monitorStatus.filters.anyPort": "tout port", - "xpack.synthetics.alerts.monitorStatus.filters.anyTag": "toute balise", - "xpack.synthetics.alerts.monitorStatus.filters.anyType": "tout type", - "xpack.synthetics.alerts.monitorStatus.filters.from": "De", - "xpack.synthetics.alerts.monitorStatus.filters.fromLocation": "Depuis l'emplacement", - "xpack.synthetics.alerts.monitorStatus.filters.location.label": "Sélectionnez les filtres d'emplacement à appliquer à la requête de l'alerte.", - "xpack.synthetics.alerts.monitorStatus.filters.of": "sur", - "xpack.synthetics.alerts.monitorStatus.filters.ofType": "De type", - "xpack.synthetics.alerts.monitorStatus.filters.port.label": "Sélectionnez les filtres de port à appliquer à la requête de l'alerte.", - "xpack.synthetics.alerts.monitorStatus.filters.scheme.label": "Sélectionnez les filtres de schéma de protocole à appliquer à la requête de l'alerte.", - "xpack.synthetics.alerts.monitorStatus.filters.tag.label": "Sélectionnez les filtres de balise à appliquer à la requête de l'alerte.", - "xpack.synthetics.alerts.monitorStatus.filters.using": "À l'aide de", - "xpack.synthetics.alerts.monitorStatus.filters.usingPort": "En utilisant le port", - "xpack.synthetics.alerts.monitorStatus.filters.with": "À l'aide de", - "xpack.synthetics.alerts.monitorStatus.filters.withTag": "Avec la balise", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "tout moniteur est arrêté >=", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour saisir le compte de moniteurs arrêtés", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "les moniteurs correspondants sont arrêtés >=", - "xpack.synthetics.alerts.monitorStatus.numTimesField.ariaLabel": "Entrer le nombre de moniteurs arrêtés requis pour déclencher l'alerte", - "xpack.synthetics.alerts.monitorStatus.oldAlertCallout.title": "Si vous modifiez une ancienne alerte, certains champs ne se rempliront peut-être pas automatiquement.", - "xpack.synthetics.alerts.monitorStatus.statusEnabledCheck.label": "Vérification du statut", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.days": "jours", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.hours": "heures", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.minutes": "minutes", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.months": "mois", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.seconds": "secondes", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.weeks": "semaines", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.years": "ans", - "xpack.synthetics.alerts.monitorStatus.timerangeSelectionHeader": "Sélectionner l'unité de la plage temporelle", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour accéder au champ de sélection d'unité de la plage temporelle", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitSelectable": "Le champ sélectionnable pour les alertes d'unités de la plage temporelle doit utiliser", - "xpack.synthetics.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour accéder au champ de valeur de la plage temporelle", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.ariaLabel": "Entrer le nombre d'unités de temps pour la plage de l'alerte", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.expression": "dans", "xpack.synthetics.alerts.searchPlaceholder.kql": "Filtrer à l'aide de la syntaxe KQL", "xpack.synthetics.alerts.settings.addConnector": "Ajouter un connecteur", "xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "Statut du moniteur", "xpack.synthetics.alerts.syntheticsMonitorStatus.description": "Alerte lorsqu'un moniteur est arrêté.", - "xpack.synthetics.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "Élément de sélection de la plage temporelle \"Jours\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "Élément de sélection de la plage temporelle \"Heures\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "Élément de sélection de la plage temporelle \"Minutes\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Mois\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Secondes\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "Élément de sélection de la plage temporelle \"Semaines\"", - "xpack.synthetics.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Années\"", - "xpack.synthetics.alerts.tls": "Uptime TLS", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCommonNameAndDate": "Noms courants et date/heure d'expiration des certificats détectés.", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCount": "Nombre de certificats détectés qui deviennent trop anciens.", - "xpack.synthetics.alerts.tls.actionVariables.state.count": "Nombre de certificats détectés par l'exécuteur d'alertes", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "Noms courants et date/heure d'expiration des certificats détectés", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCount": "Nombre de certificats sur le point d'expirer détectés par l'alerte.", - "xpack.synthetics.alerts.tls.agingLabel": "devient trop ancien", "xpack.synthetics.alerts.tls.clientName": "Uptime TLS", - "xpack.synthetics.alerts.tls.criteriaExpression.ariaLabel": "Expression affichant les critères des moniteurs surveillés par cette alerte", "xpack.synthetics.alerts.tls.criteriaExpression.description": "quand", "xpack.synthetics.alerts.tls.description": "Alerte lorsque le certificat TLS d'un moniteur Uptime est sur le point d'expirer.", - "xpack.synthetics.alerts.tls.expiredLabel": "expiré", - "xpack.synthetics.alerts.tls.expiringLabel": "sur le point d'expirer", - "xpack.synthetics.alerts.tls.invalidLabel": "non valide", "xpack.synthetics.alerts.tls.legacy.clientName": "Uptime TLS (existant)", "xpack.synthetics.alerts.tls.legacy.description": "Alerte lorsque le certificat TLS d'un moniteur Uptime est sur le point d'expirer. Cette alerte sera déclassée dans une future version.", - "xpack.synthetics.alerts.tlsLegacy": "Uptime TLS (existant)", "xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "Alertes et règles", - "xpack.synthetics.alertsPopover.toggleButton.ariaLabel": "Ouvrir le menu contextuel des alertes et règles", "xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "Ouvrir les alertes et le menu des règles", "xpack.synthetics.analyzeDataButtonLabel": "Explorer les données", "xpack.synthetics.analyzeDataButtonLabel.message": "La fonctionnalité Explorer les données vous permet de sélectionner et de filtrer les données de résultat dans toute dimension et de rechercher la cause ou l'impact des problèmes de performances.", - "xpack.synthetics.apmIntegrationAction.description": "Rechercher ce monitoring dans APM", - "xpack.synthetics.apmIntegrationAction.text": "Afficher les données APM", "xpack.synthetics.app.navigateToAlertingButton.content": "Gérer les règles", "xpack.synthetics.app.navigateToAlertingUi": "Quitter Synthetics et accéder à la page de gestion Alerting", "xpack.synthetics.app.testNow.available.private": "Vous ne pouvez pas démarrer les tests manuellement dans un emplacement privé.", "xpack.synthetics.badge.readOnly.text": "Lecture seule", "xpack.synthetics.badge.readOnly.tooltip": "Enregistrement impossible", "xpack.synthetics.blocked": "Bloqué", - "xpack.synthetics.breadcrumbs.legacyOverviewBreadcrumbText": "Uptime", "xpack.synthetics.breadcrumbs.observabilityText": "Observabilité", "xpack.synthetics.breadcrumbs.overviewBreadcrumbText": "Synthetics", "xpack.synthetics.certificates.loading": "Chargement des certificats...", @@ -35833,10 +35648,6 @@ "xpack.synthetics.connectionProfile.noThrottling": "Aucune régulation", "xpack.synthetics.connectionProfile.threeG": "3G", "xpack.synthetics.contentSize": "Taille du contenu", - "xpack.synthetics.controls.selectSeverity.criticalLabel": "critique", - "xpack.synthetics.controls.selectSeverity.majorLabel": "majeur", - "xpack.synthetics.controls.selectSeverity.minorLabel": "mineure", - "xpack.synthetics.controls.selectSeverity.warningLabel": "avertissement", "xpack.synthetics.coreVitals.cls.help": "Cumulative Layout Shift (CLS) : mesure la stabilité visuelle. Pour offrir une expérience agréable aux utilisateurs, les pages doivent conserver un CLS inférieur à 0,1.", "xpack.synthetics.coreVitals.dclTooltip": "Déclenché lorsque le navigateur effectue l'analyse du document. Utile lorsque plusieurs écouteurs existent, ou lorsque la logique suivante est exécutée : domContentLoadedEventEnd - domContentLoadedEventStart.", "xpack.synthetics.coreVitals.fcpTooltip": "First Contentful Paint (FCP) se concentre sur le rendu initial et mesure la durée entre le début du chargement d'une page et le moment où une partie du contenu de la page s'affiche à l'écran.", @@ -35872,15 +35683,6 @@ "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.always": "Toujours", "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.onError": "En cas d'erreur", "xpack.synthetics.dcl.label": "DCL", - "xpack.synthetics.deprecateNoticeModal.addPrivateLocations": "Ajouter des emplacements privés pour vos politiques Fleet", - "xpack.synthetics.deprecateNoticeModal.automateMonitors": "Automatiser la création de vos moniteurs à l'aide de moniteurs de projet", - "xpack.synthetics.deprecateNoticeModal.description": "L'intégration Elastic Synthetics est déclassée. À la place, vous pouvez maintenant monitorer les points de terminaison, les pages et les parcours des utilisateurs directement dans l'application Synthetics de manière beaucoup plus efficace :", - "xpack.synthetics.deprecateNoticeModal.elasticManagedLocations": "Exécuter les moniteurs dans plusieurs emplacements gérés par Elastic, ou à partir de vos propres emplacements privés", - "xpack.synthetics.deprecateNoticeModal.goBack": "Retour", - "xpack.synthetics.deprecateNoticeModal.goToSynthetics": "Accéder à Synthetics", - "xpack.synthetics.deprecateNoticeModal.headerText": "Le Monitoring synthétique est maintenant disponible prêt à l'emploi dans Synthetics", - "xpack.synthetics.deprecateNoticeModal.manageMonitors": "Gérer les moniteurs légers et basés sur un navigateur à partir d'un emplacement unique", - "xpack.synthetics.deprecateNoticeModal.readDocs": "lire la documentation.", "xpack.synthetics.detailsPanel.alerts": "Alertes", "xpack.synthetics.detailsPanel.alerts.active": "Actif", "xpack.synthetics.detailsPanel.alerts.recovered": "Récupéré", @@ -35896,7 +35698,6 @@ "xpack.synthetics.detailsPanel.summary": "Résumé", "xpack.synthetics.detailsPanel.toDate": "À ce jour", "xpack.synthetics.dns": "DNS", - "xpack.synthetics.durationChart.emptyPrompt.title": "Aucune donnée de durée n'est disponible", "xpack.synthetics.durationTrend.max": "Max.", "xpack.synthetics.durationTrend.median": "Médiane", "xpack.synthetics.durationTrend.min": "Min.", @@ -35904,14 +35705,9 @@ "xpack.synthetics.durationTrend.percentile75": "75e", "xpack.synthetics.editMonitor.errorDetailsRoute.title": "Détails de l'erreur", "xpack.synthetics.editMonitor.pageHeader.title": "Modifier le moniteur", - "xpack.synthetics.editPackagePolicy.inSynthetics": "Modifier dans Synthetics", - "xpack.synthetics.editPackagePolicy.inSyntheticsDesc": "Cette politique de package est gérée par l'application Synthetics.", "xpack.synthetics.emptyState.enablement.disabledDescription": "L'application Synthetics est actuellement désactivée. L'application Synthetics vous permet d'exécuter des moniteurs légers et basés sur un navigateur réel à partir d'emplacements de test hébergés dans le monde entier. Pour activer l'application Synthetics, veuillez contacter un administrateur.", - "xpack.synthetics.emptyState.loadingMessage": "Chargement…", "xpack.synthetics.emptyStateError.notAuthorized": "Vous n'êtes pas autorisé à afficher les données Uptime, veuillez contacter votre administrateur système.", - "xpack.synthetics.emptyStateError.notFoundPage": "Page introuvable", "xpack.synthetics.emptyStateError.title": "Erreur", - "xpack.synthetics.enableAlert.editAlert": "Modifier l'alerte", "xpack.synthetics.errorDetails.errorDuration": "Erreur de durée", "xpack.synthetics.errorDetails.label": "Détails de l'erreur", "xpack.synthetics.errorDetails.resolvedAt": "Résolu à", @@ -35936,14 +35732,6 @@ "xpack.synthetics.fieldLabels.fcp": "First Contentful Paint (FCP)", "xpack.synthetics.fieldLabels.lcp": "Largest Contentful Paint (LCP)", "xpack.synthetics.fieldLabels.transferSize": "La propriété transferSize représente la taille de la ressource récupérée. La taille inclut les champs d'en-tête de réponse plus le corps de la charge utile de la réponse", - "xpack.synthetics.filterBar.ariaLabel": "Saisissez des critères de filtre pour la page d'aperçu", - "xpack.synthetics.filterBar.filterAllLabel": "Tous", - "xpack.synthetics.filterBar.options.location.name": "Emplacement", - "xpack.synthetics.filterBar.options.portLabel": "Port", - "xpack.synthetics.filterBar.options.schemeLabel": "Schéma", - "xpack.synthetics.filterBar.options.tagsLabel": "Balise", - "xpack.synthetics.fleetIntegration.assets.description": "Afficher les moniteurs dans Synthetics", - "xpack.synthetics.fleetIntegration.assets.name": "Moniteurs", "xpack.synthetics.gettingStarted.createLocationHeading": "Lancez-vous avec Synthetic Monitoring", "xpack.synthetics.gettingStarted.createLocationLabel": "Créer l'emplacement", "xpack.synthetics.gettingStarted.createSingle.description": " pour démarrer avec le monitoring Elastic Synthetics.", @@ -35958,21 +35746,14 @@ "xpack.synthetics.historyPanel.durationTrends": "Tendances de durée", "xpack.synthetics.historyPanel.stats": "Statistiques", "xpack.synthetics.inspectButtonText": "Inspecter", - "xpack.synthetics.integration.deprecation.dismiss": "Rejeter", - "xpack.synthetics.integration.deprecation.link": "Documents de migration Synthetics", - "xpack.synthetics.integration.deprecation.title": "Migrer vos moniteurs d'intégration Elastic Synthetics", - "xpack.synthetics.integrationLink.missingDataMessage": "Les données requises pour cette intégration sont introuvables.", "xpack.synthetics.keyValuePairsField.key.ariaLabel": "Clé", "xpack.synthetics.keyValuePairsField.key.label": "Clé", "xpack.synthetics.keyValuePairsField.value.ariaLabel": "Valeur", "xpack.synthetics.keyValuePairsField.value.label": "Valeur", - "xpack.synthetics.kueryBar.searchPlaceholder.kql": "Rechercher à l'aide de la syntaxe KQL des ID, noms et types etc. de moniteurs (par ex. monitor.type: \"http\" AND tags: \"dev\")", - "xpack.synthetics.kueryBar.searchPlaceholder.simpleText": "Rechercher par ID, nom, URL, port ou balises de moniteur", "xpack.synthetics.lcp.label": "LCP", "xpack.synthetics.leftOver.errors.createIssue": "créant un problème.", "xpack.synthetics.leftOver.errors.delete": "Supprimer l'intégration", "xpack.synthetics.leftOver.errors.title": "Veuillez cliquer sur le bouton ci-dessous pour supprimer l'intégration. Normalement, cela ne devrait pas arriver. Puisque le moniteur a été supprimé, l'intégration devait être supprimée automatiquement. Si cela se produit souvent, signalez-le en ", - "xpack.synthetics.locationName.helpLinkAnnotation": "Ajouter un emplacement", "xpack.synthetics.locations.error.content": "Une erreur s'est produite lors du chargement des emplacements de test. Réessayez plus tard.", "xpack.synthetics.locations.error.label": "Impossible de charger les emplacements de test", "xpack.synthetics.management.actions": "Actions", @@ -36011,37 +35792,7 @@ "xpack.synthetics.management.monitorList.url": "URL", "xpack.synthetics.management.noLabel": "Annuler", "xpack.synthetics.management.yesLabel": "Supprimer", - "xpack.synthetics.mappingErrorRoute.breadcrumb": "Erreur de mapping", - "xpack.synthetics.mappingErrorRoute.pageHeader.title": "Erreur de mapping", - "xpack.synthetics.mappingErrorRoute.title": "Synthetics | erreur de mapping", "xpack.synthetics.millisecond.abbreviation.label": "ms", - "xpack.synthetics.ml.durationChart.exploreInMlApp": "Explorer dans ML App", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "Autorisations requises", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "Détection des anomalies", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.cancelLabel": "Annuler", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createMLJobDescription": "Ici, vous pouvez créer une tâche de Machine Learning afin de calculer les scores d'anomalie pour\n les durées de réponse pour Uptime Monitor. Une fois activé, le graphique de durée de monitoring de la page des détails\n affichera les limites attendues et annotera le graphique avec les anomalies. Vous pouvez aussi éventuellement\n identifier les périodes de latence augmentées selon les zones géographiques.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "Créer une nouvelle tâche", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "Désactiver l'alerte d'anomalie", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "Désactiver la détection des anomalies", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "Vous pouvez activer la tâche de détection des anomalies, ou, si elle est déjà présente, vous pouvez gérer la tâche ou l'alerte.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "Activer l'alerte d'anomalie", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "Activer la détection des anomalies", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "Vous devez disposer des privilèges Kibana de Machine Learning pour utiliser cette fonctionnalité.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "L'analyse attend qu'un nœud de ML devienne disponible. L'ajout des résultats au graphique peut prendre un certain temps.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "L'analyse est à présent en cours d'exécution pour le graphique de durée de réponse. L'ajout des résultats au graphique peut prendre un certain temps.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "Afficher la tâche", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "Tâche créée avec succès", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "Il est possible que votre licence actuelle n'autorise pas la création de tâches de Machine Learning, ou cette tâche existe peut-être déjà.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "La création de la tâche a échoué", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "Supprimer la tâche de détection des anomalies ?", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "Tâche supprimée", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "La tâche a été supprimée avec succès", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "Gérer la détection des anomalies", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "Page de gestion des tâches de Machine Learning", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "Remarque : La tâche peut mettre un certain temps à démarrer le calcul des résultats.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "Vous devez disposer d'un accès en lecture-écriture à Uptime pour créer des alertes d'anomalie.", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrial": "Commencer un essai gratuit de 14 jours", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrialDesc": "Pour pouvoir accéder à la détection des anomalies de durée, vous devez être abonné à une licence Elastic Platinum.", "xpack.synthetics.monitor.duration.label": "Durée", "xpack.synthetics.monitor.result.label": "Résultat", "xpack.synthetics.monitor.result.lastSuccessful": "Dernière réussite", @@ -36061,8 +35812,6 @@ "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom": "(X Mbits/s, Y Mbits/s, Z ms)", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom.label": "Personnalisé", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.disabled.label": "Aucune régulation", - "xpack.synthetics.monitorCharts.durationChart.wrapper.label": "Graphique affichant la durée de ping du moniteur, avec regroupement par emplacement.", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabel": "Durée du moniteur", "xpack.synthetics.monitorConfig.advancedOptions.title": "Options avancées", "xpack.synthetics.monitorConfig.apmServiceName.helpText": "Correspond au champ ECS service.name d'APM. Définissez cette option pour activer les intégrations entre les données APM et synthétiques.", "xpack.synthetics.monitorConfig.apmServiceName.label": "Nom de service APM", @@ -36240,19 +35989,11 @@ "xpack.synthetics.monitorDetails.loading.content": "Cette opération ne prendra qu'une seconde.", "xpack.synthetics.monitorDetails.loading.heading": "Chargement des détails du moniteur", "xpack.synthetics.monitorDetails.loadingTestRuns": "Chargement des exécutions de test...", - "xpack.synthetics.monitorDetails.ml.confirmAlertDeleteMessage": "Voulez-vous vraiment supprimer l'alerte pour les anomalies ?", - "xpack.synthetics.monitorDetails.ml.confirmDeleteMessage": "Voulez-vous vraiment supprimer cette tâche ?", - "xpack.synthetics.monitorDetails.ml.deleteJobWarning": "La suppression d'une tâche peut prendre beaucoup de temps. Elle sera supprimée en arrière-plan, et les données ne disparaîtront peut-être pas instantanément.", - "xpack.synthetics.monitorDetails.ml.deleteMessage": "Suppression des tâches...", "xpack.synthetics.monitorDetails.noDataFound": "Aucune donnée trouvée", "xpack.synthetics.monitorDetails.pending.content": "Cette page sera actualisée lorsque les données seront disponibles.", "xpack.synthetics.monitorDetails.pending.heading": "Exécution de test initiale en attente...", "xpack.synthetics.monitorDetails.skipped.label": "Ignoré", "xpack.synthetics.monitorDetails.status": "Statut", - "xpack.synthetics.monitorDetails.statusBar.pingType.browser": "Navigateur", - "xpack.synthetics.monitorDetails.statusBar.pingType.http": "HTTP", - "xpack.synthetics.monitorDetails.statusBar.pingType.icmp": "ICMP", - "xpack.synthetics.monitorDetails.statusBar.pingType.tcp": "TCP", "xpack.synthetics.monitorDetails.summary.availability": "Disponibilité", "xpack.synthetics.monitorDetails.summary.brushArea": "Brosser une zone pour une plus haute fidélité", "xpack.synthetics.monitorDetails.summary.duration": "Durée", @@ -36269,12 +36010,6 @@ "xpack.synthetics.monitorDetails.summary.viewErrorDetails": "Afficher les détails de l'erreur", "xpack.synthetics.monitorDetails.summary.viewHistory": "Afficher l'historique", "xpack.synthetics.monitorDetails.summary.viewTestRun": "Afficher l'exécution de test", - "xpack.synthetics.monitorDetails.title.disclaimer.description": "(BÊTA)", - "xpack.synthetics.monitorDetails.title.disclaimer.link": "Afficher plus", - "xpack.synthetics.monitorDetails.title.pingType.browser": "Navigateur", - "xpack.synthetics.monitorDetails.title.pingType.http": "Ping HTTP", - "xpack.synthetics.monitorDetails.title.pingType.icmp": "Ping ICMP", - "xpack.synthetics.monitorDetails.title.pingType.tcp": "Ping TCP", "xpack.synthetics.monitorDetails.viewHistory": "Afficher l'historique", "xpack.synthetics.monitorEditPage.error.content": "Une erreur s'est produite lors du chargement de votre moniteur. Réessayez plus tard.", "xpack.synthetics.monitorEditPage.error.label": "Impossible de charger la configuration du moniteur", @@ -36282,68 +36017,30 @@ "xpack.synthetics.monitorHistoryTab.title": "Historique", "xpack.synthetics.monitorLastRun.lastRunLabel": "Dernière exécution", "xpack.synthetics.monitorList.closeFlyoutText": "Fermer", - "xpack.synthetics.monitorList.defineConnector.popover.description": "pour recevoir les alertes de statut.", - "xpack.synthetics.monitorList.disableDownAlert": "Désactiver les alertes de statut", - "xpack.synthetics.monitorList.downLineSeries.downLabel": "Vérifications des arrêts", - "xpack.synthetics.monitorList.drawer.mostRecentRun": "Exécution de test la plus récente", - "xpack.synthetics.monitorList.drawer.url": "Url", "xpack.synthetics.monitorList.durationChart.durationSeriesName": "Durée", "xpack.synthetics.monitorList.durationChart.previousPeriodSeriesName": "Période précédente", "xpack.synthetics.monitorList.durationHeaderText": "Durée", - "xpack.synthetics.monitorList.enabledAlerts.noAlert": "Aucune règle n'est activée pour ce moniteur.", - "xpack.synthetics.monitorList.enabledAlerts.title": "Règles activées", "xpack.synthetics.monitorList.enabledItemText": "Activé", - "xpack.synthetics.monitorList.enableDownAlert": "Activer les alertes de statut", "xpack.synthetics.monitorList.errorSummary": "Résumé des erreurs", - "xpack.synthetics.monitorList.geoName.helpLinkAnnotation": "Ajouter un emplacement", "xpack.synthetics.monitorList.goToMonitorLinkText": "Accéder au moniteur", - "xpack.synthetics.monitorList.infraIntegrationAction.container.message": "Afficher les indicateurs de conteneurs", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.description": "Vérifier l'interface utilisateur de l'infrastructure pour cet ID de conteneur du moniteur", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.ariaLabel": "Vérifier l'interface utilisateur de l'infrastructure pour cette adresse IP du moniteur", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.message": "Afficher les indicateurs d'hôte", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.description": "Vérifier l'interface utilisateur de l'infrastructure pour cet UID de pod du monitoring", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.message": "Afficher les indicateurs de pod", - "xpack.synthetics.monitorList.integrationGroup.emptyMessage": "Aucune application intégrée n'est disponible", "xpack.synthetics.monitorList.lastModified": "Dernière modification", "xpack.synthetics.monitorList.lastRunHeaderText": "Dernière exécution", - "xpack.synthetics.monitorList.loading": "Chargement...", - "xpack.synthetics.monitorList.locations.expand": "Cliquer pour afficher les emplacements restants", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.id": "Afficher les logs du conteneur", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.message": "Afficher les logs du conteneur", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.description": "Vérifier l'interface utilisateur de logging pour cette adresse IP de moniteur", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.message": "Afficher les logs des hôtes", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "Afficher les logs de pod", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.message": "Afficher les logs de pod", - "xpack.synthetics.monitorList.monitorHistoryColumnLabel": "Historique d'indisponibilité", "xpack.synthetics.monitorList.monitorIdItemText": "ID de moniteur", - "xpack.synthetics.monitorList.monitoringStatusTitle": "Moniteurs", - "xpack.synthetics.monitorList.nameColumnLabel": "Nom", - "xpack.synthetics.monitorList.noItemForSelectedFiltersMessage": "Aucun moniteur trouvé pour les critères de filtre sélectionnés", - "xpack.synthetics.monitorList.noItemMessage": "Aucun moniteur Uptime trouvé", - "xpack.synthetics.monitorList.noMessage.troubleshoot": "Essayez d'utiliser une plage de dates absolues. Si les moniteurs s'affichent après cette action, il existe peut-être un problème avec l'horloge système où Heartbeat ou Kibana est installé.", - "xpack.synthetics.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "Examiner", "xpack.synthetics.monitorList.projectIdHeaderText": "ID de projet", "xpack.synthetics.monitorList.redirects.openWindow": "Le lien s'ouvrira dans une nouvelle fenêtre.", "xpack.synthetics.monitorList.redirects.title": "Redirections", "xpack.synthetics.monitorList.runTest.label": "Exécuter le test", - "xpack.synthetics.monitorList.statusAlert.label": "Alerte de statut", "xpack.synthetics.monitorList.statusColumn.completeLabel": "Terminé", "xpack.synthetics.monitorList.statusColumn.downLabel": "Arrêté", "xpack.synthetics.monitorList.statusColumn.failedLabel": "Échoué", "xpack.synthetics.monitorList.statusColumn.upLabel": "Opérationnel", - "xpack.synthetics.monitorList.statusColumnLabel": "Statut", "xpack.synthetics.monitorList.table.project.name": "ID de projet", "xpack.synthetics.monitorList.table.tags.name": "Balises", "xpack.synthetics.monitorList.table.url.name": "Url", - "xpack.synthetics.monitorList.tags.expand": "Cliquer pour afficher les balises restantes", "xpack.synthetics.monitorList.testNow.AriaLabel": "Cliquer pour exécuter le test maintenant", "xpack.synthetics.monitorList.testNow.scheduled": "Le test est déjà programmé", "xpack.synthetics.monitorList.testRunLogs": "Logs d'exécution de test", "xpack.synthetics.monitorList.timestamp": "Horodatage", - "xpack.synthetics.monitorList.tlsColumnLabel": "Certificat TLS", - "xpack.synthetics.monitorList.troubleshoot.systemClockOutOfSync": "L'horloge système n'est peut-être pas synchronisée", - "xpack.synthetics.monitorList.troubleshoot.tryDateRange": "Appliquer une plage de dates absolues", - "xpack.synthetics.monitorList.troubleshoot.whereAreMyMonitors": "Où sont mes moniteurs ?", "xpack.synthetics.monitorList.type": "Type", "xpack.synthetics.monitorList.viewInDiscover": "Afficher dans Discover", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "Accéder à l'emplacement", @@ -36481,22 +36178,6 @@ "xpack.synthetics.monitorStatus.statusLabel": "Statut", "xpack.synthetics.monitorStatus.succeededLabel": "Réussi", "xpack.synthetics.monitorStatus.upLabel": "Opérationnel", - "xpack.synthetics.monitorStatusBar.durationTextAriaLabel": "Durée du monitoring en millisecondes", - "xpack.synthetics.monitorStatusBar.healthStatusMessageAriaLabel": "Statut du moniteur", - "xpack.synthetics.monitorStatusBar.loadingMessage": "Chargement…", - "xpack.synthetics.monitorStatusBar.monitor.availability": "Disponibilité générale", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.availability": "Disponibilité", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.lastCheck": "Dernière vérification", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.location": "Emplacement", - "xpack.synthetics.monitorStatusBar.monitor.id": "ID de moniteur", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom": "Monitoring à partir de", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.listToMap": "Passer à la vue de carte pour vérifier la disponibilité par emplacement.", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.MapToList": "Passer à la vue de liste pour vérifier la disponibilité par emplacement.", - "xpack.synthetics.monitorStatusBar.monitorUrlLinkAriaLabel": "Lien d'URL du moniteur", - "xpack.synthetics.monitorStatusBar.sslCertificate.title": "Certificat TLS", - "xpack.synthetics.monitorStatusBar.timestampFromNowTextAriaLabel": "Temps depuis la dernière vérification", - "xpack.synthetics.monitorStatusBar.type.ariaLabel": "Type de moniteur", - "xpack.synthetics.monitorStatusBar.type.label": "Type", "xpack.synthetics.monitorSummary.createNewMonitor": "Créer le moniteur", "xpack.synthetics.monitorSummary.editMonitor": "Modifier le moniteur", "xpack.synthetics.monitorSummary.goToMonitor": "Accéder au moniteur", @@ -36511,19 +36192,11 @@ "xpack.synthetics.monitorSummary.viewAlerts": "Afficher les alertes", "xpack.synthetics.monitorSummary.viewErrors": "Afficher les erreurs", "xpack.synthetics.monitorSummaryRoute.monitorBreadcrumb": "Moniteurs", - "xpack.synthetics.navigateToAlertingButton.content": "Gérer les règles", - "xpack.synthetics.navigateToAlertingUi": "Quitter Uptime et accéder à la page de gestion Alerting", - "xpack.synthetics.noDataConfig.beatsCard.description": "Monitorez de façon proactive la disponibilité de vos sites et services. Recevez des alertes et corrigez les problèmes plus rapidement pour optimiser l'expérience de vos utilisateurs.", - "xpack.synthetics.noDataConfig.beatsCard.title": "Ajouter des moniteurs avec Heartbeat", - "xpack.synthetics.noDataConfig.solutionName": "Observabilité", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedDescription": "Pour afficher les données des moniteurs Synthetics, vous devez mettre à jour les privilèges. Pour en savoir plus, contactez votre administrateur Kibana.", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedFooterMarkdown": "Privilège d'index Elasticsearch \"read\" requis pour les index suivants :", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedTitle": "Privilèges requis", "xpack.synthetics.notFoundBody": "Désolé, nous ne trouvons pas la page que vous recherchez. Elle a peut-être été retirée ou renommée, ou peut-être qu'elle n'a jamais existé.", "xpack.synthetics.notFoundTitle": "Page introuvable", - "xpack.synthetics.notFountPage.homeLinkText": "Retour à l'accueil", - "xpack.synthetics.openAlertContextPanel.ariaLabel": "Ouvrez le panneau de contexte des règles pour choisir un type de règle", - "xpack.synthetics.openAlertContextPanel.label": "Créer une règle", "xpack.synthetics.overview.actions.disableLabelDisableAlert": "Désactiver les alertes de statut", "xpack.synthetics.overview.actions.disablingLabel": "Désactivation du moniteur", "xpack.synthetics.overview.actions.editMonitor.name": "Modifier le moniteur", @@ -36536,10 +36209,6 @@ "xpack.synthetics.overview.actions.openPopover.ariaLabel": "Ouvrir le menu d'actions", "xpack.synthetics.overview.actions.quickInspect.title": "Inspection rapide", "xpack.synthetics.overview.actions.runTestManually.title": "Exécuter le test manuellement", - "xpack.synthetics.overview.alerts.disabled.failed": "La règle ne peut pas être désactivée !", - "xpack.synthetics.overview.alerts.disabled.success": "La règle a été correctement désactivée !", - "xpack.synthetics.overview.alerts.enabled.failed": "La règle ne peut pas être activée !", - "xpack.synthetics.overview.alerts.enabled.success": "La règle a été correctement activée ", "xpack.synthetics.overview.alerts.headingText": "12 dernières heures", "xpack.synthetics.overview.duration.description": "Durée moyenne des 24 dernières vérifications", "xpack.synthetics.overview.duration.label": "Durée", @@ -36586,25 +36255,13 @@ "xpack.synthetics.overview.status.headingText": "Statut actuel", "xpack.synthetics.overview.status.pending.description": "En attente", "xpack.synthetics.overview.status.up.description": "Opérationnel", - "xpack.synthetics.overview.uptimeHeading": "Monitorings Uptime", "xpack.synthetics.overviewPage.overviewCrumb": "Aperçu", - "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "Bouton de pagination désactivé indiquant qu'aucune autre navigation ne peut être effectuée dans la liste des moniteurs.", - "xpack.synthetics.overviewPageLink.next.ariaLabel": "Page de résultats suivante", - "xpack.synthetics.overviewPageLink.prev.ariaLabel": "Page de résultats précédente", - "xpack.synthetics.page_header.addDataLink.label": "Accédez à un tutoriel sur l'ajout de données Uptime", "xpack.synthetics.page_header.analyzeData.label": "Accédez à la vue \"Explorer les données\" pour visualiser les données synthétiques/d'utilisateur", - "xpack.synthetics.page_header.defineConnector.popover.defaultLink": "Définir un connecteur par défaut", - "xpack.synthetics.page_header.defineConnector.settingsLink": "Paramètres", - "xpack.synthetics.page_header.manageLink.not": "La Gestion des moniteurs n'est plus disponible dans Uptime. Utilisez plutôt l'application Synthetics.", - "xpack.synthetics.page_header.manageMonitors": "Gestion des moniteurs", "xpack.synthetics.page_header.settingsLink": "Paramètres", "xpack.synthetics.page_header.settingsLink.label": "Accédez à la page de paramètres Uptime", "xpack.synthetics.paramForm.namespaces": "Espaces de noms", "xpack.synthetics.paramForm.sharedAcrossSpacesLabel": "Partager entre les espaces", - "xpack.synthetics.pingList.checkHistoryTitle": "Historique", "xpack.synthetics.pingList.collapseRow": "Réduire", - "xpack.synthetics.pingList.columns.failedStep": "Étape ayant échoué", - "xpack.synthetics.pingList.drawer.body.docsLink": "documents", "xpack.synthetics.pingList.durationMsColumnLabel": "Durée", "xpack.synthetics.pingList.errorColumnLabel": "Erreur", "xpack.synthetics.pingList.errorTypeColumnLabel": "Type d'erreur", @@ -36618,10 +36275,7 @@ "xpack.synthetics.pingList.pingsUnavailableMessage": "Aucun historique trouvé", "xpack.synthetics.pingList.responseCodeColumnLabel": "Code de réponse", "xpack.synthetics.pingList.statusColumnLabel": "Statut", - "xpack.synthetics.pingList.stepDurationHeader": "Durée de l’étape", - "xpack.synthetics.pingList.synthetics.performanceBreakDown": "Afficher la répartition des performances", "xpack.synthetics.pingList.synthetics.waterfall.filters.collapseRequestsLabel": "Réduire pour afficher uniquement les requêtes correspondantes", - "xpack.synthetics.pingList.synthetics.waterfall.filters.popover": "Cliquer pour ouvrir les filtres de cascade", "xpack.synthetics.pingList.timestampColumnLabel": "Horodatage", "xpack.synthetics.pluginDescription": "Monitoring synthétique", "xpack.synthetics.privateLocations.learnMore.label": "En savoir plus.", @@ -36630,12 +36284,10 @@ "xpack.synthetics.projectMonitorApi.validation.invalidNamespace.title": "Espace de nom incorrect", "xpack.synthetics.projectMonitorApi.validation.unsupportedOption.title": "Option Heartbeat non prise en charge", "xpack.synthetics.prompt.errors.notFound.title": "Moniteur introuvable", - "xpack.synthetics.public.pages.mappingError.title": "Mappings Heartbeat manquants", "xpack.synthetics.receive": "Recevoir", "xpack.synthetics.routes.baseTitle": "Synthetics - Kibana", "xpack.synthetics.routes.createNewMonitor": "Aller à l'accueil", "xpack.synthetics.routes.goToSynthetics": "Accéder à la page d'accueil Synthetics", - "xpack.synthetics.routes.legacyBaseTitle": "Uptime - Kibana", "xpack.synthetics.runTest.failure": "Impossible d'exécuter le test manuellement", "xpack.synthetics.seconds.label": "secondes", "xpack.synthetics.seconds.shortForm.label": "s", @@ -36657,7 +36309,6 @@ "xpack.synthetics.settings.enabledAlert.fail": "Impossible de mettre à jour le type de règle de statut du moniteur.", "xpack.synthetics.settings.enablement.fail": "Impossible d'activer la Gestion des moniteurs", "xpack.synthetics.settings.error.couldNotSave": "Impossible d'enregistrer les paramètres !", - "xpack.synthetics.settings.heading": "Paramètres Uptime", "xpack.synthetics.settings.invalid.error": "La valeur doit être supérieure à 0.", "xpack.synthetics.settings.invalid.nanError": "La valeur doit être un entier.", "xpack.synthetics.settings.noSpace.error": "Les noms d'index ne doivent pas contenir d'espace", @@ -36699,38 +36350,11 @@ "xpack.synthetics.settingsTabs.dataRetention": "Conservation des données", "xpack.synthetics.settingsTabs.params": "Paramètres globaux", "xpack.synthetics.settingsTabs.privateLocations": "Emplacements privés", - "xpack.synthetics.snapshot.monitor": "Moniteur", - "xpack.synthetics.snapshot.monitors": "Moniteurs", - "xpack.synthetics.snapshot.noDataDescription": "Aucun ping dans la plage temporelle sélectionnée.", - "xpack.synthetics.snapshot.noDataTitle": "Pas de données ping disponibles", - "xpack.synthetics.snapshot.pingsOverTimeTitle": "Pings sur la durée", - "xpack.synthetics.snapshotHistogram.series.pings": "Monitorer les pings", - "xpack.synthetics.snapshotHistogram.xAxisId": "Axe X des pings", - "xpack.synthetics.snapshotHistogram.yAxis.title": "Pings", - "xpack.synthetics.snapshotHistogram.yAxisId": "Axe Y des pings", - "xpack.synthetics.sourceConfiguration.ageLimit.units.days": "Jours", - "xpack.synthetics.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "Entrée contrôlant le nombre maximal de jours pendant lesquels un certificat TLS peut être valide avant que Kibana n'affiche un avertissement.", - "xpack.synthetics.sourceConfiguration.alertConnectors": "Connecteurs d'alerte", "xpack.synthetics.sourceConfiguration.alertConnectors.defaultEmail": "L'e-mail par défaut", "xpack.synthetics.sourceConfiguration.alertDefaultForm.emailConnectorPlaceHolder": "À : pour le connecteur d'e-mails", - "xpack.synthetics.sourceConfiguration.alertDefaultForm.requiredEmail": "L'e-mail du destinataire est requis pour le connecteur d'e-mails", "xpack.synthetics.sourceConfiguration.alertDefaultForm.selectConnector": "Veuillez sélectionner un ou plusieurs connecteurs", - "xpack.synthetics.sourceConfiguration.alertDefaults": "Valeurs par défaut des alertes", - "xpack.synthetics.sourceConfiguration.applySettingsButtonLabel": "Appliquer les modifications", - "xpack.synthetics.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "Entrée contrôlant le nombre minimal de jours restants pour l'expiration du certificat TLS avant que Kibana n'affiche un avertissement.", - "xpack.synthetics.sourceConfiguration.certificateThresholdDescription": "Modifiez le seuil pour l'affichage et l'alerting lors d'erreurs de certificat. Remarque : cette action affectera toutes les alertes configurées.", - "xpack.synthetics.sourceConfiguration.certificationSectionTitle": "Expiration du certificat", "xpack.synthetics.sourceConfiguration.defaultConnectors": "Connecteurs par défaut", - "xpack.synthetics.sourceConfiguration.defaultConnectors.description": "Connecteurs par défaut à utiliser pour envoyer une alerte.", "xpack.synthetics.sourceConfiguration.defaultConnectors.description.defaultEmail": "Paramètres d'e-mails requis pour les connecteurs d'alertes d'e-mails sélectionnés.", - "xpack.synthetics.sourceConfiguration.discardSettingsButtonLabel": "Annuler", - "xpack.synthetics.sourceConfiguration.errorStateLabel": "Seuil d'expiration", - "xpack.synthetics.sourceConfiguration.expirationThreshold": "Seuils expiration/âge", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDescription": "Modèle d'indexation pour la correspondance d'index contenant des données Heartbeat", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesLabel": "Index Heartbeat", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesTitle": "Index Uptime", - "xpack.synthetics.sourceConfiguration.indicesSectionTitle": "Index", - "xpack.synthetics.sourceConfiguration.warningStateLabel": "Limite d'âge", "xpack.synthetics.stackManagement": "Gestion de la Suite", "xpack.synthetics.stepDetails.expected": "Attendus", "xpack.synthetics.stepDetails.objectCount": "Décompte de l'objet", @@ -36745,39 +36369,13 @@ "xpack.synthetics.stepDetailsRoute.metrics": "Indicateurs", "xpack.synthetics.stepDetailsRoute.timingsBreakdown": "Répartition des délais", "xpack.synthetics.stepDetailsRoute.timingsBreakdown.info": "Somme de tous les délais de requêtes réseau", - "xpack.synthetics.stepList.collapseRow": "Réduire", - "xpack.synthetics.stepList.expandRow": "Développer", - "xpack.synthetics.stepList.stepName": "Nom de l'étape", - "xpack.synthetics.synthetics.consoleStepList.message": "Ce parcours n'a pas réussi à s'exécuter ; la sortie de la console enregistrée est affichée ci-dessous :", - "xpack.synthetics.synthetics.consoleStepList.title": "Aucune étape exécutée", - "xpack.synthetics.synthetics.emptyJourney.message.footer": "Aucune autre information à afficher.", - "xpack.synthetics.synthetics.emptyJourney.message.heading": "Le parcours ne contenait aucune étape.", - "xpack.synthetics.synthetics.emptyJourney.title": "Aucune étape pour ce parcours", - "xpack.synthetics.synthetics.executedStep.consoleOutput.label": "Sortie de la console", - "xpack.synthetics.synthetics.executedStep.errorHeading": "Message d'erreur", - "xpack.synthetics.synthetics.executedStep.screenshot.not": "Capture d'écran", "xpack.synthetics.synthetics.executedStep.screenshot.success": "dernière vérification réussie", - "xpack.synthetics.synthetics.executedStep.scriptHeading.label": "Script exécuté à cette étape", - "xpack.synthetics.synthetics.executedStep.stackTrace": "Trace de la Suite Elastic", - "xpack.synthetics.synthetics.imageLoadingSpinner.ariaLabel": "Boucle de progression animée indiquant que l'image est en train de se charger", - "xpack.synthetics.synthetics.journey.loadingSteps": "Chargement des étapes...", "xpack.synthetics.synthetics.markers.explore": "Explorer", "xpack.synthetics.synthetics.markers.noFieldIcon.label": "Icône indiquant que ce marqueur ne possède aucun champ associé", "xpack.synthetics.synthetics.markers.openEmbeddableButton.label": "Utilisez ce bouton icône afin d'afficher les indicateurs pour ce marqueur d'annotation.", - "xpack.synthetics.synthetics.nextStepButton.ariaLabel": "Étape suivante", - "xpack.synthetics.synthetics.performanceBreakDown.label": "Répartition des performances", - "xpack.synthetics.synthetics.prevStepButton.airaLabel": "Étape précédente", - "xpack.synthetics.synthetics.screenshot.loadingImageMessage": "Chargement", - "xpack.synthetics.synthetics.screenshot.noImageMessage": "Aucune image disponible", - "xpack.synthetics.synthetics.screenshotDisplay.altTextWithoutName": "Capture d'écran", "xpack.synthetics.synthetics.service.apiKey": "Clé d'API du service Synthetics", - "xpack.synthetics.synthetics.statusBadge.failedMessage": "Échoué", - "xpack.synthetics.synthetics.statusBadge.skippedMessage": "Ignoré", - "xpack.synthetics.synthetics.statusBadge.succeededMessage": "Réussi", - "xpack.synthetics.synthetics.step.durationTrend": "Tendance de durée de l'étape", "xpack.synthetics.synthetics.stepDetail.nextCheckButtonText": "Vérification suivante", "xpack.synthetics.synthetics.stepDetail.nextStepButtonText": "Suivant", - "xpack.synthetics.synthetics.stepDetail.noData": "Aucune donnée n'a été trouvée pour cette étape", "xpack.synthetics.synthetics.stepDetail.previousCheckButtonText": "Vérification précédente", "xpack.synthetics.synthetics.stepDetail.previousStepButtonText": "Précédent", "xpack.synthetics.synthetics.stepDetail.stepLabel": "Étape", @@ -36785,9 +36383,6 @@ "xpack.synthetics.synthetics.stepDetail.waterfallNoData": "Aucune donnée de cascade n'a été trouvée pour cette étape", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.description": "Le graphique en cascade ne peut pas être affiché. Vous utilisez peut-être une ancienne version de l'agent synthétique. Veuillez vérifier votre version et envisager d'effectuer une mise à niveau.", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.title": "Graphique en cascade non disponible", - "xpack.synthetics.synthetics.stepList.nextCheck": "Vérification suivante", - "xpack.synthetics.synthetics.stepList.previousCheck": "Vérification précédente", - "xpack.synthetics.synthetics.thumbnail.fullSize.alt": "Version plus grande de la capture d'écran de la miniature de l'étape du parcours.", "xpack.synthetics.synthetics.waterfall.domContentLabel": "Contenu DOM chargé", "xpack.synthetics.synthetics.waterfall.fcpLabel": "First Contentful Paint", "xpack.synthetics.synthetics.waterfall.filterGroup.filterScreenreaderLabel": "Filtrer par", @@ -36847,15 +36442,12 @@ "xpack.synthetics.testRun.runErrorLabel": "Erreur lors de l'exécution du test", "xpack.synthetics.testRunDetailsRoute.page.title": "Détails de l'exécution du test", "xpack.synthetics.timestamp.label": "@timestamp", - "xpack.synthetics.title": "Uptime", "xpack.synthetics.tls": "TLS", "xpack.synthetics.tls.ageExpression.description": "ou antérieur à (jours) : ", "xpack.synthetics.tls.criteriaExpression.value": "le moniteur correspondant", "xpack.synthetics.tls.expirationExpression.description": "possède un certificat expirant dans (jours) : ", "xpack.synthetics.toggleAlertButton.content": "Règle de statut du moniteur", "xpack.synthetics.toggleAlertFlyout.ariaLabel": "Ouvrir le menu volant d'ajout de règle", - "xpack.synthetics.toggleTlsAlertButton.ariaLabel": "Ouvrir le menu volant de règle TLS", - "xpack.synthetics.toggleTlsAlertButton.content": "Règle TLS", "xpack.synthetics.totalDuration.metrics": "Durée de l’étape", "xpack.synthetics.totalDuration.transferSize": "Taille du transfert", "xpack.synthetics.uptimeFeatureCatalogueTitle": "Uptime", @@ -36868,6 +36460,412 @@ "xpack.synthetics.waterfall.networkRequests.filteredOut": "Filtré", "xpack.synthetics.waterfall.networkRequests.heading": "Requêtes réseau", "xpack.synthetics.waterfallChart.sidebar.url.https": "https", + "xpack.uptime.alerts.monitorExpression.label": "Supprimer le filtre {title}", + "xpack.uptime.alerts.monitorStatus.actionVariables.down": "a échoué {count} fois au cours des derniers {interval}. Alerte lorsque > {numTimes}.", + "xpack.uptime.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} Le {availabilityBreachMessage}", + "xpack.uptime.alerts.monitorStatus.monitorCallOut.title": "Cette alerte s'appliquera à environ {snapshotCount} moniteurs.", + "xpack.uptime.alerts.monitorStatus.reasonMessage": "Moniteur \"{name}\" depuis {location} {status} Vérifié à {checkedAt}.", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.value": "dernière {value}", + "xpack.uptime.alerts.tls.validAfterExpiredString": "expiré le {date}, il y a {relativeDate} jours.", + "xpack.uptime.alerts.tls.validAfterExpiringString": "expire le {date}, dans {relativeDate} jours.", + "xpack.uptime.alerts.tls.validBeforeExpiredString": "valide depuis {date}, il y a {relativeDate} jours.", + "xpack.uptime.alerts.tls.validBeforeExpiringString": "non valide jusqu'au {date}, dans {relativeDate} jours.", + "xpack.uptime.availabilityLabelText": "{value} %", + "xpack.uptime.charts.mlAnnotation.header": "Score : {score}", + "xpack.uptime.charts.mlAnnotation.severity": "Sévérité : {severity}", + "xpack.uptime.controls.selectSeverity.scoreDetailsDescription": "score {value} et supérieur", + "xpack.uptime.deprecateNoticeModal.forMoreInformation": "Pour en savoir plus, {docsLink}", + "xpack.uptime.durationChart.emptyPrompt.description": "Ce moniteur n'a jamais été {emphasizedText} au cours de la plage temporelle sélectionnée.", + "xpack.uptime.integration.deprecation.content": "Au moins un moniteur est configuré à l'aide de l'intégration Elastic Synthetics. Depuis Elastic 8.8, l'intégration est abandonnée et vous ne pouvez plus modifier ces moniteurs. Veuillez migrer vers des moniteurs Projet ou les ajouter à la nouvelle application Synthetics disponible directement dans Observability. Pour en savoir plus, consultez notre {link}.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "Une fois qu'une tâche a été créée, vous pouvez la gérer et afficher davantage de détails sur le {mlJobsPageLink}.", + "xpack.uptime.monitorCharts.durationChart.leftAxis.title": "Durée en {unit}", + "xpack.uptime.monitorCharts.monitorDuration.titleLabelWithAnomaly": "Durée du moniteur (Anomalies : {noOfAnomalies})", + "xpack.uptime.monitorList.defineConnector.description": "Définissez un connecteur par défaut dans {link} pour activer les alertes de statut du moniteur.", + "xpack.uptime.monitorList.drawer.missingLocation": "Certaines instances Heartbeat n'ont pas d'emplacement défini. {link} vers votre configuration Heartbeat.", + "xpack.uptime.monitorList.drawer.statusRowLocationList": "Liste d'emplacements ayant le statut \"{status}\" lors de la dernière vérification.", + "xpack.uptime.monitorList.expandDrawerButton.ariaLabel": "Développer la ligne du moniteur avec l'ID {id}", + "xpack.uptime.monitorList.infraIntegrationAction.docker.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'ID de conteneur \"{containerId}\"", + "xpack.uptime.monitorList.infraIntegrationAction.ip.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'IP \"{ip}\"", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.tooltip": "Vérifier l'interface utilisateur de l'infrastructure pour l'UID de pod \"{podUid}\".", + "xpack.uptime.monitorList.loggingIntegrationAction.container.tooltip": "Vérifier l'interface utilisateur de logging pour l'ID de conteneur \"{containerId}\"", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.tooltip": "Vérifier l'interface utilisateur de logging pour l'IP \"{ip}\"", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.tooltip": "Rechercher les logs pour l'UID de pod \"{podUid}\"", + "xpack.uptime.monitorList.monitorType.filter": "Filtrer tous les moniteurs ayant le type {type}", + "xpack.uptime.monitorList.mostRecentError.title": "Erreur la plus récente ({timestamp})", + "xpack.uptime.monitorList.noDownHistory": "Ce moniteur n'a jamais été {emphasizedText} au cours de la plage temporelle sélectionnée.", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "Cliquez ici pour vérifier les APM pour le domaine \"{domain}\" ou le \"nom de service\" explicitement défini.", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "Ouvre la fenêtre contextuelle des intégrations pour le moniteur avec l'URL {monitorUrl}", + "xpack.uptime.monitorList.pageSizePopoverButtonText": "Lignes par page : {size}", + "xpack.uptime.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows} lignes", + "xpack.uptime.monitorList.redirects.title.number": "{number}", + "xpack.uptime.monitorList.statusColumn.checkedTimestamp": "Vérifié {timestamp}", + "xpack.uptime.monitorList.statusColumn.locStatusMessage": "dans {noLoc} emplacement", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.multiple": "dans {noLoc} emplacements", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.down": "Arrêté dans {locs}", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.up": "Opérationnel dans {locs}", + "xpack.uptime.monitorList.table.description": "Tableau de statut de moniteur avec les colonnes Statut, Nom, URL, IP, Historique d'indisponibilité et Intégrations. Le tableau affiche actuellement {length} éléments.", + "xpack.uptime.monitorList.tags.filter": "Filtrer tous les moniteurs avec la balise {tag}", + "xpack.uptime.monitorRoute.title": "Moniteur | {baseTitle}", + "xpack.uptime.monitorStatusBar.locations.oneLocStatus": "{status} dans l'emplacement {loc}", + "xpack.uptime.monitorStatusBar.locations.upStatus": "{status} dans les emplacement {loc}", + "xpack.uptime.overview.alerts.enabled.success.description": "Un message sera envoyé à {actionConnectors} lorsque ce moniteur sera arrêté.", + "xpack.uptime.pingist.durationSecondsColumnFormatting": "{seconds} secondes", + "xpack.uptime.pingist.durationSecondsColumnFormatting.singular": "{seconds} seconde", + "xpack.uptime.pingList.durationMsColumnFormatting": "{millis} ms", + "xpack.uptime.pingList.expandedRow.response_body.notRecorded": "Corps non enregistré. Lisez notre {docsLink} pour en savoir plus sur l'enregistrement des corps de réponse.", + "xpack.uptime.public.pages.mappingError.bodyDocsLink": "Vous pouvez apprendre à corriger ce problème dans la {docsLink}.", + "xpack.uptime.public.pages.mappingError.bodyMessage": "Mappings incorrects détectés ! Vous avez peut-être oublié d'exécuter la commande {setup} Heartbeat ?", + "xpack.uptime.snapshot.donutChart.ariaLabel": "Camembert affichant le statut actuel. {down} moniteurs sur {total} sont arrêtés.", + "xpack.uptime.snapshotHistogram.description": "Graphique à barres affichant le statut de disponibilité au fil du temps de {startTime} à {endTime}.", + "xpack.uptime.sourceConfiguration.ageThresholdDefaultValue": "La valeur par défaut est {defaultValue}", + "xpack.uptime.sourceConfiguration.expirationThresholdDefaultValue": "La valeur par défaut est {defaultValue}", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDefaultValue": "La valeur par défaut est {defaultValue}", + "xpack.uptime.stepDetailRoute.title": "Détails sur Synthetics | {baseTitle}", + "xpack.uptime.synthetics.emptyJourney.message.checkGroupField": "Le groupe de vérification du parcours est {codeBlock}.", + "xpack.uptime.synthetics.executedStep.screenshot.notSucceeded": "Capture d'écran pour la vérification du statut {status}", + "xpack.uptime.synthetics.journey.allFailedMessage": "{total} étapes - toutes ont échoué ou ont été ignorées", + "xpack.uptime.synthetics.journey.allSucceededMessage": "{total} étapes - toutes ont réussi", + "xpack.uptime.synthetics.journey.partialSuccessMessage": "{total} étapes - {succeeded} ont réussi", + "xpack.uptime.synthetics.pingTimestamp.captionContent": "Étape : {stepNumber} sur {totalSteps}", + "xpack.uptime.synthetics.screenshotDisplay.altText": "Capture d'écran de l'étape portant le nom \"{stepName}\"", + "xpack.uptime.synthetics.step.duration": "{value} secondes", + "xpack.uptime.synthetics.waterfall.offsetUnit": "{offset} ms", + "xpack.uptime.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests} correspondent au filtre)", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests} requêtes réseau", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage.first": "{count} premier(s)", + "xpack.uptime.addDataButtonLabel": "Ajouter des données", + "xpack.uptime.alertDropdown.noWritePermissions": "Vous devez disposer d'un accès en lecture-écriture à Uptime pour créer des alertes dans cette application.", + "xpack.uptime.alerts.anomaly.criteriaExpression.ariaLabel": "Expression affichant les critères d'un moniteur sélectionné.", + "xpack.uptime.alerts.anomaly.criteriaExpression.description": "Quand le moniteur", + "xpack.uptime.alerts.anomaly.scoreExpression.ariaLabel": "Expression affichant les critères d'un seuil d'alerte d'anomalie.", + "xpack.uptime.alerts.anomaly.scoreExpression.description": "comporte une anomalie avec sévérité", + "xpack.uptime.alerts.createRulesPanel.title": "Créer des règles", + "xpack.uptime.alerts.durationAnomaly": "Anomalie de durée Uptime", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "Horodatage ISO8601 du début de l'anomalie.", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "Temps de réponse attendu", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitor": "Rendu convivial du nom ou de l'ID, ou nom préféré (par ex. Mon moniteur)", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorId": "ID du moniteur.", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorUrl": "URL du moniteur.", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.observerLocation": "Emplacement de l'observateur à partir duquel la vérification des pulsations est effectuée.", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severity": "Sévérité de l'anomalie.", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severityScore": "Note de sévérité d'anomalie", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "Temps de réponse le plus lent dans le compartiment d'anomalies avec des unités associées (ms, s).", + "xpack.uptime.alerts.monitorStatus": "Statut du moniteur Uptime", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "Liaison vers la vue dans Elastic qui affiche davantage de détails et de contexte concernant cette alerte", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "Une description concise de la raison du signalement", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.message.description": "Message généré résumant les moniteurs actuellement arrêtés", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "Lien vers la vue ou la fonctionnalité d'Elastic qui peut être utilisée pour examiner l'alerte et son contexte de manière plus approfondie", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.checkedAt": "Horodatage de la vérification du moniteur.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "Horodatage indiquant à quel moment l'état de déclenchement actuel a commencé, si l'alerte est déclenchée", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "Horodatage indiquant à quel moment cette alerte a effectué des vérifications pour la première fois", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "Horodatage indiquant à quel moment cette alerte a été déclenchée pour la première fois", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.isTriggered": "Indicateur spécifiant si l'alerte est en cours de déclenchement", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "Horodatage indiquant l'heure de vérification la plus récente de l'alerte", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "Dernier message d'erreur du moniteur", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "Horodatage indiquant l'heure de résolution la plus récente pour cette alerte", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "Horodatage indiquant l'heure de déclenchement la plus récente de l'alerte", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitor": "Rendu convivial du nom ou de l'ID, ou nom préféré (par ex. Mon moniteur)", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorId": "ID du moniteur.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorType": "Type (par ex. HTTP/TCP) du moniteur.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorUrl": "URL du moniteur.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerHostname": "Nom d'hôte de l'observateur à partir duquel la vérification des pulsations est effectuée.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerLocation": "Emplacement de l'observateur à partir duquel la vérification des pulsations est effectuée.", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.statusMessage": "Message de statut, par ex. \"arrêté\" ou \"se trouve au-dessous du seuil de disponibilité\" en cas de vérification de disponibilité, ou les deux.", + "xpack.uptime.alerts.monitorStatus.addFilter": "Ajouter un filtre", + "xpack.uptime.alerts.monitorStatus.addFilter.location": "Emplacement", + "xpack.uptime.alerts.monitorStatus.addFilter.port": "Port", + "xpack.uptime.alerts.monitorStatus.addFilter.tag": "Balise", + "xpack.uptime.alerts.monitorStatus.addFilter.type": "Type", + "xpack.uptime.alerts.monitorStatus.availability.isEnabledCheckbox.label": "Disponibilité", + "xpack.uptime.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "tout moniteur est opérationnel dans", + "xpack.uptime.alerts.monitorStatus.availability.threshold.ariaLabel": "Spécifier les seuils de disponibilité pour cette alerte", + "xpack.uptime.alerts.monitorStatus.availability.threshold.description": "les moniteurs correspondants sont opérationnels dans", + "xpack.uptime.alerts.monitorStatus.availability.threshold.input.ariaLabel": "Saisir un seuil de disponibilité à vérifier pour cette alerte", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "Entrez le nombre d'unités pour la vérification de disponibilité de l'alerte.", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.expression": "ces derniers/dernières", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "Spécifier la plage temporelle de suivi de disponibilité", + "xpack.uptime.alerts.monitorStatus.availability.unit.headline": "Sélectionner l'unité de la plage temporelle", + "xpack.uptime.alerts.monitorStatus.availability.unit.selectable": "Utiliser cette sélection pour définir les unités de la plage temporelle pour cette alerte", + "xpack.uptime.alerts.monitorStatus.filterBar.ariaLabel": "Entrée qui permet le filtrage de critères pour l'alerte de statut du moniteur", + "xpack.uptime.alerts.monitorStatus.filters.anyLocation": "tout emplacement", + "xpack.uptime.alerts.monitorStatus.filters.anyPort": "tout port", + "xpack.uptime.alerts.monitorStatus.filters.anyTag": "toute balise", + "xpack.uptime.alerts.monitorStatus.filters.anyType": "tout type", + "xpack.uptime.alerts.monitorStatus.filters.from": "De", + "xpack.uptime.alerts.monitorStatus.filters.fromLocation": "Depuis l'emplacement", + "xpack.uptime.alerts.monitorStatus.filters.location.label": "Sélectionnez les filtres d'emplacement à appliquer à la requête de l'alerte.", + "xpack.uptime.alerts.monitorStatus.filters.of": "sur", + "xpack.uptime.alerts.monitorStatus.filters.ofType": "De type", + "xpack.uptime.alerts.monitorStatus.filters.port.label": "Sélectionnez les filtres de port à appliquer à la requête de l'alerte.", + "xpack.uptime.alerts.monitorStatus.filters.scheme.label": "Sélectionnez les filtres de schéma de protocole à appliquer à la requête de l'alerte.", + "xpack.uptime.alerts.monitorStatus.filters.tag.label": "Sélectionnez les filtres de balise à appliquer à la requête de l'alerte.", + "xpack.uptime.alerts.monitorStatus.filters.using": "À l'aide de", + "xpack.uptime.alerts.monitorStatus.filters.usingPort": "En utilisant le port", + "xpack.uptime.alerts.monitorStatus.filters.with": "À l'aide de", + "xpack.uptime.alerts.monitorStatus.filters.withTag": "Avec la balise", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "tout moniteur est arrêté >=", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour saisir le compte de moniteurs arrêtés", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "les moniteurs correspondants sont arrêtés >=", + "xpack.uptime.alerts.monitorStatus.numTimesField.ariaLabel": "Entrer le nombre de moniteurs arrêtés requis pour déclencher l'alerte", + "xpack.uptime.alerts.monitorStatus.oldAlertCallout.title": "Si vous modifiez une ancienne alerte, certains champs ne se rempliront peut-être pas automatiquement.", + "xpack.uptime.alerts.monitorStatus.statusEnabledCheck.label": "Vérification du statut", + "xpack.uptime.alerts.monitorStatus.timerangeOption.days": "jours", + "xpack.uptime.alerts.monitorStatus.timerangeOption.hours": "heures", + "xpack.uptime.alerts.monitorStatus.timerangeOption.minutes": "minutes", + "xpack.uptime.alerts.monitorStatus.timerangeOption.months": "mois", + "xpack.uptime.alerts.monitorStatus.timerangeOption.seconds": "secondes", + "xpack.uptime.alerts.monitorStatus.timerangeOption.weeks": "semaines", + "xpack.uptime.alerts.monitorStatus.timerangeOption.years": "ans", + "xpack.uptime.alerts.monitorStatus.timerangeSelectionHeader": "Sélectionner l'unité de la plage temporelle", + "xpack.uptime.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour accéder au champ de sélection d'unité de la plage temporelle", + "xpack.uptime.alerts.monitorStatus.timerangeUnitSelectable": "Le champ sélectionnable pour les alertes d'unités de la plage temporelle doit utiliser", + "xpack.uptime.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "Ouvrir la fenêtre contextuelle pour accéder au champ de valeur de la plage temporelle", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.ariaLabel": "Entrer le nombre d'unités de temps pour la plage de l'alerte", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.expression": "dans", + "xpack.uptime.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "Élément de sélection de la plage temporelle \"Jours\"", + "xpack.uptime.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "Élément de sélection de la plage temporelle \"Heures\"", + "xpack.uptime.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "Élément de sélection de la plage temporelle \"Minutes\"", + "xpack.uptime.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Mois\"", + "xpack.uptime.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Secondes\"", + "xpack.uptime.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "Élément de sélection de la plage temporelle \"Semaines\"", + "xpack.uptime.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "Élément de sélection de la plage temporelle \"Années\"", + "xpack.uptime.alerts.tls": "Uptime TLS", + "xpack.uptime.alerts.tls.actionVariables.state.agingCommonNameAndDate": "Noms courants et date/heure d'expiration des certificats détectés.", + "xpack.uptime.alerts.tls.actionVariables.state.agingCount": "Nombre de certificats détectés qui deviennent trop anciens.", + "xpack.uptime.alerts.tls.actionVariables.state.count": "Nombre de certificats détectés par l'exécuteur d'alertes", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "Noms courants et date/heure d'expiration des certificats détectés", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCount": "Nombre de certificats sur le point d'expirer détectés par l'alerte.", + "xpack.uptime.alerts.tls.agingLabel": "devient trop ancien", + "xpack.uptime.alerts.tls.criteriaExpression.ariaLabel": "Expression affichant les critères des moniteurs surveillés par cette alerte", + "xpack.uptime.alerts.tls.expiredLabel": "expiré", + "xpack.uptime.alerts.tls.expiringLabel": "sur le point d'expirer", + "xpack.uptime.alerts.tls.invalidLabel": "non valide", + "xpack.uptime.alerts.tlsLegacy": "Uptime TLS (existant)", + "xpack.uptime.alertsPopover.toggleButton.ariaLabel": "Ouvrir le menu contextuel des alertes et règles", + "xpack.uptime.apmIntegrationAction.description": "Rechercher ce monitoring dans APM", + "xpack.uptime.apmIntegrationAction.text": "Afficher les données APM", + "xpack.uptime.breadcrumbs.legacyOverviewBreadcrumbText": "Uptime", + "xpack.uptime.controls.selectSeverity.criticalLabel": "critique", + "xpack.uptime.controls.selectSeverity.majorLabel": "majeur", + "xpack.uptime.controls.selectSeverity.minorLabel": "mineure", + "xpack.uptime.controls.selectSeverity.warningLabel": "avertissement", + "xpack.uptime.deprecateNoticeModal.addPrivateLocations": "Ajouter des emplacements privés pour vos politiques Fleet", + "xpack.uptime.deprecateNoticeModal.automateMonitors": "Automatiser la création de vos moniteurs à l'aide de moniteurs de projet", + "xpack.uptime.deprecateNoticeModal.description": "L'intégration Elastic Synthetics est déclassée. À la place, vous pouvez maintenant monitorer les points de terminaison, les pages et les parcours des utilisateurs directement dans l'application Synthetics de manière beaucoup plus efficace :", + "xpack.uptime.deprecateNoticeModal.elasticManagedLocations": "Exécuter les moniteurs dans plusieurs emplacements gérés par Elastic, ou à partir de vos propres emplacements privés", + "xpack.uptime.deprecateNoticeModal.goBack": "Retour", + "xpack.uptime.deprecateNoticeModal.goToSynthetics": "Accéder à Synthetics", + "xpack.uptime.deprecateNoticeModal.headerText": "Le Monitoring synthétique est maintenant disponible prêt à l'emploi dans Synthetics", + "xpack.uptime.deprecateNoticeModal.manageMonitors": "Gérer les moniteurs légers et basés sur un navigateur à partir d'un emplacement unique", + "xpack.uptime.deprecateNoticeModal.readDocs": "lire la documentation.", + "xpack.uptime.durationChart.emptyPrompt.title": "Aucune donnée de durée n'est disponible", + "xpack.uptime.editPackagePolicy.inSynthetics": "Modifier dans Synthetics", + "xpack.uptime.editPackagePolicy.inSyntheticsDesc": "Cette politique de package est gérée par l'application Synthetics.", + "xpack.uptime.emptyState.loadingMessage": "Chargement…", + "xpack.uptime.emptyStateError.notFoundPage": "Page introuvable", + "xpack.uptime.enableAlert.editAlert": "Modifier l'alerte", + "xpack.uptime.filterBar.ariaLabel": "Saisissez des critères de filtre pour la page d'aperçu", + "xpack.uptime.filterBar.filterAllLabel": "Tous", + "xpack.uptime.filterBar.options.location.name": "Emplacement", + "xpack.uptime.filterBar.options.portLabel": "Port", + "xpack.uptime.filterBar.options.schemeLabel": "Schéma", + "xpack.uptime.filterBar.options.tagsLabel": "Balise", + "xpack.uptime.fleetIntegration.assets.description": "Afficher les moniteurs dans Synthetics", + "xpack.uptime.fleetIntegration.assets.name": "Moniteurs", + "xpack.uptime.integration.deprecation.dismiss": "Rejeter", + "xpack.uptime.integration.deprecation.link": "Documents de migration Synthetics", + "xpack.uptime.integration.deprecation.title": "Migrer vos moniteurs d'intégration Elastic Synthetics", + "xpack.uptime.integrationLink.missingDataMessage": "Les données requises pour cette intégration sont introuvables.", + "xpack.uptime.kueryBar.searchPlaceholder.kql": "Rechercher à l'aide de la syntaxe KQL des ID, noms et types etc. de moniteurs (par ex. monitor.type: \"http\" AND tags: \"dev\")", + "xpack.uptime.kueryBar.searchPlaceholder.simpleText": "Rechercher par ID, nom, URL, port ou balises de moniteur", + "xpack.uptime.locationName.helpLinkAnnotation": "Ajouter un emplacement", + "xpack.uptime.mappingErrorRoute.breadcrumb": "Erreur de mapping", + "xpack.uptime.mappingErrorRoute.pageHeader.title": "Erreur de mapping", + "xpack.uptime.mappingErrorRoute.title": "Synthetics | erreur de mapping", + "xpack.uptime.ml.durationChart.exploreInMlApp": "Explorer dans ML App", + "xpack.uptime.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "Autorisations requises", + "xpack.uptime.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "Détection des anomalies", + "xpack.uptime.ml.enableAnomalyDetectionPanel.cancelLabel": "Annuler", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createMLJobDescription": "Ici, vous pouvez créer une tâche de Machine Learning afin de calculer les scores d'anomalie pour\n les durées de réponse pour Uptime Monitor. Une fois activé, le graphique de durée de monitoring de la page des détails\n affichera les limites attendues et annotera le graphique avec les anomalies. Vous pouvez aussi éventuellement\n identifier les périodes de latence augmentées selon les zones géographiques.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "Créer une nouvelle tâche", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "Désactiver l'alerte d'anomalie", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "Désactiver la détection des anomalies", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "Vous pouvez activer la tâche de détection des anomalies, ou, si elle est déjà présente, vous pouvez gérer la tâche ou l'alerte.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "Activer l'alerte d'anomalie", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "Activer la détection des anomalies", + "xpack.uptime.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "Vous devez disposer des privilèges Kibana de Machine Learning pour utiliser cette fonctionnalité.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "L'analyse attend qu'un nœud de ML devienne disponible. L'ajout des résultats au graphique peut prendre un certain temps.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "L'analyse est à présent en cours d'exécution pour le graphique de durée de réponse. L'ajout des résultats au graphique peut prendre un certain temps.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "Afficher la tâche", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "Tâche créée avec succès", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "Il est possible que votre licence actuelle n'autorise pas la création de tâches de Machine Learning, ou cette tâche existe peut-être déjà.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "La création de la tâche a échoué", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "Supprimer la tâche de détection des anomalies ?", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "Tâche supprimée", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "La tâche a été supprimée avec succès", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "Gérer la détection des anomalies", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "Page de gestion des tâches de Machine Learning", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "Remarque : La tâche peut mettre un certain temps à démarrer le calcul des résultats.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "Vous devez disposer d'un accès en lecture-écriture à Uptime pour créer des alertes d'anomalie.", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrial": "Commencer un essai gratuit de 14 jours", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrialDesc": "Pour pouvoir accéder à la détection des anomalies de durée, vous devez être abonné à une licence Elastic Platinum.", + "xpack.uptime.monitorCharts.durationChart.wrapper.label": "Graphique affichant la durée de ping du moniteur, avec regroupement par emplacement.", + "xpack.uptime.monitorCharts.monitorDuration.titleLabel": "Durée du moniteur", + "xpack.uptime.monitorDetails.ml.confirmAlertDeleteMessage": "Voulez-vous vraiment supprimer l'alerte pour les anomalies ?", + "xpack.uptime.monitorDetails.ml.confirmDeleteMessage": "Voulez-vous vraiment supprimer cette tâche ?", + "xpack.uptime.monitorDetails.ml.deleteJobWarning": "La suppression d'une tâche peut prendre beaucoup de temps. Elle sera supprimée en arrière-plan, et les données ne disparaîtront peut-être pas instantanément.", + "xpack.uptime.monitorDetails.ml.deleteMessage": "Suppression des tâches...", + "xpack.uptime.monitorDetails.statusBar.pingType.browser": "Navigateur", + "xpack.uptime.monitorDetails.statusBar.pingType.http": "HTTP", + "xpack.uptime.monitorDetails.statusBar.pingType.icmp": "ICMP", + "xpack.uptime.monitorDetails.statusBar.pingType.tcp": "TCP", + "xpack.uptime.monitorDetails.title.disclaimer.description": "(BÊTA)", + "xpack.uptime.monitorDetails.title.disclaimer.link": "Afficher plus", + "xpack.uptime.monitorDetails.title.pingType.browser": "Navigateur", + "xpack.uptime.monitorDetails.title.pingType.http": "Ping HTTP", + "xpack.uptime.monitorDetails.title.pingType.icmp": "Ping ICMP", + "xpack.uptime.monitorDetails.title.pingType.tcp": "Ping TCP", + "xpack.uptime.monitorList.defineConnector.popover.description": "pour recevoir les alertes de statut.", + "xpack.uptime.monitorList.disableDownAlert": "Désactiver les alertes de statut", + "xpack.uptime.monitorList.downLineSeries.downLabel": "Vérifications des arrêts", + "xpack.uptime.monitorList.drawer.mostRecentRun": "Exécution de test la plus récente", + "xpack.uptime.monitorList.drawer.url": "Url", + "xpack.uptime.monitorList.enabledAlerts.noAlert": "Aucune règle n'est activée pour ce moniteur.", + "xpack.uptime.monitorList.enabledAlerts.title": "Règles activées", + "xpack.uptime.monitorList.enableDownAlert": "Activer les alertes de statut", + "xpack.uptime.monitorList.geoName.helpLinkAnnotation": "Ajouter un emplacement", + "xpack.uptime.monitorList.infraIntegrationAction.container.message": "Afficher les indicateurs de conteneurs", + "xpack.uptime.monitorList.infraIntegrationAction.docker.description": "Vérifier l'interface utilisateur de l'infrastructure pour cet ID de conteneur du moniteur", + "xpack.uptime.monitorList.infraIntegrationAction.ip.ariaLabel": "Vérifier l'interface utilisateur de l'infrastructure pour cette adresse IP du moniteur", + "xpack.uptime.monitorList.infraIntegrationAction.ip.message": "Afficher les indicateurs d'hôte", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.description": "Vérifier l'interface utilisateur de l'infrastructure pour cet UID de pod du monitoring", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.message": "Afficher les indicateurs de pod", + "xpack.uptime.monitorList.integrationGroup.emptyMessage": "Aucune application intégrée n'est disponible", + "xpack.uptime.monitorList.loading": "Chargement...", + "xpack.uptime.monitorList.locations.expand": "Cliquer pour afficher les emplacements restants", + "xpack.uptime.monitorList.loggingIntegrationAction.container.id": "Afficher les logs du conteneur", + "xpack.uptime.monitorList.loggingIntegrationAction.container.message": "Afficher les logs du conteneur", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.description": "Vérifier l'interface utilisateur de logging pour cette adresse IP de moniteur", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.message": "Afficher les logs des hôtes", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "Afficher les logs de pod", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.message": "Afficher les logs de pod", + "xpack.uptime.monitorList.monitorHistoryColumnLabel": "Historique d'indisponibilité", + "xpack.uptime.monitorList.monitoringStatusTitle": "Moniteurs", + "xpack.uptime.monitorList.nameColumnLabel": "Nom", + "xpack.uptime.monitorList.noItemForSelectedFiltersMessage": "Aucun moniteur trouvé pour les critères de filtre sélectionnés", + "xpack.uptime.monitorList.noItemMessage": "Aucun moniteur Uptime trouvé", + "xpack.uptime.monitorList.noMessage.troubleshoot": "Essayez d'utiliser une plage de dates absolues. Si les moniteurs s'affichent après cette action, il existe peut-être un problème avec l'horloge système où Heartbeat ou Kibana est installé.", + "xpack.uptime.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "Examiner", + "xpack.uptime.monitorList.statusAlert.label": "Alerte de statut", + "xpack.uptime.monitorList.statusColumnLabel": "Statut", + "xpack.uptime.monitorList.tags.expand": "Cliquer pour afficher les balises restantes", + "xpack.uptime.monitorList.tlsColumnLabel": "Certificat TLS", + "xpack.uptime.monitorList.troubleshoot.systemClockOutOfSync": "L'horloge système n'est peut-être pas synchronisée", + "xpack.uptime.monitorList.troubleshoot.tryDateRange": "Appliquer une plage de dates absolues", + "xpack.uptime.monitorList.troubleshoot.whereAreMyMonitors": "Où sont mes moniteurs ?", + "xpack.uptime.monitorStatusBar.durationTextAriaLabel": "Durée du monitoring en millisecondes", + "xpack.uptime.monitorStatusBar.healthStatusMessageAriaLabel": "Statut du moniteur", + "xpack.uptime.monitorStatusBar.loadingMessage": "Chargement…", + "xpack.uptime.monitorStatusBar.monitor.availability": "Disponibilité générale", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.availability": "Disponibilité", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.location": "Emplacement", + "xpack.uptime.monitorStatusBar.monitor.id": "ID de moniteur", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom": "Monitoring à partir de", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.listToMap": "Passer à la vue de carte pour vérifier la disponibilité par emplacement.", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.MapToList": "Passer à la vue de liste pour vérifier la disponibilité par emplacement.", + "xpack.uptime.monitorStatusBar.monitorUrlLinkAriaLabel": "Lien d'URL du moniteur", + "xpack.uptime.monitorStatusBar.sslCertificate.title": "Certificat TLS", + "xpack.uptime.monitorStatusBar.timestampFromNowTextAriaLabel": "Temps depuis la dernière vérification", + "xpack.uptime.monitorStatusBar.type.ariaLabel": "Type de moniteur", + "xpack.uptime.monitorStatusBar.type.label": "Type", + "xpack.uptime.navigateToAlertingButton.content": "Gérer les règles", + "xpack.uptime.navigateToAlertingUi": "Quitter Uptime et accéder à la page de gestion Alerting", + "xpack.uptime.noDataConfig.beatsCard.description": "Monitorez de façon proactive la disponibilité de vos sites et services. Recevez des alertes et corrigez les problèmes plus rapidement pour optimiser l'expérience de vos utilisateurs.", + "xpack.uptime.noDataConfig.beatsCard.title": "Ajouter des moniteurs avec Heartbeat", + "xpack.uptime.noDataConfig.solutionName": "Observabilité", + "xpack.uptime.notFountPage.homeLinkText": "Retour à l'accueil", + "xpack.uptime.openAlertContextPanel.label": "Créer une règle", + "xpack.uptime.overview.alerts.disabled.failed": "La règle ne peut pas être désactivée !", + "xpack.uptime.overview.alerts.disabled.success": "La règle a été correctement désactivée !", + "xpack.uptime.overview.alerts.enabled.failed": "La règle ne peut pas être activée !", + "xpack.uptime.overview.alerts.enabled.success": "La règle a été correctement activée ", + "xpack.uptime.overview.uptimeHeading": "Monitorings Uptime", + "xpack.uptime.overviewPageLink.disabled.ariaLabel": "Bouton de pagination désactivé indiquant qu'aucune autre navigation ne peut être effectuée dans la liste des moniteurs.", + "xpack.uptime.overviewPageLink.next.ariaLabel": "Page de résultats suivante", + "xpack.uptime.overviewPageLink.prev.ariaLabel": "Page de résultats précédente", + "xpack.uptime.page_header.addDataLink.label": "Accédez à un tutoriel sur l'ajout de données Uptime", + "xpack.uptime.page_header.defineConnector.popover.defaultLink": "Définir un connecteur par défaut", + "xpack.uptime.page_header.defineConnector.settingsLink": "Paramètres", + "xpack.uptime.page_header.manageLink.not": "La Gestion des moniteurs n'est plus disponible dans Uptime. Utilisez plutôt l'application Synthetics.", + "xpack.uptime.page_header.manageMonitors": "Gestion des moniteurs", + "xpack.uptime.pingList.checkHistoryTitle": "Historique", + "xpack.uptime.pingList.columns.failedStep": "Étape ayant échoué", + "xpack.uptime.pingList.drawer.body.docsLink": "documents", + "xpack.uptime.pingList.stepDurationHeader": "Durée de l’étape", + "xpack.uptime.pingList.synthetics.performanceBreakDown": "Afficher la répartition des performances", + "xpack.uptime.pingList.synthetics.waterfall.filters.popover": "Cliquer pour ouvrir les filtres de cascade", + "xpack.uptime.public.pages.mappingError.title": "Mappings Heartbeat manquants", + "xpack.uptime.routes.legacyBaseTitle": "Uptime - Kibana", + "xpack.uptime.settings.heading": "Paramètres Uptime", + "xpack.uptime.snapshot.monitor": "Moniteur", + "xpack.uptime.snapshot.monitors": "Moniteurs", + "xpack.uptime.snapshot.noDataDescription": "Aucun ping dans la plage temporelle sélectionnée.", + "xpack.uptime.snapshot.noDataTitle": "Pas de données ping disponibles", + "xpack.uptime.snapshot.pingsOverTimeTitle": "Pings sur la durée", + "xpack.uptime.snapshotHistogram.series.pings": "Monitorer les pings", + "xpack.uptime.snapshotHistogram.xAxisId": "Axe X des pings", + "xpack.uptime.snapshotHistogram.yAxis.title": "Pings", + "xpack.uptime.snapshotHistogram.yAxisId": "Axe Y des pings", + "xpack.uptime.sourceConfiguration.ageLimit.units.days": "Jours", + "xpack.uptime.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "Entrée contrôlant le nombre maximal de jours pendant lesquels un certificat TLS peut être valide avant que Kibana n'affiche un avertissement.", + "xpack.uptime.sourceConfiguration.alertConnectors": "Connecteurs d'alerte", + "xpack.uptime.sourceConfiguration.alertDefaultForm.requiredEmail": "L'e-mail du destinataire est requis pour le connecteur d'e-mails", + "xpack.uptime.sourceConfiguration.alertDefaults": "Valeurs par défaut des alertes", + "xpack.uptime.sourceConfiguration.applySettingsButtonLabel": "Appliquer les modifications", + "xpack.uptime.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "Entrée contrôlant le nombre minimal de jours restants pour l'expiration du certificat TLS avant que Kibana n'affiche un avertissement.", + "xpack.uptime.sourceConfiguration.certificateThresholdDescription": "Modifiez le seuil pour l'affichage et l'alerting lors d'erreurs de certificat. Remarque : cette action affectera toutes les alertes configurées.", + "xpack.uptime.sourceConfiguration.certificationSectionTitle": "Expiration du certificat", + "xpack.uptime.sourceConfiguration.defaultConnectors.description": "Connecteurs par défaut à utiliser pour envoyer une alerte.", + "xpack.uptime.sourceConfiguration.discardSettingsButtonLabel": "Annuler", + "xpack.uptime.sourceConfiguration.errorStateLabel": "Seuil d'expiration", + "xpack.uptime.sourceConfiguration.expirationThreshold": "Seuils expiration/âge", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDescription": "Modèle d'indexation pour la correspondance d'index contenant des données Heartbeat", + "xpack.uptime.sourceConfiguration.heartbeatIndicesLabel": "Index Heartbeat", + "xpack.uptime.sourceConfiguration.heartbeatIndicesTitle": "Index Uptime", + "xpack.uptime.sourceConfiguration.indicesSectionTitle": "Index", + "xpack.uptime.sourceConfiguration.warningStateLabel": "Limite d'âge", + "xpack.uptime.stepList.collapseRow": "Réduire", + "xpack.uptime.stepList.expandRow": "Développer", + "xpack.uptime.stepList.stepName": "Nom de l'étape", + "xpack.uptime.synthetics.consoleStepList.message": "Ce parcours n'a pas réussi à s'exécuter ; la sortie de la console enregistrée est affichée ci-dessous :", + "xpack.uptime.synthetics.consoleStepList.title": "Aucune étape exécutée", + "xpack.uptime.synthetics.emptyJourney.message.footer": "Aucune autre information à afficher.", + "xpack.uptime.synthetics.emptyJourney.message.heading": "Le parcours ne contenait aucune étape.", + "xpack.uptime.synthetics.emptyJourney.title": "Aucune étape pour ce parcours", + "xpack.uptime.synthetics.executedStep.consoleOutput.label": "Sortie de la console", + "xpack.uptime.synthetics.executedStep.errorHeading": "Message d'erreur", + "xpack.uptime.synthetics.executedStep.screenshot.not": "Capture d'écran", + "xpack.uptime.synthetics.executedStep.scriptHeading.label": "Script exécuté à cette étape", + "xpack.uptime.synthetics.executedStep.stackTrace": "Trace de la Suite Elastic", + "xpack.uptime.synthetics.imageLoadingSpinner.ariaLabel": "Boucle de progression animée indiquant que l'image est en train de se charger", + "xpack.uptime.synthetics.journey.loadingSteps": "Chargement des étapes...", + "xpack.uptime.synthetics.nextStepButton.ariaLabel": "Étape suivante", + "xpack.uptime.synthetics.performanceBreakDown.label": "Répartition des performances", + "xpack.uptime.synthetics.prevStepButton.airaLabel": "Étape précédente", + "xpack.uptime.synthetics.screenshot.loadingImageMessage": "Chargement", + "xpack.uptime.synthetics.screenshot.noImageMessage": "Aucune image disponible", + "xpack.uptime.synthetics.screenshotDisplay.altTextWithoutName": "Capture d'écran", + "xpack.uptime.synthetics.statusBadge.failedMessage": "Échoué", + "xpack.uptime.synthetics.statusBadge.skippedMessage": "Ignoré", + "xpack.uptime.synthetics.statusBadge.succeededMessage": "Réussi", + "xpack.uptime.synthetics.step.durationTrend": "Tendance de durée de l'étape", + "xpack.uptime.synthetics.stepDetail.noData": "Aucune donnée n'a été trouvée pour cette étape", + "xpack.uptime.synthetics.stepList.nextCheck": "Vérification suivante", + "xpack.uptime.synthetics.stepList.previousCheck": "Vérification précédente", + "xpack.uptime.synthetics.thumbnail.fullSize.alt": "Version plus grande de la capture d'écran de la miniature de l'étape du parcours.", + "xpack.uptime.title": "Uptime", + "xpack.uptime.toggleTlsAlertButton.ariaLabel": "Ouvrir le menu volant de règle TLS", + "xpack.uptime.toggleTlsAlertButton.content": "Règle TLS", "xpack.threatIntelligence.common.emptyPage.body3": "Pour vous lancer avec Elastic Threat Intelligence, activez une ou plusieurs intégrations Threat Intelligence depuis la page Intégrations ou bien ingérez des données avec Filebeat. Pour en savoir plus, consultez {docsLink}.", "xpack.threatIntelligence.addToBlockList": "Ajouter une entrée dans la liste noire", "xpack.threatIntelligence.addToExistingCase": "Ajouter à un cas existant", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 056c884cdf2f6..0a31077bc0905 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -35418,34 +35418,18 @@ "xpack.synthetics.alertRules.monitorStatus.reasonMessage": "{location}からのモニター\"{name}\"は{status}です。確認:{checkedAt}。", "xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "{monitor}で{anomalyStartTimestamp}で{monitorUrl}のurlで異常な({severity}レベル)応答時間を検出しました。異常重要度スコアは{severityScore}です。\n{observerLocation}の位置から{slowestAnomalyResponse}の高い応答時間が検出されています。想定応答時間は{expectedResponseTime}です。", "xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "{anomalyStartTimestamp}の{observerLocation}地点から{monitorUrl}のモニター{monitor}で検出された応答時間異常({severity}レベル)のアラートが回復しました", - "xpack.synthetics.alerts.monitorExpression.label": "フィルター{title}を削除", - "xpack.synthetics.alerts.monitorStatus.actionVariables.down": "は、過去{interval}回のうち{count}回失敗しています。> {numTimes}のときにアラートを通知します。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} {availabilityBreachMessage}", "xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "{monitorName} を {observerLocation} から {monitorUrl} のurlで監視する {statusMessage} 最新のエラーメッセージは {latestErrorMessage} で、{checkedAt} で確認", "xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "{observerLocation}から{monitorUrl}のurlを持つモニター{monitorName}に対するアラートが回復しました", "xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "URL {monitorUrl}のモニター\"{monitorName}\"が回復しました", "xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "url {monitorUrl}のモニタ{monitorName}がダウンしています", - "xpack.synthetics.alerts.monitorStatus.monitorCallOut.title": "このアラートは約{snapshotCount}個のモニターに適用されます。", - "xpack.synthetics.alerts.monitorStatus.reasonMessage": "{location}から「{name}」をモニター、{status}、{checkedAt}で確認します。", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.value": "最後の{value}", "xpack.synthetics.alerts.tls.defaultActionMessage": "発行者{issuer}のTLS証明書{commonName}が{status}であることを検出しました。証明書{summary}", "xpack.synthetics.alerts.tls.defaultRecoveryMessage": "発行者{issuer}のTLS証明書{commonName}のアラートが回復しました", "xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "期限切れになるか古くなりすぎた{count}個のTLS証明書証明書を検知しました。\n{expiringConditionalOpen}\n有効期限切れになる証明書件数:{expiringCount}\n有効期限切れになる証明書:{expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\n古い証明書件数:{agingCount}\n古い証明書:{agingCommonNameAndDate}\n{agingConditionalClose}\n", - "xpack.synthetics.alerts.tls.validAfterExpiredString": "{date}に有効期限切れ、{relativeDate}日前。", - "xpack.synthetics.alerts.tls.validAfterExpiringString": "{relativeDate}日後の{date}に有効期限切れになります。", - "xpack.synthetics.alerts.tls.validBeforeExpiredString": "{date}以降有効、{relativeDate}日前。", - "xpack.synthetics.alerts.tls.validBeforeExpiringString": "{date}まで有効、今から{relativeDate}日間。", - "xpack.synthetics.availabilityLabelText": "{value} %", "xpack.synthetics.certificates.heading": "TLS証明書({total})", "xpack.synthetics.certificatesRoute.title": "証明書 | {baseTitle}", "xpack.synthetics.certs.status.ok.label": " {okRelativeDate}", - "xpack.synthetics.charts.mlAnnotation.header": "スコア:{score}", - "xpack.synthetics.charts.mlAnnotation.severity": "重要度:{severity}", - "xpack.synthetics.controls.selectSeverity.scoreDetailsDescription": "スコア{value}以上", "xpack.synthetics.createMonitorRoute.title": "監視の作成 | {baseTitle}", "xpack.synthetics.createPackagePolicy.stepConfigure.browserAdvancedSettings.throttling.throttling_exceeded.message": "Syntheticsノードの{throttlingField}上限を超えました。{throttlingField}値を{limit}Mbpsより大きくすることはできません。", - "xpack.synthetics.deprecateNoticeModal.forMoreInformation": "詳細については、{docsLink}", - "xpack.synthetics.durationChart.emptyPrompt.description": "このモニターは選択された時間範囲で一度も {emphasizedText} していません。", "xpack.synthetics.editMonitorRoute.title": "モニターを編集 | {baseTitle}", "xpack.synthetics.errorDetails.errorDuration.days": "{value}日", "xpack.synthetics.errorDetails.errorDuration.hours": "{value}時間", @@ -35458,7 +35442,6 @@ "xpack.synthetics.gettingStarted.createLocationDescription": "モニターの作成を開始するには、まず{link}を作成する必要があります。非公開の場所では、独自の施設からモニターを実行できます。Fleet経由で制御および保守できるElasticエージェントとエージェントポリシーが必要です。", "xpack.synthetics.gettingStarted.publicLocationDescription": "{link}では{elasticManagedLink}も使用できます。それを使用すると、独自のインフラを管理せずに、複数の場所でモニターを作成して実行できます。ソフトウェア更新と能力計画はElasticによって行われます。", "xpack.synthetics.gettingStartedRoute.title": "Syntheticsの基本 | {baseTitle}", - "xpack.synthetics.integration.deprecation.content": "Elastic Synthetics統合を使用して、少なくとも1つのモニターが設定されています。Elastic 8.8以降、統合は非推奨となり、これらのモニターを編集することはできません。プロジェクトモニターに移行するか、オブザーバビリティで直接利用できる新しいSyntheticsアプリに追加してください。詳細は{link}をご覧ください。", "xpack.synthetics.keyValuePairsField.deleteItem.label": "アイテム番号{index}を削除、{key}:{value}", "xpack.synthetics.lastUpdated.label": "{updatedDate}を更新しました", "xpack.synthetics.management.filter.clickTypeMessage": "クリックして、タイプ{typeName}のレコードをフィルタリングします。", @@ -35471,11 +35454,8 @@ "xpack.synthetics.management.monitorList.recordRange": "{total} {monitorsLabel}件中{range}を表示中", "xpack.synthetics.management.monitorList.recordRangeLabel": "{monitorCount, plural, other {監視}}", "xpack.synthetics.management.monitorList.recordTotal": "{total} {monitorsLabel}を表示中", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "ジョブの作成後、{mlJobsPageLink} で管理と詳細の確認ができます。", "xpack.synthetics.monitor.stepOfSteps": "ステップ:{stepNumber}/{totalSteps}", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile": "({download} Mbps, {upload} Mbps, {latency}ミリ秒)", - "xpack.synthetics.monitorCharts.durationChart.leftAxis.title": "期間({unit})", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabelWithAnomaly": "監視期間(異常:{noOfAnomalies})", "xpack.synthetics.monitorConfig.monitorScriptEditStep.description": "Elastic Synthetics Recorderを使用して、スクリプトを生成してアップロードします。あるいは、スクリプトエディターで、既存の{playwright}スクリプトを編集(または新規貼り付け)することもできます。", "xpack.synthetics.monitorConfig.monitorScriptStep.description": "Elastic Synthetics Recorderを使用して、スクリプトを生成してアップロードします。あるいは、スクリプトエディターで、独自の{playwright}スクリプトを作成して、貼り付けることができます。", "xpack.synthetics.monitorConfig.params.helpText": "JSONを使用して、{paramsValue}のスクリプトで参照できるパラメーターを定義します", @@ -35491,33 +35471,8 @@ "xpack.synthetics.monitorErrors.title": "Syntheticsモニターエラー | {baseTitle}", "xpack.synthetics.monitorFilters.frequencyLabel": "{count}分ごと", "xpack.synthetics.monitorHistory.title": "Syntheticsモニター履歴 | {baseTitle}", - "xpack.synthetics.monitorList.defineConnector.description": "{link}でデフォルトコネクターを定義し、モニターステータスアラートを有効にします。", - "xpack.synthetics.monitorList.drawer.missingLocation": "一部のHeartbeatインスタンスには位置情報が定義されていません。Heartbeat構成への{link}。", - "xpack.synthetics.monitorList.drawer.statusRowLocationList": "前回の確認時に\"{status}\"ステータスだった場所のリスト。", - "xpack.synthetics.monitorList.expandDrawerButton.ariaLabel": "ID {id}のモニターの行を展開", "xpack.synthetics.monitorList.flyout.unitStr": "{unitMsg}毎", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.tooltip": "コンテナーID「{containerId}」のインフラストラクチャUIを確認します", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.tooltip": "IP「{ip}」のインフラストラクチャUIを確認します", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.tooltip": "ポッドUID「{podUid}」のインフラストラクチャUIを確認します。", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.tooltip": "コンテナーID「{containerId}」のロギングUIを確認します", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.tooltip": "IP \"{ip}\"のロギングUIを確認", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.tooltip": "ポッドUID「{podUid}」のログを確認します", - "xpack.synthetics.monitorList.monitorType.filter": "タイプ{type}ですべての監視をフィルター", - "xpack.synthetics.monitorList.mostRecentError.title": "最近のエラー({timestamp})", - "xpack.synthetics.monitorList.noDownHistory": "このモニターは選択された時間範囲で一度も {emphasizedText} していません。", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "ここをクリックすると、APMのドメイン「{domain}」、または明示的に定義された「サービス名」を確認します。", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "URL {monitorUrl}で監査のための統合ポップオーバーを開く", - "xpack.synthetics.monitorList.pageSizePopoverButtonText": "ページごとの行数:{size}", - "xpack.synthetics.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows}行", "xpack.synthetics.monitorList.redirects.description": "Pingの実行中にHeartbeatは{number}リダイレクトに従いました。", - "xpack.synthetics.monitorList.redirects.title.number": "{number}", - "xpack.synthetics.monitorList.statusColumn.checkedTimestamp": "確認:{timestamp}", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage": "{noLoc}場所", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.multiple": "{noLoc}場所", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.down": "{locs}でダウン", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.up": "{locs}でアップ", - "xpack.synthetics.monitorList.table.description": "列にステータス、名前、URL、IP、ダウンタイム履歴、統合が入力されたモニターステータス表です。この表は現在 {length} 項目を表示しています。", - "xpack.synthetics.monitorList.tags.filter": "タグ{tag}ですべての監視をフィルター", "xpack.synthetics.monitorManagement.agentCallout.content": "このプライベートロケーションで「Browser」モニターを実行するには、必ず{code} Dockコンテナーを使用してください。これには、これらのモニターを実行するために必要な依存関係が含まれています。詳細については、{link}。", "xpack.synthetics.monitorManagement.agentMissingCallout.content": "エージェントが関連付けられていないエージェントポリシーを選択しました。1つ以上のエージェントがこのポリシーに登録されていることを確認してください。場所を作成する前か後に、エージェントを追加できます。詳細については、{link}。", "xpack.synthetics.monitorManagement.anotherPrivateLocation": "このエージェントポリシーは、すでに次の場所に関連付けられています:{locationName}。", @@ -35536,16 +35491,12 @@ "xpack.synthetics.monitorManagement.viewMonitors": "場所\"{name}\"では{count, number}個の{count, plural, other {モニター}}が実行されています。", "xpack.synthetics.monitorManagementRoute.title": "モニター管理 | {baseTitle}", "xpack.synthetics.monitorNotFound.title": "Syntheticsモニターが見つかりません | {baseTitle}", - "xpack.synthetics.monitorRoute.title": "モニター | {baseTitle}", - "xpack.synthetics.monitorStatusBar.locations.oneLocStatus": "{loc}場所で{status}", - "xpack.synthetics.monitorStatusBar.locations.upStatus": "{loc}場所で{status}", "xpack.synthetics.overview.actions.disabledSuccessLabel": "モニター\"{name}\"は正常に無効にされました。", "xpack.synthetics.overview.actions.disabledSuccessLabel.alert": "モニター「{name}」に対するアラートが無効化されました。", "xpack.synthetics.overview.actions.enabledFailLabel": "モニター\"{name}\"を更新できません。", "xpack.synthetics.overview.actions.enabledFailLabel.alert": "モニター「{name}」のステータスアラートを有効にすることができません。", "xpack.synthetics.overview.actions.enabledSuccessLabel": "モニター\"{name}\"は正常に有効にされました", "xpack.synthetics.overview.actions.enabledSuccessLabel.alert": "モニター「{name}」に対するアラートが有効化されました。", - "xpack.synthetics.overview.alerts.enabled.success.description": "この監視が停止しているときには、メッセージが{actionConnectors}に送信されます。", "xpack.synthetics.overview.duration.description.values": "平均:{avg}、最小:{min}、最大:{max}", "xpack.synthetics.overview.durationMsFormatting": "{millis} ms", "xpack.synthetics.overview.durationMsFormattingNoSpace": "{millis}ms", @@ -35557,18 +35508,12 @@ "xpack.synthetics.paramManagement.paramDeleteFailuresMessage.name": "パラメータ{name}が正常に削除されました。", "xpack.synthetics.paramManagement.paramDeleteSuccessMessage.name": "パラメータ{name}が正常に削除されました。", "xpack.synthetics.params.description": "ブラウザーや軽量モニターの設定に使用できる変数やパラメーター(認証情報やURLなど)を定義します。{learnMore}", - "xpack.synthetics.pingist.durationSecondsColumnFormatting": "{seconds}秒", - "xpack.synthetics.pingist.durationSecondsColumnFormatting.singular": "{seconds}秒", - "xpack.synthetics.pingList.durationMsColumnFormatting": "{millis} ms", "xpack.synthetics.pingList.expandedRow.bodySize": "本文サイズは{bodyBytes}です。", - "xpack.synthetics.pingList.expandedRow.response_body.notRecorded": "本文が記録されていません。応答本文の記録に関する詳細は、{docsLink}をお読みください。", "xpack.synthetics.pingList.expandedRow.truncated": "初めの{contentBytes}バイトを表示中。", "xpack.synthetics.pingList.recencyMessage": "確認:{fromNow}", "xpack.synthetics.project.readOnly.callout.content": "この監視は外部プロジェクトから追加されました:{projectId}。このページからは、有効化、無効化、削除のみが可能です。設定を変更するためには、そのソースファイルを編集し、そのプロジェクトから再度プッシュする必要があります。", "xpack.synthetics.projectMonitorApi.validation.invalidUrlOrHosts.description": "`{monitorType}`プロジェクトのモニターは、バージョン`{version}`の`{key}`フィールドに正確に1つの値を持つ必要があります。モニターが作成、更新されていません。", "xpack.synthetics.prompt.errors.notFound.body": "申し訳ありませんが、id {monitorId}のモニターが見つかりません。削除されたか、表示権限がない可能性があります。", - "xpack.synthetics.public.pages.mappingError.bodyDocsLink": "この問題のトラブルシューティングについては、{docsLink}を参照してください。", - "xpack.synthetics.public.pages.mappingError.bodyMessage": "正しくないマッピングが検出されました。Heartbeat {setup}コマンドを実行していない可能性があります。", "xpack.synthetics.server.projectMonitors.invalidPrivateLocationError": "非公開の場所\"{location}\"が無効です。削除するか、有効な非公開の場所で置換してください。", "xpack.synthetics.server.projectMonitors.invalidPublicLocationError": "場所\"{location}\"が無効です。削除するか、有効な場所で置換してください。", "xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentTypeDetails": "タイプ{previousType}のモニター{monitorId}はタイプ{currentType}に更新することができません。最初にモニターを削除して再試行してください。", @@ -35576,37 +35521,19 @@ "xpack.synthetics.settingsRoute.retentionCalloutDescription": "データ保持設定を変更するには、インデックスのライフサイクルポリシーを作成し、{stackManagement}で関連するカスタムコンポーネントテンプレートに関連付けることをお勧めします。詳細については、{docsLink}。", "xpack.synthetics.settingsRoute.table.retentionPeriodValue": "{value}日 + ロールーバー", "xpack.synthetics.settingsRoute.title": "設定 | {baseTitle}", - "xpack.synthetics.snapshot.donutChart.ariaLabel": "現在のステータスを表す円グラフ、{total} 個中 {down} 個のモニターがダウンしています。", - "xpack.synthetics.snapshotHistogram.description": "{startTime} から {endTime} までの期間のアップタイムステータスを表示する棒グラフです。", - "xpack.synthetics.sourceConfiguration.ageThresholdDefaultValue": "デフォルト値は{defaultValue}です", "xpack.synthetics.sourceConfiguration.alertDefaultForm.invalidEmail": "{val}は有効な電子メールアドレスではありません。", - "xpack.synthetics.sourceConfiguration.expirationThresholdDefaultValue": "デフォルト値は{defaultValue}です", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDefaultValue": "デフォルト値は{defaultValue}です", "xpack.synthetics.step.duration.label": "{value}後", - "xpack.synthetics.stepDetailRoute.title": "Synthetics詳細 | {baseTitle}", "xpack.synthetics.stepDetails.palette.decreased": "{delta}%低い", "xpack.synthetics.stepDetails.palette.increased": "{delta}%高い", "xpack.synthetics.stepDetails.palette.previous": "中間(24時間):{previous}", "xpack.synthetics.stepDetails.palette.tooltip": "値は過去24時間における以前のステップと比較された{deltaLabel}です。", "xpack.synthetics.stepDetails.palette.tooltip.label": "値は過去24時間のステップと比較された{deltaLabel}です。", "xpack.synthetics.stepDetailsRoute.title": "ステップ詳細 | {baseTitle}", - "xpack.synthetics.synthetics.emptyJourney.message.checkGroupField": "ジャーニーのチェックグループは{codeBlock}です。", - "xpack.synthetics.synthetics.executedStep.screenshot.notSucceeded": "{status}チェックのスクリーンショット", "xpack.synthetics.synthetics.executedStep.screenshot.successfulLink": "{link}からのスクリーンショット", - "xpack.synthetics.synthetics.journey.allFailedMessage": "{total}ステップ - すべて失敗またはスキップされました", - "xpack.synthetics.synthetics.journey.allSucceededMessage": "{total}ステップ - すべて成功しました", - "xpack.synthetics.synthetics.journey.partialSuccessMessage": "{total}ステップ - {succeeded}成功しました", - "xpack.synthetics.synthetics.pingTimestamp.captionContent": "ステップ:{stepNumber}/{totalSteps}", - "xpack.synthetics.synthetics.screenshotDisplay.altText": "名前\"{stepName}\"のステップのスクリーンショット", - "xpack.synthetics.synthetics.step.duration": "{value}秒", "xpack.synthetics.synthetics.stepDetail.stepNumber": "ステップ{stepIndex}", "xpack.synthetics.synthetics.stepDetail.totalSteps": "ステップ{stepIndex}/{totalSteps}", "xpack.synthetics.synthetics.testDetail.totalSteps": "ステップ{stepIndex}/{totalSteps}", "xpack.synthetics.synthetics.testDetails.stepNav": "{stepIndex} / {totalSteps}", - "xpack.synthetics.synthetics.waterfall.offsetUnit": "{offset} ms", - "xpack.synthetics.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests}がフィルターと一致します)", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests}件のネットワークリクエスト", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage.first": "最初の{count}件", "xpack.synthetics.tableTitle.showing": "{total} {label}件中{count}を表示中", "xpack.synthetics.tagsList.filter": "クリックして、タグ{tag}を使用して一覧をフィルターします", "xpack.synthetics.testRun.runErrorLocation.reason": "場所{locationName}でモニターを実行できませんでした。{reason}", @@ -35614,12 +35541,10 @@ "xpack.synthetics.waterfall.networkRequests.count": "{total} {networkRequestsLabel}件中{countShown}を表示中", "xpack.synthetics.waterfall.networkRequests.pluralizedCount": "{total, plural, other {ネットワークリクエスト}}", "xpack.synthetics.active.label": "アクティブ", - "xpack.synthetics.addDataButtonLabel": "データの追加", "xpack.synthetics.addEditMonitor.scriptEditor.ariaLabel": "JavaScriptコードエディター", "xpack.synthetics.addEditMonitor.scriptEditor.helpText": "インラインで定義されたSyntheticテストスクリプトを実行します。", "xpack.synthetics.addEditMonitor.scriptEditor.label": "スクリプトエディター", "xpack.synthetics.addEditMonitor.scriptEditor.placeholder": "// ここにPlaywrightスクリプトを貼り付け...", - "xpack.synthetics.alertDropdown.noWritePermissions": "このアプリでアラートを作成するには、アップタイムへの読み書きアクセス権が必要です。", "xpack.synthetics.alerting.noConnectorsCallout.button": "今すぐ構成", "xpack.synthetics.alerting.noConnectorsCallout.content": "アラートが有効なモニターがありますが、それらのアラートを送信するようにデフォルトコネクターが構成されていません。", "xpack.synthetics.alerting.noConnectorsCallout.header": "アラートが送信されていません", @@ -35647,140 +35572,30 @@ "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.monitorUrl": "モニターのURL。", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.observerHostname": "チェックが実行される場所のホスト名。", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.status": "監視ステータス(例:「ダウン」)。", - "xpack.synthetics.alerts.anomaly.criteriaExpression.ariaLabel": "選択したモニターの条件を表示する式。", - "xpack.synthetics.alerts.anomaly.criteriaExpression.description": "監視するとき", - "xpack.synthetics.alerts.anomaly.scoreExpression.ariaLabel": "異常アラートしきい値の条件を表示する式。", - "xpack.synthetics.alerts.anomaly.scoreExpression.description": "異常と重要度があります", - "xpack.synthetics.alerts.createRulesPanel.title": "ルールを作成", - "xpack.synthetics.alerts.durationAnomaly": "アップタイム期間異常", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "異常の開始のISO8601タイムスタンプ", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "想定応答時間", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitor": "名前、IDS、優先名の人間にとってわかりやすい表示(My Monitorなど)", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorId": "モニターのID。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorUrl": "モニターのURL。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.observerLocation": "Heartbeatチェックが実行されるオブサーバーの位置情報。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severity": "異常の重要度。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severityScore": "異常重要度スコア。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "単位(ミリ秒、秒)が関連付けられた異常バケット中の最も遅い応答時間。", "xpack.synthetics.alerts.durationAnomaly.clientName": "アップタイム期間異常", "xpack.synthetics.alerts.durationAnomaly.description": "アップタイム監視期間が異常なときにアラートを発行します。", - "xpack.synthetics.alerts.monitorStatus": "稼働状況の監視ステータス", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "このアラートに関連する詳細とコンテキストを示すElastic内のビューへのリンク", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "アラートの理由の簡潔な説明", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.message.description": "現在ダウンしているモニターを要約する生成されたメッセージ。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "アラートとコンテキストを調査するために使用できる、Elastic内のビューまたは機能へのリンク", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.checkedAt": "モニターチェックのタイムスタンプ。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "アラートがトリガーされた場合、現在のトリガー状態が開始するときを示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "このアラートが最初に確認されるときを示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "このアラートが最初にトリガーされたときを示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.isTriggered": "アラートが現在トリガーしているかどうかを示すフラグ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "アラートの直近の確認時刻を示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "最新のエラーメッセージを監視", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "このアラートの直近の解決を示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "アラートの直近のトリガー時刻を示すタイムスタンプ", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitor": "名前、IDS、優先名の人間にとってわかりやすい表示(My Monitorなど)", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorId": "モニターのID。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorType": "モニターのタイプ(HTTP/TCPなど)。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorUrl": "モニターのURL。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerHostname": "Heartbeatチェックが実行されるオブザーバーのホスト名。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerLocation": "Heartbeatチェックが実行されるオブザーバーの位置情報。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.statusMessage": "ステータスメッセージ。例:停止、または可用性チェックの場合は可用性しきい値未満、あるいは両方", - "xpack.synthetics.alerts.monitorStatus.addFilter": "フィルターを追加します", - "xpack.synthetics.alerts.monitorStatus.addFilter.location": "場所", - "xpack.synthetics.alerts.monitorStatus.addFilter.port": "ポート", - "xpack.synthetics.alerts.monitorStatus.addFilter.tag": "タグ", - "xpack.synthetics.alerts.monitorStatus.addFilter.type": "型", - "xpack.synthetics.alerts.monitorStatus.availability.isEnabledCheckbox.label": "可用性", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "任意のモニターがアップ", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.ariaLabel": "このアラートの可用性しきい値を指定", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.description": "一致するモニターがアップしています", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.input.ariaLabel": "このアラートで確認する可用性しきい値を入力", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "アラートの可用性チェックの時間単位の数を入力", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.expression": "最後内", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "可用性追跡時間範囲を指定", - "xpack.synthetics.alerts.monitorStatus.availability.unit.headline": "時間範囲単位を選択します", - "xpack.synthetics.alerts.monitorStatus.availability.unit.selectable": "この選択を使用して、このアラートの可用性範囲単位を設定", "xpack.synthetics.alerts.monitorStatus.clientName": "稼働状況の監視ステータス", "xpack.synthetics.alerts.monitorStatus.description": "監視が停止しているか、可用性しきい値に違反したときにアラートを発行します。", "xpack.synthetics.alerts.monitorStatus.downLabel": "ダウン", - "xpack.synthetics.alerts.monitorStatus.filterBar.ariaLabel": "監視状態アラートのフィルター基準を許可するインプット", - "xpack.synthetics.alerts.monitorStatus.filters.anyLocation": "任意の場所", - "xpack.synthetics.alerts.monitorStatus.filters.anyPort": "任意のポート", - "xpack.synthetics.alerts.monitorStatus.filters.anyTag": "任意のタグ", - "xpack.synthetics.alerts.monitorStatus.filters.anyType": "任意のタイプ", - "xpack.synthetics.alerts.monitorStatus.filters.from": "開始:", - "xpack.synthetics.alerts.monitorStatus.filters.fromLocation": "開始場所", - "xpack.synthetics.alerts.monitorStatus.filters.location.label": "アラートのクエリに適用する場所フィルターを選択します。", - "xpack.synthetics.alerts.monitorStatus.filters.of": "/", - "xpack.synthetics.alerts.monitorStatus.filters.ofType": "型", - "xpack.synthetics.alerts.monitorStatus.filters.port.label": "アラートのクエリに適用するポートフィルターを選択します。", - "xpack.synthetics.alerts.monitorStatus.filters.scheme.label": "アラートのクエリに適用するプロトコルスキームフィルターを選択します。", - "xpack.synthetics.alerts.monitorStatus.filters.tag.label": "アラートのクエリに適用するタグフィルターを選択します。", - "xpack.synthetics.alerts.monitorStatus.filters.using": "使用", - "xpack.synthetics.alerts.monitorStatus.filters.usingPort": "ポートを使用", - "xpack.synthetics.alerts.monitorStatus.filters.with": "使用", - "xpack.synthetics.alerts.monitorStatus.filters.withTag": "タグを使用", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "任意のモニターがダウン >=", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.ariaLabel": "ダウンカウントインプットのポップオーバーを開く", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "一致するモニターがダウン >=", - "xpack.synthetics.alerts.monitorStatus.numTimesField.ariaLabel": "アラートのトリガーに必要な停止回数を入力します", - "xpack.synthetics.alerts.monitorStatus.oldAlertCallout.title": "古いアラートを編集している可能性があります。一部のフィールドは自動入力されない場合があります。", - "xpack.synthetics.alerts.monitorStatus.statusEnabledCheck.label": "ステータス確認", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.days": "日", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.hours": "時間", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.minutes": "分", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.months": "か月", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.seconds": "秒", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.weeks": "週間", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.years": "年", - "xpack.synthetics.alerts.monitorStatus.timerangeSelectionHeader": "時間範囲単位を選択します", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "時間範囲単位選択フィールドのポップオーバーを開く", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitSelectable": "アラートで使用する時間範囲単位の選択可能フィールド", - "xpack.synthetics.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "時間範囲値フィールドのポップオーバーを開く", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.ariaLabel": "アラートの範囲のための時間単位の数を入力してください", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.expression": "within", "xpack.synthetics.alerts.searchPlaceholder.kql": "KQL構文を使用してフィルタリング", "xpack.synthetics.alerts.settings.addConnector": "コネクターの追加", "xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "監視ステータス", "xpack.synthetics.alerts.syntheticsMonitorStatus.description": "モニターがダウンしているときにアラートを通知します。", - "xpack.synthetics.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "「日」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "「時間」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "「分」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "「月」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "「秒」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "「週」の時間範囲選択項目", - "xpack.synthetics.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "「年」の時間範囲選択項目", - "xpack.synthetics.alerts.tls": "アップタイムTLS", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCommonNameAndDate": "検出された証明書の共通名と有効期限日時。", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCount": "検出された古くなりすぎた証明書数。", - "xpack.synthetics.alerts.tls.actionVariables.state.count": "アラート実行によって検出された証明書数", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "検出された証明書の共通名と有効期限日時", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCount": "アラートによって検出された期限切れになる証明書数", - "xpack.synthetics.alerts.tls.agingLabel": "古すぎます", "xpack.synthetics.alerts.tls.clientName": "アップタイムTLS", - "xpack.synthetics.alerts.tls.criteriaExpression.ariaLabel": "このアラートで監視されるモニターの条件を示す式", "xpack.synthetics.alerts.tls.criteriaExpression.description": "タイミング", "xpack.synthetics.alerts.tls.description": "アップタイム監視の TLS 証明書の有効期限が近いときにアラートを発行します。", - "xpack.synthetics.alerts.tls.expiredLabel": "期限切れ", - "xpack.synthetics.alerts.tls.expiringLabel": "まもなく期限切れ", - "xpack.synthetics.alerts.tls.invalidLabel": "無効", "xpack.synthetics.alerts.tls.legacy.clientName": "アップタイムTLS(レガシー)", "xpack.synthetics.alerts.tls.legacy.description": "アップタイム監視の TLS 証明書の有効期限が近いときにアラートを発行します。このアラートは将来のバージョンで廃止予定です。", - "xpack.synthetics.alerts.tlsLegacy": "アップタイムTLS(レガシー)", "xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "アラートとルール", - "xpack.synthetics.alertsPopover.toggleButton.ariaLabel": "アラートおよびルールコンテキストメニューを開く", "xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "アラートおよびルールメニューを開く", "xpack.synthetics.analyzeDataButtonLabel": "データの探索", "xpack.synthetics.analyzeDataButtonLabel.message": "データの探索では、任意のディメンションの結果データを選択してフィルタリングし、パフォーマンスの問題の原因または影響を調査することができます。", - "xpack.synthetics.apmIntegrationAction.description": "このモニターの検索 APM", - "xpack.synthetics.apmIntegrationAction.text": "APMデータを表示", "xpack.synthetics.app.navigateToAlertingButton.content": "ルールの管理", "xpack.synthetics.app.navigateToAlertingUi": "Syntheticsを離れてアラート管理ページに移動します", "xpack.synthetics.app.testNow.available.private": "非公開の場所では手動でテストを開始できません。", "xpack.synthetics.badge.readOnly.text": "読み取り専用", "xpack.synthetics.badge.readOnly.tooltip": "を保存できませんでした", "xpack.synthetics.blocked": "ブロック", - "xpack.synthetics.breadcrumbs.legacyOverviewBreadcrumbText": "アップタイム", "xpack.synthetics.breadcrumbs.observabilityText": "Observability", "xpack.synthetics.breadcrumbs.overviewBreadcrumbText": "Synthetics", "xpack.synthetics.certificates.loading": "証明書を読み込んでいます...", @@ -35814,10 +35629,6 @@ "xpack.synthetics.connectionProfile.noThrottling": "スロットルなし", "xpack.synthetics.connectionProfile.threeG": "3G", "xpack.synthetics.contentSize": "コンテンツサイズ", - "xpack.synthetics.controls.selectSeverity.criticalLabel": "致命的", - "xpack.synthetics.controls.selectSeverity.majorLabel": "メジャー", - "xpack.synthetics.controls.selectSeverity.minorLabel": "マイナー", - "xpack.synthetics.controls.selectSeverity.warningLabel": "警告", "xpack.synthetics.coreVitals.cls.help": "累積レイアウト変更(CLS):視覚的な安定性を計測します。優れたユーザーエクスペリエンスを実現するには、ページのCLSを0.1未満に保ってください。", "xpack.synthetics.coreVitals.dclTooltip": "ブラウザーでドキュメントの解析が完了するとトリガーされます。複数のリスナーがあるとき、またはロジックが実行されるときに役立ちます:domContentLoadedEventEnd - domContentLoadedEventStart。", "xpack.synthetics.coreVitals.fcpTooltip": "初回コンテンツの描画(FCP)は初期のレンダリングに集中し、ページの読み込みが開始してから、ページのコンテンツのいずれかの部分が画面に表示されるときまでの時間を測定します。", @@ -35853,15 +35664,6 @@ "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.always": "常に実行", "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.onError": "エラー時", "xpack.synthetics.dcl.label": "DCL", - "xpack.synthetics.deprecateNoticeModal.addPrivateLocations": "Fleetポリシーに対して非公開の場所を追加", - "xpack.synthetics.deprecateNoticeModal.automateMonitors": "プロジェクトモニターを使用してモニターの作成を自動化", - "xpack.synthetics.deprecateNoticeModal.description": "Elastic Synthetics統合は廃止予定です。その代わり、エンドポイント、ページ、ユーザージャーニーをSyntheticsアプリから直接監視できるようになり、より効率的になりました:", - "xpack.synthetics.deprecateNoticeModal.elasticManagedLocations": "Elasticが管理する複数の場所で、またはお客様の非公開の場所からモニターを実行", - "xpack.synthetics.deprecateNoticeModal.goBack": "戻る", - "xpack.synthetics.deprecateNoticeModal.goToSynthetics": "Syntheticsに移動", - "xpack.synthetics.deprecateNoticeModal.headerText": "SyntheticsでSynthetic Monitoringがすぐに使えるようになりました", - "xpack.synthetics.deprecateNoticeModal.manageMonitors": "軽量化とブラウザーモニターの一元管理", - "xpack.synthetics.deprecateNoticeModal.readDocs": "ドキュメントをお読みください。", "xpack.synthetics.detailsPanel.alerts": "アラート", "xpack.synthetics.detailsPanel.alerts.active": "アクティブ", "xpack.synthetics.detailsPanel.alerts.recovered": "回復済み", @@ -35877,7 +35679,6 @@ "xpack.synthetics.detailsPanel.summary": "まとめ", "xpack.synthetics.detailsPanel.toDate": "終了日", "xpack.synthetics.dns": "DNS", - "xpack.synthetics.durationChart.emptyPrompt.title": "利用可能な期間データがありません", "xpack.synthetics.durationTrend.max": "最高", "xpack.synthetics.durationTrend.median": "中央", "xpack.synthetics.durationTrend.min": "最低", @@ -35885,14 +35686,9 @@ "xpack.synthetics.durationTrend.percentile75": "75番目", "xpack.synthetics.editMonitor.errorDetailsRoute.title": "詳細を入力", "xpack.synthetics.editMonitor.pageHeader.title": "モニターを編集", - "xpack.synthetics.editPackagePolicy.inSynthetics": "Syntheticsで編集", - "xpack.synthetics.editPackagePolicy.inSyntheticsDesc": "このパッケージポリシーは、Syntheticsアプリで管理されます。", "xpack.synthetics.emptyState.enablement.disabledDescription": "Syntheticsアプリは現在無効です。Syntheticsアプリでは、世界中のホスティングされたテスト場所から軽量でリアルなブラウザーモニターを実行できます。Syntheticsアプリを有効にするには、管理者に連絡してください。", - "xpack.synthetics.emptyState.loadingMessage": "読み込み中…", "xpack.synthetics.emptyStateError.notAuthorized": "アップタイムデータの表示が承認されていません。システム管理者にお問い合わせください。", - "xpack.synthetics.emptyStateError.notFoundPage": "ページが見つかりません", "xpack.synthetics.emptyStateError.title": "エラー", - "xpack.synthetics.enableAlert.editAlert": "アラートを編集", "xpack.synthetics.errorDetails.errorDuration": "エラー期間", "xpack.synthetics.errorDetails.label": "詳細を入力", "xpack.synthetics.errorDetails.resolvedAt": "解決済み", @@ -35917,14 +35713,6 @@ "xpack.synthetics.fieldLabels.fcp": "初回コンテンツの描画(FCP)", "xpack.synthetics.fieldLabels.lcp": "最大コンテンツの描画(LCP)", "xpack.synthetics.fieldLabels.transferSize": "transferSizeプロパティは、取得したリソースのサイズを表します。サイズには応答ヘッダーフィールドと応答ペイロードボディが含まれます", - "xpack.synthetics.filterBar.ariaLabel": "概要ページのインプットフィルター基準", - "xpack.synthetics.filterBar.filterAllLabel": "すべて", - "xpack.synthetics.filterBar.options.location.name": "場所", - "xpack.synthetics.filterBar.options.portLabel": "ポート", - "xpack.synthetics.filterBar.options.schemeLabel": "スキーム", - "xpack.synthetics.filterBar.options.tagsLabel": "タグ", - "xpack.synthetics.fleetIntegration.assets.description": "Syntheticsでモニターを表示", - "xpack.synthetics.fleetIntegration.assets.name": "監視", "xpack.synthetics.gettingStarted.createLocationHeading": "Synthetic Monitoringの基本", "xpack.synthetics.gettingStarted.createLocationLabel": "場所を作成", "xpack.synthetics.gettingStarted.createSingle.description": " Elastic Synthetics Monitoringの開始。", @@ -35939,21 +35727,14 @@ "xpack.synthetics.historyPanel.durationTrends": "期間傾向", "xpack.synthetics.historyPanel.stats": "統計", "xpack.synthetics.inspectButtonText": "検査", - "xpack.synthetics.integration.deprecation.dismiss": "閉じる", - "xpack.synthetics.integration.deprecation.link": "Synthetics移行ドキュメント", - "xpack.synthetics.integration.deprecation.title": "Elastic Synthetics統合モニターを移行", - "xpack.synthetics.integrationLink.missingDataMessage": "この統合に必要なデータが見つかりませんでした。", "xpack.synthetics.keyValuePairsField.key.ariaLabel": "キー", "xpack.synthetics.keyValuePairsField.key.label": "キー", "xpack.synthetics.keyValuePairsField.value.ariaLabel": "値", "xpack.synthetics.keyValuePairsField.value.label": "値", - "xpack.synthetics.kueryBar.searchPlaceholder.kql": "KQL構文を使用して、モニターID、名前、タイプ(例:monitor.type: \"http\" AND tags: \"dev\")などを検索", - "xpack.synthetics.kueryBar.searchPlaceholder.simpleText": "モニターID、名前、URL、ポート、またはタグで検索", "xpack.synthetics.lcp.label": "LCP", "xpack.synthetics.leftOver.errors.createIssue": "問題を作成しています。", "xpack.synthetics.leftOver.errors.delete": "統合の削除", "xpack.synthetics.leftOver.errors.title": "統合を削除するには、下のボタンをクリックしてください。通常はこれは発生しません。モニターが削除されたため、統合は自動的に削除されるようになっています。これが頻繁に発生する場合は、次の方法で報告してください ", - "xpack.synthetics.locationName.helpLinkAnnotation": "場所を追加", "xpack.synthetics.locations.error.content": "テスト場所の読み込みエラーが発生しました。しばらくたってから再試行してください。", "xpack.synthetics.locations.error.label": "テスト場所を読み込めません", "xpack.synthetics.management.actions": "アクション", @@ -35992,37 +35773,7 @@ "xpack.synthetics.management.monitorList.url": "URL", "xpack.synthetics.management.noLabel": "キャンセル", "xpack.synthetics.management.yesLabel": "削除", - "xpack.synthetics.mappingErrorRoute.breadcrumb": "マッピングエラー", - "xpack.synthetics.mappingErrorRoute.pageHeader.title": "マッピングエラー", - "xpack.synthetics.mappingErrorRoute.title": "Synthetics | マッピングエラー", "xpack.synthetics.millisecond.abbreviation.label": "ms", - "xpack.synthetics.ml.durationChart.exploreInMlApp": "ML アプリで探索", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "権限が必要です", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "異常検知", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.cancelLabel": "キャンセル", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createMLJobDescription": "ここでは機械学習ジョブを作成し、\n アップタイム監視の対応期間の異常スコアを計算できます。有効にすると、詳細ページの監視期間グラフには\n 想定された境界が表示され、異常があるグラフに注釈が付けられます。また、\n 地理的な地域にわたって遅延が増える期間を特定することもできます。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "新規ジョブを作成", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "異常アラートを無効にする", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "異常検知を無効にする", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "異常検知ジョブを有効にできます。ジョブがすでに存在する場合はジョブまたはアラートを管理できます。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "異常アラートを有効にする", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "異常検知を有効にする", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "機械学習でこの機能を使用するには、Kibana権限が必要です。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "分析は機械学習ノードが使用可能になるのを待機しています。応答時間グラフに結果が追加されるまで、しばらく時間がかかる可能性があります。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "これで応答時間グラフについての分析が実行されます。応答時間グラフに結果が追加されるまで、しばらく時間がかかる可能性があります。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "ジョブを表示", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "ジョブの作成が正常に完了しました", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "現在のライセンスでは機械学習ジョブの作成が許可されていないか、ジョブがすでに存在する可能性があります。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "ジョブの作成に失敗", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "異常検知ジョブを削除しますか?", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "ジョブを削除しました", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "ジョブの削除が正常に完了しました", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "異常検知を管理", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "機械学習ジョブの管理ページ", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "注:ジョブが結果の計算を開始するまでに少し時間がかかる場合があります。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "異常アラートを作成するには、アップタイムへの読み書きアクセス権が必要です。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrial": "無料の 14 日トライアルを開始", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrialDesc": "期間異常検知機能を利用するには、Elastic Platinum ライセンスが必要です。", "xpack.synthetics.monitor.duration.label": "期間", "xpack.synthetics.monitor.result.label": "結果", "xpack.synthetics.monitor.result.lastSuccessful": "前回の成功", @@ -36042,8 +35793,6 @@ "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom": "(X Mbps、Y Mbps、Z ms)", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom.label": "カスタム", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.disabled.label": "スロットルなし", - "xpack.synthetics.monitorCharts.durationChart.wrapper.label": "場所でグループ化された、モニターのping期間を示すグラフ。", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabel": "監視期間", "xpack.synthetics.monitorConfig.advancedOptions.title": "高度なオプション", "xpack.synthetics.monitorConfig.apmServiceName.helpText": "APMのservice.name ECSフィールドに対応します。設定すると、APMとSyntheticsデータの間の統合が有効になります。", "xpack.synthetics.monitorConfig.apmServiceName.label": "APMサービス名", @@ -36221,19 +35970,11 @@ "xpack.synthetics.monitorDetails.loading.content": "これは1秒で終わります。", "xpack.synthetics.monitorDetails.loading.heading": "モニター詳細を読み込み中", "xpack.synthetics.monitorDetails.loadingTestRuns": "テスト実行を読み込み中...", - "xpack.synthetics.monitorDetails.ml.confirmAlertDeleteMessage": "異常のアラートを削除しますか?", - "xpack.synthetics.monitorDetails.ml.confirmDeleteMessage": "このジョブを削除してよろしいですか?", - "xpack.synthetics.monitorDetails.ml.deleteJobWarning": "ジョブの削除に時間がかかる可能性があります。削除はバックグラウンドで実行され、データの表示がすぐに消えないことがあります。", - "xpack.synthetics.monitorDetails.ml.deleteMessage": "ジョブを削除中...", "xpack.synthetics.monitorDetails.noDataFound": "データが見つかりません", "xpack.synthetics.monitorDetails.pending.content": "データが利用可能になると、このページが更新されます。", "xpack.synthetics.monitorDetails.pending.heading": "初期テスト実行が保留中です...", "xpack.synthetics.monitorDetails.skipped.label": "スキップ", "xpack.synthetics.monitorDetails.status": "ステータス", - "xpack.synthetics.monitorDetails.statusBar.pingType.browser": "ブラウザー", - "xpack.synthetics.monitorDetails.statusBar.pingType.http": "HTTP", - "xpack.synthetics.monitorDetails.statusBar.pingType.icmp": "ICMP", - "xpack.synthetics.monitorDetails.statusBar.pingType.tcp": "TCP", "xpack.synthetics.monitorDetails.summary.availability": "可用性", "xpack.synthetics.monitorDetails.summary.brushArea": "信頼度を高めるためにエリアを精査", "xpack.synthetics.monitorDetails.summary.duration": "期間", @@ -36250,12 +35991,6 @@ "xpack.synthetics.monitorDetails.summary.viewErrorDetails": "エラー詳細を表示", "xpack.synthetics.monitorDetails.summary.viewHistory": "履歴を表示", "xpack.synthetics.monitorDetails.summary.viewTestRun": "テスト実行を表示", - "xpack.synthetics.monitorDetails.title.disclaimer.description": "(ベータ)", - "xpack.synthetics.monitorDetails.title.disclaimer.link": "詳細を表示", - "xpack.synthetics.monitorDetails.title.pingType.browser": "ブラウザー", - "xpack.synthetics.monitorDetails.title.pingType.http": "HTTP ping", - "xpack.synthetics.monitorDetails.title.pingType.icmp": "ICMP ping", - "xpack.synthetics.monitorDetails.title.pingType.tcp": "TCP ping", "xpack.synthetics.monitorDetails.viewHistory": "履歴を表示", "xpack.synthetics.monitorEditPage.error.content": "モニターの読み込みエラーが発生しました。しばらくたってから再試行してください。", "xpack.synthetics.monitorEditPage.error.label": "モニター構成を読み込めません", @@ -36263,68 +35998,30 @@ "xpack.synthetics.monitorHistoryTab.title": "履歴", "xpack.synthetics.monitorLastRun.lastRunLabel": "前回の実行", "xpack.synthetics.monitorList.closeFlyoutText": "閉じる", - "xpack.synthetics.monitorList.defineConnector.popover.description": "ステータスアラートを受信します。", - "xpack.synthetics.monitorList.disableDownAlert": "ステータスアラートを無効にする", - "xpack.synthetics.monitorList.downLineSeries.downLabel": "ダウン", - "xpack.synthetics.monitorList.drawer.mostRecentRun": "直近のテスト実行", - "xpack.synthetics.monitorList.drawer.url": "Url", "xpack.synthetics.monitorList.durationChart.durationSeriesName": "期間", "xpack.synthetics.monitorList.durationChart.previousPeriodSeriesName": "前の期間", "xpack.synthetics.monitorList.durationHeaderText": "期間", - "xpack.synthetics.monitorList.enabledAlerts.noAlert": "このモニターではルールが有効ではありません。", - "xpack.synthetics.monitorList.enabledAlerts.title": "有効なルール", "xpack.synthetics.monitorList.enabledItemText": "有効", - "xpack.synthetics.monitorList.enableDownAlert": "ステータスアラートを有効にする", "xpack.synthetics.monitorList.errorSummary": "エラー概要", - "xpack.synthetics.monitorList.geoName.helpLinkAnnotation": "場所を追加", "xpack.synthetics.monitorList.goToMonitorLinkText": "モニターに移動", - "xpack.synthetics.monitorList.infraIntegrationAction.container.message": "コンテナーメトリックを表示", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.description": "このモニターのコンテナーIDのインフラストラクチャーUIを確認します", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.ariaLabel": "このモニターのIPアドレスのインフラストラクチャーUIを確認します", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.message": "ホストメトリックを表示", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.description": "このモニターのポッドIDのインフラストラクチャーUIを確認します", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.message": "ポッドメトリックを表示", - "xpack.synthetics.monitorList.integrationGroup.emptyMessage": "統合されたアプリケーションがありません", "xpack.synthetics.monitorList.lastModified": "最終更新:", "xpack.synthetics.monitorList.lastRunHeaderText": "前回の実行", - "xpack.synthetics.monitorList.loading": "読み込み中...", - "xpack.synthetics.monitorList.locations.expand": "クリックすると、残りの場所が表示されます", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.id": "コンテナーログを表示", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.message": "コンテナーログを表示", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.description": "このモニターのIPアドレスのロギングUIを確認", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.message": "ホストログを表示", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "ポッドログを表示", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.message": "ポッドログを表示", - "xpack.synthetics.monitorList.monitorHistoryColumnLabel": "ダウンタイム履歴", "xpack.synthetics.monitorList.monitorIdItemText": "監視ID", - "xpack.synthetics.monitorList.monitoringStatusTitle": "監視", - "xpack.synthetics.monitorList.nameColumnLabel": "名前", - "xpack.synthetics.monitorList.noItemForSelectedFiltersMessage": "選択されたフィルター条件でモニターが見つかりませんでした", - "xpack.synthetics.monitorList.noItemMessage": "アップタイムモニターが見つかりません", - "xpack.synthetics.monitorList.noMessage.troubleshoot": "絶対日付範囲を使用してください。監視が後から表示される場合は、HeartbeatまたはKibanaがインストールされたシステムクロックに問題がある可能性があります。", - "xpack.synthetics.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "調査", "xpack.synthetics.monitorList.projectIdHeaderText": "プロジェクト ID", "xpack.synthetics.monitorList.redirects.openWindow": "リンクは新しいウィンドウで開きます。", "xpack.synthetics.monitorList.redirects.title": "リダイレクト", "xpack.synthetics.monitorList.runTest.label": "テストの実行", - "xpack.synthetics.monitorList.statusAlert.label": "ステータスアラート", "xpack.synthetics.monitorList.statusColumn.completeLabel": "完了", "xpack.synthetics.monitorList.statusColumn.downLabel": "ダウン", "xpack.synthetics.monitorList.statusColumn.failedLabel": "失敗", "xpack.synthetics.monitorList.statusColumn.upLabel": "アップ", - "xpack.synthetics.monitorList.statusColumnLabel": "ステータス", "xpack.synthetics.monitorList.table.project.name": "プロジェクト ID", "xpack.synthetics.monitorList.table.tags.name": "タグ", "xpack.synthetics.monitorList.table.url.name": "Url", - "xpack.synthetics.monitorList.tags.expand": "クリックすると、残りのタグが表示されます", "xpack.synthetics.monitorList.testNow.AriaLabel": "クリックすると今すぐテストを実行します", "xpack.synthetics.monitorList.testNow.scheduled": "テストはすでにスケジュールされています", "xpack.synthetics.monitorList.testRunLogs": "テスト実行ログ", "xpack.synthetics.monitorList.timestamp": "タイムスタンプ", - "xpack.synthetics.monitorList.tlsColumnLabel": "TLS 証明書", - "xpack.synthetics.monitorList.troubleshoot.systemClockOutOfSync": "システムクロックが同期されていない可能性があります", - "xpack.synthetics.monitorList.troubleshoot.tryDateRange": "絶対日付範囲を適用", - "xpack.synthetics.monitorList.troubleshoot.whereAreMyMonitors": "モニターの場所", "xpack.synthetics.monitorList.type": "型", "xpack.synthetics.monitorList.viewInDiscover": "Discoverに表示", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "場所に移動", @@ -36462,22 +36159,6 @@ "xpack.synthetics.monitorStatus.statusLabel": "ステータス", "xpack.synthetics.monitorStatus.succeededLabel": "成功", "xpack.synthetics.monitorStatus.upLabel": "アップ", - "xpack.synthetics.monitorStatusBar.durationTextAriaLabel": "ミリ秒単位の監視時間", - "xpack.synthetics.monitorStatusBar.healthStatusMessageAriaLabel": "監視ステータス", - "xpack.synthetics.monitorStatusBar.loadingMessage": "読み込み中…", - "xpack.synthetics.monitorStatusBar.monitor.availability": "全体的な可用性", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.availability": "可用性", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.lastCheck": "最終確認", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.location": "場所", - "xpack.synthetics.monitorStatusBar.monitor.id": "監視ID", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom": "監視元", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.listToMap": "マップビューに変更し、場所別に可用性を確認します。", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.MapToList": "リストビューに変更し、場所別に可用性を確認します。", - "xpack.synthetics.monitorStatusBar.monitorUrlLinkAriaLabel": "監視 URL リンク", - "xpack.synthetics.monitorStatusBar.sslCertificate.title": "TLS 証明書", - "xpack.synthetics.monitorStatusBar.timestampFromNowTextAriaLabel": "最終確認からの経過時間", - "xpack.synthetics.monitorStatusBar.type.ariaLabel": "モニタータイプ", - "xpack.synthetics.monitorStatusBar.type.label": "型", "xpack.synthetics.monitorSummary.createNewMonitor": "監視の作成", "xpack.synthetics.monitorSummary.editMonitor": "モニターを編集", "xpack.synthetics.monitorSummary.goToMonitor": "モニターに移動", @@ -36492,19 +36173,11 @@ "xpack.synthetics.monitorSummary.viewAlerts": "アラートを表示", "xpack.synthetics.monitorSummary.viewErrors": "エラーを表示", "xpack.synthetics.monitorSummaryRoute.monitorBreadcrumb": "監視", - "xpack.synthetics.navigateToAlertingButton.content": "ルールの管理", - "xpack.synthetics.navigateToAlertingUi": "Uptime を離れてアラート管理ページに移動します", - "xpack.synthetics.noDataConfig.beatsCard.description": "サイトとサービスの可用性をアクティブに監視するアラートを受信し、問題をより迅速に解決して、ユーザーエクスペリエンスを最適化します。", - "xpack.synthetics.noDataConfig.beatsCard.title": "Heartbeatでモニターを追加", - "xpack.synthetics.noDataConfig.solutionName": "Observability", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedDescription": "Syntheticsモニターデータを表示するには、権限を更新する必要があります。詳細については、Kibana管理者に連絡してください。", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedFooterMarkdown": "次のインデックスに必要なElasticsearchインデックス権限「読み取り」:", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedTitle": "権限が必要です", "xpack.synthetics.notFoundBody": "申し訳ございません。お探しのページは見つかりません。削除または名前変更されたか、存在していなかった可能性があります。", "xpack.synthetics.notFoundTitle": "ページが見つかりません", - "xpack.synthetics.notFountPage.homeLinkText": "ホームへ戻る", - "xpack.synthetics.openAlertContextPanel.ariaLabel": "ルールコンテキストパネルを開くと、ルールタイプを選択できます", - "xpack.synthetics.openAlertContextPanel.label": "ルールを作成", "xpack.synthetics.overview.actions.disableLabelDisableAlert": "ステータスアラートを無効にする", "xpack.synthetics.overview.actions.disablingLabel": "モニターを無効にしています", "xpack.synthetics.overview.actions.editMonitor.name": "モニターを編集", @@ -36517,10 +36190,6 @@ "xpack.synthetics.overview.actions.openPopover.ariaLabel": "アクションメニューを開く", "xpack.synthetics.overview.actions.quickInspect.title": "簡易検査", "xpack.synthetics.overview.actions.runTestManually.title": "手動でテストを実行", - "xpack.synthetics.overview.alerts.disabled.failed": "ルールを無効にできません。", - "xpack.synthetics.overview.alerts.disabled.success": "ルールが正常に無効にされました。", - "xpack.synthetics.overview.alerts.enabled.failed": "ルールを有効にできません。", - "xpack.synthetics.overview.alerts.enabled.success": "ルールが正常に有効にされました。 ", "xpack.synthetics.overview.alerts.headingText": "過去 12 時間", "xpack.synthetics.overview.duration.description": "過去24回のチェックの中央値期間", "xpack.synthetics.overview.duration.label": "期間", @@ -36567,25 +36236,13 @@ "xpack.synthetics.overview.status.headingText": "現在のステータス", "xpack.synthetics.overview.status.pending.description": "保留中", "xpack.synthetics.overview.status.up.description": "アップ", - "xpack.synthetics.overview.uptimeHeading": "稼働状況監視", "xpack.synthetics.overviewPage.overviewCrumb": "概要", - "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "無効になったページ付けボタンです。モニターリストがこれ以上ナビゲーションできないことを示しています。", - "xpack.synthetics.overviewPageLink.next.ariaLabel": "次の結果ページ", - "xpack.synthetics.overviewPageLink.prev.ariaLabel": "前の結果ページ", - "xpack.synthetics.page_header.addDataLink.label": "アップタイムデータの追加に関するチュートリアルに移動", "xpack.synthetics.page_header.analyzeData.label": "[データの探索]ビューに移動して、合成/ユーザーデータを可視化", - "xpack.synthetics.page_header.defineConnector.popover.defaultLink": "デフォルトのコネクターを定義", - "xpack.synthetics.page_header.defineConnector.settingsLink": "設定", - "xpack.synthetics.page_header.manageLink.not": "モニター管理はUptimeでは利用できなくなりました。Syntheticsアプリを使用してください。", - "xpack.synthetics.page_header.manageMonitors": "モニター管理", "xpack.synthetics.page_header.settingsLink": "設定", "xpack.synthetics.page_header.settingsLink.label": "アップタイム設定ページに移動", "xpack.synthetics.paramForm.namespaces": "名前空間", "xpack.synthetics.paramForm.sharedAcrossSpacesLabel": "複数のスペース間で共有", - "xpack.synthetics.pingList.checkHistoryTitle": "履歴", "xpack.synthetics.pingList.collapseRow": "縮小", - "xpack.synthetics.pingList.columns.failedStep": "失敗したステップ", - "xpack.synthetics.pingList.drawer.body.docsLink": "ドキュメント", "xpack.synthetics.pingList.durationMsColumnLabel": "期間", "xpack.synthetics.pingList.errorColumnLabel": "エラー", "xpack.synthetics.pingList.errorTypeColumnLabel": "エラータイプ", @@ -36599,10 +36256,7 @@ "xpack.synthetics.pingList.pingsUnavailableMessage": "履歴が見つかりません", "xpack.synthetics.pingList.responseCodeColumnLabel": "応答コード", "xpack.synthetics.pingList.statusColumnLabel": "ステータス", - "xpack.synthetics.pingList.stepDurationHeader": "ステップ期間", - "xpack.synthetics.pingList.synthetics.performanceBreakDown": "パフォーマンスの内訳を表示", "xpack.synthetics.pingList.synthetics.waterfall.filters.collapseRequestsLabel": "折りたたむと、一致する要求のみが表示されます", - "xpack.synthetics.pingList.synthetics.waterfall.filters.popover": "クリックすると、ウォーターフォールフィルターが開きます", "xpack.synthetics.pingList.timestampColumnLabel": "タイムスタンプ", "xpack.synthetics.pluginDescription": "Synthetics監視", "xpack.synthetics.privateLocations.learnMore.label": "詳細情報", @@ -36611,12 +36265,10 @@ "xpack.synthetics.projectMonitorApi.validation.invalidNamespace.title": "無効なネームスペース", "xpack.synthetics.projectMonitorApi.validation.unsupportedOption.title": "サポートされていないHeartbeatオプション", "xpack.synthetics.prompt.errors.notFound.title": "モニターが見つかりません", - "xpack.synthetics.public.pages.mappingError.title": "Heartbeatマッピングが見つかりません", "xpack.synthetics.receive": "受信", "xpack.synthetics.routes.baseTitle": "Synthetics - Kibana", "xpack.synthetics.routes.createNewMonitor": "ホームに移動", "xpack.synthetics.routes.goToSynthetics": "Syntheticsホームページに移動", - "xpack.synthetics.routes.legacyBaseTitle": "アップタイム - Kibana", "xpack.synthetics.runTest.failure": "手動でテストを実行できませんでした", "xpack.synthetics.seconds.label": "秒", "xpack.synthetics.seconds.shortForm.label": "秒", @@ -36638,7 +36290,6 @@ "xpack.synthetics.settings.enabledAlert.fail": "監視ステータスルールタイプを更新できませんでした。", "xpack.synthetics.settings.enablement.fail": "モニター管理を有効にできませんでした", "xpack.synthetics.settings.error.couldNotSave": "設定を保存できませんでした!", - "xpack.synthetics.settings.heading": "アップタイム設定", "xpack.synthetics.settings.invalid.error": "値は0よりも大きい値でなければなりません。", "xpack.synthetics.settings.invalid.nanError": "値は整数でなければなりません。", "xpack.synthetics.settings.noSpace.error": "インデックス名にはスペースを使用できません", @@ -36680,38 +36331,11 @@ "xpack.synthetics.settingsTabs.dataRetention": "データ保持", "xpack.synthetics.settingsTabs.params": "グローバルパラメーター", "xpack.synthetics.settingsTabs.privateLocations": "非公開の場所", - "xpack.synthetics.snapshot.monitor": "監視", - "xpack.synthetics.snapshot.monitors": "監視", - "xpack.synthetics.snapshot.noDataDescription": "選択した時間範囲に ping はありません。", - "xpack.synthetics.snapshot.noDataTitle": "利用可能な ping データがありません", - "xpack.synthetics.snapshot.pingsOverTimeTitle": "一定時間のピング", - "xpack.synthetics.snapshotHistogram.series.pings": "モニター接続確認", - "xpack.synthetics.snapshotHistogram.xAxisId": "ピング X 軸", - "xpack.synthetics.snapshotHistogram.yAxis.title": "ピング", - "xpack.synthetics.snapshotHistogram.yAxisId": "ピングY軸", - "xpack.synthetics.sourceConfiguration.ageLimit.units.days": "日", - "xpack.synthetics.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "TLS証明書が有効である最大日数を制御するインプット。この期間を過ぎると、Kibanaで警告が表示されます。", - "xpack.synthetics.sourceConfiguration.alertConnectors": "アラートコネクター", "xpack.synthetics.sourceConfiguration.alertConnectors.defaultEmail": "デフォルトの電子メールアドレス", "xpack.synthetics.sourceConfiguration.alertDefaultForm.emailConnectorPlaceHolder": "終了:電子メールコネクターの電子メールアドレス", - "xpack.synthetics.sourceConfiguration.alertDefaultForm.requiredEmail": "電子メールコネクターには宛先電子メールアドレスが必須です", "xpack.synthetics.sourceConfiguration.alertDefaultForm.selectConnector": "1つ以上のコネクターを選択してください", - "xpack.synthetics.sourceConfiguration.alertDefaults": "アラートデフォルト", - "xpack.synthetics.sourceConfiguration.applySettingsButtonLabel": "変更を適用", - "xpack.synthetics.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "TLS証明書の満了日までの最小日数を制御するインプット。この期間を過ぎると、Kibanaで警告が表示されます。", - "xpack.synthetics.sourceConfiguration.certificateThresholdDescription": "証明書エラーを表示し、アラートを通知するしきい値を変更します。注:すべての構成されたアラートに影響します。", - "xpack.synthetics.sourceConfiguration.certificationSectionTitle": "証明書の有効期限", "xpack.synthetics.sourceConfiguration.defaultConnectors": "デフォルトコネクター", - "xpack.synthetics.sourceConfiguration.defaultConnectors.description": "アラートを送信するために使用されるデフォルトコネクター。", "xpack.synthetics.sourceConfiguration.defaultConnectors.description.defaultEmail": "選択した電子メールアラートコネクターには電子メール設定が必須です。", - "xpack.synthetics.sourceConfiguration.discardSettingsButtonLabel": "キャンセル", - "xpack.synthetics.sourceConfiguration.errorStateLabel": "有効期限しきい値", - "xpack.synthetics.sourceConfiguration.expirationThreshold": "有効期限/使用期間しきい値", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDescription": "Heartbeat データを含むインデックス照合用のインデックスパターン", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesLabel": "Heartbeat インデックス", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesTitle": "アップタイムインデックス", - "xpack.synthetics.sourceConfiguration.indicesSectionTitle": "インデックス", - "xpack.synthetics.sourceConfiguration.warningStateLabel": "使用期間上限", "xpack.synthetics.stackManagement": "スタック管理", "xpack.synthetics.stepDetails.expected": "期待値", "xpack.synthetics.stepDetails.objectCount": "オブジェクト数", @@ -36726,39 +36350,13 @@ "xpack.synthetics.stepDetailsRoute.metrics": "メトリック", "xpack.synthetics.stepDetailsRoute.timingsBreakdown": "時間の内訳", "xpack.synthetics.stepDetailsRoute.timingsBreakdown.info": "すべてのネットワークリクエストタイミングの合計", - "xpack.synthetics.stepList.collapseRow": "縮小", - "xpack.synthetics.stepList.expandRow": "拡張", - "xpack.synthetics.stepList.stepName": "ステップ名", - "xpack.synthetics.synthetics.consoleStepList.message": "実行できませんでした。記録されたコンソール出力は次のとおりです。", - "xpack.synthetics.synthetics.consoleStepList.title": "ステップが実行されませんでした", - "xpack.synthetics.synthetics.emptyJourney.message.footer": "表示する詳細情報はありません。", - "xpack.synthetics.synthetics.emptyJourney.message.heading": "ステップが含まれていませんでした。", - "xpack.synthetics.synthetics.emptyJourney.title": "ステップがありません。", - "xpack.synthetics.synthetics.executedStep.consoleOutput.label": "コンソール出力", - "xpack.synthetics.synthetics.executedStep.errorHeading": "エラーメッセージ", - "xpack.synthetics.synthetics.executedStep.screenshot.not": "スクリーンショット", "xpack.synthetics.synthetics.executedStep.screenshot.success": "前回成功したチェック", - "xpack.synthetics.synthetics.executedStep.scriptHeading.label": "このステップで実行されたスクリプト", - "xpack.synthetics.synthetics.executedStep.stackTrace": "スタックトレース", - "xpack.synthetics.synthetics.imageLoadingSpinner.ariaLabel": "画像を示すアニメーションスピナーを読み込んでいます", - "xpack.synthetics.synthetics.journey.loadingSteps": "ステップを読み込んでいます...", "xpack.synthetics.synthetics.markers.explore": "探索", "xpack.synthetics.synthetics.markers.noFieldIcon.label": "このマーカーにフィールドが関連付けられていないことを示すアイコン", "xpack.synthetics.synthetics.markers.openEmbeddableButton.label": "このアイコンボタンを使用して、この注釈マーカーのメトリックを表示します。", - "xpack.synthetics.synthetics.nextStepButton.ariaLabel": "次のステップ", - "xpack.synthetics.synthetics.performanceBreakDown.label": "パフォーマンスの内訳", - "xpack.synthetics.synthetics.prevStepButton.airaLabel": "前のステップ", - "xpack.synthetics.synthetics.screenshot.loadingImageMessage": "読み込み中", - "xpack.synthetics.synthetics.screenshot.noImageMessage": "画像がありません", - "xpack.synthetics.synthetics.screenshotDisplay.altTextWithoutName": "スクリーンショット", "xpack.synthetics.synthetics.service.apiKey": "SyntheticsサービスAPIキー", - "xpack.synthetics.synthetics.statusBadge.failedMessage": "失敗", - "xpack.synthetics.synthetics.statusBadge.skippedMessage": "スキップ", - "xpack.synthetics.synthetics.statusBadge.succeededMessage": "成功", - "xpack.synthetics.synthetics.step.durationTrend": "ステップ期間傾向", "xpack.synthetics.synthetics.stepDetail.nextCheckButtonText": "次の確認", "xpack.synthetics.synthetics.stepDetail.nextStepButtonText": "次へ", - "xpack.synthetics.synthetics.stepDetail.noData": "このステップのデータが見つかりませんでした", "xpack.synthetics.synthetics.stepDetail.previousCheckButtonText": "前の確認", "xpack.synthetics.synthetics.stepDetail.previousStepButtonText": "前へ", "xpack.synthetics.synthetics.stepDetail.stepLabel": "手順", @@ -36766,9 +36364,6 @@ "xpack.synthetics.synthetics.stepDetail.waterfallNoData": "このステップのウォーターフォールデータが見つかりませんでした", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.description": "ウォーターフォールグラフを表示できません。古いバージョンのSyntheticエージェントを使用している可能性があります。バージョンを確認して、アップグレードを検討してください。", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.title": "ウォーターフォールグラフを使用できません", - "xpack.synthetics.synthetics.stepList.nextCheck": "次の確認", - "xpack.synthetics.synthetics.stepList.previousCheck": "前の確認", - "xpack.synthetics.synthetics.thumbnail.fullSize.alt": "このステップのサムネイルのスクリーンショットの大きいバージョン。", "xpack.synthetics.synthetics.waterfall.domContentLabel": "DOMコンテンツが読み込まれました", "xpack.synthetics.synthetics.waterfall.fcpLabel": "初回コンテンツの描画", "xpack.synthetics.synthetics.waterfall.filterGroup.filterScreenreaderLabel": "フィルタリング条件", @@ -36828,15 +36423,12 @@ "xpack.synthetics.testRun.runErrorLabel": "テストの実行エラー", "xpack.synthetics.testRunDetailsRoute.page.title": "テスト実行詳細", "xpack.synthetics.timestamp.label": "@timestamp", - "xpack.synthetics.title": "アップタイム", "xpack.synthetics.tls": "TLS", "xpack.synthetics.tls.ageExpression.description": "または次の日数を経過:", "xpack.synthetics.tls.criteriaExpression.value": "一致するモニター", "xpack.synthetics.tls.expirationExpression.description": "次の日数以内に有効期限切れになる証明書があります:", "xpack.synthetics.toggleAlertButton.content": "監視ステータスルール", "xpack.synthetics.toggleAlertFlyout.ariaLabel": "ルールの追加フライアウトを開く", - "xpack.synthetics.toggleTlsAlertButton.ariaLabel": "TLSルールフライアウトを開く", - "xpack.synthetics.toggleTlsAlertButton.content": "TLSルール", "xpack.synthetics.totalDuration.metrics": "ステップ期間", "xpack.synthetics.totalDuration.transferSize": "転送サイズ", "xpack.synthetics.uptimeFeatureCatalogueTitle": "アップタイム", @@ -36849,6 +36441,412 @@ "xpack.synthetics.waterfall.networkRequests.filteredOut": "除外済み", "xpack.synthetics.waterfall.networkRequests.heading": "ネットワークリクエスト", "xpack.synthetics.waterfallChart.sidebar.url.https": "https", + "xpack.uptime.alerts.monitorExpression.label": "フィルター{title}を削除", + "xpack.uptime.alerts.monitorStatus.actionVariables.down": "は、過去{interval}回のうち{count}回失敗しています。> {numTimes}のときにアラートを通知します。", + "xpack.uptime.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} {availabilityBreachMessage}", + "xpack.uptime.alerts.monitorStatus.monitorCallOut.title": "このアラートは約{snapshotCount}個のモニターに適用されます。", + "xpack.uptime.alerts.monitorStatus.reasonMessage": "{location}から「{name}」をモニター、{status}、{checkedAt}で確認します。", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.value": "最後の{value}", + "xpack.uptime.alerts.tls.validAfterExpiredString": "{date}に有効期限切れ、{relativeDate}日前。", + "xpack.uptime.alerts.tls.validAfterExpiringString": "{relativeDate}日後の{date}に有効期限切れになります。", + "xpack.uptime.alerts.tls.validBeforeExpiredString": "{date}以降有効、{relativeDate}日前。", + "xpack.uptime.alerts.tls.validBeforeExpiringString": "{date}まで有効、今から{relativeDate}日間。", + "xpack.uptime.availabilityLabelText": "{value} %", + "xpack.uptime.charts.mlAnnotation.header": "スコア:{score}", + "xpack.uptime.charts.mlAnnotation.severity": "重要度:{severity}", + "xpack.uptime.controls.selectSeverity.scoreDetailsDescription": "スコア{value}以上", + "xpack.uptime.deprecateNoticeModal.forMoreInformation": "詳細については、{docsLink}", + "xpack.uptime.durationChart.emptyPrompt.description": "このモニターは選択された時間範囲で一度も {emphasizedText} していません。", + "xpack.uptime.integration.deprecation.content": "Elastic Synthetics統合を使用して、少なくとも1つのモニターが設定されています。Elastic 8.8以降、統合は非推奨となり、これらのモニターを編集することはできません。プロジェクトモニターに移行するか、オブザーバビリティで直接利用できる新しいSyntheticsアプリに追加してください。詳細は{link}をご覧ください。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "ジョブの作成後、{mlJobsPageLink} で管理と詳細の確認ができます。", + "xpack.uptime.monitorCharts.durationChart.leftAxis.title": "期間({unit})", + "xpack.uptime.monitorCharts.monitorDuration.titleLabelWithAnomaly": "監視期間(異常:{noOfAnomalies})", + "xpack.uptime.monitorList.defineConnector.description": "{link}でデフォルトコネクターを定義し、モニターステータスアラートを有効にします。", + "xpack.uptime.monitorList.drawer.missingLocation": "一部のHeartbeatインスタンスには位置情報が定義されていません。Heartbeat構成への{link}。", + "xpack.uptime.monitorList.drawer.statusRowLocationList": "前回の確認時に\"{status}\"ステータスだった場所のリスト。", + "xpack.uptime.monitorList.expandDrawerButton.ariaLabel": "ID {id}のモニターの行を展開", + "xpack.uptime.monitorList.infraIntegrationAction.docker.tooltip": "コンテナーID「{containerId}」のインフラストラクチャUIを確認します", + "xpack.uptime.monitorList.infraIntegrationAction.ip.tooltip": "IP「{ip}」のインフラストラクチャUIを確認します", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.tooltip": "ポッドUID「{podUid}」のインフラストラクチャUIを確認します。", + "xpack.uptime.monitorList.loggingIntegrationAction.container.tooltip": "コンテナーID「{containerId}」のロギングUIを確認します", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.tooltip": "IP \"{ip}\"のロギングUIを確認", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.tooltip": "ポッドUID「{podUid}」のログを確認します", + "xpack.uptime.monitorList.monitorType.filter": "タイプ{type}ですべての監視をフィルター", + "xpack.uptime.monitorList.mostRecentError.title": "最近のエラー({timestamp})", + "xpack.uptime.monitorList.noDownHistory": "このモニターは選択された時間範囲で一度も {emphasizedText} していません。", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "ここをクリックすると、APMのドメイン「{domain}」、または明示的に定義された「サービス名」を確認します。", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "URL {monitorUrl}で監査のための統合ポップオーバーを開く", + "xpack.uptime.monitorList.pageSizePopoverButtonText": "ページごとの行数:{size}", + "xpack.uptime.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows}行", + "xpack.uptime.monitorList.redirects.title.number": "{number}", + "xpack.uptime.monitorList.statusColumn.checkedTimestamp": "確認:{timestamp}", + "xpack.uptime.monitorList.statusColumn.locStatusMessage": "{noLoc}場所", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.multiple": "{noLoc}場所", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.down": "{locs}でダウン", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.up": "{locs}でアップ", + "xpack.uptime.monitorList.table.description": "列にステータス、名前、URL、IP、ダウンタイム履歴、統合が入力されたモニターステータス表です。この表は現在 {length} 項目を表示しています。", + "xpack.uptime.monitorList.tags.filter": "タグ{tag}ですべての監視をフィルター", + "xpack.uptime.monitorRoute.title": "モニター | {baseTitle}", + "xpack.uptime.monitorStatusBar.locations.oneLocStatus": "{loc}場所で{status}", + "xpack.uptime.monitorStatusBar.locations.upStatus": "{loc}場所で{status}", + "xpack.uptime.overview.alerts.enabled.success.description": "この監視が停止しているときには、メッセージが{actionConnectors}に送信されます。", + "xpack.uptime.pingist.durationSecondsColumnFormatting": "{seconds}秒", + "xpack.uptime.pingist.durationSecondsColumnFormatting.singular": "{seconds}秒", + "xpack.uptime.pingList.durationMsColumnFormatting": "{millis} ms", + "xpack.uptime.pingList.expandedRow.response_body.notRecorded": "本文が記録されていません。応答本文の記録に関する詳細は、{docsLink}をお読みください。", + "xpack.uptime.public.pages.mappingError.bodyDocsLink": "この問題のトラブルシューティングについては、{docsLink}を参照してください。", + "xpack.uptime.public.pages.mappingError.bodyMessage": "正しくないマッピングが検出されました。Heartbeat {setup}コマンドを実行していない可能性があります。", + "xpack.uptime.snapshot.donutChart.ariaLabel": "現在のステータスを表す円グラフ、{total} 個中 {down} 個のモニターがダウンしています。", + "xpack.uptime.snapshotHistogram.description": "{startTime} から {endTime} までの期間のアップタイムステータスを表示する棒グラフです。", + "xpack.uptime.sourceConfiguration.ageThresholdDefaultValue": "デフォルト値は{defaultValue}です", + "xpack.uptime.sourceConfiguration.expirationThresholdDefaultValue": "デフォルト値は{defaultValue}です", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDefaultValue": "デフォルト値は{defaultValue}です", + "xpack.uptime.stepDetailRoute.title": "Synthetics詳細 | {baseTitle}", + "xpack.uptime.synthetics.emptyJourney.message.checkGroupField": "ジャーニーのチェックグループは{codeBlock}です。", + "xpack.uptime.synthetics.executedStep.screenshot.notSucceeded": "{status}チェックのスクリーンショット", + "xpack.uptime.synthetics.journey.allFailedMessage": "{total}ステップ - すべて失敗またはスキップされました", + "xpack.uptime.synthetics.journey.allSucceededMessage": "{total}ステップ - すべて成功しました", + "xpack.uptime.synthetics.journey.partialSuccessMessage": "{total}ステップ - {succeeded}成功しました", + "xpack.uptime.synthetics.pingTimestamp.captionContent": "ステップ:{stepNumber}/{totalSteps}", + "xpack.uptime.synthetics.screenshotDisplay.altText": "名前\"{stepName}\"のステップのスクリーンショット", + "xpack.uptime.synthetics.step.duration": "{value}秒", + "xpack.uptime.synthetics.waterfall.offsetUnit": "{offset} ms", + "xpack.uptime.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests}がフィルターと一致します)", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests}件のネットワークリクエスト", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage.first": "最初の{count}件", + "xpack.uptime.addDataButtonLabel": "データの追加", + "xpack.uptime.alertDropdown.noWritePermissions": "このアプリでアラートを作成するには、アップタイムへの読み書きアクセス権が必要です。", + "xpack.uptime.alerts.anomaly.criteriaExpression.ariaLabel": "選択したモニターの条件を表示する式。", + "xpack.uptime.alerts.anomaly.criteriaExpression.description": "監視するとき", + "xpack.uptime.alerts.anomaly.scoreExpression.ariaLabel": "異常アラートしきい値の条件を表示する式。", + "xpack.uptime.alerts.anomaly.scoreExpression.description": "異常と重要度があります", + "xpack.uptime.alerts.createRulesPanel.title": "ルールを作成", + "xpack.uptime.alerts.durationAnomaly": "アップタイム期間異常", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "異常の開始のISO8601タイムスタンプ", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "想定応答時間", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitor": "名前、IDS、優先名の人間にとってわかりやすい表示(My Monitorなど)", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorId": "モニターのID。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorUrl": "モニターのURL。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.observerLocation": "Heartbeatチェックが実行されるオブサーバーの位置情報。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severity": "異常の重要度。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severityScore": "異常重要度スコア。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "単位(ミリ秒、秒)が関連付けられた異常バケット中の最も遅い応答時間。", + "xpack.uptime.alerts.monitorStatus": "稼働状況の監視ステータス", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "このアラートに関連する詳細とコンテキストを示すElastic内のビューへのリンク", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "アラートの理由の簡潔な説明", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.message.description": "現在ダウンしているモニターを要約する生成されたメッセージ。", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "アラートとコンテキストを調査するために使用できる、Elastic内のビューまたは機能へのリンク", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.checkedAt": "モニターチェックのタイムスタンプ。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "アラートがトリガーされた場合、現在のトリガー状態が開始するときを示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "このアラートが最初に確認されるときを示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "このアラートが最初にトリガーされたときを示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.isTriggered": "アラートが現在トリガーしているかどうかを示すフラグ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "アラートの直近の確認時刻を示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "最新のエラーメッセージを監視", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "このアラートの直近の解決を示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "アラートの直近のトリガー時刻を示すタイムスタンプ", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitor": "名前、IDS、優先名の人間にとってわかりやすい表示(My Monitorなど)", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorId": "モニターのID。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorType": "モニターのタイプ(HTTP/TCPなど)。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorUrl": "モニターのURL。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerHostname": "Heartbeatチェックが実行されるオブザーバーのホスト名。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerLocation": "Heartbeatチェックが実行されるオブザーバーの位置情報。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.statusMessage": "ステータスメッセージ。例:停止、または可用性チェックの場合は可用性しきい値未満、あるいは両方", + "xpack.uptime.alerts.monitorStatus.addFilter": "フィルターを追加します", + "xpack.uptime.alerts.monitorStatus.addFilter.location": "場所", + "xpack.uptime.alerts.monitorStatus.addFilter.port": "ポート", + "xpack.uptime.alerts.monitorStatus.addFilter.tag": "タグ", + "xpack.uptime.alerts.monitorStatus.addFilter.type": "型", + "xpack.uptime.alerts.monitorStatus.availability.isEnabledCheckbox.label": "可用性", + "xpack.uptime.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "任意のモニターがアップ", + "xpack.uptime.alerts.monitorStatus.availability.threshold.ariaLabel": "このアラートの可用性しきい値を指定", + "xpack.uptime.alerts.monitorStatus.availability.threshold.description": "一致するモニターがアップしています", + "xpack.uptime.alerts.monitorStatus.availability.threshold.input.ariaLabel": "このアラートで確認する可用性しきい値を入力", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "アラートの可用性チェックの時間単位の数を入力", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.expression": "最後内", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "可用性追跡時間範囲を指定", + "xpack.uptime.alerts.monitorStatus.availability.unit.headline": "時間範囲単位を選択します", + "xpack.uptime.alerts.monitorStatus.availability.unit.selectable": "この選択を使用して、このアラートの可用性範囲単位を設定", + "xpack.uptime.alerts.monitorStatus.filterBar.ariaLabel": "監視状態アラートのフィルター基準を許可するインプット", + "xpack.uptime.alerts.monitorStatus.filters.anyLocation": "任意の場所", + "xpack.uptime.alerts.monitorStatus.filters.anyPort": "任意のポート", + "xpack.uptime.alerts.monitorStatus.filters.anyTag": "任意のタグ", + "xpack.uptime.alerts.monitorStatus.filters.anyType": "任意のタイプ", + "xpack.uptime.alerts.monitorStatus.filters.from": "開始:", + "xpack.uptime.alerts.monitorStatus.filters.fromLocation": "開始場所", + "xpack.uptime.alerts.monitorStatus.filters.location.label": "アラートのクエリに適用する場所フィルターを選択します。", + "xpack.uptime.alerts.monitorStatus.filters.of": "/", + "xpack.uptime.alerts.monitorStatus.filters.ofType": "型", + "xpack.uptime.alerts.monitorStatus.filters.port.label": "アラートのクエリに適用するポートフィルターを選択します。", + "xpack.uptime.alerts.monitorStatus.filters.scheme.label": "アラートのクエリに適用するプロトコルスキームフィルターを選択します。", + "xpack.uptime.alerts.monitorStatus.filters.tag.label": "アラートのクエリに適用するタグフィルターを選択します。", + "xpack.uptime.alerts.monitorStatus.filters.using": "使用", + "xpack.uptime.alerts.monitorStatus.filters.usingPort": "ポートを使用", + "xpack.uptime.alerts.monitorStatus.filters.with": "使用", + "xpack.uptime.alerts.monitorStatus.filters.withTag": "タグを使用", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "任意のモニターがダウン >=", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.ariaLabel": "ダウンカウントインプットのポップオーバーを開く", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "一致するモニターがダウン >=", + "xpack.uptime.alerts.monitorStatus.numTimesField.ariaLabel": "アラートのトリガーに必要な停止回数を入力します", + "xpack.uptime.alerts.monitorStatus.oldAlertCallout.title": "古いアラートを編集している可能性があります。一部のフィールドは自動入力されない場合があります。", + "xpack.uptime.alerts.monitorStatus.statusEnabledCheck.label": "ステータス確認", + "xpack.uptime.alerts.monitorStatus.timerangeOption.days": "日", + "xpack.uptime.alerts.monitorStatus.timerangeOption.hours": "時間", + "xpack.uptime.alerts.monitorStatus.timerangeOption.minutes": "分", + "xpack.uptime.alerts.monitorStatus.timerangeOption.months": "か月", + "xpack.uptime.alerts.monitorStatus.timerangeOption.seconds": "秒", + "xpack.uptime.alerts.monitorStatus.timerangeOption.weeks": "週間", + "xpack.uptime.alerts.monitorStatus.timerangeOption.years": "年", + "xpack.uptime.alerts.monitorStatus.timerangeSelectionHeader": "時間範囲単位を選択します", + "xpack.uptime.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "時間範囲単位選択フィールドのポップオーバーを開く", + "xpack.uptime.alerts.monitorStatus.timerangeUnitSelectable": "アラートで使用する時間範囲単位の選択可能フィールド", + "xpack.uptime.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "時間範囲値フィールドのポップオーバーを開く", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.ariaLabel": "アラートの範囲のための時間単位の数を入力してください", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.expression": "within", + "xpack.uptime.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "「日」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "「時間」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "「分」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "「月」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "「秒」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "「週」の時間範囲選択項目", + "xpack.uptime.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "「年」の時間範囲選択項目", + "xpack.uptime.alerts.tls": "アップタイムTLS", + "xpack.uptime.alerts.tls.actionVariables.state.agingCommonNameAndDate": "検出された証明書の共通名と有効期限日時。", + "xpack.uptime.alerts.tls.actionVariables.state.agingCount": "検出された古くなりすぎた証明書数。", + "xpack.uptime.alerts.tls.actionVariables.state.count": "アラート実行によって検出された証明書数", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "検出された証明書の共通名と有効期限日時", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCount": "アラートによって検出された期限切れになる証明書数", + "xpack.uptime.alerts.tls.agingLabel": "古すぎます", + "xpack.uptime.alerts.tls.criteriaExpression.ariaLabel": "このアラートで監視されるモニターの条件を示す式", + "xpack.uptime.alerts.tls.expiredLabel": "期限切れ", + "xpack.uptime.alerts.tls.expiringLabel": "まもなく期限切れ", + "xpack.uptime.alerts.tls.invalidLabel": "無効", + "xpack.uptime.alerts.tlsLegacy": "アップタイムTLS(レガシー)", + "xpack.uptime.alertsPopover.toggleButton.ariaLabel": "アラートおよびルールコンテキストメニューを開く", + "xpack.uptime.apmIntegrationAction.description": "このモニターの検索 APM", + "xpack.uptime.apmIntegrationAction.text": "APMデータを表示", + "xpack.uptime.breadcrumbs.legacyOverviewBreadcrumbText": "アップタイム", + "xpack.uptime.controls.selectSeverity.criticalLabel": "致命的", + "xpack.uptime.controls.selectSeverity.majorLabel": "メジャー", + "xpack.uptime.controls.selectSeverity.minorLabel": "マイナー", + "xpack.uptime.controls.selectSeverity.warningLabel": "警告", + "xpack.uptime.deprecateNoticeModal.addPrivateLocations": "Fleetポリシーに対して非公開の場所を追加", + "xpack.uptime.deprecateNoticeModal.automateMonitors": "プロジェクトモニターを使用してモニターの作成を自動化", + "xpack.uptime.deprecateNoticeModal.description": "Elastic Synthetics統合は廃止予定です。その代わり、エンドポイント、ページ、ユーザージャーニーをSyntheticsアプリから直接監視できるようになり、より効率的になりました:", + "xpack.uptime.deprecateNoticeModal.elasticManagedLocations": "Elasticが管理する複数の場所で、またはお客様の非公開の場所からモニターを実行", + "xpack.uptime.deprecateNoticeModal.goBack": "戻る", + "xpack.uptime.deprecateNoticeModal.goToSynthetics": "Syntheticsに移動", + "xpack.uptime.deprecateNoticeModal.headerText": "SyntheticsでSynthetic Monitoringがすぐに使えるようになりました", + "xpack.uptime.deprecateNoticeModal.manageMonitors": "軽量化とブラウザーモニターの一元管理", + "xpack.uptime.deprecateNoticeModal.readDocs": "ドキュメントをお読みください。", + "xpack.uptime.durationChart.emptyPrompt.title": "利用可能な期間データがありません", + "xpack.uptime.editPackagePolicy.inSynthetics": "Syntheticsで編集", + "xpack.uptime.editPackagePolicy.inSyntheticsDesc": "このパッケージポリシーは、Syntheticsアプリで管理されます。", + "xpack.uptime.emptyState.loadingMessage": "読み込み中…", + "xpack.uptime.emptyStateError.notFoundPage": "ページが見つかりません", + "xpack.uptime.enableAlert.editAlert": "アラートを編集", + "xpack.uptime.filterBar.ariaLabel": "概要ページのインプットフィルター基準", + "xpack.uptime.filterBar.filterAllLabel": "すべて", + "xpack.uptime.filterBar.options.location.name": "場所", + "xpack.uptime.filterBar.options.portLabel": "ポート", + "xpack.uptime.filterBar.options.schemeLabel": "スキーム", + "xpack.uptime.filterBar.options.tagsLabel": "タグ", + "xpack.uptime.fleetIntegration.assets.description": "Syntheticsでモニターを表示", + "xpack.uptime.fleetIntegration.assets.name": "監視", + "xpack.uptime.integration.deprecation.dismiss": "閉じる", + "xpack.uptime.integration.deprecation.link": "Synthetics移行ドキュメント", + "xpack.uptime.integration.deprecation.title": "Elastic Synthetics統合モニターを移行", + "xpack.uptime.integrationLink.missingDataMessage": "この統合に必要なデータが見つかりませんでした。", + "xpack.uptime.kueryBar.searchPlaceholder.kql": "KQL構文を使用して、モニターID、名前、タイプ(例:monitor.type: \"http\" AND tags: \"dev\")などを検索", + "xpack.uptime.kueryBar.searchPlaceholder.simpleText": "モニターID、名前、URL、ポート、またはタグで検索", + "xpack.uptime.locationName.helpLinkAnnotation": "場所を追加", + "xpack.uptime.mappingErrorRoute.breadcrumb": "マッピングエラー", + "xpack.uptime.mappingErrorRoute.pageHeader.title": "マッピングエラー", + "xpack.uptime.mappingErrorRoute.title": "Synthetics | マッピングエラー", + "xpack.uptime.ml.durationChart.exploreInMlApp": "ML アプリで探索", + "xpack.uptime.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "権限が必要です", + "xpack.uptime.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "異常検知", + "xpack.uptime.ml.enableAnomalyDetectionPanel.cancelLabel": "キャンセル", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createMLJobDescription": "ここでは機械学習ジョブを作成し、\n アップタイム監視の対応期間の異常スコアを計算できます。有効にすると、詳細ページの監視期間グラフには\n 想定された境界が表示され、異常があるグラフに注釈が付けられます。また、\n 地理的な地域にわたって遅延が増える期間を特定することもできます。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "新規ジョブを作成", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "異常アラートを無効にする", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "異常検知を無効にする", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "異常検知ジョブを有効にできます。ジョブがすでに存在する場合はジョブまたはアラートを管理できます。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "異常アラートを有効にする", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "異常検知を有効にする", + "xpack.uptime.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "機械学習でこの機能を使用するには、Kibana権限が必要です。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "分析は機械学習ノードが使用可能になるのを待機しています。応答時間グラフに結果が追加されるまで、しばらく時間がかかる可能性があります。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "これで応答時間グラフについての分析が実行されます。応答時間グラフに結果が追加されるまで、しばらく時間がかかる可能性があります。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "ジョブを表示", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "ジョブの作成が正常に完了しました", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "現在のライセンスでは機械学習ジョブの作成が許可されていないか、ジョブがすでに存在する可能性があります。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "ジョブの作成に失敗", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "異常検知ジョブを削除しますか?", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "ジョブを削除しました", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "ジョブの削除が正常に完了しました", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "異常検知を管理", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "機械学習ジョブの管理ページ", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "注:ジョブが結果の計算を開始するまでに少し時間がかかる場合があります。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "異常アラートを作成するには、アップタイムへの読み書きアクセス権が必要です。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrial": "無料の 14 日トライアルを開始", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrialDesc": "期間異常検知機能を利用するには、Elastic Platinum ライセンスが必要です。", + "xpack.uptime.monitorCharts.durationChart.wrapper.label": "場所でグループ化された、モニターのping期間を示すグラフ。", + "xpack.uptime.monitorCharts.monitorDuration.titleLabel": "監視期間", + "xpack.uptime.monitorDetails.ml.confirmAlertDeleteMessage": "異常のアラートを削除しますか?", + "xpack.uptime.monitorDetails.ml.confirmDeleteMessage": "このジョブを削除してよろしいですか?", + "xpack.uptime.monitorDetails.ml.deleteJobWarning": "ジョブの削除に時間がかかる可能性があります。削除はバックグラウンドで実行され、データの表示がすぐに消えないことがあります。", + "xpack.uptime.monitorDetails.ml.deleteMessage": "ジョブを削除中...", + "xpack.uptime.monitorDetails.statusBar.pingType.browser": "ブラウザー", + "xpack.uptime.monitorDetails.statusBar.pingType.http": "HTTP", + "xpack.uptime.monitorDetails.statusBar.pingType.icmp": "ICMP", + "xpack.uptime.monitorDetails.statusBar.pingType.tcp": "TCP", + "xpack.uptime.monitorDetails.title.disclaimer.description": "(ベータ)", + "xpack.uptime.monitorDetails.title.disclaimer.link": "詳細を表示", + "xpack.uptime.monitorDetails.title.pingType.browser": "ブラウザー", + "xpack.uptime.monitorDetails.title.pingType.http": "HTTP ping", + "xpack.uptime.monitorDetails.title.pingType.icmp": "ICMP ping", + "xpack.uptime.monitorDetails.title.pingType.tcp": "TCP ping", + "xpack.uptime.monitorList.defineConnector.popover.description": "ステータスアラートを受信します。", + "xpack.uptime.monitorList.disableDownAlert": "ステータスアラートを無効にする", + "xpack.uptime.monitorList.downLineSeries.downLabel": "ダウン", + "xpack.uptime.monitorList.drawer.mostRecentRun": "直近のテスト実行", + "xpack.uptime.monitorList.drawer.url": "Url", + "xpack.uptime.monitorList.enabledAlerts.noAlert": "このモニターではルールが有効ではありません。", + "xpack.uptime.monitorList.enabledAlerts.title": "有効なルール", + "xpack.uptime.monitorList.enableDownAlert": "ステータスアラートを有効にする", + "xpack.uptime.monitorList.geoName.helpLinkAnnotation": "場所を追加", + "xpack.uptime.monitorList.infraIntegrationAction.container.message": "コンテナーメトリックを表示", + "xpack.uptime.monitorList.infraIntegrationAction.docker.description": "このモニターのコンテナーIDのインフラストラクチャーUIを確認します", + "xpack.uptime.monitorList.infraIntegrationAction.ip.ariaLabel": "このモニターのIPアドレスのインフラストラクチャーUIを確認します", + "xpack.uptime.monitorList.infraIntegrationAction.ip.message": "ホストメトリックを表示", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.description": "このモニターのポッドIDのインフラストラクチャーUIを確認します", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.message": "ポッドメトリックを表示", + "xpack.uptime.monitorList.integrationGroup.emptyMessage": "統合されたアプリケーションがありません", + "xpack.uptime.monitorList.loading": "読み込み中...", + "xpack.uptime.monitorList.locations.expand": "クリックすると、残りの場所が表示されます", + "xpack.uptime.monitorList.loggingIntegrationAction.container.id": "コンテナーログを表示", + "xpack.uptime.monitorList.loggingIntegrationAction.container.message": "コンテナーログを表示", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.description": "このモニターのIPアドレスのロギングUIを確認", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.message": "ホストログを表示", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "ポッドログを表示", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.message": "ポッドログを表示", + "xpack.uptime.monitorList.monitorHistoryColumnLabel": "ダウンタイム履歴", + "xpack.uptime.monitorList.monitoringStatusTitle": "監視", + "xpack.uptime.monitorList.nameColumnLabel": "名前", + "xpack.uptime.monitorList.noItemForSelectedFiltersMessage": "選択されたフィルター条件でモニターが見つかりませんでした", + "xpack.uptime.monitorList.noItemMessage": "アップタイムモニターが見つかりません", + "xpack.uptime.monitorList.noMessage.troubleshoot": "絶対日付範囲を使用してください。監視が後から表示される場合は、HeartbeatまたはKibanaがインストールされたシステムクロックに問題がある可能性があります。", + "xpack.uptime.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "調査", + "xpack.uptime.monitorList.statusAlert.label": "ステータスアラート", + "xpack.uptime.monitorList.statusColumnLabel": "ステータス", + "xpack.uptime.monitorList.tags.expand": "クリックすると、残りのタグが表示されます", + "xpack.uptime.monitorList.tlsColumnLabel": "TLS 証明書", + "xpack.uptime.monitorList.troubleshoot.systemClockOutOfSync": "システムクロックが同期されていない可能性があります", + "xpack.uptime.monitorList.troubleshoot.tryDateRange": "絶対日付範囲を適用", + "xpack.uptime.monitorList.troubleshoot.whereAreMyMonitors": "モニターの場所", + "xpack.uptime.monitorStatusBar.durationTextAriaLabel": "ミリ秒単位の監視時間", + "xpack.uptime.monitorStatusBar.healthStatusMessageAriaLabel": "監視ステータス", + "xpack.uptime.monitorStatusBar.loadingMessage": "読み込み中…", + "xpack.uptime.monitorStatusBar.monitor.availability": "全体的な可用性", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.availability": "可用性", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.location": "場所", + "xpack.uptime.monitorStatusBar.monitor.id": "監視ID", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom": "監視元", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.listToMap": "マップビューに変更し、場所別に可用性を確認します。", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.MapToList": "リストビューに変更し、場所別に可用性を確認します。", + "xpack.uptime.monitorStatusBar.monitorUrlLinkAriaLabel": "監視 URL リンク", + "xpack.uptime.monitorStatusBar.sslCertificate.title": "TLS 証明書", + "xpack.uptime.monitorStatusBar.timestampFromNowTextAriaLabel": "最終確認からの経過時間", + "xpack.uptime.monitorStatusBar.type.ariaLabel": "モニタータイプ", + "xpack.uptime.monitorStatusBar.type.label": "型", + "xpack.uptime.navigateToAlertingButton.content": "ルールの管理", + "xpack.uptime.navigateToAlertingUi": "Uptime を離れてアラート管理ページに移動します", + "xpack.uptime.noDataConfig.beatsCard.description": "サイトとサービスの可用性をアクティブに監視するアラートを受信し、問題をより迅速に解決して、ユーザーエクスペリエンスを最適化します。", + "xpack.uptime.noDataConfig.beatsCard.title": "Heartbeatでモニターを追加", + "xpack.uptime.noDataConfig.solutionName": "Observability", + "xpack.uptime.notFountPage.homeLinkText": "ホームへ戻る", + "xpack.uptime.openAlertContextPanel.label": "ルールを作成", + "xpack.uptime.overview.alerts.disabled.failed": "ルールを無効にできません。", + "xpack.uptime.overview.alerts.disabled.success": "ルールが正常に無効にされました。", + "xpack.uptime.overview.alerts.enabled.failed": "ルールを有効にできません。", + "xpack.uptime.overview.alerts.enabled.success": "ルールが正常に有効にされました。 ", + "xpack.uptime.overview.uptimeHeading": "稼働状況監視", + "xpack.uptime.overviewPageLink.disabled.ariaLabel": "無効になったページ付けボタンです。モニターリストがこれ以上ナビゲーションできないことを示しています。", + "xpack.uptime.overviewPageLink.next.ariaLabel": "次の結果ページ", + "xpack.uptime.overviewPageLink.prev.ariaLabel": "前の結果ページ", + "xpack.uptime.page_header.addDataLink.label": "アップタイムデータの追加に関するチュートリアルに移動", + "xpack.uptime.page_header.defineConnector.popover.defaultLink": "デフォルトのコネクターを定義", + "xpack.uptime.page_header.defineConnector.settingsLink": "設定", + "xpack.uptime.page_header.manageLink.not": "モニター管理はUptimeでは利用できなくなりました。Syntheticsアプリを使用してください。", + "xpack.uptime.page_header.manageMonitors": "モニター管理", + "xpack.uptime.pingList.checkHistoryTitle": "履歴", + "xpack.uptime.pingList.columns.failedStep": "失敗したステップ", + "xpack.uptime.pingList.drawer.body.docsLink": "ドキュメント", + "xpack.uptime.pingList.stepDurationHeader": "ステップ期間", + "xpack.uptime.pingList.synthetics.performanceBreakDown": "パフォーマンスの内訳を表示", + "xpack.uptime.pingList.synthetics.waterfall.filters.popover": "クリックすると、ウォーターフォールフィルターが開きます", + "xpack.uptime.public.pages.mappingError.title": "Heartbeatマッピングが見つかりません", + "xpack.uptime.routes.legacyBaseTitle": "アップタイム - Kibana", + "xpack.uptime.settings.heading": "アップタイム設定", + "xpack.uptime.snapshot.monitor": "監視", + "xpack.uptime.snapshot.monitors": "監視", + "xpack.uptime.snapshot.noDataDescription": "選択した時間範囲に ping はありません。", + "xpack.uptime.snapshot.noDataTitle": "利用可能な ping データがありません", + "xpack.uptime.snapshot.pingsOverTimeTitle": "一定時間のピング", + "xpack.uptime.snapshotHistogram.series.pings": "モニター接続確認", + "xpack.uptime.snapshotHistogram.xAxisId": "ピング X 軸", + "xpack.uptime.snapshotHistogram.yAxis.title": "ピング", + "xpack.uptime.snapshotHistogram.yAxisId": "ピングY軸", + "xpack.uptime.sourceConfiguration.ageLimit.units.days": "日", + "xpack.uptime.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "TLS証明書が有効である最大日数を制御するインプット。この期間を過ぎると、Kibanaで警告が表示されます。", + "xpack.uptime.sourceConfiguration.alertConnectors": "アラートコネクター", + "xpack.uptime.sourceConfiguration.alertDefaultForm.requiredEmail": "電子メールコネクターには宛先電子メールアドレスが必須です", + "xpack.uptime.sourceConfiguration.alertDefaults": "アラートデフォルト", + "xpack.uptime.sourceConfiguration.applySettingsButtonLabel": "変更を適用", + "xpack.uptime.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "TLS証明書の満了日までの最小日数を制御するインプット。この期間を過ぎると、Kibanaで警告が表示されます。", + "xpack.uptime.sourceConfiguration.certificateThresholdDescription": "証明書エラーを表示し、アラートを通知するしきい値を変更します。注:すべての構成されたアラートに影響します。", + "xpack.uptime.sourceConfiguration.certificationSectionTitle": "証明書の有効期限", + "xpack.uptime.sourceConfiguration.defaultConnectors.description": "アラートを送信するために使用されるデフォルトコネクター。", + "xpack.uptime.sourceConfiguration.discardSettingsButtonLabel": "キャンセル", + "xpack.uptime.sourceConfiguration.errorStateLabel": "有効期限しきい値", + "xpack.uptime.sourceConfiguration.expirationThreshold": "有効期限/使用期間しきい値", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDescription": "Heartbeat データを含むインデックス照合用のインデックスパターン", + "xpack.uptime.sourceConfiguration.heartbeatIndicesLabel": "Heartbeat インデックス", + "xpack.uptime.sourceConfiguration.heartbeatIndicesTitle": "アップタイムインデックス", + "xpack.uptime.sourceConfiguration.indicesSectionTitle": "インデックス", + "xpack.uptime.sourceConfiguration.warningStateLabel": "使用期間上限", + "xpack.uptime.stepList.collapseRow": "縮小", + "xpack.uptime.stepList.expandRow": "拡張", + "xpack.uptime.stepList.stepName": "ステップ名", + "xpack.uptime.synthetics.consoleStepList.message": "実行できませんでした。記録されたコンソール出力は次のとおりです。", + "xpack.uptime.synthetics.consoleStepList.title": "ステップが実行されませんでした", + "xpack.uptime.synthetics.emptyJourney.message.footer": "表示する詳細情報はありません。", + "xpack.uptime.synthetics.emptyJourney.message.heading": "ステップが含まれていませんでした。", + "xpack.uptime.synthetics.emptyJourney.title": "ステップがありません。", + "xpack.uptime.synthetics.executedStep.consoleOutput.label": "コンソール出力", + "xpack.uptime.synthetics.executedStep.errorHeading": "エラーメッセージ", + "xpack.uptime.synthetics.executedStep.screenshot.not": "スクリーンショット", + "xpack.uptime.synthetics.executedStep.scriptHeading.label": "このステップで実行されたスクリプト", + "xpack.uptime.synthetics.executedStep.stackTrace": "スタックトレース", + "xpack.uptime.synthetics.imageLoadingSpinner.ariaLabel": "画像を示すアニメーションスピナーを読み込んでいます", + "xpack.uptime.synthetics.journey.loadingSteps": "ステップを読み込んでいます...", + "xpack.uptime.synthetics.nextStepButton.ariaLabel": "次のステップ", + "xpack.uptime.synthetics.performanceBreakDown.label": "パフォーマンスの内訳", + "xpack.uptime.synthetics.prevStepButton.airaLabel": "前のステップ", + "xpack.uptime.synthetics.screenshot.loadingImageMessage": "読み込み中", + "xpack.uptime.synthetics.screenshot.noImageMessage": "画像がありません", + "xpack.uptime.synthetics.screenshotDisplay.altTextWithoutName": "スクリーンショット", + "xpack.uptime.synthetics.statusBadge.failedMessage": "失敗", + "xpack.uptime.synthetics.statusBadge.skippedMessage": "スキップ", + "xpack.uptime.synthetics.statusBadge.succeededMessage": "成功", + "xpack.uptime.synthetics.step.durationTrend": "ステップ期間傾向", + "xpack.uptime.synthetics.stepDetail.noData": "このステップのデータが見つかりませんでした", + "xpack.uptime.synthetics.stepList.nextCheck": "次の確認", + "xpack.uptime.synthetics.stepList.previousCheck": "前の確認", + "xpack.uptime.synthetics.thumbnail.fullSize.alt": "このステップのサムネイルのスクリーンショットの大きいバージョン。", + "xpack.uptime.title": "アップタイム", + "xpack.uptime.toggleTlsAlertButton.ariaLabel": "TLSルールフライアウトを開く", + "xpack.uptime.toggleTlsAlertButton.content": "TLSルール", "xpack.threatIntelligence.common.emptyPage.body3": "Elastic Threat Intelligenceを開始するには、[統合]ページから1つ以上の脅威インテリジェンス統合を有効にするか、Filebeatを使用してデータを取り込みます。詳細については、{docsLink}。", "xpack.threatIntelligence.addToBlockList": "ブロックリストエントリの追加", "xpack.threatIntelligence.addToExistingCase": "既存のケースに追加", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 31d221e54307a..2056fe2b0367f 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -35412,34 +35412,18 @@ "xpack.synthetics.alertRules.monitorStatus.reasonMessage": "来自 {location} 的监测“{name}”为 {status}。已于 {checkedAt} 检查。", "xpack.synthetics.alerts.durationAnomaly.defaultActionMessage": "{anomalyStartTimestamp} 在 url {monitorUrl} 的 {monitor} 上检测到异常({severity} 级别)响应时间。异常严重性分数为 {severityScore}。\n从位置 {observerLocation} 检测到高达 {slowestAnomalyResponse} 的响应时间。预期响应时间为 {expectedResponseTime}。", "xpack.synthetics.alerts.durationAnomaly.defaultRecoveryMessage": "{anomalyStartTimestamp} 从位置 {observerLocation} 在 url {monitorUrl} 的监测 {monitor} 上检测到异常({severity} 级别)响应时间的告警已恢复", - "xpack.synthetics.alerts.monitorExpression.label": "移除筛选 {title}", - "xpack.synthetics.alerts.monitorStatus.actionVariables.down": "在过去 {interval}中失败 {count} 次。大于 {numTimes} 时告警。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} {availabilityBreachMessage}", "xpack.synthetics.alerts.monitorStatus.defaultActionMessage": "在 {observerLocation},URL 为 {monitorUrl} 的监测 {monitorName} 是 {statusMessage} 最新错误消息是 {latestErrorMessage},已于 {checkedAt} 检查", "xpack.synthetics.alerts.monitorStatus.defaultRecoveryMessage": "来自 {observerLocation} 且 url 为 {monitorUrl} 的监测 {monitorName} 的告警已恢复", "xpack.synthetics.alerts.monitorStatus.defaultRecoverySubjectMessage": "URL 为 {monitorUrl} 的监测 {monitorName} 已恢复", "xpack.synthetics.alerts.monitorStatus.defaultSubjectMessage": "URL 为 {monitorUrl} 的监测 {monitorName} 已关闭", - "xpack.synthetics.alerts.monitorStatus.monitorCallOut.title": "此告警将应用到大约 {snapshotCount} 个监测。", - "xpack.synthetics.alerts.monitorStatus.reasonMessage": "来自 {location} 的监测“{name}”为 {status} 已于 {checkedAt} 检查。", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.value": "最后一个 {value}", "xpack.synthetics.alerts.tls.defaultActionMessage": "检测到来自颁发者 {issuer} 的 TLS 证书 {commonName} 的状态为 {status}。证书 {summary}", "xpack.synthetics.alerts.tls.defaultRecoveryMessage": "来自颁发者 {issuer} 的 TLS 证书 {commonName} 的告警已恢复", "xpack.synthetics.alerts.tls.legacy.defaultActionMessage": "检测到 {count} 个 TLS 证书即将过期或即将过时。\n{expiringConditionalOpen}\n即将过期的证书计数:{expiringCount}\n即将过期的证书:{expiringCommonNameAndDate}\n{expiringConditionalClose}\n{agingConditionalOpen}\n过时的证书计数:{agingCount}\n过时的证书:{agingCommonNameAndDate}\n{agingConditionalClose}\n", - "xpack.synthetics.alerts.tls.validAfterExpiredString": "已于 {relativeDate} 天前,即 {date}过期。", - "xpack.synthetics.alerts.tls.validAfterExpiringString": "将在 {relativeDate} 天后,即 {date}到期。", - "xpack.synthetics.alerts.tls.validBeforeExpiredString": "自 {relativeDate} 天前,即 {date}开始生效。", - "xpack.synthetics.alerts.tls.validBeforeExpiringString": "从现在到 {date}的 {relativeDate} 天里无效。", - "xpack.synthetics.availabilityLabelText": "{value} %", "xpack.synthetics.certificates.heading": "TLS 证书 ({total})", "xpack.synthetics.certificatesRoute.title": "证书 | {baseTitle}", "xpack.synthetics.certs.status.ok.label": " 对于 {okRelativeDate}", - "xpack.synthetics.charts.mlAnnotation.header": "分数:{score}", - "xpack.synthetics.charts.mlAnnotation.severity": "严重性:{severity}", - "xpack.synthetics.controls.selectSeverity.scoreDetailsDescription": "分数 {value} 及以上", "xpack.synthetics.createMonitorRoute.title": "创建监测 | {baseTitle}", "xpack.synthetics.createPackagePolicy.stepConfigure.browserAdvancedSettings.throttling.throttling_exceeded.message": "您已超出 Synthetic 节点的 {throttlingField} 限制。{throttlingField} 值不能大于 {limit}Mbps。", - "xpack.synthetics.deprecateNoticeModal.forMoreInformation": "有关更多信息,{docsLink}", - "xpack.synthetics.durationChart.emptyPrompt.description": "在选定时间范围内此监测从未{emphasizedText}。", "xpack.synthetics.editMonitorRoute.title": "编辑监测 | {baseTitle}", "xpack.synthetics.errorDetails.errorDuration.days": "{value} 天", "xpack.synthetics.errorDetails.errorDuration.hours": "{value} 小时", @@ -35452,7 +35436,6 @@ "xpack.synthetics.gettingStarted.createLocationDescription": "要开始创建监测,您首先需要创建 {link}。专用位置供您从自己的场所运行监测。它们需要可以通过 Fleet 进行控制和维护的 Elastic 代理和代理策略。", "xpack.synthetics.gettingStarted.publicLocationDescription": "在 {link} 中,还可以使用我们的 {elasticManagedLink}。通过它,您可以在多个位置创建并运行监测,而不必管理您自己的基础设施。Elastic 负责为您处理软件更新和容量规划。", "xpack.synthetics.gettingStartedRoute.title": "Synthetics 入门 | {baseTitle}", - "xpack.synthetics.integration.deprecation.content": "您至少具有一个使用 Elastic Synthetics 集成的已配置监测。从 Elastic 8.8 起,该集成将被弃用,您无法再编辑这些监测。请将它们迁移到项目监测,或将它们添加到在 Observability 中直接可用的全新 Synthetics 应用程序中。有关详情,请参阅我们的{link}。", "xpack.synthetics.keyValuePairsField.deleteItem.label": "删除项目编号 {index},{key}:{value}", "xpack.synthetics.lastUpdated.label": "已更新 {updatedDate}", "xpack.synthetics.management.filter.clickTypeMessage": "单击以筛选类型为 {typeName} 的记录。", @@ -35465,11 +35448,8 @@ "xpack.synthetics.management.monitorList.recordRange": "正在显示第 {range} 个(共 {total} 个){monitorsLabel}", "xpack.synthetics.management.monitorList.recordRangeLabel": "{monitorCount, plural, other {监测}}", "xpack.synthetics.management.monitorList.recordTotal": "正在显示 {total} 个 {monitorsLabel}", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "创建作业后,可以在 {mlJobsPageLink}中管理作业以及查看更多详细信息。", "xpack.synthetics.monitor.stepOfSteps": "第 {stepNumber} 步,共 {totalSteps} 步", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile": "({download} Mbps,{upload} Mbps,{latency} 毫秒)", - "xpack.synthetics.monitorCharts.durationChart.leftAxis.title": "持续时间({unit})", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabelWithAnomaly": "监测持续时间(异常:{noOfAnomalies})", "xpack.synthetics.monitorConfig.monitorScriptEditStep.description": "使用 Elastic Synthetics 记录器生成并上传脚本。或者,您也可以在脚本编辑器中编辑现有 {playwright} 脚本(或粘贴新脚本)。", "xpack.synthetics.monitorConfig.monitorScriptStep.description": "使用 Elastic Synthetics 记录器生成一段脚本,然后上传。或者,您也可以编写自己的 {playwright} 脚本,然后将其粘贴到脚本编辑器。", "xpack.synthetics.monitorConfig.params.helpText": "请使用 JSON 来定义可在您的脚本中通过 {paramsValue} 引用的参数", @@ -35485,33 +35465,8 @@ "xpack.synthetics.monitorErrors.title": "Synthetics 监测错误 | {baseTitle}", "xpack.synthetics.monitorFilters.frequencyLabel": "每 {count} 分钟", "xpack.synthetics.monitorHistory.title": "Synthetics 监测历史记录 | {baseTitle}", - "xpack.synthetics.monitorList.defineConnector.description": "在 {link} 中定义默认连接器以启用监测状态告警。", - "xpack.synthetics.monitorList.drawer.missingLocation": "某些 Heartbeat 实例未定义位置。{link}到您的 Heartbeat 配置。", - "xpack.synthetics.monitorList.drawer.statusRowLocationList": "上次检查时状态为“{status}”的位置列表。", - "xpack.synthetics.monitorList.expandDrawerButton.ariaLabel": "展开 ID 为 {id} 的监测的行", "xpack.synthetics.monitorList.flyout.unitStr": "每 {unitMsg}", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.tooltip": "在 Infrastructure UI 上查找容器 ID“{containerId}”", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.tooltip": "在 Infrastructure UI 上查找 IP“{ip}”", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.tooltip": "在 Infrastructure UI 上查找 Pod UID“{podUid}”。", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.tooltip": "在 Logging UI 上查找容器 ID“{containerId}”", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.tooltip": "在 Logging UI 上查找 IP“{ip}”", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.tooltip": "查找 Pod UID“{podUid}”的日志", - "xpack.synthetics.monitorList.monitorType.filter": "筛选 {type} 类型的所有监测", - "xpack.synthetics.monitorList.mostRecentError.title": "最近错误 ({timestamp})", - "xpack.synthetics.monitorList.noDownHistory": "在选定时间范围内此监测从未{emphasizedText}。", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "单击此处可在 APM 中查找域“{domain}”或显式定义的“服务名称”。", - "xpack.synthetics.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "打开 url {monitorUrl} 的监测的集成弹出式窗口", - "xpack.synthetics.monitorList.pageSizePopoverButtonText": "每页行数:{size}", - "xpack.synthetics.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows} 行", "xpack.synthetics.monitorList.redirects.description": "执行 ping 时,Heartbeat 在 {number} 次重定向后运行。", - "xpack.synthetics.monitorList.redirects.title.number": "{number}", - "xpack.synthetics.monitorList.statusColumn.checkedTimestamp": "{timestamp}已检查", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage": "在 {noLoc} 个位置", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.multiple": "在 {noLoc} 个位置", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.down": "在 {locs} 关闭", - "xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.up": "在 {locs} 运行", - "xpack.synthetics.monitorList.table.description": "具有“状态”、“名称”、“URL”、“IP”、“中断历史记录”和“集成”列的“监测状态”表。该表当前显示 {length} 个项目。", - "xpack.synthetics.monitorList.tags.filter": "筛选带 {tag} 标签的所有监测", "xpack.synthetics.monitorManagement.agentCallout.content": "要在此专用位置上运行“浏览器”监测,请确保使用 {code} Docker 容器,其中包含运行这些监测必需的依赖项。有关更多信息,{link}。", "xpack.synthetics.monitorManagement.agentMissingCallout.content": "您已选择一个未附加任何代理的代理策略。请确保在此策略中至少注册了一个代理。您可以在创建位置之前或之后添加代理。有关更多信息,{link}。", "xpack.synthetics.monitorManagement.anotherPrivateLocation": "此代理策略已附加到以下位置:{locationName}。", @@ -35530,16 +35485,12 @@ "xpack.synthetics.monitorManagement.viewMonitors": "位置 {name} 正运行 {count, number} 个{count, plural, other {监测}}。", "xpack.synthetics.monitorManagementRoute.title": "监测管理 | {baseTitle}", "xpack.synthetics.monitorNotFound.title": "找不到 Synthetics 监测 | {baseTitle}", - "xpack.synthetics.monitorRoute.title": "监测 | {baseTitle}", - "xpack.synthetics.monitorStatusBar.locations.oneLocStatus": "在 {loc} 位置处于 {status}", - "xpack.synthetics.monitorStatusBar.locations.upStatus": "在 {loc} 位置处于 {status}", "xpack.synthetics.overview.actions.disabledSuccessLabel": "已成功禁用监测“{name}”。", "xpack.synthetics.overview.actions.disabledSuccessLabel.alert": "现在已对监测“{name}”禁用告警。", "xpack.synthetics.overview.actions.enabledFailLabel": "无法更新监测“{name}”。", "xpack.synthetics.overview.actions.enabledFailLabel.alert": "无法对监测“{name}”启用状态告警。", "xpack.synthetics.overview.actions.enabledSuccessLabel": "已成功启用监测“{name}”", "xpack.synthetics.overview.actions.enabledSuccessLabel.alert": "现在已对监测“{name}”启用告警。", - "xpack.synthetics.overview.alerts.enabled.success.description": "此监测关闭时,将有消息发送到 {actionConnectors}。", "xpack.synthetics.overview.duration.description.values": "平均值:{avg},最小值:{min},最大值:{max}", "xpack.synthetics.overview.durationMsFormatting": "{millis} 毫秒", "xpack.synthetics.overview.durationMsFormattingNoSpace": "{millis}ms", @@ -35551,18 +35502,12 @@ "xpack.synthetics.paramManagement.paramDeleteFailuresMessage.name": "已成功删除参数 {name}。", "xpack.synthetics.paramManagement.paramDeleteSuccessMessage.name": "已成功删除参数 {name}。", "xpack.synthetics.params.description": "定义可在浏览器和轻量级监测的配置中使用的变量和参数,如凭据或 URL。{learnMore}", - "xpack.synthetics.pingist.durationSecondsColumnFormatting": "{seconds} 秒", - "xpack.synthetics.pingist.durationSecondsColumnFormatting.singular": "{seconds} 秒", - "xpack.synthetics.pingList.durationMsColumnFormatting": "{millis} 毫秒", "xpack.synthetics.pingList.expandedRow.bodySize": "正文大小为 {bodyBytes}。", - "xpack.synthetics.pingList.expandedRow.response_body.notRecorded": "正文未记录。阅读我们的{docsLink}以详细了解如何记录响应正文。", "xpack.synthetics.pingList.expandedRow.truncated": "显示前 {contentBytes} 个字节。", "xpack.synthetics.pingList.recencyMessage": "{fromNow}已检查", "xpack.synthetics.project.readOnly.callout.content": "已从外部项目添加此监测:{projectId}。从此页面,您只能对其执行启用、禁用或移除操作。要做出配置更改,您必须编辑其源文件,然后从该项目再次推送配置。", "xpack.synthetics.projectMonitorApi.validation.invalidUrlOrHosts.description": "`{monitorType}` 项目监测必须在版本 `{version}` 中具有字段 `{key}` 的一个值。未创建或更新您的监测。", "xpack.synthetics.prompt.errors.notFound.body": "抱歉,找不到 ID 为 {monitorId} 的监测。它可能已被移除,或您没有查看权限。", - "xpack.synthetics.public.pages.mappingError.bodyDocsLink": "您可以在 {docsLink} 中了解如何解决此问题。", - "xpack.synthetics.public.pages.mappingError.bodyMessage": "检测到不正确的映射!可能您忘记运行 Heartbeat {setup} 命令?", "xpack.synthetics.server.projectMonitors.invalidPrivateLocationError": "以下专用位置无效:“{location}”。请将其移除或替换为有效的专用位置。", "xpack.synthetics.server.projectMonitors.invalidPublicLocationError": "位置无效:“{location}”。请将其移除或替换为有效位置。", "xpack.synthetics.service.projectMonitors.cannotUpdateMonitorToDifferentTypeDetails": "无法将 {previousType} 类型的监测 {monitorId} 更新为 {currentType} 类型。请先删除监测,然后重试。", @@ -35570,37 +35515,19 @@ "xpack.synthetics.settingsRoute.retentionCalloutDescription": "要更改数据保留设置,建议创建您自己的索引生命周期策略,并将其附加到 {stackManagement} 中的相关定制组件模板。有关更多信息,{docsLink}。", "xpack.synthetics.settingsRoute.table.retentionPeriodValue": "{value} 天 + 滚动更新", "xpack.synthetics.settingsRoute.title": "设置 | {baseTitle}", - "xpack.synthetics.snapshot.donutChart.ariaLabel": "显示当前状态的饼图。{down} 个监测已关闭,共 {total} 个。", - "xpack.synthetics.snapshotHistogram.description": "显示从 {startTime} 到 {endTime} 的运行时间时移状态的条形图。", - "xpack.synthetics.sourceConfiguration.ageThresholdDefaultValue": "默认值为 {defaultValue}", "xpack.synthetics.sourceConfiguration.alertDefaultForm.invalidEmail": "{val} 不是有效电子邮件。", - "xpack.synthetics.sourceConfiguration.expirationThresholdDefaultValue": "默认值为 {defaultValue}", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDefaultValue": "默认值为 {defaultValue}", "xpack.synthetics.step.duration.label": "{value} 之后", - "xpack.synthetics.stepDetailRoute.title": "Synthetics 详细信息 | {baseTitle}", "xpack.synthetics.stepDetails.palette.decreased": "低 {delta}%", "xpack.synthetics.stepDetails.palette.increased": "高 {delta}%", "xpack.synthetics.stepDetails.palette.previous": "中位值(24 小时):{previous}", "xpack.synthetics.stepDetails.palette.tooltip": "值为与过去 24 小时中的之前步骤相比的 {deltaLabel}。", "xpack.synthetics.stepDetails.palette.tooltip.label": "值为与之前 24 小时中的步骤相比的 {deltaLabel}。", "xpack.synthetics.stepDetailsRoute.title": "步骤详情 | {baseTitle}", - "xpack.synthetics.synthetics.emptyJourney.message.checkGroupField": "该过程的检查组是 {codeBlock}。", - "xpack.synthetics.synthetics.executedStep.screenshot.notSucceeded": "{status} 检查的屏幕截图", "xpack.synthetics.synthetics.executedStep.screenshot.successfulLink": "来自 {link} 的屏幕截图", - "xpack.synthetics.synthetics.journey.allFailedMessage": "{total} 个步骤 - 全部失败或跳过", - "xpack.synthetics.synthetics.journey.allSucceededMessage": "{total} 个步骤 - 全部成功", - "xpack.synthetics.synthetics.journey.partialSuccessMessage": "{total} 个步骤 - {succeeded} 个成功", - "xpack.synthetics.synthetics.pingTimestamp.captionContent": "第 {stepNumber} 步,共 {totalSteps} 步", - "xpack.synthetics.synthetics.screenshotDisplay.altText": "名称为“{stepName}”的步骤的屏幕截图", - "xpack.synthetics.synthetics.step.duration": "{value} 秒", "xpack.synthetics.synthetics.stepDetail.stepNumber": "第 {stepIndex} 步", "xpack.synthetics.synthetics.stepDetail.totalSteps": "第 {stepIndex} 步,共 {totalSteps} 步", "xpack.synthetics.synthetics.testDetail.totalSteps": "第 {stepIndex} 步,共 {totalSteps} 步", "xpack.synthetics.synthetics.testDetails.stepNav": "{stepIndex} / {totalSteps}", - "xpack.synthetics.synthetics.waterfall.offsetUnit": "{offset} 毫秒", - "xpack.synthetics.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests}匹配筛选)", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests} 个网络请求", - "xpack.synthetics.synthetics.waterfall.requestsTotalMessage.first": "前 {count} 个", "xpack.synthetics.tableTitle.showing": "正在显示第 {count} 个(共 {total} 个){label}", "xpack.synthetics.tagsList.filter": "单击以筛选带 {tag} 标签的列表", "xpack.synthetics.testRun.runErrorLocation.reason": "无法在位置 {locationName} 运行监测。{reason}", @@ -35608,12 +35535,10 @@ "xpack.synthetics.waterfall.networkRequests.count": "正在显示第 {countShown} 个(共 {total} 个){networkRequestsLabel}", "xpack.synthetics.waterfall.networkRequests.pluralizedCount": "{total, plural, other {网络请求}}", "xpack.synthetics.active.label": "活动", - "xpack.synthetics.addDataButtonLabel": "添加数据", "xpack.synthetics.addEditMonitor.scriptEditor.ariaLabel": "JavaScript 代码编辑器", "xpack.synthetics.addEditMonitor.scriptEditor.helpText": "运行内联定义的 Synthetics 测试脚本。", "xpack.synthetics.addEditMonitor.scriptEditor.label": "脚本编辑器", "xpack.synthetics.addEditMonitor.scriptEditor.placeholder": "// 在此处粘贴 Playwright 脚本......", - "xpack.synthetics.alertDropdown.noWritePermissions": "您需要 Uptime 的读写访问权限才能在此应用中创建告警。", "xpack.synthetics.alerting.noConnectorsCallout.button": "立即配置", "xpack.synthetics.alerting.noConnectorsCallout.content": "您具有启用了告警的监测,但未配置默认连接器来发送那些告警。", "xpack.synthetics.alerting.noConnectorsCallout.header": "未发送告警", @@ -35641,140 +35566,30 @@ "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.monitorUrl": "监测的 URL。", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.observerHostname": "从中执行检查的位置的主机名。", "xpack.synthetics.alertRules.monitorStatus.actionVariables.state.status": "监测状态(例如“关闭”)。", - "xpack.synthetics.alerts.anomaly.criteriaExpression.ariaLabel": "显示选定监测的条件的表达式。", - "xpack.synthetics.alerts.anomaly.criteriaExpression.description": "当监测", - "xpack.synthetics.alerts.anomaly.scoreExpression.ariaLabel": "显示异常告警阈值的条件的表达式。", - "xpack.synthetics.alerts.anomaly.scoreExpression.description": "具有异常,严重性为", - "xpack.synthetics.alerts.createRulesPanel.title": "创建规则", - "xpack.synthetics.alerts.durationAnomaly": "Uptime 持续时间异常", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "异常开始的 ISO8601 时间戳。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "预期响应时间", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitor": "名称或 ID 的友好呈现,建议类似于 My Monitor 的名称", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorId": "监测的 ID。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.monitorUrl": "监测的 URL。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.observerLocation": "执行 Heartbeat 检查的观察者位置。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severity": "异常的严重性。", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.severityScore": "异常严重性分数", - "xpack.synthetics.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "在附加单位(ms、s)的异常存储桶期间最慢的响应时间。", "xpack.synthetics.alerts.durationAnomaly.clientName": "Uptime 持续时间异常", "xpack.synthetics.alerts.durationAnomaly.description": "运行时间监测持续时间异常时告警。", - "xpack.synthetics.alerts.monitorStatus": "运行时间监测状态", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "Elastic 内视图的链接,显示与此告警相关的进一步详细信息和上下文", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "告警原因的简洁描述", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.message.description": "生成的消息,汇总当前关闭的监测", - "xpack.synthetics.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "Elastic 中可用于进一步调查告警及其上下文的视图或功能的链接", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.checkedAt": "监测检查的时间戳。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "表示告警触发时当前触发状况开始的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "表示此告警首次检查的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "表示告警首次触发的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.isTriggered": "表示告警当前是否触发的标志", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "表示告警最近检查时间的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "监测最新错误消息", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "表示此告警最近解决时间的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "表示告警最近触发时间的时间戳", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitor": "名称或 ID 的友好呈现,建议类似于 My Monitor 的名称", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorId": "监测的 ID。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorType": "监测的类型(例如 HTTP/TCP)。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.monitorUrl": "监测的 URL。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerHostname": "执行 Heartbeat 检查的观察者主机名。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.observerLocation": "执行 Heartbeat 检查的观察者位置。", - "xpack.synthetics.alerts.monitorStatus.actionVariables.state.statusMessage": "状态消息,例如关闭和/或低于可用性阈值(如果执行可用性检查)。", - "xpack.synthetics.alerts.monitorStatus.addFilter": "添加筛选", - "xpack.synthetics.alerts.monitorStatus.addFilter.location": "位置", - "xpack.synthetics.alerts.monitorStatus.addFilter.port": "端口", - "xpack.synthetics.alerts.monitorStatus.addFilter.tag": "标签", - "xpack.synthetics.alerts.monitorStatus.addFilter.type": "类型", - "xpack.synthetics.alerts.monitorStatus.availability.isEnabledCheckbox.label": "可用性", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "任何监测启动于", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.ariaLabel": "指定此告警的可用性阈值", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.description": "匹配的监测运行于", - "xpack.synthetics.alerts.monitorStatus.availability.threshold.input.ariaLabel": "输入用于检查此告警的可用性阈值", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "输入告警可用性检查的单位数。", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.expression": "(之内)过去", - "xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "指定跟踪时间范围的可用性", - "xpack.synthetics.alerts.monitorStatus.availability.unit.headline": "选择时间范围单位", - "xpack.synthetics.alerts.monitorStatus.availability.unit.selectable": "使用此选择来设置此告警的可用性范围单位", "xpack.synthetics.alerts.monitorStatus.clientName": "运行时间监测状态", "xpack.synthetics.alerts.monitorStatus.description": "监测关闭或超出可用性阈值时告警。", "xpack.synthetics.alerts.monitorStatus.downLabel": "关闭", - "xpack.synthetics.alerts.monitorStatus.filterBar.ariaLabel": "允许对监测状态告警使用筛选条件的输入", - "xpack.synthetics.alerts.monitorStatus.filters.anyLocation": "任意位置", - "xpack.synthetics.alerts.monitorStatus.filters.anyPort": "任意端口", - "xpack.synthetics.alerts.monitorStatus.filters.anyTag": "任意标签", - "xpack.synthetics.alerts.monitorStatus.filters.anyType": "任意类型", - "xpack.synthetics.alerts.monitorStatus.filters.from": "自", - "xpack.synthetics.alerts.monitorStatus.filters.fromLocation": "来源位置", - "xpack.synthetics.alerts.monitorStatus.filters.location.label": "选择要应用到告警查询的位置筛选。", - "xpack.synthetics.alerts.monitorStatus.filters.of": "的", - "xpack.synthetics.alerts.monitorStatus.filters.ofType": "类型", - "xpack.synthetics.alerts.monitorStatus.filters.port.label": "选择要应用到告警查询的端口筛选。", - "xpack.synthetics.alerts.monitorStatus.filters.scheme.label": "选择要应用到告警查询的协议方案筛选。", - "xpack.synthetics.alerts.monitorStatus.filters.tag.label": "选择要应用到告警查询的标签筛选。", - "xpack.synthetics.alerts.monitorStatus.filters.using": "使用", - "xpack.synthetics.alerts.monitorStatus.filters.usingPort": "使用端口", - "xpack.synthetics.alerts.monitorStatus.filters.with": "使用", - "xpack.synthetics.alerts.monitorStatus.filters.withTag": "具有标签", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "任何监测已关闭 >=", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.ariaLabel": "打开弹出框以输入已关闭计数", - "xpack.synthetics.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "匹配的监测已关闭 >=", - "xpack.synthetics.alerts.monitorStatus.numTimesField.ariaLabel": "输入触发告警的已关闭计数", - "xpack.synthetics.alerts.monitorStatus.oldAlertCallout.title": "您可能正在编辑较旧的告警,某些字段可能不自动填充。", - "xpack.synthetics.alerts.monitorStatus.statusEnabledCheck.label": "状态检查", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.days": "天", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.hours": "小时", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.minutes": "分钟", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.months": "个月", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.seconds": "秒", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.weeks": "周", - "xpack.synthetics.alerts.monitorStatus.timerangeOption.years": "年", - "xpack.synthetics.alerts.monitorStatus.timerangeSelectionHeader": "选择时间范围单位", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "打开时间范围单位选择字段的弹出框", - "xpack.synthetics.alerts.monitorStatus.timerangeUnitSelectable": "告警应使用的时间范围单位的可选择字段", - "xpack.synthetics.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "打开时间范围值字段的弹出框", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.ariaLabel": "输入告警范围的时间单位数目", - "xpack.synthetics.alerts.monitorStatus.timerangeValueField.expression": "之内", "xpack.synthetics.alerts.searchPlaceholder.kql": "使用 kql 语法筛选", "xpack.synthetics.alerts.settings.addConnector": "添加连接器", "xpack.synthetics.alerts.syntheticsMonitorStatus.clientName": "监测状态", "xpack.synthetics.alerts.syntheticsMonitorStatus.description": "监测关闭时告警。", - "xpack.synthetics.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "“天”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "“小时”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "“分钟”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "“月”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "“秒”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "“周”时间范围选择项", - "xpack.synthetics.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "“年”时间范围选择项", - "xpack.synthetics.alerts.tls": "Uptime TLS", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCommonNameAndDate": "检测到的证书的常见名称和到期日期/时间。", - "xpack.synthetics.alerts.tls.actionVariables.state.agingCount": "检测到即将过时的证书数目。", - "xpack.synthetics.alerts.tls.actionVariables.state.count": "告警执行工具检测到的证书数目", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "检测到的证书的常见名称和到期日期/时间", - "xpack.synthetics.alerts.tls.actionVariables.state.expiringCount": "告警检测到的即将到期证书数目。", - "xpack.synthetics.alerts.tls.agingLabel": "已过旧", "xpack.synthetics.alerts.tls.clientName": "Uptime TLS", - "xpack.synthetics.alerts.tls.criteriaExpression.ariaLabel": "显示此告警监视的监测条件的表达式", "xpack.synthetics.alerts.tls.criteriaExpression.description": "当", "xpack.synthetics.alerts.tls.description": "运行时间监测的 TLS 证书即将过期时告警。", - "xpack.synthetics.alerts.tls.expiredLabel": "已过期", - "xpack.synthetics.alerts.tls.expiringLabel": "将到期", - "xpack.synthetics.alerts.tls.invalidLabel": "无效", "xpack.synthetics.alerts.tls.legacy.clientName": "Uptime TLS(旧版)", "xpack.synthetics.alerts.tls.legacy.description": "运行时间监测的 TLS 证书即将过期时告警。未来的版本将弃用此告警。", - "xpack.synthetics.alerts.tlsLegacy": "Uptime TLS(旧版)", "xpack.synthetics.alerts.toggleAlertFlyoutButtonText": "告警和规则", - "xpack.synthetics.alertsPopover.toggleButton.ariaLabel": "打开告警和规则上下文菜单", "xpack.synthetics.alertsRulesPopover.toggleButton.ariaLabel": "打开告警和规则菜单", "xpack.synthetics.analyzeDataButtonLabel": "浏览数据", "xpack.synthetics.analyzeDataButtonLabel.message": "“浏览数据”允许您选择和筛选任意维度中的结果数据以及查找性能问题的原因或影响。", - "xpack.synthetics.apmIntegrationAction.description": "在 APM 中搜索此监测", - "xpack.synthetics.apmIntegrationAction.text": "显示 APM 数据", "xpack.synthetics.app.navigateToAlertingButton.content": "管理规则", "xpack.synthetics.app.navigateToAlertingUi": "离开 Synthetics 并前往“Alerting 管理”页面", "xpack.synthetics.app.testNow.available.private": "不能在专用位置上手动启动测试。", "xpack.synthetics.badge.readOnly.text": "只读", "xpack.synthetics.badge.readOnly.tooltip": "无法保存", "xpack.synthetics.blocked": "已阻止", - "xpack.synthetics.breadcrumbs.legacyOverviewBreadcrumbText": "运行时间", "xpack.synthetics.breadcrumbs.observabilityText": "Observability", "xpack.synthetics.breadcrumbs.overviewBreadcrumbText": "Synthetics", "xpack.synthetics.certificates.loading": "正在加载证书......", @@ -35808,10 +35623,6 @@ "xpack.synthetics.connectionProfile.noThrottling": "无限制", "xpack.synthetics.connectionProfile.threeG": "3G", "xpack.synthetics.contentSize": "内容大小", - "xpack.synthetics.controls.selectSeverity.criticalLabel": "紧急", - "xpack.synthetics.controls.selectSeverity.majorLabel": "重大", - "xpack.synthetics.controls.selectSeverity.minorLabel": "轻微", - "xpack.synthetics.controls.selectSeverity.warningLabel": "警告", "xpack.synthetics.coreVitals.cls.help": "累计布局偏移 (CLS):衡量视觉稳定性。为了提供良好的用户体验,页面的 CLS 应小于 0.1。", "xpack.synthetics.coreVitals.dclTooltip": "在浏览器解析完文档时触发。在有多个侦听器或已执行逻辑时有帮助:domContentLoadedEventEnd - domContentLoadedEventStart。", "xpack.synthetics.coreVitals.fcpTooltip": "首次内容绘制 (FCP) 侧重于初始渲染,并测量从页面开始加载到页面内容的任何部分显示在屏幕的时间。", @@ -35847,15 +35658,6 @@ "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.always": "始终", "xpack.synthetics.createPackagePolicy.stepConfigure.responseBodyIndex.onError": "错误时", "xpack.synthetics.dcl.label": "DCL", - "xpack.synthetics.deprecateNoticeModal.addPrivateLocations": "根据您的 Fleet 策略添加专用位置", - "xpack.synthetics.deprecateNoticeModal.automateMonitors": "使用项目监测自动创建监测", - "xpack.synthetics.deprecateNoticeModal.description": "此 Elastic Synthetics 集成已过时。相反,您现在可以直接在 Synthetics 应用中更高效地监测终端、页面和用户旅程:", - "xpack.synthetics.deprecateNoticeModal.elasticManagedLocations": "在由 Elastic 管理的多个位置或从您自己的专用位置运行监测", - "xpack.synthetics.deprecateNoticeModal.goBack": "返回", - "xpack.synthetics.deprecateNoticeModal.goToSynthetics": "前往 Synthetics", - "xpack.synthetics.deprecateNoticeModal.headerText": "在 Synthetics 中,现在开箱即可使用组合监测", - "xpack.synthetics.deprecateNoticeModal.manageMonitors": "从单一位置管理轻量级和浏览器监测", - "xpack.synthetics.deprecateNoticeModal.readDocs": "阅读文档。", "xpack.synthetics.detailsPanel.alerts": "告警", "xpack.synthetics.detailsPanel.alerts.active": "活动", "xpack.synthetics.detailsPanel.alerts.recovered": "已恢复", @@ -35871,7 +35673,6 @@ "xpack.synthetics.detailsPanel.summary": "摘要", "xpack.synthetics.detailsPanel.toDate": "迄今为止", "xpack.synthetics.dns": "DNS", - "xpack.synthetics.durationChart.emptyPrompt.title": "没有持续时间数据", "xpack.synthetics.durationTrend.max": "最大值", "xpack.synthetics.durationTrend.median": "中值", "xpack.synthetics.durationTrend.min": "最小值", @@ -35879,14 +35680,9 @@ "xpack.synthetics.durationTrend.percentile75": "第 75 个", "xpack.synthetics.editMonitor.errorDetailsRoute.title": "错误详细信息", "xpack.synthetics.editMonitor.pageHeader.title": "编辑监测", - "xpack.synthetics.editPackagePolicy.inSynthetics": "在 Synthetics 中编辑", - "xpack.synthetics.editPackagePolicy.inSyntheticsDesc": "此软件包策略由 Synthetics 应用托管。", "xpack.synthetics.emptyState.enablement.disabledDescription": "当前已禁用 Synthetics 应用。通过 Synthetics 应用,您可以从全球托管测试地点运行轻量级、真正的浏览器监测。要启用 Synthetics 应用,请与管理员联系。", - "xpack.synthetics.emptyState.loadingMessage": "正在加载……", "xpack.synthetics.emptyStateError.notAuthorized": "您无权查看 Uptime 数据,请联系系统管理员。", - "xpack.synthetics.emptyStateError.notFoundPage": "未找到页面", "xpack.synthetics.emptyStateError.title": "错误", - "xpack.synthetics.enableAlert.editAlert": "编辑告警", "xpack.synthetics.errorDetails.errorDuration": "错误持续时间", "xpack.synthetics.errorDetails.label": "错误详细信息", "xpack.synthetics.errorDetails.resolvedAt": "解决时间", @@ -35911,14 +35707,6 @@ "xpack.synthetics.fieldLabels.fcp": "首次内容绘制 (FCP)", "xpack.synthetics.fieldLabels.lcp": "最大内容绘制 (LCP)", "xpack.synthetics.fieldLabels.transferSize": "transferSize 属性表示提取的资源的大小。该大小包括响应标头字段加上响应有效负载正文", - "xpack.synthetics.filterBar.ariaLabel": "概览页面的输入筛选条件", - "xpack.synthetics.filterBar.filterAllLabel": "全部", - "xpack.synthetics.filterBar.options.location.name": "位置", - "xpack.synthetics.filterBar.options.portLabel": "端口", - "xpack.synthetics.filterBar.options.schemeLabel": "方案", - "xpack.synthetics.filterBar.options.tagsLabel": "标签", - "xpack.synthetics.fleetIntegration.assets.description": "在 Synthetics 中查看监测", - "xpack.synthetics.fleetIntegration.assets.name": "监测", "xpack.synthetics.gettingStarted.createLocationHeading": "开始使用组合监测", "xpack.synthetics.gettingStarted.createLocationLabel": "创建位置", "xpack.synthetics.gettingStarted.createSingle.description": " 以开始使用 Elastic Synthetics 监测。", @@ -35933,21 +35721,14 @@ "xpack.synthetics.historyPanel.durationTrends": "持续时间趋势", "xpack.synthetics.historyPanel.stats": "统计信息", "xpack.synthetics.inspectButtonText": "检查", - "xpack.synthetics.integration.deprecation.dismiss": "关闭", - "xpack.synthetics.integration.deprecation.link": "Synthetics 迁移文档", - "xpack.synthetics.integration.deprecation.title": "迁移 Elastic Synthetics 集成监测", - "xpack.synthetics.integrationLink.missingDataMessage": "未找到此集成的所需数据。", "xpack.synthetics.keyValuePairsField.key.ariaLabel": "钥匙", "xpack.synthetics.keyValuePairsField.key.label": "钥匙", "xpack.synthetics.keyValuePairsField.value.ariaLabel": "值", "xpack.synthetics.keyValuePairsField.value.label": "值", - "xpack.synthetics.kueryBar.searchPlaceholder.kql": "使用 kql 语法搜索监测 ID、名称和类型等(例如 monitor.type: \"http\" AND tags: \"dev\")", - "xpack.synthetics.kueryBar.searchPlaceholder.simpleText": "按监测 ID、名称、URL、端口或标签搜索", "xpack.synthetics.lcp.label": "LCP", "xpack.synthetics.leftOver.errors.createIssue": "创建问题。", "xpack.synthetics.leftOver.errors.delete": "删除集成", "xpack.synthetics.leftOver.errors.title": "请单击以下按钮删除集成。通常应该不会出现这种情况。既然已删除监测,应该会自动删除集成。如果经常出现这种情况,请上报 ", - "xpack.synthetics.locationName.helpLinkAnnotation": "添加位置", "xpack.synthetics.locations.error.content": "加载测试位置时出错。请稍后重试。", "xpack.synthetics.locations.error.label": "无法加载测试位置", "xpack.synthetics.management.actions": "操作", @@ -35986,37 +35767,7 @@ "xpack.synthetics.management.monitorList.url": "URL", "xpack.synthetics.management.noLabel": "取消", "xpack.synthetics.management.yesLabel": "删除", - "xpack.synthetics.mappingErrorRoute.breadcrumb": "映射错误", - "xpack.synthetics.mappingErrorRoute.pageHeader.title": "映射错误", - "xpack.synthetics.mappingErrorRoute.title": "Synthetics | 映射错误", "xpack.synthetics.millisecond.abbreviation.label": "ms", - "xpack.synthetics.ml.durationChart.exploreInMlApp": "在 ML 应用中浏览", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "需要权限", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "异常检测", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.cancelLabel": "取消", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createMLJobDescription": "在此处可以创建 Machine Learning 作业,以便为运行时间监测计算\n 响应持续时间的异常分数。启用后,详情页面上的监测持续时间图表\n 将显示预期边界并使用异常标注图表。您还可能\n 识别在所有地理区域的延迟增长时段。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "创建新作业", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "禁用异常告警", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "禁用异常检测", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "您可以启用异常检测作业,或者如果此处已有作业,则可以管理该作业或告警。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "启用异常告警", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "启用异常检测", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "您必须具有 Machine Learning 的 Kibana 权限才能使用此功能。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "分析正等待 ML 节点变为可用。可能要花费点时间,才会将结果添加到响应时间图表。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "现在正在运行响应持续时间图表的分析。可能要花费点时间,才会将结果添加到响应时间图表。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "查看作业", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "作业已成功创建", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "您当前的许可证可能不允许创建 Machine Learning 作业,或者此作业可能已存在。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "作业创建失败", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "删除异常检测作业?", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "作业已删除", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "作业已成功删除", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "管理异常检测", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "Machine Learning 作业管理页面", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "注意:可能要过几分钟后,作业才会开始计算结果。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "您需要 Uptime 的读写访问权限才能创建异常告警。", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrial": "开始为期 14 天的免费试用", - "xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrialDesc": "要访问持续时间异常检测,必须订阅 Elastic 白金级许可证。", "xpack.synthetics.monitor.duration.label": "持续时间", "xpack.synthetics.monitor.result.label": "结果", "xpack.synthetics.monitor.result.lastSuccessful": "上次成功", @@ -36036,8 +35787,6 @@ "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom": "(X Mbps,Y Mbps,Z ms)", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.custom.label": "定制", "xpack.synthetics.monitorAddEdit.throttling.connectionProfile.disabled.label": "无限制", - "xpack.synthetics.monitorCharts.durationChart.wrapper.label": "显示监测的 ping 持续时间(按位置分组)的图表。", - "xpack.synthetics.monitorCharts.monitorDuration.titleLabel": "监测持续时间", "xpack.synthetics.monitorConfig.advancedOptions.title": "高级选项", "xpack.synthetics.monitorConfig.apmServiceName.helpText": "对应于 APM 中的 service.name ECS 字段。设置此项以启用 APM 与 Synthetics 数据之间的集成。", "xpack.synthetics.monitorConfig.apmServiceName.label": "APM 服务名称", @@ -36215,19 +35964,11 @@ "xpack.synthetics.monitorDetails.loading.content": "这只需要一秒钟。", "xpack.synthetics.monitorDetails.loading.heading": "正在加载监测详情", "xpack.synthetics.monitorDetails.loadingTestRuns": "正在加载测试运行......", - "xpack.synthetics.monitorDetails.ml.confirmAlertDeleteMessage": "确定要删除异常告警?", - "xpack.synthetics.monitorDetails.ml.confirmDeleteMessage": "是否确定要删除此作业?", - "xpack.synthetics.monitorDetails.ml.deleteJobWarning": "删除作业可能会非常耗时。删除将在后台进行,数据可能不会马上消失。", - "xpack.synthetics.monitorDetails.ml.deleteMessage": "正在删除作业......", "xpack.synthetics.monitorDetails.noDataFound": "未找到任何数据", "xpack.synthetics.monitorDetails.pending.content": "数据可用时,会刷新此页面。", "xpack.synthetics.monitorDetails.pending.heading": "初始测试运行待处理……", "xpack.synthetics.monitorDetails.skipped.label": "已跳过", "xpack.synthetics.monitorDetails.status": "状态", - "xpack.synthetics.monitorDetails.statusBar.pingType.browser": "浏览器", - "xpack.synthetics.monitorDetails.statusBar.pingType.http": "HTTP", - "xpack.synthetics.monitorDetails.statusBar.pingType.icmp": "ICMP", - "xpack.synthetics.monitorDetails.statusBar.pingType.tcp": "TCP", "xpack.synthetics.monitorDetails.summary.availability": "可用性", "xpack.synthetics.monitorDetails.summary.brushArea": "轻刷某个区域以提高保真度", "xpack.synthetics.monitorDetails.summary.duration": "持续时间", @@ -36244,12 +35985,6 @@ "xpack.synthetics.monitorDetails.summary.viewErrorDetails": "查看错误详情", "xpack.synthetics.monitorDetails.summary.viewHistory": "查看历史记录", "xpack.synthetics.monitorDetails.summary.viewTestRun": "查看测试运行", - "xpack.synthetics.monitorDetails.title.disclaimer.description": "(公测版)", - "xpack.synthetics.monitorDetails.title.disclaimer.link": "查看更多内容", - "xpack.synthetics.monitorDetails.title.pingType.browser": "浏览器", - "xpack.synthetics.monitorDetails.title.pingType.http": "HTTP ping", - "xpack.synthetics.monitorDetails.title.pingType.icmp": "ICMP ping", - "xpack.synthetics.monitorDetails.title.pingType.tcp": "TCP ping", "xpack.synthetics.monitorDetails.viewHistory": "查看历史记录", "xpack.synthetics.monitorEditPage.error.content": "加载监测时出错。请稍后重试。", "xpack.synthetics.monitorEditPage.error.label": "无法加载监测配置", @@ -36257,68 +35992,30 @@ "xpack.synthetics.monitorHistoryTab.title": "历史记录", "xpack.synthetics.monitorLastRun.lastRunLabel": "上次运行", "xpack.synthetics.monitorList.closeFlyoutText": "关闭", - "xpack.synthetics.monitorList.defineConnector.popover.description": "以接收状态告警。", - "xpack.synthetics.monitorList.disableDownAlert": "禁用状态告警", - "xpack.synthetics.monitorList.downLineSeries.downLabel": "关闭检查", - "xpack.synthetics.monitorList.drawer.mostRecentRun": "最新测试运行", - "xpack.synthetics.monitorList.drawer.url": "URL", "xpack.synthetics.monitorList.durationChart.durationSeriesName": "持续时间", "xpack.synthetics.monitorList.durationChart.previousPeriodSeriesName": "上一时段", "xpack.synthetics.monitorList.durationHeaderText": "持续时间", - "xpack.synthetics.monitorList.enabledAlerts.noAlert": "没有为此监测启用规则。", - "xpack.synthetics.monitorList.enabledAlerts.title": "已启用规则", "xpack.synthetics.monitorList.enabledItemText": "已启用", - "xpack.synthetics.monitorList.enableDownAlert": "启用状态告警", "xpack.synthetics.monitorList.errorSummary": "错误摘要", - "xpack.synthetics.monitorList.geoName.helpLinkAnnotation": "添加位置", "xpack.synthetics.monitorList.goToMonitorLinkText": "前往监测", - "xpack.synthetics.monitorList.infraIntegrationAction.container.message": "显示容器指标", - "xpack.synthetics.monitorList.infraIntegrationAction.docker.description": "在 Infrastructure UI 上查找此监测的容器 ID", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.ariaLabel": "在 Infrastructure UI 上查找此监测的 IP 地址", - "xpack.synthetics.monitorList.infraIntegrationAction.ip.message": "显示主机指标", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.description": "在 Infrastructure UI 上查找此监测的 Pod UID", - "xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.message": "显示 Pod 指标", - "xpack.synthetics.monitorList.integrationGroup.emptyMessage": "没有可用的集成应用程序", "xpack.synthetics.monitorList.lastModified": "最后修改时间", "xpack.synthetics.monitorList.lastRunHeaderText": "上次运行", - "xpack.synthetics.monitorList.loading": "正在加载……", - "xpack.synthetics.monitorList.locations.expand": "单击以查看剩余位置", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.id": "显示容器日志", - "xpack.synthetics.monitorList.loggingIntegrationAction.container.message": "显示容器日志", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.description": "在 Logging UI 中查找此监测的 IP 地址", - "xpack.synthetics.monitorList.loggingIntegrationAction.ip.message": "显示主机日志", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "显示 Pod 日志", - "xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.message": "显示 Pod 日志", - "xpack.synthetics.monitorList.monitorHistoryColumnLabel": "中断历史记录", "xpack.synthetics.monitorList.monitorIdItemText": "监测 ID", - "xpack.synthetics.monitorList.monitoringStatusTitle": "监测", - "xpack.synthetics.monitorList.nameColumnLabel": "名称", - "xpack.synthetics.monitorList.noItemForSelectedFiltersMessage": "未找到匹配选定筛选条件的监测", - "xpack.synthetics.monitorList.noItemMessage": "未找到任何运行时间监测", - "xpack.synthetics.monitorList.noMessage.troubleshoot": "尝试使用绝对日期范围。如果监测在之后显示,可能表示安装 Heartbeat 或 Kibana 的位置出现系统时钟问题。", - "xpack.synthetics.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "调查", "xpack.synthetics.monitorList.projectIdHeaderText": "项目 ID", "xpack.synthetics.monitorList.redirects.openWindow": "将在新窗口中打开链接。", "xpack.synthetics.monitorList.redirects.title": "重定向", "xpack.synthetics.monitorList.runTest.label": "运行测试", - "xpack.synthetics.monitorList.statusAlert.label": "状态告警", "xpack.synthetics.monitorList.statusColumn.completeLabel": "已完成", "xpack.synthetics.monitorList.statusColumn.downLabel": "关闭", "xpack.synthetics.monitorList.statusColumn.failedLabel": "失败", "xpack.synthetics.monitorList.statusColumn.upLabel": "运行", - "xpack.synthetics.monitorList.statusColumnLabel": "状态", "xpack.synthetics.monitorList.table.project.name": "项目 ID", "xpack.synthetics.monitorList.table.tags.name": "标签", "xpack.synthetics.monitorList.table.url.name": "URL", - "xpack.synthetics.monitorList.tags.expand": "单击以查看剩余标签", "xpack.synthetics.monitorList.testNow.AriaLabel": "单击以立即运行测试", "xpack.synthetics.monitorList.testNow.scheduled": "已计划测试", "xpack.synthetics.monitorList.testRunLogs": "测试运行日志", "xpack.synthetics.monitorList.timestamp": "时间戳", - "xpack.synthetics.monitorList.tlsColumnLabel": "TLS 证书", - "xpack.synthetics.monitorList.troubleshoot.systemClockOutOfSync": "系统时钟可能不同步", - "xpack.synthetics.monitorList.troubleshoot.tryDateRange": "应用绝对日期范围", - "xpack.synthetics.monitorList.troubleshoot.whereAreMyMonitors": "我的监测在什么位置?", "xpack.synthetics.monitorList.type": "类型", "xpack.synthetics.monitorList.viewInDiscover": "在 Discover 中查看", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "前往位置", @@ -36456,22 +36153,6 @@ "xpack.synthetics.monitorStatus.statusLabel": "状态", "xpack.synthetics.monitorStatus.succeededLabel": "成功", "xpack.synthetics.monitorStatus.upLabel": "运行", - "xpack.synthetics.monitorStatusBar.durationTextAriaLabel": "监测持续时间(毫秒)", - "xpack.synthetics.monitorStatusBar.healthStatusMessageAriaLabel": "监测状态", - "xpack.synthetics.monitorStatusBar.loadingMessage": "正在加载……", - "xpack.synthetics.monitorStatusBar.monitor.availability": "总体可用性", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.availability": "可用性", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.lastCheck": "上次检查", - "xpack.synthetics.monitorStatusBar.monitor.availabilityReport.location": "位置", - "xpack.synthetics.monitorStatusBar.monitor.id": "监测 ID", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom": "正监测自", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.listToMap": "更改到地图视图以按位置检查可用性。", - "xpack.synthetics.monitorStatusBar.monitor.monitoringFrom.MapToList": "更改到列表视图以按位置检查可用性。", - "xpack.synthetics.monitorStatusBar.monitorUrlLinkAriaLabel": "监测 URL 链接", - "xpack.synthetics.monitorStatusBar.sslCertificate.title": "TLS 证书", - "xpack.synthetics.monitorStatusBar.timestampFromNowTextAriaLabel": "自上次检查以来经过的时间", - "xpack.synthetics.monitorStatusBar.type.ariaLabel": "监测类型", - "xpack.synthetics.monitorStatusBar.type.label": "类型", "xpack.synthetics.monitorSummary.createNewMonitor": "创建监测", "xpack.synthetics.monitorSummary.editMonitor": "编辑监测", "xpack.synthetics.monitorSummary.goToMonitor": "前往监测", @@ -36486,19 +36167,11 @@ "xpack.synthetics.monitorSummary.viewAlerts": "查看告警", "xpack.synthetics.monitorSummary.viewErrors": "查看错误", "xpack.synthetics.monitorSummaryRoute.monitorBreadcrumb": "监测", - "xpack.synthetics.navigateToAlertingButton.content": "管理规则", - "xpack.synthetics.navigateToAlertingUi": "离开 Uptime 并前往“Alerting 管理”页面", - "xpack.synthetics.noDataConfig.beatsCard.description": "主动监测站点和服务的可用性。接收告警并更快地解决问题,从而优化用户体验。", - "xpack.synthetics.noDataConfig.beatsCard.title": "通过 Heartbeat 添加监测", - "xpack.synthetics.noDataConfig.solutionName": "Observability", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedDescription": "要查看 Synthetics 监测数据,必须更新权限。有关详细信息,请联系您的 Kibana 管理员。", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedFooterMarkdown": "以下索引所需的 Elasticsearch 索引权限 `read`:", "xpack.synthetics.noFindingsStates.unprivileged.unprivilegedTitle": "需要权限", "xpack.synthetics.notFoundBody": "抱歉,找不到您要查找的页面。该页面可能已移除、重命名,或可能从不存在。", "xpack.synthetics.notFoundTitle": "未找到页面", - "xpack.synthetics.notFountPage.homeLinkText": "返回主页", - "xpack.synthetics.openAlertContextPanel.ariaLabel": "打开规则上下文面板,以便可以选择规则类型", - "xpack.synthetics.openAlertContextPanel.label": "创建规则", "xpack.synthetics.overview.actions.disableLabelDisableAlert": "禁用状态告警", "xpack.synthetics.overview.actions.disablingLabel": "正在禁用监测", "xpack.synthetics.overview.actions.editMonitor.name": "编辑监测", @@ -36511,10 +36184,6 @@ "xpack.synthetics.overview.actions.openPopover.ariaLabel": "打开操作菜单", "xpack.synthetics.overview.actions.quickInspect.title": "快速检查", "xpack.synthetics.overview.actions.runTestManually.title": "手动运行测试", - "xpack.synthetics.overview.alerts.disabled.failed": "无法禁用规则!", - "xpack.synthetics.overview.alerts.disabled.success": "已成功禁用规则!", - "xpack.synthetics.overview.alerts.enabled.failed": "无法启用规则!", - "xpack.synthetics.overview.alerts.enabled.success": "已成功启用规则 ", "xpack.synthetics.overview.alerts.headingText": "过去 12 小时", "xpack.synthetics.overview.duration.description": "过去 24 次检查的中位持续时间", "xpack.synthetics.overview.duration.label": "持续时间", @@ -36561,25 +36230,13 @@ "xpack.synthetics.overview.status.headingText": "当前状态", "xpack.synthetics.overview.status.pending.description": "待处理", "xpack.synthetics.overview.status.up.description": "运行", - "xpack.synthetics.overview.uptimeHeading": "运行时间监测", "xpack.synthetics.overviewPage.overviewCrumb": "概览", - "xpack.synthetics.overviewPageLink.disabled.ariaLabel": "禁用的分页按钮表示在监测列表中无法进行进一步导航。", - "xpack.synthetics.overviewPageLink.next.ariaLabel": "下页结果", - "xpack.synthetics.overviewPageLink.prev.ariaLabel": "上页结果", - "xpack.synthetics.page_header.addDataLink.label": "导航到有关如何添加 Uptime 数据的教程", "xpack.synthetics.page_header.analyzeData.label": "导航到“浏览数据”视图以可视化 Synthetics/用户数据", - "xpack.synthetics.page_header.defineConnector.popover.defaultLink": "定义默认连接器", - "xpack.synthetics.page_header.defineConnector.settingsLink": "设置", - "xpack.synthetics.page_header.manageLink.not": "监测管理在 Uptime 中不再可用,请改用 Synthetics 应用。", - "xpack.synthetics.page_header.manageMonitors": "监测管理", "xpack.synthetics.page_header.settingsLink": "设置", "xpack.synthetics.page_header.settingsLink.label": "导航到 Uptime 设置页面", "xpack.synthetics.paramForm.namespaces": "命名空间", "xpack.synthetics.paramForm.sharedAcrossSpacesLabel": "跨工作区共享", - "xpack.synthetics.pingList.checkHistoryTitle": "历史记录", "xpack.synthetics.pingList.collapseRow": "折叠", - "xpack.synthetics.pingList.columns.failedStep": "失败的步骤", - "xpack.synthetics.pingList.drawer.body.docsLink": "文档", "xpack.synthetics.pingList.durationMsColumnLabel": "持续时间", "xpack.synthetics.pingList.errorColumnLabel": "错误", "xpack.synthetics.pingList.errorTypeColumnLabel": "错误类型", @@ -36593,10 +36250,7 @@ "xpack.synthetics.pingList.pingsUnavailableMessage": "未找到历史记录", "xpack.synthetics.pingList.responseCodeColumnLabel": "响应代码", "xpack.synthetics.pingList.statusColumnLabel": "状态", - "xpack.synthetics.pingList.stepDurationHeader": "步骤持续时间", - "xpack.synthetics.pingList.synthetics.performanceBreakDown": "查看性能细目", "xpack.synthetics.pingList.synthetics.waterfall.filters.collapseRequestsLabel": "折叠以仅显示匹配的请求", - "xpack.synthetics.pingList.synthetics.waterfall.filters.popover": "单击以打开瀑布筛选", "xpack.synthetics.pingList.timestampColumnLabel": "时间戳", "xpack.synthetics.pluginDescription": "Synthetics 监测", "xpack.synthetics.privateLocations.learnMore.label": "了解详情。", @@ -36605,12 +36259,10 @@ "xpack.synthetics.projectMonitorApi.validation.invalidNamespace.title": "命名空间无效", "xpack.synthetics.projectMonitorApi.validation.unsupportedOption.title": "不支持的 Heartbeat 选项", "xpack.synthetics.prompt.errors.notFound.title": "找不到监测", - "xpack.synthetics.public.pages.mappingError.title": "Heartbeat 映射缺失", "xpack.synthetics.receive": "接收", "xpack.synthetics.routes.baseTitle": "Synthetics - Kibana", "xpack.synthetics.routes.createNewMonitor": "前往主页", "xpack.synthetics.routes.goToSynthetics": "前往 Synthetics 主页", - "xpack.synthetics.routes.legacyBaseTitle": "Uptime - Kibana", "xpack.synthetics.runTest.failure": "无法手动运行测试", "xpack.synthetics.seconds.label": "秒", "xpack.synthetics.seconds.shortForm.label": "秒", @@ -36632,7 +36284,6 @@ "xpack.synthetics.settings.enabledAlert.fail": "无法更新监测状态规则类型。", "xpack.synthetics.settings.enablement.fail": "无法启用监测管理", "xpack.synthetics.settings.error.couldNotSave": "无法保存设置!", - "xpack.synthetics.settings.heading": "Uptime 设置", "xpack.synthetics.settings.invalid.error": "值必须大于 0。", "xpack.synthetics.settings.invalid.nanError": "值必须为整数。", "xpack.synthetics.settings.noSpace.error": "索引名称不得包含空格", @@ -36674,38 +36325,11 @@ "xpack.synthetics.settingsTabs.dataRetention": "数据保留", "xpack.synthetics.settingsTabs.params": "全局参数", "xpack.synthetics.settingsTabs.privateLocations": "专用位置", - "xpack.synthetics.snapshot.monitor": "监测", - "xpack.synthetics.snapshot.monitors": "监测", - "xpack.synthetics.snapshot.noDataDescription": "选定的时间范围中没有 ping。", - "xpack.synthetics.snapshot.noDataTitle": "没有可用的 ping 数据", - "xpack.synthetics.snapshot.pingsOverTimeTitle": "时移 Ping 数", - "xpack.synthetics.snapshotHistogram.series.pings": "监测 Ping", - "xpack.synthetics.snapshotHistogram.xAxisId": "Ping X 轴", - "xpack.synthetics.snapshotHistogram.yAxis.title": "Ping", - "xpack.synthetics.snapshotHistogram.yAxisId": "Ping Y 轴", - "xpack.synthetics.sourceConfiguration.ageLimit.units.days": "天", - "xpack.synthetics.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "该输入控制 Kibana 显示警告之前 TLS 证书有效的最大天数。", - "xpack.synthetics.sourceConfiguration.alertConnectors": "告警连接器", "xpack.synthetics.sourceConfiguration.alertConnectors.defaultEmail": "默认电子邮件", "xpack.synthetics.sourceConfiguration.alertDefaultForm.emailConnectorPlaceHolder": "到:电子邮件连接器的电子邮件", - "xpack.synthetics.sourceConfiguration.alertDefaultForm.requiredEmail": "电子邮件连接器需要目标电子邮件", "xpack.synthetics.sourceConfiguration.alertDefaultForm.selectConnector": "请选择一个或多个连接器", - "xpack.synthetics.sourceConfiguration.alertDefaults": "告警默认值", - "xpack.synthetics.sourceConfiguration.applySettingsButtonLabel": "应用更改", - "xpack.synthetics.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "该输入控制 Kibana 显示警告之前离 TLS 证书到期剩余的最小天数。", - "xpack.synthetics.sourceConfiguration.certificateThresholdDescription": "更改显示并告警证书错误的阈值。注意:这会影响任何配置的告警。", - "xpack.synthetics.sourceConfiguration.certificationSectionTitle": "证书到期", "xpack.synthetics.sourceConfiguration.defaultConnectors": "默认连接器", - "xpack.synthetics.sourceConfiguration.defaultConnectors.description": "要用于发送告警的默认连接器。", "xpack.synthetics.sourceConfiguration.defaultConnectors.description.defaultEmail": "选定电子邮件告警连接器需要电子邮件设置。", - "xpack.synthetics.sourceConfiguration.discardSettingsButtonLabel": "取消", - "xpack.synthetics.sourceConfiguration.errorStateLabel": "到期阈值", - "xpack.synthetics.sourceConfiguration.expirationThreshold": "到期/使用时间阈值", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesDescription": "用于匹配包含 Heartbeat 数据的索引的索引模式", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesLabel": "Heartbeat 索引", - "xpack.synthetics.sourceConfiguration.heartbeatIndicesTitle": "Uptime 索引", - "xpack.synthetics.sourceConfiguration.indicesSectionTitle": "索引", - "xpack.synthetics.sourceConfiguration.warningStateLabel": "使用时间限制", "xpack.synthetics.stackManagement": "Stack Management", "xpack.synthetics.stepDetails.expected": "预期", "xpack.synthetics.stepDetails.objectCount": "对象计数", @@ -36720,39 +36344,13 @@ "xpack.synthetics.stepDetailsRoute.metrics": "指标", "xpack.synthetics.stepDetailsRoute.timingsBreakdown": "计时分解", "xpack.synthetics.stepDetailsRoute.timingsBreakdown.info": "所有网络请求计时的总和", - "xpack.synthetics.stepList.collapseRow": "折叠", - "xpack.synthetics.stepList.expandRow": "展开", - "xpack.synthetics.stepList.stepName": "步骤名称", - "xpack.synthetics.synthetics.consoleStepList.message": "此过程无法运行,记录的控制台输出如下所示:", - "xpack.synthetics.synthetics.consoleStepList.title": "未执行步骤", - "xpack.synthetics.synthetics.emptyJourney.message.footer": "没有更多可显示的信息。", - "xpack.synthetics.synthetics.emptyJourney.message.heading": "此过程不包含任何步骤。", - "xpack.synthetics.synthetics.emptyJourney.title": "没有此过程的任何步骤", - "xpack.synthetics.synthetics.executedStep.consoleOutput.label": "控制台输出", - "xpack.synthetics.synthetics.executedStep.errorHeading": "错误消息", - "xpack.synthetics.synthetics.executedStep.screenshot.not": "屏幕截图", "xpack.synthetics.synthetics.executedStep.screenshot.success": "上一成功检查", - "xpack.synthetics.synthetics.executedStep.scriptHeading.label": "在此步骤执行的脚本", - "xpack.synthetics.synthetics.executedStep.stackTrace": "堆栈跟踪", - "xpack.synthetics.synthetics.imageLoadingSpinner.ariaLabel": "表示图像正在加载的动画旋转图标", - "xpack.synthetics.synthetics.journey.loadingSteps": "正在加载步骤......", "xpack.synthetics.synthetics.markers.explore": "浏览", "xpack.synthetics.synthetics.markers.noFieldIcon.label": "一个图标,表示此标记没有与其关联的字段", "xpack.synthetics.synthetics.markers.openEmbeddableButton.label": "使用此图标按钮可显示该标注标记的指标。", - "xpack.synthetics.synthetics.nextStepButton.ariaLabel": "下一步", - "xpack.synthetics.synthetics.performanceBreakDown.label": "性能细目", - "xpack.synthetics.synthetics.prevStepButton.airaLabel": "上一步", - "xpack.synthetics.synthetics.screenshot.loadingImageMessage": "正在加载", - "xpack.synthetics.synthetics.screenshot.noImageMessage": "没有可用图像", - "xpack.synthetics.synthetics.screenshotDisplay.altTextWithoutName": "屏幕截图", "xpack.synthetics.synthetics.service.apiKey": "Synthetics 服务 API 密钥", - "xpack.synthetics.synthetics.statusBadge.failedMessage": "失败", - "xpack.synthetics.synthetics.statusBadge.skippedMessage": "已跳过", - "xpack.synthetics.synthetics.statusBadge.succeededMessage": "成功", - "xpack.synthetics.synthetics.step.durationTrend": "步骤持续时间趋势", "xpack.synthetics.synthetics.stepDetail.nextCheckButtonText": "下一检查", "xpack.synthetics.synthetics.stepDetail.nextStepButtonText": "下一步", - "xpack.synthetics.synthetics.stepDetail.noData": "找不到此步骤的数据", "xpack.synthetics.synthetics.stepDetail.previousCheckButtonText": "上一检查", "xpack.synthetics.synthetics.stepDetail.previousStepButtonText": "上一步", "xpack.synthetics.synthetics.stepDetail.stepLabel": "步骤", @@ -36760,9 +36358,6 @@ "xpack.synthetics.synthetics.stepDetail.waterfallNoData": "找不到此步骤的瀑布数据", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.description": "瀑布图无法显示。您可能正在使用较旧的组合代理版本。请检查版本并考虑升级。", "xpack.synthetics.synthetics.stepDetail.waterfallUnsupported.title": "瀑布图不可用", - "xpack.synthetics.synthetics.stepList.nextCheck": "下一检查", - "xpack.synthetics.synthetics.stepList.previousCheck": "上一检查", - "xpack.synthetics.synthetics.thumbnail.fullSize.alt": "此过程步骤的缩略图屏幕截图较大版本。", "xpack.synthetics.synthetics.waterfall.domContentLabel": "DOM 内容已加载", "xpack.synthetics.synthetics.waterfall.fcpLabel": "首次内容绘制", "xpack.synthetics.synthetics.waterfall.filterGroup.filterScreenreaderLabel": "筛选依据", @@ -36822,15 +36417,12 @@ "xpack.synthetics.testRun.runErrorLabel": "运行测试时出错", "xpack.synthetics.testRunDetailsRoute.page.title": "测试运行详情", "xpack.synthetics.timestamp.label": "@timestamp", - "xpack.synthetics.title": "运行时间", "xpack.synthetics.tls": "TLS", "xpack.synthetics.tls.ageExpression.description": "或早于以下天数:", "xpack.synthetics.tls.criteriaExpression.value": "正在匹配监测", "xpack.synthetics.tls.expirationExpression.description": "具有的证书将在以下天数内到期:", "xpack.synthetics.toggleAlertButton.content": "监测状态规则", "xpack.synthetics.toggleAlertFlyout.ariaLabel": "打开添加规则浮出控件", - "xpack.synthetics.toggleTlsAlertButton.ariaLabel": "打开 TLS 规则浮出控件", - "xpack.synthetics.toggleTlsAlertButton.content": "TLS 规则", "xpack.synthetics.totalDuration.metrics": "步骤持续时间", "xpack.synthetics.totalDuration.transferSize": "传输大小", "xpack.synthetics.uptimeFeatureCatalogueTitle": "运行时间", @@ -36843,6 +36435,412 @@ "xpack.synthetics.waterfall.networkRequests.filteredOut": "已筛除", "xpack.synthetics.waterfall.networkRequests.heading": "网络请求", "xpack.synthetics.waterfallChart.sidebar.url.https": "https", + "xpack.uptime.alerts.monitorExpression.label": "移除筛选 {title}", + "xpack.uptime.alerts.monitorStatus.actionVariables.down": "在过去 {interval}中失败 {count} 次。大于 {numTimes} 时告警。", + "xpack.uptime.alerts.monitorStatus.actionVariables.downAndAvailabilityMessage": "{downMonitorsMessage} {availabilityBreachMessage}", + "xpack.uptime.alerts.monitorStatus.monitorCallOut.title": "此告警将应用到大约 {snapshotCount} 个监测。", + "xpack.uptime.alerts.monitorStatus.reasonMessage": "来自 {location} 的监测“{name}”为 {status} 已于 {checkedAt} 检查。", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.value": "最后一个 {value}", + "xpack.uptime.alerts.tls.validAfterExpiredString": "已于 {relativeDate} 天前,即 {date}过期。", + "xpack.uptime.alerts.tls.validAfterExpiringString": "将在 {relativeDate} 天后,即 {date}到期。", + "xpack.uptime.alerts.tls.validBeforeExpiredString": "自 {relativeDate} 天前,即 {date}开始生效。", + "xpack.uptime.alerts.tls.validBeforeExpiringString": "从现在到 {date}的 {relativeDate} 天里无效。", + "xpack.uptime.availabilityLabelText": "{value} %", + "xpack.uptime.charts.mlAnnotation.header": "分数:{score}", + "xpack.uptime.charts.mlAnnotation.severity": "严重性:{severity}", + "xpack.uptime.controls.selectSeverity.scoreDetailsDescription": "分数 {value} 及以上", + "xpack.uptime.deprecateNoticeModal.forMoreInformation": "有关更多信息,{docsLink}", + "xpack.uptime.durationChart.emptyPrompt.description": "在选定时间范围内此监测从未{emphasizedText}。", + "xpack.uptime.integration.deprecation.content": "您至少具有一个使用 Elastic Synthetics 集成的已配置监测。从 Elastic 8.8 起,该集成将被弃用,您无法再编辑这些监测。请将它们迁移到项目监测,或将它们添加到在 Observability 中直接可用的全新 Synthetics 应用程序中。有关详情,请参阅我们的{link}。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription": "创建作业后,可以在 {mlJobsPageLink}中管理作业以及查看更多详细信息。", + "xpack.uptime.monitorCharts.durationChart.leftAxis.title": "持续时间({unit})", + "xpack.uptime.monitorCharts.monitorDuration.titleLabelWithAnomaly": "监测持续时间(异常:{noOfAnomalies})", + "xpack.uptime.monitorList.defineConnector.description": "在 {link} 中定义默认连接器以启用监测状态告警。", + "xpack.uptime.monitorList.drawer.missingLocation": "某些 Heartbeat 实例未定义位置。{link}到您的 Heartbeat 配置。", + "xpack.uptime.monitorList.drawer.statusRowLocationList": "上次检查时状态为“{status}”的位置列表。", + "xpack.uptime.monitorList.expandDrawerButton.ariaLabel": "展开 ID 为 {id} 的监测的行", + "xpack.uptime.monitorList.infraIntegrationAction.docker.tooltip": "在 Infrastructure UI 上查找容器 ID“{containerId}”", + "xpack.uptime.monitorList.infraIntegrationAction.ip.tooltip": "在 Infrastructure UI 上查找 IP“{ip}”", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.tooltip": "在 Infrastructure UI 上查找 Pod UID“{podUid}”。", + "xpack.uptime.monitorList.loggingIntegrationAction.container.tooltip": "在 Logging UI 上查找容器 ID“{containerId}”", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.tooltip": "在 Logging UI 上查找 IP“{ip}”", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.tooltip": "查找 Pod UID“{podUid}”的日志", + "xpack.uptime.monitorList.monitorType.filter": "筛选 {type} 类型的所有监测", + "xpack.uptime.monitorList.mostRecentError.title": "最近错误 ({timestamp})", + "xpack.uptime.monitorList.noDownHistory": "在选定时间范围内此监测从未{emphasizedText}。", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "单击此处可在 APM 中查找域“{domain}”或显式定义的“服务名称”。", + "xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "打开 url {monitorUrl} 的监测的集成弹出式窗口", + "xpack.uptime.monitorList.pageSizePopoverButtonText": "每页行数:{size}", + "xpack.uptime.monitorList.pageSizeSelect.numRowsItemMessage": "{numRows} 行", + "xpack.uptime.monitorList.redirects.title.number": "{number}", + "xpack.uptime.monitorList.statusColumn.checkedTimestamp": "{timestamp}已检查", + "xpack.uptime.monitorList.statusColumn.locStatusMessage": "在 {noLoc} 个位置", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.multiple": "在 {noLoc} 个位置", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.down": "在 {locs} 关闭", + "xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.up": "在 {locs} 运行", + "xpack.uptime.monitorList.table.description": "具有“状态”、“名称”、“URL”、“IP”、“中断历史记录”和“集成”列的“监测状态”表。该表当前显示 {length} 个项目。", + "xpack.uptime.monitorList.tags.filter": "筛选带 {tag} 标签的所有监测", + "xpack.uptime.monitorRoute.title": "监测 | {baseTitle}", + "xpack.uptime.monitorStatusBar.locations.oneLocStatus": "在 {loc} 位置处于 {status}", + "xpack.uptime.monitorStatusBar.locations.upStatus": "在 {loc} 位置处于 {status}", + "xpack.uptime.overview.alerts.enabled.success.description": "此监测关闭时,将有消息发送到 {actionConnectors}。", + "xpack.uptime.pingist.durationSecondsColumnFormatting": "{seconds} 秒", + "xpack.uptime.pingist.durationSecondsColumnFormatting.singular": "{seconds} 秒", + "xpack.uptime.pingList.durationMsColumnFormatting": "{millis} 毫秒", + "xpack.uptime.pingList.expandedRow.response_body.notRecorded": "正文未记录。阅读我们的{docsLink}以详细了解如何记录响应正文。", + "xpack.uptime.public.pages.mappingError.bodyDocsLink": "您可以在 {docsLink} 中了解如何解决此问题。", + "xpack.uptime.public.pages.mappingError.bodyMessage": "检测到不正确的映射!可能您忘记运行 Heartbeat {setup} 命令?", + "xpack.uptime.snapshot.donutChart.ariaLabel": "显示当前状态的饼图。{down} 个监测已关闭,共 {total} 个。", + "xpack.uptime.snapshotHistogram.description": "显示从 {startTime} 到 {endTime} 的运行时间时移状态的条形图。", + "xpack.uptime.sourceConfiguration.ageThresholdDefaultValue": "默认值为 {defaultValue}", + "xpack.uptime.sourceConfiguration.expirationThresholdDefaultValue": "默认值为 {defaultValue}", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDefaultValue": "默认值为 {defaultValue}", + "xpack.uptime.stepDetailRoute.title": "Synthetics 详细信息 | {baseTitle}", + "xpack.uptime.synthetics.emptyJourney.message.checkGroupField": "该过程的检查组是 {codeBlock}。", + "xpack.uptime.synthetics.executedStep.screenshot.notSucceeded": "{status} 检查的屏幕截图", + "xpack.uptime.synthetics.journey.allFailedMessage": "{total} 个步骤 - 全部失败或跳过", + "xpack.uptime.synthetics.journey.allSucceededMessage": "{total} 个步骤 - 全部成功", + "xpack.uptime.synthetics.journey.partialSuccessMessage": "{total} 个步骤 - {succeeded} 个成功", + "xpack.uptime.synthetics.pingTimestamp.captionContent": "第 {stepNumber} 步,共 {totalSteps} 步", + "xpack.uptime.synthetics.screenshotDisplay.altText": "名称为“{stepName}”的步骤的屏幕截图", + "xpack.uptime.synthetics.step.duration": "{value} 秒", + "xpack.uptime.synthetics.waterfall.offsetUnit": "{offset} 毫秒", + "xpack.uptime.synthetics.waterfall.requestsHighlightedMessage": "({numHighlightedRequests}匹配筛选)", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage": "{numNetworkRequests} 个网络请求", + "xpack.uptime.synthetics.waterfall.requestsTotalMessage.first": "前 {count} 个", + "xpack.uptime.addDataButtonLabel": "添加数据", + "xpack.uptime.alertDropdown.noWritePermissions": "您需要 Uptime 的读写访问权限才能在此应用中创建告警。", + "xpack.uptime.alerts.anomaly.criteriaExpression.ariaLabel": "显示选定监测的条件的表达式。", + "xpack.uptime.alerts.anomaly.criteriaExpression.description": "当监测", + "xpack.uptime.alerts.anomaly.scoreExpression.ariaLabel": "显示异常告警阈值的条件的表达式。", + "xpack.uptime.alerts.anomaly.scoreExpression.description": "具有异常,严重性为", + "xpack.uptime.alerts.createRulesPanel.title": "创建规则", + "xpack.uptime.alerts.durationAnomaly": "Uptime 持续时间异常", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.anomalyStartTimestamp": "异常开始的 ISO8601 时间戳。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.expectedResponseTime": "预期响应时间", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitor": "名称或 ID 的友好呈现,建议类似于 My Monitor 的名称", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorId": "监测的 ID。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.monitorUrl": "监测的 URL。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.observerLocation": "执行 Heartbeat 检查的观察者位置。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severity": "异常的严重性。", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.severityScore": "异常严重性分数", + "xpack.uptime.alerts.durationAnomaly.actionVariables.state.slowestAnomalyResponse": "在附加单位(ms、s)的异常存储桶期间最慢的响应时间。", + "xpack.uptime.alerts.monitorStatus": "运行时间监测状态", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertDetailUrl.description": "Elastic 内视图的链接,显示与此告警相关的进一步详细信息和上下文", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.alertReasonMessage.description": "告警原因的简洁描述", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.message.description": "生成的消息,汇总当前关闭的监测", + "xpack.uptime.alerts.monitorStatus.actionVariables.context.viewInAppUrl.description": "Elastic 中可用于进一步调查告警及其上下文的视图或功能的链接", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.checkedAt": "监测检查的时间戳。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.currentTriggerStarted": "表示告警触发时当前触发状况开始的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstCheckedAt": "表示此告警首次检查的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.firstTriggeredAt": "表示告警首次触发的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.isTriggered": "表示告警当前是否触发的标志", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastCheckedAt": "表示告警最近检查时间的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastErrorMessage": "监测最新错误消息", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastResolvedAt": "表示此告警最近解决时间的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.lastTriggeredAt": "表示告警最近触发时间的时间戳", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitor": "名称或 ID 的友好呈现,建议类似于 My Monitor 的名称", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorId": "监测的 ID。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorType": "监测的类型(例如 HTTP/TCP)。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.monitorUrl": "监测的 URL。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerHostname": "执行 Heartbeat 检查的观察者主机名。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.observerLocation": "执行 Heartbeat 检查的观察者位置。", + "xpack.uptime.alerts.monitorStatus.actionVariables.state.statusMessage": "状态消息,例如关闭和/或低于可用性阈值(如果执行可用性检查)。", + "xpack.uptime.alerts.monitorStatus.addFilter": "添加筛选", + "xpack.uptime.alerts.monitorStatus.addFilter.location": "位置", + "xpack.uptime.alerts.monitorStatus.addFilter.port": "端口", + "xpack.uptime.alerts.monitorStatus.addFilter.tag": "标签", + "xpack.uptime.alerts.monitorStatus.addFilter.type": "类型", + "xpack.uptime.alerts.monitorStatus.availability.isEnabledCheckbox.label": "可用性", + "xpack.uptime.alerts.monitorStatus.availability.threshold.anyMonitorDescription": "任何监测启动于", + "xpack.uptime.alerts.monitorStatus.availability.threshold.ariaLabel": "指定此告警的可用性阈值", + "xpack.uptime.alerts.monitorStatus.availability.threshold.description": "匹配的监测运行于", + "xpack.uptime.alerts.monitorStatus.availability.threshold.input.ariaLabel": "输入用于检查此告警的可用性阈值", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.ariaLabel": "输入告警可用性检查的单位数。", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.expression": "(之内)过去", + "xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel": "指定跟踪时间范围的可用性", + "xpack.uptime.alerts.monitorStatus.availability.unit.headline": "选择时间范围单位", + "xpack.uptime.alerts.monitorStatus.availability.unit.selectable": "使用此选择来设置此告警的可用性范围单位", + "xpack.uptime.alerts.monitorStatus.filterBar.ariaLabel": "允许对监测状态告警使用筛选条件的输入", + "xpack.uptime.alerts.monitorStatus.filters.anyLocation": "任意位置", + "xpack.uptime.alerts.monitorStatus.filters.anyPort": "任意端口", + "xpack.uptime.alerts.monitorStatus.filters.anyTag": "任意标签", + "xpack.uptime.alerts.monitorStatus.filters.anyType": "任意类型", + "xpack.uptime.alerts.monitorStatus.filters.from": "自", + "xpack.uptime.alerts.monitorStatus.filters.fromLocation": "来源位置", + "xpack.uptime.alerts.monitorStatus.filters.location.label": "选择要应用到告警查询的位置筛选。", + "xpack.uptime.alerts.monitorStatus.filters.of": "的", + "xpack.uptime.alerts.monitorStatus.filters.ofType": "类型", + "xpack.uptime.alerts.monitorStatus.filters.port.label": "选择要应用到告警查询的端口筛选。", + "xpack.uptime.alerts.monitorStatus.filters.scheme.label": "选择要应用到告警查询的协议方案筛选。", + "xpack.uptime.alerts.monitorStatus.filters.tag.label": "选择要应用到告警查询的标签筛选。", + "xpack.uptime.alerts.monitorStatus.filters.using": "使用", + "xpack.uptime.alerts.monitorStatus.filters.usingPort": "使用端口", + "xpack.uptime.alerts.monitorStatus.filters.with": "使用", + "xpack.uptime.alerts.monitorStatus.filters.withTag": "具有标签", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.anyMonitors.description": "任何监测已关闭 >=", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.ariaLabel": "打开弹出框以输入已关闭计数", + "xpack.uptime.alerts.monitorStatus.numTimesExpression.matchingMonitors.description": "匹配的监测已关闭 >=", + "xpack.uptime.alerts.monitorStatus.numTimesField.ariaLabel": "输入触发告警的已关闭计数", + "xpack.uptime.alerts.monitorStatus.oldAlertCallout.title": "您可能正在编辑较旧的告警,某些字段可能不自动填充。", + "xpack.uptime.alerts.monitorStatus.statusEnabledCheck.label": "状态检查", + "xpack.uptime.alerts.monitorStatus.timerangeOption.days": "天", + "xpack.uptime.alerts.monitorStatus.timerangeOption.hours": "小时", + "xpack.uptime.alerts.monitorStatus.timerangeOption.minutes": "分钟", + "xpack.uptime.alerts.monitorStatus.timerangeOption.months": "个月", + "xpack.uptime.alerts.monitorStatus.timerangeOption.seconds": "秒", + "xpack.uptime.alerts.monitorStatus.timerangeOption.weeks": "周", + "xpack.uptime.alerts.monitorStatus.timerangeOption.years": "年", + "xpack.uptime.alerts.monitorStatus.timerangeSelectionHeader": "选择时间范围单位", + "xpack.uptime.alerts.monitorStatus.timerangeUnitExpression.ariaLabel": "打开时间范围单位选择字段的弹出框", + "xpack.uptime.alerts.monitorStatus.timerangeUnitSelectable": "告警应使用的时间范围单位的可选择字段", + "xpack.uptime.alerts.monitorStatus.timerangeValueExpression.ariaLabel": "打开时间范围值字段的弹出框", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.ariaLabel": "输入告警范围的时间单位数目", + "xpack.uptime.alerts.monitorStatus.timerangeValueField.expression": "之内", + "xpack.uptime.alerts.timerangeUnitSelectable.daysOption.ariaLabel": "“天”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.hoursOption.ariaLabel": "“小时”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.minutesOption.ariaLabel": "“分钟”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.monthsOption.ariaLabel": "“月”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.secondsOption.ariaLabel": "“秒”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.weeksOption.ariaLabel": "“周”时间范围选择项", + "xpack.uptime.alerts.timerangeUnitSelectable.yearsOption.ariaLabel": "“年”时间范围选择项", + "xpack.uptime.alerts.tls": "Uptime TLS", + "xpack.uptime.alerts.tls.actionVariables.state.agingCommonNameAndDate": "检测到的证书的常见名称和到期日期/时间。", + "xpack.uptime.alerts.tls.actionVariables.state.agingCount": "检测到即将过时的证书数目。", + "xpack.uptime.alerts.tls.actionVariables.state.count": "告警执行工具检测到的证书数目", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCommonNameAndDate": "检测到的证书的常见名称和到期日期/时间", + "xpack.uptime.alerts.tls.actionVariables.state.expiringCount": "告警检测到的即将到期证书数目。", + "xpack.uptime.alerts.tls.agingLabel": "已过旧", + "xpack.uptime.alerts.tls.criteriaExpression.ariaLabel": "显示此告警监视的监测条件的表达式", + "xpack.uptime.alerts.tls.expiredLabel": "已过期", + "xpack.uptime.alerts.tls.expiringLabel": "将到期", + "xpack.uptime.alerts.tls.invalidLabel": "无效", + "xpack.uptime.alerts.tlsLegacy": "Uptime TLS(旧版)", + "xpack.uptime.alertsPopover.toggleButton.ariaLabel": "打开告警和规则上下文菜单", + "xpack.uptime.apmIntegrationAction.description": "在 APM 中搜索此监测", + "xpack.uptime.apmIntegrationAction.text": "显示 APM 数据", + "xpack.uptime.breadcrumbs.legacyOverviewBreadcrumbText": "运行时间", + "xpack.uptime.controls.selectSeverity.criticalLabel": "紧急", + "xpack.uptime.controls.selectSeverity.majorLabel": "重大", + "xpack.uptime.controls.selectSeverity.minorLabel": "轻微", + "xpack.uptime.controls.selectSeverity.warningLabel": "警告", + "xpack.uptime.deprecateNoticeModal.addPrivateLocations": "根据您的 Fleet 策略添加专用位置", + "xpack.uptime.deprecateNoticeModal.automateMonitors": "使用项目监测自动创建监测", + "xpack.uptime.deprecateNoticeModal.description": "此 Elastic Synthetics 集成已过时。相反,您现在可以直接在 Synthetics 应用中更高效地监测终端、页面和用户旅程:", + "xpack.uptime.deprecateNoticeModal.elasticManagedLocations": "在由 Elastic 管理的多个位置或从您自己的专用位置运行监测", + "xpack.uptime.deprecateNoticeModal.goBack": "返回", + "xpack.uptime.deprecateNoticeModal.goToSynthetics": "前往 Synthetics", + "xpack.uptime.deprecateNoticeModal.headerText": "在 Synthetics 中,现在开箱即可使用组合监测", + "xpack.uptime.deprecateNoticeModal.manageMonitors": "从单一位置管理轻量级和浏览器监测", + "xpack.uptime.deprecateNoticeModal.readDocs": "阅读文档。", + "xpack.uptime.durationChart.emptyPrompt.title": "没有持续时间数据", + "xpack.uptime.editPackagePolicy.inSynthetics": "在 Synthetics 中编辑", + "xpack.uptime.editPackagePolicy.inSyntheticsDesc": "此软件包策略由 Synthetics 应用托管。", + "xpack.uptime.emptyState.loadingMessage": "正在加载……", + "xpack.uptime.emptyStateError.notFoundPage": "未找到页面", + "xpack.uptime.enableAlert.editAlert": "编辑告警", + "xpack.uptime.filterBar.ariaLabel": "概览页面的输入筛选条件", + "xpack.uptime.filterBar.filterAllLabel": "全部", + "xpack.uptime.filterBar.options.location.name": "位置", + "xpack.uptime.filterBar.options.portLabel": "端口", + "xpack.uptime.filterBar.options.schemeLabel": "方案", + "xpack.uptime.filterBar.options.tagsLabel": "标签", + "xpack.uptime.fleetIntegration.assets.description": "在 Synthetics 中查看监测", + "xpack.uptime.fleetIntegration.assets.name": "监测", + "xpack.uptime.integration.deprecation.dismiss": "关闭", + "xpack.uptime.integration.deprecation.link": "Synthetics 迁移文档", + "xpack.uptime.integration.deprecation.title": "迁移 Elastic Synthetics 集成监测", + "xpack.uptime.integrationLink.missingDataMessage": "未找到此集成的所需数据。", + "xpack.uptime.kueryBar.searchPlaceholder.kql": "使用 kql 语法搜索监测 ID、名称和类型等(例如 monitor.type: \"http\" AND tags: \"dev\")", + "xpack.uptime.kueryBar.searchPlaceholder.simpleText": "按监测 ID、名称、URL、端口或标签搜索", + "xpack.uptime.locationName.helpLinkAnnotation": "添加位置", + "xpack.uptime.mappingErrorRoute.breadcrumb": "映射错误", + "xpack.uptime.mappingErrorRoute.pageHeader.title": "映射错误", + "xpack.uptime.mappingErrorRoute.title": "Synthetics | 映射错误", + "xpack.uptime.ml.durationChart.exploreInMlApp": "在 ML 应用中浏览", + "xpack.uptime.ml.enableAnomalyDetectionPanel.add_job_permissions_needed": "需要权限", + "xpack.uptime.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle": "异常检测", + "xpack.uptime.ml.enableAnomalyDetectionPanel.cancelLabel": "取消", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createMLJobDescription": "在此处可以创建 Machine Learning 作业,以便为运行时间监测计算\n 响应持续时间的异常分数。启用后,详情页面上的监测持续时间图表\n 将显示预期边界并使用异常标注图表。您还可能\n 识别在所有地理区域的延迟增长时段。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel": "创建新作业", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyAlert": "禁用异常告警", + "xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle": "禁用异常检测", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enable_or_manage_job": "您可以启用异常检测作业,或者如果此处已有作业,则可以管理该作业或告警。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyAlert": "启用异常告警", + "xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle": "启用异常检测", + "xpack.uptime.ml.enableAnomalyDetectionPanel.insufficient_permissions_add_job": "您必须具有 Machine Learning 的 Kibana 权限才能使用此功能。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText": "分析正等待 ML 节点变为可用。可能要花费点时间,才会将结果添加到响应时间图表。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText": "现在正在运行响应持续时间图表的分析。可能要花费点时间,才会将结果添加到响应时间图表。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText": "查看作业", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle": "作业已成功创建", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText": "您当前的许可证可能不允许创建 Machine Learning 作业,或者此作业可能已存在。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle": "作业创建失败", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel": "删除异常检测作业?", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle": "作业已删除", + "xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText": "作业已成功删除", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle": "管理异常检测", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText": "Machine Learning 作业管理页面", + "xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText": "注意:可能要过几分钟后,作业才会开始计算结果。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.noPermissionsTooltip": "您需要 Uptime 的读写访问权限才能创建异常告警。", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrial": "开始为期 14 天的免费试用", + "xpack.uptime.ml.enableAnomalyDetectionPanel.startTrialDesc": "要访问持续时间异常检测,必须订阅 Elastic 白金级许可证。", + "xpack.uptime.monitorCharts.durationChart.wrapper.label": "显示监测的 ping 持续时间(按位置分组)的图表。", + "xpack.uptime.monitorCharts.monitorDuration.titleLabel": "监测持续时间", + "xpack.uptime.monitorDetails.ml.confirmAlertDeleteMessage": "确定要删除异常告警?", + "xpack.uptime.monitorDetails.ml.confirmDeleteMessage": "是否确定要删除此作业?", + "xpack.uptime.monitorDetails.ml.deleteJobWarning": "删除作业可能会非常耗时。删除将在后台进行,数据可能不会马上消失。", + "xpack.uptime.monitorDetails.ml.deleteMessage": "正在删除作业......", + "xpack.uptime.monitorDetails.statusBar.pingType.browser": "浏览器", + "xpack.uptime.monitorDetails.statusBar.pingType.http": "HTTP", + "xpack.uptime.monitorDetails.statusBar.pingType.icmp": "ICMP", + "xpack.uptime.monitorDetails.statusBar.pingType.tcp": "TCP", + "xpack.uptime.monitorDetails.title.disclaimer.description": "(公测版)", + "xpack.uptime.monitorDetails.title.disclaimer.link": "查看更多内容", + "xpack.uptime.monitorDetails.title.pingType.browser": "浏览器", + "xpack.uptime.monitorDetails.title.pingType.http": "HTTP ping", + "xpack.uptime.monitorDetails.title.pingType.icmp": "ICMP ping", + "xpack.uptime.monitorDetails.title.pingType.tcp": "TCP ping", + "xpack.uptime.monitorList.defineConnector.popover.description": "以接收状态告警。", + "xpack.uptime.monitorList.disableDownAlert": "禁用状态告警", + "xpack.uptime.monitorList.downLineSeries.downLabel": "关闭检查", + "xpack.uptime.monitorList.drawer.mostRecentRun": "最新测试运行", + "xpack.uptime.monitorList.drawer.url": "URL", + "xpack.uptime.monitorList.enabledAlerts.noAlert": "没有为此监测启用规则。", + "xpack.uptime.monitorList.enabledAlerts.title": "已启用规则", + "xpack.uptime.monitorList.enableDownAlert": "启用状态告警", + "xpack.uptime.monitorList.geoName.helpLinkAnnotation": "添加位置", + "xpack.uptime.monitorList.infraIntegrationAction.container.message": "显示容器指标", + "xpack.uptime.monitorList.infraIntegrationAction.docker.description": "在 Infrastructure UI 上查找此监测的容器 ID", + "xpack.uptime.monitorList.infraIntegrationAction.ip.ariaLabel": "在 Infrastructure UI 上查找此监测的 IP 地址", + "xpack.uptime.monitorList.infraIntegrationAction.ip.message": "显示主机指标", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.description": "在 Infrastructure UI 上查找此监测的 Pod UID", + "xpack.uptime.monitorList.infraIntegrationAction.kubernetes.message": "显示 Pod 指标", + "xpack.uptime.monitorList.integrationGroup.emptyMessage": "没有可用的集成应用程序", + "xpack.uptime.monitorList.loading": "正在加载……", + "xpack.uptime.monitorList.locations.expand": "单击以查看剩余位置", + "xpack.uptime.monitorList.loggingIntegrationAction.container.id": "显示容器日志", + "xpack.uptime.monitorList.loggingIntegrationAction.container.message": "显示容器日志", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.description": "在 Logging UI 中查找此监测的 IP 地址", + "xpack.uptime.monitorList.loggingIntegrationAction.ip.message": "显示主机日志", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.ariaLabel": "显示 Pod 日志", + "xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.message": "显示 Pod 日志", + "xpack.uptime.monitorList.monitorHistoryColumnLabel": "中断历史记录", + "xpack.uptime.monitorList.monitoringStatusTitle": "监测", + "xpack.uptime.monitorList.nameColumnLabel": "名称", + "xpack.uptime.monitorList.noItemForSelectedFiltersMessage": "未找到匹配选定筛选条件的监测", + "xpack.uptime.monitorList.noItemMessage": "未找到任何运行时间监测", + "xpack.uptime.monitorList.noMessage.troubleshoot": "尝试使用绝对日期范围。如果监测在之后显示,可能表示安装 Heartbeat 或 Kibana 的位置出现系统时钟问题。", + "xpack.uptime.monitorList.observabilityInvestigateColumn.popoverIconButton.label": "调查", + "xpack.uptime.monitorList.statusAlert.label": "状态告警", + "xpack.uptime.monitorList.statusColumnLabel": "状态", + "xpack.uptime.monitorList.tags.expand": "单击以查看剩余标签", + "xpack.uptime.monitorList.tlsColumnLabel": "TLS 证书", + "xpack.uptime.monitorList.troubleshoot.systemClockOutOfSync": "系统时钟可能不同步", + "xpack.uptime.monitorList.troubleshoot.tryDateRange": "应用绝对日期范围", + "xpack.uptime.monitorList.troubleshoot.whereAreMyMonitors": "我的监测在什么位置?", + "xpack.uptime.monitorStatusBar.durationTextAriaLabel": "监测持续时间(毫秒)", + "xpack.uptime.monitorStatusBar.healthStatusMessageAriaLabel": "监测状态", + "xpack.uptime.monitorStatusBar.loadingMessage": "正在加载……", + "xpack.uptime.monitorStatusBar.monitor.availability": "总体可用性", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.availability": "可用性", + "xpack.uptime.monitorStatusBar.monitor.availabilityReport.location": "位置", + "xpack.uptime.monitorStatusBar.monitor.id": "监测 ID", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom": "正监测自", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.listToMap": "更改到地图视图以按位置检查可用性。", + "xpack.uptime.monitorStatusBar.monitor.monitoringFrom.MapToList": "更改到列表视图以按位置检查可用性。", + "xpack.uptime.monitorStatusBar.monitorUrlLinkAriaLabel": "监测 URL 链接", + "xpack.uptime.monitorStatusBar.sslCertificate.title": "TLS 证书", + "xpack.uptime.monitorStatusBar.timestampFromNowTextAriaLabel": "自上次检查以来经过的时间", + "xpack.uptime.monitorStatusBar.type.ariaLabel": "监测类型", + "xpack.uptime.monitorStatusBar.type.label": "类型", + "xpack.uptime.navigateToAlertingButton.content": "管理规则", + "xpack.uptime.navigateToAlertingUi": "离开 Uptime 并前往“Alerting 管理”页面", + "xpack.uptime.noDataConfig.beatsCard.description": "主动监测站点和服务的可用性。接收告警并更快地解决问题,从而优化用户体验。", + "xpack.uptime.noDataConfig.beatsCard.title": "通过 Heartbeat 添加监测", + "xpack.uptime.noDataConfig.solutionName": "Observability", + "xpack.uptime.notFountPage.homeLinkText": "返回主页", + "xpack.uptime.openAlertContextPanel.label": "创建规则", + "xpack.uptime.overview.alerts.disabled.failed": "无法禁用规则!", + "xpack.uptime.overview.alerts.disabled.success": "已成功禁用规则!", + "xpack.uptime.overview.alerts.enabled.failed": "无法启用规则!", + "xpack.uptime.overview.alerts.enabled.success": "已成功启用规则 ", + "xpack.uptime.overview.uptimeHeading": "运行时间监测", + "xpack.uptime.overviewPageLink.disabled.ariaLabel": "禁用的分页按钮表示在监测列表中无法进行进一步导航。", + "xpack.uptime.overviewPageLink.next.ariaLabel": "下页结果", + "xpack.uptime.overviewPageLink.prev.ariaLabel": "上页结果", + "xpack.uptime.page_header.addDataLink.label": "导航到有关如何添加 Uptime 数据的教程", + "xpack.uptime.page_header.defineConnector.popover.defaultLink": "定义默认连接器", + "xpack.uptime.page_header.defineConnector.settingsLink": "设置", + "xpack.uptime.page_header.manageLink.not": "监测管理在 Uptime 中不再可用,请改用 Synthetics 应用。", + "xpack.uptime.page_header.manageMonitors": "监测管理", + "xpack.uptime.pingList.checkHistoryTitle": "历史记录", + "xpack.uptime.pingList.columns.failedStep": "失败的步骤", + "xpack.uptime.pingList.drawer.body.docsLink": "文档", + "xpack.uptime.pingList.stepDurationHeader": "步骤持续时间", + "xpack.uptime.pingList.synthetics.performanceBreakDown": "查看性能细目", + "xpack.uptime.pingList.synthetics.waterfall.filters.popover": "单击以打开瀑布筛选", + "xpack.uptime.public.pages.mappingError.title": "Heartbeat 映射缺失", + "xpack.uptime.routes.legacyBaseTitle": "Uptime - Kibana", + "xpack.uptime.settings.heading": "Uptime 设置", + "xpack.uptime.snapshot.monitor": "监测", + "xpack.uptime.snapshot.monitors": "监测", + "xpack.uptime.snapshot.noDataDescription": "选定的时间范围中没有 ping。", + "xpack.uptime.snapshot.noDataTitle": "没有可用的 ping 数据", + "xpack.uptime.snapshot.pingsOverTimeTitle": "时移 Ping 数", + "xpack.uptime.snapshotHistogram.series.pings": "监测 Ping", + "xpack.uptime.snapshotHistogram.xAxisId": "Ping X 轴", + "xpack.uptime.snapshotHistogram.yAxis.title": "Ping", + "xpack.uptime.snapshotHistogram.yAxisId": "Ping Y 轴", + "xpack.uptime.sourceConfiguration.ageLimit.units.days": "天", + "xpack.uptime.sourceConfiguration.ageLimitThresholdInput.ariaLabel": "该输入控制 Kibana 显示警告之前 TLS 证书有效的最大天数。", + "xpack.uptime.sourceConfiguration.alertConnectors": "告警连接器", + "xpack.uptime.sourceConfiguration.alertDefaultForm.requiredEmail": "电子邮件连接器需要目标电子邮件", + "xpack.uptime.sourceConfiguration.alertDefaults": "告警默认值", + "xpack.uptime.sourceConfiguration.applySettingsButtonLabel": "应用更改", + "xpack.uptime.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel": "该输入控制 Kibana 显示警告之前离 TLS 证书到期剩余的最小天数。", + "xpack.uptime.sourceConfiguration.certificateThresholdDescription": "更改显示并告警证书错误的阈值。注意:这会影响任何配置的告警。", + "xpack.uptime.sourceConfiguration.certificationSectionTitle": "证书到期", + "xpack.uptime.sourceConfiguration.defaultConnectors.description": "要用于发送告警的默认连接器。", + "xpack.uptime.sourceConfiguration.discardSettingsButtonLabel": "取消", + "xpack.uptime.sourceConfiguration.errorStateLabel": "到期阈值", + "xpack.uptime.sourceConfiguration.expirationThreshold": "到期/使用时间阈值", + "xpack.uptime.sourceConfiguration.heartbeatIndicesDescription": "用于匹配包含 Heartbeat 数据的索引的索引模式", + "xpack.uptime.sourceConfiguration.heartbeatIndicesLabel": "Heartbeat 索引", + "xpack.uptime.sourceConfiguration.heartbeatIndicesTitle": "Uptime 索引", + "xpack.uptime.sourceConfiguration.indicesSectionTitle": "索引", + "xpack.uptime.sourceConfiguration.warningStateLabel": "使用时间限制", + "xpack.uptime.stepList.collapseRow": "折叠", + "xpack.uptime.stepList.expandRow": "展开", + "xpack.uptime.stepList.stepName": "步骤名称", + "xpack.uptime.synthetics.consoleStepList.message": "此过程无法运行,记录的控制台输出如下所示:", + "xpack.uptime.synthetics.consoleStepList.title": "未执行步骤", + "xpack.uptime.synthetics.emptyJourney.message.footer": "没有更多可显示的信息。", + "xpack.uptime.synthetics.emptyJourney.message.heading": "此过程不包含任何步骤。", + "xpack.uptime.synthetics.emptyJourney.title": "没有此过程的任何步骤", + "xpack.uptime.synthetics.executedStep.consoleOutput.label": "控制台输出", + "xpack.uptime.synthetics.executedStep.errorHeading": "错误消息", + "xpack.uptime.synthetics.executedStep.screenshot.not": "屏幕截图", + "xpack.uptime.synthetics.executedStep.scriptHeading.label": "在此步骤执行的脚本", + "xpack.uptime.synthetics.executedStep.stackTrace": "堆栈跟踪", + "xpack.uptime.synthetics.imageLoadingSpinner.ariaLabel": "表示图像正在加载的动画旋转图标", + "xpack.uptime.synthetics.journey.loadingSteps": "正在加载步骤......", + "xpack.uptime.synthetics.nextStepButton.ariaLabel": "下一步", + "xpack.uptime.synthetics.performanceBreakDown.label": "性能细目", + "xpack.uptime.synthetics.prevStepButton.airaLabel": "上一步", + "xpack.uptime.synthetics.screenshot.loadingImageMessage": "正在加载", + "xpack.uptime.synthetics.screenshot.noImageMessage": "没有可用图像", + "xpack.uptime.synthetics.screenshotDisplay.altTextWithoutName": "屏幕截图", + "xpack.uptime.synthetics.statusBadge.failedMessage": "失败", + "xpack.uptime.synthetics.statusBadge.skippedMessage": "已跳过", + "xpack.uptime.synthetics.statusBadge.succeededMessage": "成功", + "xpack.uptime.synthetics.step.durationTrend": "步骤持续时间趋势", + "xpack.uptime.synthetics.stepDetail.noData": "找不到此步骤的数据", + "xpack.uptime.synthetics.stepList.nextCheck": "下一检查", + "xpack.uptime.synthetics.stepList.previousCheck": "上一检查", + "xpack.uptime.synthetics.thumbnail.fullSize.alt": "此过程步骤的缩略图屏幕截图较大版本。", + "xpack.uptime.title": "运行时间", + "xpack.uptime.toggleTlsAlertButton.ariaLabel": "打开 TLS 规则浮出控件", + "xpack.uptime.toggleTlsAlertButton.content": "TLS 规则", "xpack.threatIntelligence.common.emptyPage.body3": "要开始使用 Elastic 威胁情报,请从“集成”页面启用一个或多个威胁情报集成,或使用 Filebeat 采集数据。有关更多信息,请查看 {docsLink}。", "xpack.threatIntelligence.addToBlockList": "添加阻止列表条目", "xpack.threatIntelligence.addToExistingCase": "添加到现有案例", diff --git a/x-pack/plugins/uptime/.buildkite/pipelines/flaky.js b/x-pack/plugins/uptime/.buildkite/pipelines/flaky.js new file mode 100644 index 0000000000000..7a1ee5c582d7d --- /dev/null +++ b/x-pack/plugins/uptime/.buildkite/pipelines/flaky.js @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +const { execSync } = require('child_process'); + +// List of steps generated dynamically from this jobs +const steps = []; +const pipeline = { + env: { + IGNORE_SHIP_CI_STATS_ERROR: 'true', + }, + steps: steps, +}; + +// Default config +const defaultCount = 25; +const maxCount = 500; +const defaultConcurrency = 25; +const maxConcurrency = 50; +const initialJobs = 2; + +const UUID = process.env.UUID; +const KIBANA_BUILD_ID = 'KIBANA_BUILD_ID'; +const BUILD_UUID = 'build'; + +// Metada keys, should match the ones specified in pipeline step configuration +const E2E_COUNT = 'e2e/count'; +const E2E_CONCURRENCY = 'e2e/concurrent'; +const E2E_GREP = 'e2e/grep'; +const E2E_ARTIFACTS_ID = 'e2e/build-id'; + +const env = getEnvFromMetadata(); + +const totalJobs = env[E2E_COUNT] + initialJobs; + +if (totalJobs > maxCount) { + console.error('+++ Too many steps'); + console.error( + `Buildkite builds can only contain 500 steps in total. Found ${totalJobs} in total. Make sure your test runs are less than ${ + maxCount - initialJobs + }` + ); + process.exit(1); +} + +// If build id is provided, export it so build step is skipped +pipeline.env[KIBANA_BUILD_ID] = env[E2E_ARTIFACTS_ID]; + +// Build job first +steps.push(getBuildJob()); +steps.push(getGroupRunnerJob(env)); + +console.log(JSON.stringify(pipeline, null, 2)); + +/*** + * Utils + */ + +function getBuildJob() { + return { + command: '.buildkite/scripts/steps/build_kibana.sh', + label: 'Build Kibana Distribution and Plugins', + agents: { queue: 'c2-8' }, + key: BUILD_UUID, + if: `build.env('${KIBANA_BUILD_ID}') == null || build.env('${KIBANA_BUILD_ID}') == ''`, + }; +} + +function getGroupRunnerJob(env) { + return { + command: `${ + env[E2E_GREP] ? `GREP="${env[E2E_GREP]}" ` : '' + }.buildkite/scripts/steps/functional/synthetics_plugin.sh`, + label: `Synthetics Pluging E2E - Synthetics runner`, + agents: { queue: 'n2-4' }, + depends_on: BUILD_UUID, + parallelism: env[E2E_COUNT], + concurrency: env[E2E_CONCURRENCY], + concurrency_group: UUID, + concurrency_method: 'eager', + }; +} + +function getEnvFromMetadata() { + const env = {}; + + env[E2E_COUNT] = getIntValue(E2E_COUNT, defaultCount); + env[E2E_CONCURRENCY] = getIntValue(E2E_CONCURRENCY, defaultConcurrency); + env[E2E_GREP] = getStringValue(E2E_GREP); + env[E2E_ARTIFACTS_ID] = getStringValue(E2E_ARTIFACTS_ID); + + env[E2E_CONCURRENCY] = + env[E2E_CONCURRENCY] > maxConcurrency ? maxConcurrency : env[E2E_CONCURRENCY]; + + return env; +} + +function getIntValue(key, defaultValue) { + let value = defaultValue; + const cli = execSync(`buildkite-agent meta-data get '${key}' --default ${defaultValue} `) + .toString() + .trim(); + + try { + value = parseInt(cli, 10); + } finally { + return value; + } +} + +function getStringValue(key) { + return execSync(`buildkite-agent meta-data get '${key}' --default ''`).toString().trim(); +} diff --git a/x-pack/plugins/uptime/.buildkite/pipelines/flaky.sh b/x-pack/plugins/uptime/.buildkite/pipelines/flaky.sh new file mode 100755 index 0000000000000..eda3407803633 --- /dev/null +++ b/x-pack/plugins/uptime/.buildkite/pipelines/flaky.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -euo pipefail + +UUID="$(cat /proc/sys/kernel/random/uuid)" +export UUID + +node x-pack/plugins/synthetics/.buildkite/pipelines/flaky.js | buildkite-agent pipeline upload diff --git a/x-pack/plugins/uptime/README.md b/x-pack/plugins/uptime/README.md new file mode 100644 index 0000000000000..afb3309e788e9 --- /dev/null +++ b/x-pack/plugins/uptime/README.md @@ -0,0 +1,97 @@ +# Uptime Monitoring + +## Purpose + +The purpose of this plugin is to provide users of Heartbeat more visibility of what's happening +in their infrastructure. + +## Layout + +There are three sections to the app, `common`, `public`, and `server`. + +### common + +Contains runtime types types, constants and a few other files. + +Notably, we use `io-ts`/`fp-ts` functions and types to help provide +additional runtime safety for our API requests/responses. + +### public + +We use Redux and associated tools for managing our app state. Components come in the usual `connect`ed and +presentational varieties. + +The `lib` directory controls bootstrapping code and adapter types. + +There is a `pages` directory; each view gets its own page component. + +The principal structure of the app is stored in `uptime_app.tsx`. + +### server + +The `lib` directory contains `adapters`, which are connections to external resources like Kibana +Server, Elasticsearch, etc. In addition, it contains domains, which are libraries that provide +functionality via adapters. + +The `requests` directory contains functions responsible for querying Elasticsearch and parsing its +responses. + +There's also a `rest_api` folder that defines the structure of the RESTful API endpoints. + +## Testing + +### Unit tests + +Documentation: https://www.elastic.co/guide/en/kibana/current/development-tests.html#_unit_testing + +``` +yarn test:jest x-pack/plugins/synthetics +``` + +### Functional tests + +In one shell, from **~/kibana/x-pack**: +`node scripts/functional_tests_server.js` + +In another shell, from **~kibana/x-pack**: +`node ../scripts/functional_test_runner.js --grep="{TEST_NAME}"`. + +#### API tests + +If instead you need to run API tests, start up the test server and then in another shell, from **~kibana/x-pack**: +`node ../scripts/functional_test_runner.js --config test/api_integration/config.ts --grep="{TEST_NAME}"`. + +You can update snapshots by prefixing the runner command with `env UPDATE_UPTIME_FIXTURES=1` + +You can access the functional test server's Kibana at `http://localhost:5620/`. + +You can login with username `elastic` and password `changeme` by default. + +If you want to freeze a UI or API test you can include an async call like `await new Promise(r => setTimeout(r, 1000 * 60))` +to freeze the execution for 60 seconds if you need to click around or check things in the state that is loaded. + +#### Running --ssl tests + +Some of our tests require there to be an SSL connection between Kibana and Elasticsearch. + +We can run these tests like described above, but with some special config. + +`node scripts/functional_tests_server.js --config=test/functional_with_es_ssl/config.ts` + +`node scripts/functional_test_runner.js --config=test/functional_with_es_ssl/config.ts` + +#### Running accessibility tests + +We maintain a suite of Accessibility tests (you may see them referred to elsewhere as `a11y` tests). + +These tests render each of our pages and ensure that the inputs and other elements contain the +attributes necessary to ensure all users are able to make use of Kibana (for example, users relying +on screen readers). + +The commands for running these tests are very similar to the other functional tests described above. + +From the `~/x-pack` directory: + +Start the server: `node scripts/functional_tests_server --config test/accessibility/config.ts` + +Run the uptime `a11y` tests: `node scripts/functional_test_runner.js --config test/accessibility/config.ts --grep=uptime` diff --git a/x-pack/plugins/uptime/common/config.ts b/x-pack/plugins/uptime/common/config.ts new file mode 100644 index 0000000000000..9da43f8bf9a08 --- /dev/null +++ b/x-pack/plugins/uptime/common/config.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PluginConfigDescriptor } from '@kbn/core/server'; +import { schema, TypeOf } from '@kbn/config-schema'; +import { sslSchema } from '@kbn/server-http-tools'; + +const serviceConfig = schema.object({ + username: schema.maybe(schema.string()), + password: schema.maybe(schema.string()), + manifestUrl: schema.maybe(schema.string()), + hosts: schema.maybe(schema.arrayOf(schema.string())), + syncInterval: schema.maybe(schema.string()), + tls: schema.maybe(sslSchema), + devUrl: schema.maybe(schema.string()), + showExperimentalLocations: schema.maybe(schema.boolean()), +}); + +const uptimeConfig = schema.object({ + index: schema.maybe(schema.string()), + service: schema.maybe(serviceConfig), + enabled: schema.boolean({ defaultValue: true }), +}); + +export const config: PluginConfigDescriptor = { + schema: uptimeConfig, +}; + +export type UptimeConfig = TypeOf; +export type ServiceConfig = TypeOf; diff --git a/x-pack/plugins/uptime/common/constants/capabilities.ts b/x-pack/plugins/uptime/common/constants/capabilities.ts new file mode 100644 index 0000000000000..2768c3bf439d6 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/capabilities.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const INTEGRATED_SOLUTIONS = ['apm', 'infrastructure', 'logs']; + +export const DEFAULT_TIMEPICKER_QUICK_RANGES = 'timepicker:quickRanges'; +export const DEFAULT_DARK_MODE = 'theme:darkMode'; diff --git a/x-pack/plugins/uptime/common/constants/chart_format_limits.ts b/x-pack/plugins/uptime/common/constants/chart_format_limits.ts new file mode 100644 index 0000000000000..44f1c5cd0c7d3 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/chart_format_limits.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +const MINUTE = 1000 * 60; +const HOUR = MINUTE * 60; +const DAY = 24 * 60 * 60 * 1000; +const WEEK = DAY * 7; +const MONTH = WEEK * 4; + +/** + * These constants are used by the charting code to determine + * what label should be applied to chart axes so as to help users + * understand the timeseries data they're being shown. + */ +export const CHART_FORMAT_LIMITS = { + DAY, + EIGHT_MINUTES: MINUTE * 8, + FOUR_YEARS: 4 * 12 * 4 * WEEK, + THIRTY_SIX_HOURS: HOUR * 36, + THREE_WEEKS: WEEK * 3, + SIX_MONTHS: MONTH * 7, + NINE_DAYS: DAY * 9, +}; diff --git a/x-pack/plugins/uptime/common/constants/client_defaults.ts b/x-pack/plugins/uptime/common/constants/client_defaults.ts new file mode 100644 index 0000000000000..41a5f7c64abed --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/client_defaults.ts @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; + +export const CLIENT_DEFAULTS = { + ABSOLUTE_DATE_RANGE_START: 0, + // 15 minutes + ABSOLUTE_DATE_RANGE_END: 1000 * 60 * 15, + /** + * The application auto refreshes every 60s by default. + */ + AUTOREFRESH_INTERVAL: 60 * 1000, + /** + * The application's autorefresh feature is enabled. + */ + AUTOREFRESH_IS_PAUSED: false, + + COMMONLY_USED_DATE_RANGES: [ + { start: 'now/d', end: 'now', label: 'Today' }, + { start: 'now/w', end: 'now', label: 'Week to date' }, + { start: 'now/M', end: 'now', label: 'Month to date' }, + { start: 'now/y', end: 'now', label: 'Year to date' }, + ], + /** + * The beginning of the default date range is 15m ago. + */ + DATE_RANGE_START: 'now-15m', + /** + * The end of the default date range is now. + */ + DATE_RANGE_END: 'now', + FOCUS_CONNECTOR_FIELD: false, + FILTERS: '', + MONITOR_LIST_PAGE_INDEX: 0, + MONITOR_LIST_PAGE_SIZE: 20, + MONITOR_LIST_SORT_DIRECTION: 'asc', + MONITOR_LIST_SORT_FIELD: 'monitor_id', + SEARCH: '', + STATUS_FILTER: '', +}; + +export const EXCLUDE_RUN_ONCE_FILTER = { bool: { must_not: { exists: { field: 'run_once' } } } }; +export const SUMMARY_FILTER = { + exists: { + field: 'summary', + }, +}; + +export const getLocationFilter = ({ + locationName, + locationId, +}: { + locationName: string; + locationId: string; +}) => ({ + minimum_should_match: 1, + should: [ + { + term: { + 'observer.name': locationId, + }, + }, + { + term: { + 'observer.geo.name': locationName, + }, + }, + ], +}); + +export const getTimeSpanFilter = () => ({ + range: { + 'monitor.timespan': { + lte: moment().toISOString(), + gte: moment().subtract(20, 'minutes').toISOString(), + }, + }, +}); diff --git a/x-pack/plugins/uptime/common/constants/context_defaults.ts b/x-pack/plugins/uptime/common/constants/context_defaults.ts new file mode 100644 index 0000000000000..6ac899be5ce21 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/context_defaults.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CursorDirection, SortOrder } from '../runtime_types'; + +/** + * The Uptime UI utilizes a settings context, the defaults for which are stored here. + */ +export const CONTEXT_DEFAULTS = { + /** + * The application cannot assume a basePath. + */ + BASE_PATH: '', + + CURSOR_PAGINATION: { + cursorDirection: CursorDirection.AFTER, + sortOrder: SortOrder.ASC, + }, +}; diff --git a/x-pack/plugins/uptime/common/constants/data_filters.ts b/x-pack/plugins/uptime/common/constants/data_filters.ts new file mode 100644 index 0000000000000..d7ca3b43376b9 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/data_filters.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const STEP_END_FILTER = { + terms: { + 'synthetics.type': ['step/end'], + }, +}; diff --git a/x-pack/plugins/uptime/common/constants/data_test_subjects.ts b/x-pack/plugins/uptime/common/constants/data_test_subjects.ts new file mode 100644 index 0000000000000..f7e124c5a340e --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/data_test_subjects.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const syntheticsTestSubjects = { + urlsInput: 'urls-input', +}; diff --git a/x-pack/plugins/uptime/common/constants/index.ts b/x-pack/plugins/uptime/common/constants/index.ts new file mode 100644 index 0000000000000..d94fa976fb5e0 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { CHART_FORMAT_LIMITS } from './chart_format_limits'; +export { CLIENT_DEFAULTS } from './client_defaults'; +export { CONTEXT_DEFAULTS } from './context_defaults'; +export * from './capabilities'; +export * from './settings_defaults'; +export { QUERY } from './query'; +export * from './ui'; +export * from './rest_api'; +export * from './synthetics'; diff --git a/x-pack/plugins/uptime/common/constants/monitor_defaults.ts b/x-pack/plugins/uptime/common/constants/monitor_defaults.ts new file mode 100644 index 0000000000000..ca267f61e616c --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/monitor_defaults.ts @@ -0,0 +1,288 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { + CodeEditorMode, + BrowserAdvancedFields, + BrowserSimpleFields, + CommonFields, + DataStream, + FormMonitorType, + HTTPAdvancedFields, + HTTPMethod, + HTTPSimpleFields, + ICMPSimpleFields, + Mode, + MonitorDefaults, + ResponseBodyIndexPolicy, + ScheduleUnit, + ScreenshotOption, + SourceType, + TCPAdvancedFields, + TCPSimpleFields, + ThrottlingConfig, + TLSFields, + TLSVersion, + VerificationMode, +} from '../runtime_types/monitor_management'; +import { ConfigKey } from './monitor_management'; + +export const DEFAULT_NAMESPACE_STRING = 'default'; + +export enum PROFILE_VALUES_ENUM { + DEFAULT = 'default', + CABLE = 'cable', + DSL = 'dsl', + THREE_G = '3g', + FOUR_G = '4g', + LTE = 'lte', + FIBRE = 'fibre', + NO_THROTTLING = 'no-throttling', + CUSTOM = 'custom', +} + +export const CUSTOM_LABEL = i18n.translate('xpack.uptime.connectionProfile.custom', { + defaultMessage: 'Custom', +}); + +export const DEFAULT_THROTTLING_VALUE = { download: '5', upload: '3', latency: '20' }; + +export const PROFILE_VALUES: ThrottlingConfig[] = [ + { + value: DEFAULT_THROTTLING_VALUE, + id: PROFILE_VALUES_ENUM.DEFAULT, + label: i18n.translate('xpack.uptime.connectionProfile.default', { + defaultMessage: 'Default', + }), + }, + { + value: { download: '5', upload: '1', latency: '28' }, + id: PROFILE_VALUES_ENUM.CABLE, + label: i18n.translate('xpack.uptime.connectionProfile.cable', { + defaultMessage: 'Cable', + }), + }, + { + value: { download: '1.5', upload: '0.384', latency: '50' }, + id: PROFILE_VALUES_ENUM.DSL, + label: i18n.translate('xpack.uptime.connectionProfile.dsl', { + defaultMessage: 'DSL', + }), + }, + { + value: { download: '1.6', upload: '0.768', latency: '300' }, + id: PROFILE_VALUES_ENUM.THREE_G, + label: i18n.translate('xpack.uptime.connectionProfile.threeG', { + defaultMessage: '3G', + }), + }, + { + value: { download: '9', upload: '0.75', latency: '170' }, + id: PROFILE_VALUES_ENUM.FOUR_G, + label: i18n.translate('xpack.uptime.connectionProfile.fourG', { + defaultMessage: '4G', + }), + }, + { + value: { download: '12', upload: '0.75', latency: '70' }, + id: PROFILE_VALUES_ENUM.LTE, + label: i18n.translate('xpack.uptime.connectionProfile.lte', { + defaultMessage: 'LTE', + }), + }, + { + value: { download: '20', upload: '5', latency: '4' }, + id: PROFILE_VALUES_ENUM.FIBRE, + label: i18n.translate('xpack.uptime.connectionProfile.fibre', { + defaultMessage: 'Fibre', + }), + }, + { + value: null, + id: PROFILE_VALUES_ENUM.NO_THROTTLING, + label: i18n.translate('xpack.uptime.connectionProfile.noThrottling', { + defaultMessage: 'No throttling', + }), + }, +]; + +export const PROFILES_MAP = PROFILE_VALUES.reduce((acc, profile) => { + acc[profile.id] = profile; + return acc; +}, {} as { [key: string]: ThrottlingConfig }); + +export const ALLOWED_SCHEDULES_IN_MINUTES = [ + '1', + '3', + '5', + '10', + '15', + '20', + '30', + '60', + '120', + '240', +]; + +export const DEFAULT_COMMON_FIELDS: CommonFields = { + [ConfigKey.MONITOR_TYPE]: DataStream.HTTP, + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorType.MULTISTEP, + [ConfigKey.ENABLED]: true, + [ConfigKey.ALERT_CONFIG]: { status: { enabled: true }, tls: { enabled: true } }, + [ConfigKey.SCHEDULE]: { + number: '3', + unit: ScheduleUnit.MINUTES, + }, + [ConfigKey.APM_SERVICE_NAME]: '', + [ConfigKey.CONFIG_ID]: '', + [ConfigKey.TAGS]: [], + [ConfigKey.TIMEOUT]: '16', + [ConfigKey.NAME]: '', + [ConfigKey.LOCATIONS]: [], + [ConfigKey.NAMESPACE]: DEFAULT_NAMESPACE_STRING, + [ConfigKey.MONITOR_SOURCE_TYPE]: SourceType.UI, + [ConfigKey.JOURNEY_ID]: '', + [ConfigKey.CONFIG_HASH]: '', + [ConfigKey.MONITOR_QUERY_ID]: '', + [ConfigKey.PARAMS]: '', +}; + +export const DEFAULT_BROWSER_ADVANCED_FIELDS: BrowserAdvancedFields = { + [ConfigKey.SCREENSHOTS]: ScreenshotOption.ON, + [ConfigKey.SYNTHETICS_ARGS]: [], + [ConfigKey.JOURNEY_FILTERS_MATCH]: '', + [ConfigKey.JOURNEY_FILTERS_TAGS]: [], + [ConfigKey.IGNORE_HTTPS_ERRORS]: false, + [ConfigKey.THROTTLING_CONFIG]: PROFILES_MAP[PROFILE_VALUES_ENUM.DEFAULT], +}; + +export const DEFAULT_BROWSER_SIMPLE_FIELDS: BrowserSimpleFields = { + ...DEFAULT_COMMON_FIELDS, + [ConfigKey.PROJECT_ID]: '', + [ConfigKey.PLAYWRIGHT_OPTIONS]: '', + [ConfigKey.METADATA]: { + script_source: { + is_generated_script: false, + file_name: '', + }, + }, + [ConfigKey.MONITOR_TYPE]: DataStream.BROWSER, + [ConfigKey.PORT]: null, + [ConfigKey.SCHEDULE]: { + unit: ScheduleUnit.MINUTES, + number: '10', + }, + [ConfigKey.SOURCE_INLINE]: '', + [ConfigKey.SOURCE_PROJECT_CONTENT]: '', + [ConfigKey.TEXT_ASSERTION]: '', + [ConfigKey.URLS]: '', + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorType.MULTISTEP, + [ConfigKey.TIMEOUT]: null, +}; + +export const DEFAULT_HTTP_SIMPLE_FIELDS: HTTPSimpleFields = { + ...DEFAULT_COMMON_FIELDS, + [ConfigKey.METADATA]: { + is_tls_enabled: false, + }, + [ConfigKey.URLS]: '', + [ConfigKey.MAX_REDIRECTS]: '0', + [ConfigKey.MONITOR_TYPE]: DataStream.HTTP, + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorType.HTTP, + [ConfigKey.PORT]: null, +}; + +export const DEFAULT_HTTP_ADVANCED_FIELDS: HTTPAdvancedFields = { + [ConfigKey.PASSWORD]: '', + [ConfigKey.PROXY_URL]: '', + [ConfigKey.PROXY_HEADERS]: {}, + [ConfigKey.RESPONSE_BODY_CHECK_NEGATIVE]: [], + [ConfigKey.RESPONSE_BODY_CHECK_POSITIVE]: [], + [ConfigKey.RESPONSE_JSON_CHECK]: [], + [ConfigKey.RESPONSE_BODY_INDEX]: ResponseBodyIndexPolicy.ON_ERROR, + [ConfigKey.RESPONSE_HEADERS_CHECK]: {}, + [ConfigKey.RESPONSE_HEADERS_INDEX]: true, + [ConfigKey.RESPONSE_STATUS_CHECK]: [], + [ConfigKey.REQUEST_BODY_CHECK]: { + value: '', + type: CodeEditorMode.PLAINTEXT, + }, + [ConfigKey.REQUEST_HEADERS_CHECK]: {}, + [ConfigKey.REQUEST_METHOD_CHECK]: HTTPMethod.GET, + [ConfigKey.USERNAME]: '', + [ConfigKey.MODE]: Mode.ANY, + [ConfigKey.RESPONSE_BODY_MAX_BYTES]: '1024', + [ConfigKey.IPV4]: true, + [ConfigKey.IPV6]: true, +}; + +export const DEFAULT_ICMP_SIMPLE_FIELDS: ICMPSimpleFields = { + ...DEFAULT_COMMON_FIELDS, + [ConfigKey.HOSTS]: '', + [ConfigKey.MONITOR_TYPE]: DataStream.ICMP, + [ConfigKey.WAIT]: '1', + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorType.ICMP, +}; + +export const DEFAULT_TCP_SIMPLE_FIELDS: TCPSimpleFields = { + ...DEFAULT_COMMON_FIELDS, + [ConfigKey.METADATA]: { + is_tls_enabled: false, + }, + [ConfigKey.HOSTS]: '', + [ConfigKey.URLS]: '', + [ConfigKey.MONITOR_TYPE]: DataStream.TCP, + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorType.TCP, + [ConfigKey.PORT]: null, +}; + +export const DEFAULT_TCP_ADVANCED_FIELDS: TCPAdvancedFields = { + [ConfigKey.PROXY_URL]: '', + [ConfigKey.PROXY_USE_LOCAL_RESOLVER]: false, + [ConfigKey.RESPONSE_RECEIVE_CHECK]: '', + [ConfigKey.REQUEST_SEND_CHECK]: '', + [ConfigKey.MODE]: Mode.ANY, + [ConfigKey.IPV4]: true, + [ConfigKey.IPV6]: true, +}; + +export const DEFAULT_ICMP_ADVANCED_FIELDS = { + [ConfigKey.MODE]: Mode.ANY, + [ConfigKey.IPV4]: true, + [ConfigKey.IPV6]: true, +}; + +export const DEFAULT_TLS_FIELDS: TLSFields = { + [ConfigKey.TLS_CERTIFICATE_AUTHORITIES]: '', + [ConfigKey.TLS_CERTIFICATE]: '', + [ConfigKey.TLS_KEY]: '', + [ConfigKey.TLS_KEY_PASSPHRASE]: '', + [ConfigKey.TLS_VERIFICATION_MODE]: VerificationMode.FULL, + [ConfigKey.TLS_VERSION]: [TLSVersion.ONE_ONE, TLSVersion.ONE_TWO, TLSVersion.ONE_THREE], +}; + +export const DEFAULT_FIELDS: MonitorDefaults = { + [DataStream.HTTP]: { + ...DEFAULT_HTTP_SIMPLE_FIELDS, + ...DEFAULT_HTTP_ADVANCED_FIELDS, + ...DEFAULT_TLS_FIELDS, + }, + [DataStream.TCP]: { + ...DEFAULT_TCP_SIMPLE_FIELDS, + ...DEFAULT_TCP_ADVANCED_FIELDS, + ...DEFAULT_TLS_FIELDS, + }, + [DataStream.ICMP]: { + ...DEFAULT_ICMP_SIMPLE_FIELDS, + ...DEFAULT_ICMP_ADVANCED_FIELDS, + }, + [DataStream.BROWSER]: { + ...DEFAULT_BROWSER_SIMPLE_FIELDS, + ...DEFAULT_BROWSER_ADVANCED_FIELDS, + ...DEFAULT_TLS_FIELDS, + }, +}; diff --git a/x-pack/plugins/uptime/common/constants/monitor_management.ts b/x-pack/plugins/uptime/common/constants/monitor_management.ts new file mode 100644 index 0000000000000..be3802f132a58 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/monitor_management.ts @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum AlertConfigKey { + STATUS_ENABLED = 'alert.status.enabled', + TLS_ENABLED = 'alert.tls.enabled', +} + +// values must match keys in the integration package +export enum ConfigKey { + ALERT_CONFIG = 'alert', + APM_SERVICE_NAME = 'service.name', + CUSTOM_HEARTBEAT_ID = 'custom_heartbeat_id', + CONFIG_ID = 'config_id', + CONFIG_HASH = 'hash', + ENABLED = 'enabled', + FORM_MONITOR_TYPE = 'form_monitor_type', + HOSTS = 'hosts', + IGNORE_HTTPS_ERRORS = 'ignore_https_errors', + MONITOR_SOURCE_TYPE = 'origin', + JOURNEY_FILTERS_MATCH = 'filter_journeys.match', + JOURNEY_FILTERS_TAGS = 'filter_journeys.tags', + JOURNEY_ID = 'journey_id', + MAX_REDIRECTS = 'max_redirects', + METADATA = '__ui', + MODE = 'mode', + MONITOR_TYPE = 'type', + NAME = 'name', + NAMESPACE = 'namespace', + LOCATIONS = 'locations', + PARAMS = 'params', + PASSWORD = 'password', + PLAYWRIGHT_OPTIONS = 'playwright_options', + ORIGINAL_SPACE = 'original_space', // the original space the montior was saved in. Used by push monitors to ensure uniqueness of monitor id sent to heartbeat and prevent data collisions + PORT = 'url.port', + PROXY_URL = 'proxy_url', + PROXY_HEADERS = 'proxy_headers', + PROXY_USE_LOCAL_RESOLVER = 'proxy_use_local_resolver', + RESPONSE_BODY_CHECK_NEGATIVE = 'check.response.body.negative', + RESPONSE_BODY_CHECK_POSITIVE = 'check.response.body.positive', + RESPONSE_JSON_CHECK = 'check.response.json', + RESPONSE_BODY_INDEX = 'response.include_body', + RESPONSE_HEADERS_CHECK = 'check.response.headers', + RESPONSE_HEADERS_INDEX = 'response.include_headers', + RESPONSE_BODY_MAX_BYTES = 'response.include_body_max_bytes', + RESPONSE_RECEIVE_CHECK = 'check.receive', + RESPONSE_STATUS_CHECK = 'check.response.status', + REQUEST_BODY_CHECK = 'check.request.body', + REQUEST_HEADERS_CHECK = 'check.request.headers', + REQUEST_METHOD_CHECK = 'check.request.method', + REQUEST_SEND_CHECK = 'check.send', + REVISION = 'revision', + SCHEDULE = 'schedule', + SCREENSHOTS = 'screenshots', + SOURCE_PROJECT_CONTENT = 'source.project.content', + SOURCE_INLINE = 'source.inline.script', + IPV4 = 'ipv4', + IPV6 = 'ipv6', + PROJECT_ID = 'project_id', + SYNTHETICS_ARGS = 'synthetics_args', + TEXT_ASSERTION = 'playwright_text_assertion', + TLS_CERTIFICATE_AUTHORITIES = 'ssl.certificate_authorities', + TLS_CERTIFICATE = 'ssl.certificate', + TLS_KEY = 'ssl.key', + TLS_KEY_PASSPHRASE = 'ssl.key_passphrase', + TLS_VERIFICATION_MODE = 'ssl.verification_mode', + TLS_VERSION = 'ssl.supported_protocols', + TAGS = 'tags', + TIMEOUT = 'timeout', + THROTTLING_CONFIG = 'throttling', + URLS = 'urls', + USERNAME = 'username', + WAIT = 'wait', + MONITOR_QUERY_ID = 'id', +} + +export const secretKeys = [ + ConfigKey.PROXY_HEADERS, + ConfigKey.PARAMS, + ConfigKey.PASSWORD, + ConfigKey.REQUEST_BODY_CHECK, + ConfigKey.REQUEST_HEADERS_CHECK, + ConfigKey.REQUEST_SEND_CHECK, + ConfigKey.RESPONSE_BODY_CHECK_NEGATIVE, + ConfigKey.RESPONSE_BODY_CHECK_POSITIVE, + ConfigKey.RESPONSE_JSON_CHECK, + ConfigKey.RESPONSE_HEADERS_CHECK, + ConfigKey.RESPONSE_RECEIVE_CHECK, + ConfigKey.SOURCE_INLINE, + ConfigKey.SOURCE_PROJECT_CONTENT, + ConfigKey.SYNTHETICS_ARGS, + ConfigKey.TLS_KEY, + ConfigKey.TLS_KEY_PASSPHRASE, + ConfigKey.USERNAME, +] as const; + +export enum LegacyConfigKey { + SOURCE_ZIP_URL = 'source.zip_url.url', + SOURCE_ZIP_USERNAME = 'source.zip_url.username', + SOURCE_ZIP_PASSWORD = 'source.zip_url.password', + SOURCE_ZIP_FOLDER = 'source.zip_url.folder', + SOURCE_ZIP_PROXY_URL = 'source.zip_url.proxy_url', + ZIP_URL_TLS_CERTIFICATE_AUTHORITIES = 'source.zip_url.ssl.certificate_authorities', + ZIP_URL_TLS_CERTIFICATE = 'source.zip_url.ssl.certificate', + ZIP_URL_TLS_KEY = 'source.zip_url.ssl.key', + ZIP_URL_TLS_KEY_PASSPHRASE = 'source.zip_url.ssl.key_passphrase', + ZIP_URL_TLS_VERIFICATION_MODE = 'source.zip_url.ssl.verification_mode', + ZIP_URL_TLS_VERSION = 'source.zip_url.ssl.supported_protocols', + + THROTTLING_CONFIG = 'throttling.config', + IS_THROTTLING_ENABLED = 'throttling.is_enabled', + DOWNLOAD_SPEED = 'throttling.download_speed', + UPLOAD_SPEED = 'throttling.upload_speed', + LATENCY = 'throttling.latency', +} diff --git a/x-pack/plugins/uptime/common/constants/plugin.ts b/x-pack/plugins/uptime/common/constants/plugin.ts new file mode 100644 index 0000000000000..ac7507275a8d8 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/plugin.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const PLUGIN = { + APP_ROOT_ID: 'react-uptime-root', + DESCRIPTION: i18n.translate('xpack.uptime.pluginDescription', { + defaultMessage: 'Synthetics monitoring', + description: 'The description text that will appear in the feature catalogue.', + }), + ID: 'uptime', + SYNTHETICS_PLUGIN_ID: 'synthetics', + NAME: i18n.translate('xpack.uptime.featureRegistry.syntheticsFeatureName', { + defaultMessage: 'Synthetics and Uptime', + }), + TITLE: i18n.translate('xpack.uptime.uptimeFeatureCatalogueTitle', { + defaultMessage: 'Uptime', + }), + SYNTHETICS: i18n.translate('xpack.uptime.syntheticsFeatureCatalogueTitle', { + defaultMessage: 'Synthetics', + }), +}; diff --git a/x-pack/plugins/uptime/common/constants/query.ts b/x-pack/plugins/uptime/common/constants/query.ts new file mode 100644 index 0000000000000..5bd376ae02393 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/query.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * These are the fields that will be used when users enter simple_query_string + * searches into the FilterBar component. + */ +export const QUERY = { + DEFAULT_BUCKET_COUNT: 25, + // the maximum buckets allowed by most aggregations + DEFAULT_AGGS_CAP: 10000, + SIMPLE_QUERY_STRING_FIELDS: [ + 'monitor.id', + 'monitor.url', + 'monitor.type', + 'monitor.status', + 'monitor.name', + 'url.full', + 'url.path', + 'url.scheme', + 'url.domain', + 'error.type', + ], +}; diff --git a/x-pack/plugins/uptime/common/constants/rest_api.ts b/x-pack/plugins/uptime/common/constants/rest_api.ts new file mode 100644 index 0000000000000..2499c178da1db --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/rest_api.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum API_URLS { + DYNAMIC_SETTINGS = `/internal/uptime/dynamic_settings`, + INDEX_STATUS = '/internal/uptime/index_status', + MONITOR_LIST = `/internal/uptime/monitor/list`, + MONITOR_LOCATIONS = `/internal/uptime/monitor/locations`, + MONITOR_DURATION = `/internal/uptime/monitor/duration`, + MONITOR_DETAILS = `/internal/uptime/monitor/details`, + MONITOR_STATUS = `/internal/uptime/monitor/status`, + NETWORK_EVENTS = `/internal/uptime/network_events`, + PINGS = '/internal/uptime/pings', + PING_HISTOGRAM = `/internal/uptime/ping/histogram`, + SNAPSHOT_COUNT = `/internal/uptime/snapshot/count`, + SYNTHETICS_SUCCESSFUL_CHECK = `/internal/uptime/synthetics/check/success`, + JOURNEY = `/internal/uptime/journey/{checkGroup}`, + JOURNEY_FAILED_STEPS = `/internal/uptime/journeys/failed_steps`, + JOURNEY_SCREENSHOT = `/internal/uptime/journey/screenshot/{checkGroup}/{stepIndex}`, + JOURNEY_SCREENSHOT_BLOCKS = `/internal/uptime/journey/screenshot/block`, + + ML_MODULE_JOBS = `/internal/ml/modules/jobs_exist/`, + ML_SETUP_MODULE = '/internal/ml/modules/setup/', + ML_DELETE_JOB = `/internal/ml/jobs/delete_jobs`, + ML_CAPABILITIES = '/internal/ml/ml_capabilities', + ML_ANOMALIES_RESULT = `/internal/ml/results/anomalies_table_data`, + + RULE_CONNECTORS = '/api/actions/connectors', + CREATE_RULE = '/api/alerting/rule', + DELETE_RULE = '/api/alerting/rule/', + RULES_FIND = '/api/alerting/rules/_find', + CONNECTOR_TYPES = '/api/actions/connector_types', +} diff --git a/x-pack/plugins/uptime/common/constants/settings_defaults.ts b/x-pack/plugins/uptime/common/constants/settings_defaults.ts new file mode 100644 index 0000000000000..ec5fd9bc0a1d7 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/settings_defaults.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DynamicSettings } from '../runtime_types'; + +export const DYNAMIC_SETTINGS_DEFAULTS: DynamicSettings = { + heartbeatIndices: 'heartbeat-8*,heartbeat-7*', + certAgeThreshold: 730, + certExpirationThreshold: 30, + defaultConnectors: [], + defaultEmail: { + to: [], + cc: [], + bcc: [], + }, +}; diff --git a/x-pack/plugins/uptime/common/constants/synthetics/client_defaults.ts b/x-pack/plugins/uptime/common/constants/synthetics/client_defaults.ts new file mode 100644 index 0000000000000..6ae9dbfef955f --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/synthetics/client_defaults.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const CLIENT_DEFAULTS_SYNTHETICS = { + /** + * The beginning of the default date range is 15m ago. + */ + DATE_RANGE_START: 'now-24h', + /** + * The end of the default date range is now. + */ + DATE_RANGE_END: 'now', + + /** + * The application auto refreshes every 30s by default. + */ + AUTOREFRESH_INTERVAL_SECONDS: 60, + /** + * The application's autorefresh feature is enabled. + */ + AUTOREFRESH_IS_PAUSED: false, +}; diff --git a/x-pack/plugins/uptime/common/constants/synthetics/index.ts b/x-pack/plugins/uptime/common/constants/synthetics/index.ts new file mode 100644 index 0000000000000..bbde8d73fb2d6 --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/synthetics/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './rest_api'; diff --git a/x-pack/plugins/uptime/common/constants/synthetics/rest_api.ts b/x-pack/plugins/uptime/common/constants/synthetics/rest_api.ts new file mode 100644 index 0000000000000..d83cecdf567bc --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/synthetics/rest_api.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum SYNTHETICS_API_URLS { + // Service end points + INDEX_TEMPLATES = '/internal/synthetics/service/index_templates', + SERVICE_LOCATIONS = '/internal/uptime/service/locations', + SYNTHETICS_MONITORS = '/internal/synthetics/service/monitors', + SYNTHETICS_MONITOR_INSPECT = '/internal/synthetics/service/monitor/inspect', + GET_SYNTHETICS_MONITOR = '/internal/synthetics/service/monitor/{monitorId}', + SYNTHETICS_ENABLEMENT = '/internal/synthetics/service/enablement', + RUN_ONCE_MONITOR = '/internal/synthetics/service/monitors/run_once', + TRIGGER_MONITOR = '/internal/synthetics/service/monitors/trigger', + SERVICE_ALLOWED = '/internal/synthetics/service/allowed', + SYNTHETICS_APIKEY = '/internal/synthetics/service/api_key', + SYNTHETICS_HAS_INTEGRATION_MONITORS = '/internal/synthetics/fleet/has_integration_monitors', + + SYNTHETICS_OVERVIEW = '/internal/synthetics/overview', + PINGS = '/internal/synthetics/pings', + PING_STATUSES = '/internal/synthetics/ping_statuses', + OVERVIEW_STATUS = `/internal/synthetics/overview_status`, + INDEX_SIZE = `/internal/synthetics/index_size`, + PARAMS = `/internal/synthetics/params`, + AGENT_POLICIES = `/internal/synthetics/agent_policies`, + PRIVATE_LOCATIONS = `/internal/synthetics/private_locations`, + PRIVATE_LOCATIONS_MONITORS = `/internal/synthetics/private_locations/monitors`, + SYNC_GLOBAL_PARAMS = `/internal/synthetics/sync_global_params`, + ENABLE_DEFAULT_ALERTING = `/internal/synthetics/enable_default_alerting`, + JOURNEY = `/internal/synthetics/journey/{checkGroup}`, + SYNTHETICS_SUCCESSFUL_CHECK = `/internal/synthetics/synthetics/check/success`, + JOURNEY_SCREENSHOT_BLOCKS = `/internal/synthetics/journey/screenshot/block`, + JOURNEY_FAILED_STEPS = `/internal/synthetics/journeys/failed_steps`, + NETWORK_EVENTS = `/internal/synthetics/network_events`, + JOURNEY_SCREENSHOT = `/internal/synthetics/journey/screenshot/{checkGroup}/{stepIndex}`, + DELETE_PACKAGE_POLICY = `/internal/synthetics/monitor/policy/{packagePolicyId}`, + FILTERS = '/internal/synthetics/monitor/filters', + + // Project monitor public endpoint + SYNTHETICS_MONITORS_PROJECT = '/api/synthetics/project/{projectName}/monitors', + SYNTHETICS_MONITORS_PROJECT_UPDATE = '/api/synthetics/project/{projectName}/monitors/_bulk_update', + SYNTHETICS_MONITORS_PROJECT_DELETE = '/api/synthetics/project/{projectName}/monitors/_bulk_delete', + SYNTHETICS_MONITORS_PROJECT_LEGACY = '/api/synthetics/service/project/monitors', +} diff --git a/x-pack/plugins/uptime/common/constants/synthetics_alerts.ts b/x-pack/plugins/uptime/common/constants/synthetics_alerts.ts new file mode 100644 index 0000000000000..223b8909de96e --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/synthetics_alerts.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ActionGroup } from '@kbn/alerting-plugin/common'; +import { i18n } from '@kbn/i18n'; + +export type MonitorStatusActionGroup = + | ActionGroup<'xpack.synthetics.alerts.actionGroups.monitorStatus'> + | ActionGroup<'xpack.synthetics.alerts.actionGroups.tls'>; + +export const MONITOR_STATUS: MonitorStatusActionGroup = { + id: 'xpack.synthetics.alerts.actionGroups.monitorStatus', + name: i18n.translate('xpack.uptime.alertRules.actionGroups.monitorStatus', { + defaultMessage: 'Synthetics monitor status', + }), +}; + +export const TLS_CERTIFICATE: MonitorStatusActionGroup = { + id: 'xpack.synthetics.alerts.actionGroups.tls', + name: i18n.translate('xpack.uptime.alertRules.actionGroups.tls', { + defaultMessage: 'Synthetics TLS certificate', + }), +}; + +export const ACTION_GROUP_DEFINITIONS: { + MONITOR_STATUS: MonitorStatusActionGroup; + TLS_CERTIFICATE: MonitorStatusActionGroup; +} = { + MONITOR_STATUS, + TLS_CERTIFICATE, +}; + +export const SYNTHETICS_STATUS_RULE = 'xpack.synthetics.alerts.monitorStatus'; +export const SYNTHETICS_TLS_RULE = 'xpack.synthetics.alerts.tls'; + +export const SYNTHETICS_ALERT_RULE_TYPES = { + MONITOR_STATUS: SYNTHETICS_STATUS_RULE, + TLS: SYNTHETICS_TLS_RULE, +}; + +export const SYNTHETICS_RULE_TYPES = [SYNTHETICS_STATUS_RULE, SYNTHETICS_TLS_RULE]; + +export const SYNTHETICS_RULE_TYPES_ALERT_CONTEXT = 'observability.uptime'; diff --git a/x-pack/plugins/uptime/common/constants/ui.ts b/x-pack/plugins/uptime/common/constants/ui.ts new file mode 100644 index 0000000000000..d014b8b8ea6ff --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/ui.ts @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const MONITOR_ROUTE = '/monitor/:monitorId?'; + +export const MONITOR_NOT_FOUND_ROUTE = '/monitor-not-found/:monitorId'; + +export const MONITOR_HISTORY_ROUTE = '/monitor/:monitorId/history'; + +export const MONITOR_ERRORS_ROUTE = '/monitor/:monitorId/errors'; + +export const MONITOR_ADD_ROUTE = '/add-monitor'; + +export const MONITOR_EDIT_ROUTE = '/edit-monitor/:monitorId'; + +export const MONITOR_MANAGEMENT_ROUTE = '/manage-monitors'; + +export const OVERVIEW_ROUTE = '/'; + +export const MONITORS_ROUTE = '/monitors'; + +export const GETTING_STARTED_ROUTE = '/monitors/getting-started'; + +export const SETTINGS_ROUTE = '/settings'; + +export const PRIVATE_LOCATIOSN_ROUTE = '/settings/private-locations'; + +export const SYNTHETICS_SETTINGS_ROUTE = '/settings/:tabId'; + +export const CERTIFICATES_ROUTE = '/certificates'; + +export const SYNTHETICS_STEP_DETAIL_ROUTE = + '/monitor/:monitorId/test-run/:checkGroupId/step/:stepIndex'; + +export const STEP_DETAIL_ROUTE = '/journey/:checkGroupId/step/:stepIndex'; + +export const SYNTHETIC_CHECK_STEPS_ROUTE = '/journey/:checkGroupId/steps'; + +export const TEST_RUN_DETAILS_ROUTE = '/monitor/:monitorId/test-run/:checkGroupId'; + +export const MAPPING_ERROR_ROUTE = '/mapping-error'; + +export const ERROR_DETAILS_ROUTE = '/monitor/:monitorId/errors/:errorStateId'; + +export enum STATUS { + UP = 'up', + DOWN = 'down', + COMPLETE = 'complete', + FAILED = 'failed', + SKIPPED = 'skipped', +} + +export enum MONITOR_TYPES { + HTTP = 'http', + TCP = 'tcp', + ICMP = 'icmp', + BROWSER = 'browser', +} + +export const ML_JOB_ID = 'high_latency_by_geo'; + +export const ML_MODULE_ID = 'uptime_heartbeat'; + +export const UNNAMED_LOCATION = 'Unnamed-location'; + +export const SHORT_TS_LOCALE = 'en-short-locale'; + +export const SHORT_TIMESPAN_LOCALE = { + relativeTime: { + future: 'in %s', + past: '%s ago', + s: '%ds', + ss: '%ss', + m: '%dm', + mm: '%dm', + h: '%dh', + hh: '%dh', + d: '%dd', + dd: '%dd', + M: '%d Mon', + MM: '%d Mon', + y: '%d Yr', + yy: '%d Yr', + }, +}; + +export enum CERT_STATUS { + OK = 'OK', + EXPIRING_SOON = 'EXPIRING_SOON', + EXPIRED = 'EXPIRED', + TOO_OLD = 'TOO_OLD', +} + +export const KQL_SYNTAX_LOCAL_STORAGE = 'xpack.uptime.kql.syntax'; + +export const FILTER_FIELDS = { + TAGS: 'tags', + PORT: 'url.port', + LOCATION: 'observer.geo.name', + TYPE: 'monitor.type', +}; + +export const SYNTHETICS_INDEX_PATTERN = 'synthetics-*'; + +export const LICENSE_NOT_ACTIVE_ERROR = 'License not active'; +export const LICENSE_MISSING_ERROR = 'Missing license information'; +export const LICENSE_NOT_SUPPORTED_ERROR = 'License not supported'; diff --git a/x-pack/plugins/uptime/common/constants/uptime_alerts.ts b/x-pack/plugins/uptime/common/constants/uptime_alerts.ts new file mode 100644 index 0000000000000..71f6bd1b183fb --- /dev/null +++ b/x-pack/plugins/uptime/common/constants/uptime_alerts.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ActionGroup } from '@kbn/alerting-plugin/common'; + +export type MonitorStatusActionGroup = + ActionGroup<'xpack.uptime.alerts.actionGroups.monitorStatus'>; +export type TLSLegacyActionGroup = ActionGroup<'xpack.uptime.alerts.actionGroups.tls'>; +export type TLSActionGroup = ActionGroup<'xpack.uptime.alerts.actionGroups.tlsCertificate'>; +export type DurationAnomalyActionGroup = + ActionGroup<'xpack.uptime.alerts.actionGroups.durationAnomaly'>; + +export const MONITOR_STATUS: MonitorStatusActionGroup = { + id: 'xpack.uptime.alerts.actionGroups.monitorStatus', + name: 'Uptime Down Monitor', +}; + +export const TLS_LEGACY: TLSLegacyActionGroup = { + id: 'xpack.uptime.alerts.actionGroups.tls', + name: 'Uptime TLS Alert (Legacy)', +}; + +export const TLS: TLSActionGroup = { + id: 'xpack.uptime.alerts.actionGroups.tlsCertificate', + name: 'Uptime TLS Alert', +}; + +export const DURATION_ANOMALY: DurationAnomalyActionGroup = { + id: 'xpack.uptime.alerts.actionGroups.durationAnomaly', + name: 'Uptime Duration Anomaly', +}; + +export const CLIENT_ALERT_TYPES = { + MONITOR_STATUS: 'xpack.uptime.alerts.monitorStatus', + TLS_LEGACY: 'xpack.uptime.alerts.tls', + TLS: 'xpack.uptime.alerts.tlsCertificate', + DURATION_ANOMALY: 'xpack.uptime.alerts.durationAnomaly', +}; + +export const UPTIME_RULE_TYPES = [ + 'xpack.uptime.alerts.tls', + 'xpack.uptime.alerts.tlsCertificate', + 'xpack.uptime.alerts.monitorStatus', + 'xpack.uptime.alerts.durationAnomaly', +]; diff --git a/x-pack/plugins/uptime/common/field_names.ts b/x-pack/plugins/uptime/common/field_names.ts new file mode 100644 index 0000000000000..0407fad341d8a --- /dev/null +++ b/x-pack/plugins/uptime/common/field_names.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const AGENT_NAME = 'agent.name'; +export const MONITOR_ID = 'monitor.id'; +export const MONITOR_NAME = 'monitor.name'; +export const MONITOR_TYPE = 'monitor.type'; +export const URL_FULL = 'url.full'; +export const URL_PORT = 'url.port'; +export const OBSERVER_GEO_NAME = 'observer.geo.name'; +export const ERROR_MESSAGE = 'error.message'; +export const STATE_ID = 'monitor.state.id'; + +export const CERT_COMMON_NAME = 'tls.server.x509.subject.common_name'; +export const CERT_ISSUER_NAME = 'tls.server.x509.issuer.common_name'; +export const CERT_VALID_NOT_AFTER = 'tls.server.x509.not_after'; +export const CERT_VALID_NOT_BEFORE = 'tls.server.x509.not_before'; +export const CERT_HASH_SHA256 = 'tls.server.hash.sha256'; diff --git a/x-pack/plugins/uptime/common/formatters/format_space_name.ts b/x-pack/plugins/uptime/common/formatters/format_space_name.ts new file mode 100644 index 0000000000000..88beb7cda1407 --- /dev/null +++ b/x-pack/plugins/uptime/common/formatters/format_space_name.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* Formats kibana space id into a valid Fleet-compliant data-stream namespace */ +import { INVALID_NAMESPACE_CHARACTERS } from '@kbn/fleet-plugin/common'; + +export const formatKibanaNamespace = (spaceId: string) => { + const namespaceRegExp = new RegExp(INVALID_NAMESPACE_CHARACTERS, 'g'); + return spaceId.replace(namespaceRegExp, '_'); +}; diff --git a/x-pack/plugins/uptime/common/formatters/index.ts b/x-pack/plugins/uptime/common/formatters/index.ts new file mode 100644 index 0000000000000..17c9567043197 --- /dev/null +++ b/x-pack/plugins/uptime/common/formatters/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { formatKibanaNamespace } from './format_space_name'; diff --git a/x-pack/plugins/uptime/common/lib/__snapshots__/assert_close_to.test.ts.snap b/x-pack/plugins/uptime/common/lib/__snapshots__/assert_close_to.test.ts.snap new file mode 100644 index 0000000000000..7dfb8c88be1ca --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/__snapshots__/assert_close_to.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`assertCloseTo throws an error when expected value is outside of precision range 1`] = `"expected [12500] to be within 100 of 10000"`; diff --git a/x-pack/plugins/uptime/common/lib/assert_close_to.test.ts b/x-pack/plugins/uptime/common/lib/assert_close_to.test.ts new file mode 100644 index 0000000000000..1a8a2e4cddb3a --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/assert_close_to.test.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { assertCloseTo } from './assert_close_to'; + +describe('assertCloseTo', () => { + it('does not throw an error when expected value is correct', () => { + assertCloseTo(10000, 10001, 100); + }); + + it('does not throw an error when expected value is under actual, but within precision threshold', () => { + assertCloseTo(10000, 9875, 300); + }); + + it('throws an error when expected value is outside of precision range', () => { + expect(() => assertCloseTo(10000, 12500, 100)).toThrowErrorMatchingSnapshot(); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/assert_close_to.ts b/x-pack/plugins/uptime/common/lib/assert_close_to.ts new file mode 100644 index 0000000000000..eeadacaa5703a --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/assert_close_to.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const assertCloseTo = (actual: number, expected: number, precision: number) => { + if (Math.abs(expected - actual) > precision) { + throw new Error(`expected [${expected}] to be within ${precision} of ${actual}`); + } + + // if actual is undefined above math condition will be NAN and it will be always false + if (actual === undefined) { + throw new Error(`expected close to [${expected}] but got [${actual}]`); + } +}; diff --git a/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.test.ts b/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.test.ts new file mode 100644 index 0000000000000..93b954e1a23fa --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.test.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { combineFiltersAndUserSearch } from './combine_filters_and_user_search'; + +describe('combineFiltersAndUserSearch', () => { + it('returns only search if filters are empty', () => { + expect(combineFiltersAndUserSearch('', 'monitor.id:foo')).toEqual('monitor.id:foo'); + }); + + it('returns only filters if search is empty', () => { + expect(combineFiltersAndUserSearch('monitor.id:foo', '')).toEqual('monitor.id:foo'); + }); + + it('returns merged filters and user search if neither is empty', () => { + expect(combineFiltersAndUserSearch('monitor.id:foo', 'monitor.name:bar')).toEqual( + '(monitor.id:foo) AND (monitor.name:bar)' + ); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.ts b/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.ts new file mode 100644 index 0000000000000..8583dd951dc8b --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/combine_filters_and_user_search.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const combineFiltersAndUserSearch = (filters: string, search?: string) => { + if (!filters && !search) { + return ''; + } + if (!filters) return search; + if (!search) return filters; + return `(${filters}) AND (${search})`; +}; diff --git a/x-pack/plugins/uptime/common/lib/get_histogram_interval.test.ts b/x-pack/plugins/uptime/common/lib/get_histogram_interval.test.ts new file mode 100644 index 0000000000000..5c5f5415ff23e --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/get_histogram_interval.test.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getHistogramInterval } from './get_histogram_interval'; +import { assertCloseTo } from './assert_close_to'; + +describe('getHistogramInterval', () => { + it('specifies the interval necessary to divide a given timespan into equal buckets, rounded to the nearest integer, expressed in ms', () => { + const interval = getHistogramInterval('now-15m', 'now', 10); + assertCloseTo(interval, 90000, 20); + }); + + it('will supply a default constant value for bucketCount when none is provided', () => { + const interval = getHistogramInterval('now-15m', 'now'); + assertCloseTo(interval, 36000, 20); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/get_histogram_interval.ts b/x-pack/plugins/uptime/common/lib/get_histogram_interval.ts new file mode 100644 index 0000000000000..8d44fb594c03a --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/get_histogram_interval.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import DateMath from '@kbn/datemath'; +import { QUERY } from '../constants'; + +export const parseRelativeDate = (dateStr: string, options = {}) => { + // We need this this parsing because if user selects This week or this date + // That represents end date in future, if week or day is still in the middle + // Uptime data can never be collected in future, so we will reset date to now + // in That case. Example case we select this week range will be to='now/w' and from = 'now/w'; + + const parsedDate = DateMath.parse(dateStr, options); + const dateTimestamp = parsedDate?.valueOf() ?? 0; + if (dateTimestamp > Date.now()) { + return DateMath.parse('now'); + } + return parsedDate; +}; + +export const getHistogramInterval = ( + dateRangeStart: string, + dateRangeEnd: string, + bucketCount?: number +): number => { + const from = parseRelativeDate(dateRangeStart); + + // roundUp is required for relative date like now/w to get the end of the week + const to = parseRelativeDate(dateRangeEnd, { roundUp: true }); + if (from === undefined) { + throw Error('Invalid dateRangeStart value'); + } + if (to === undefined) { + throw Error('Invalid dateRangeEnd value'); + } + const interval = Math.round( + (to.valueOf() - from.valueOf()) / (bucketCount || QUERY.DEFAULT_BUCKET_COUNT) + ); + + // Interval can never be zero, if it's 0 we return at least 1ms interval + return interval > 0 ? interval : 1; +}; diff --git a/x-pack/plugins/uptime/common/lib/index.ts b/x-pack/plugins/uptime/common/lib/index.ts new file mode 100644 index 0000000000000..497284f3fa281 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './combine_filters_and_user_search'; +export * from './stringify_kueries'; + +export { getMLJobId } from './ml'; diff --git a/x-pack/plugins/uptime/common/lib/ml.test.ts b/x-pack/plugins/uptime/common/lib/ml.test.ts new file mode 100644 index 0000000000000..e7f572b12bb47 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/ml.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getMLJobId } from './ml'; + +describe('ML Anomaly API', () => { + it('it generates a lowercase job id', async () => { + const monitorId = 'ABC1334haa'; + + const jobId = getMLJobId(monitorId); + + expect(jobId).toEqual(jobId.toLowerCase()); + }); + + it('should truncate long monitor IDs', () => { + const longAndWeirdMonitorId = + 'https://auto-mmmmxhhhhhccclongAndWeirdMonitorId123yyyyyrereauto-xcmpa-1345555454646'; + + expect(getMLJobId(longAndWeirdMonitorId)).toHaveLength(64); + }); + + it('should remove special characters and replace them with underscore', () => { + const monIdSpecialChars = '/ ? , " < > | * a'; + + const jobId = getMLJobId(monIdSpecialChars); + + const format = /[/?,"<>|*]+/; + + expect(format.test(jobId)).toBe(false); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/ml.ts b/x-pack/plugins/uptime/common/lib/ml.ts new file mode 100644 index 0000000000000..8b9c4bf7c5857 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/ml.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ML_JOB_ID } from '../constants'; + +export const getJobPrefix = (monitorId: string) => { + // ML App doesn't support upper case characters in job name + // Also Spaces and the characters / ? , " < > | * are not allowed + // so we will replace all special chars with _ + + const prefix = monitorId.replace(/[^A-Z0-9]+/gi, '_').toLowerCase(); + + // ML Job ID can't be greater than 64 length, so will be substring it, and hope + // At such big length, there is minimum chance of having duplicate monitor id + // Subtracting ML_JOB_ID constant as well + const postfix = '_' + ML_JOB_ID; + + if ((prefix + postfix).length > 64) { + return prefix.substring(0, 64 - postfix.length) + '_'; + } + return prefix + '_'; +}; + +export const getMLJobId = (monitorId: string) => `${getJobPrefix(monitorId)}${ML_JOB_ID}`; diff --git a/x-pack/plugins/uptime/common/lib/schedule_to_time.test.ts b/x-pack/plugins/uptime/common/lib/schedule_to_time.test.ts new file mode 100644 index 0000000000000..391963a960be4 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/schedule_to_time.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ScheduleUnit, SyntheticsMonitorSchedule } from '../runtime_types'; +import { scheduleToMilli } from './schedule_to_time'; + +describe('schedule_to_time', () => { + describe('scheduleToMilli', () => { + it('converts seconds schedule to millis', () => { + const schedule: SyntheticsMonitorSchedule = { unit: ScheduleUnit.SECONDS, number: '10' }; + expect(scheduleToMilli(schedule)).toEqual(10 * 1000); + }); + + it('converts minutes schedule to millis', () => { + const schedule: SyntheticsMonitorSchedule = { unit: ScheduleUnit.MINUTES, number: '6' }; + expect(scheduleToMilli(schedule)).toEqual(6 * 60 * 1000); + }); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/schedule_to_time.ts b/x-pack/plugins/uptime/common/lib/schedule_to_time.ts new file mode 100644 index 0000000000000..4578790f54572 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/schedule_to_time.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ScheduleUnit, SyntheticsMonitorSchedule } from '../runtime_types'; + +export function scheduleToMilli(schedule: SyntheticsMonitorSchedule): number { + const timeValue = parseInt(schedule.number, 10); + return timeValue * getMilliFactorForScheduleUnit(schedule.unit); +} + +export function scheduleToMinutes(schedule: SyntheticsMonitorSchedule): number { + return Math.floor(scheduleToMilli(schedule) / (60 * 1000)); +} + +function getMilliFactorForScheduleUnit(scheduleUnit: ScheduleUnit): number { + switch (scheduleUnit) { + case ScheduleUnit.SECONDS: + return 1000; + case ScheduleUnit.MINUTES: + return 60 * 1000; + default: + throw new Error(`Unit ${scheduleUnit} is not supported`); + } +} diff --git a/x-pack/plugins/uptime/common/lib/stringify_kueries.test.ts b/x-pack/plugins/uptime/common/lib/stringify_kueries.test.ts new file mode 100644 index 0000000000000..e37b69eee5bf5 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/stringify_kueries.test.ts @@ -0,0 +1,143 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { stringifyKueries } from './stringify_kueries'; + +describe('stringifyKueries', () => { + let kueries: Map; + beforeEach(() => { + kueries = new Map(); + kueries.set('foo', ['fooValue1', 'fooValue2']); + kueries.set('bar', ['barValue']); + }); + + it('stringifies the current values', () => { + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (fooValue1 OR fooValue2) AND bar: barValue"` + ); + }); + + it('correctly stringifies a single value', () => { + kueries = new Map(); + kueries.set('foo', ['fooValue']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot(`"foo: fooValue"`); + }); + + it('returns an empty string for an empty map', () => { + expect(stringifyKueries(new Map())).toMatchInlineSnapshot(`""`); + }); + + it('returns an empty string for an empty value', () => { + kueries = new Map(); + kueries.set('aField', ['']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot(`""`); + }); + + it('adds quotations if the value contains a space', () => { + kueries.set('baz', ['baz value']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (fooValue1 OR fooValue2) AND bar: barValue AND baz: \\"baz value\\""` + ); + }); + + it('adds quotations inside parens if there are values containing spaces', () => { + kueries.set('foo', ['foo value 1', 'foo value 2']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (\\"foo value 1\\" OR \\"foo value 2\\") AND bar: barValue"` + ); + }); + + it('handles parens for values with greater than 2 items', () => { + kueries.set('foo', ['val1', 'val2', 'val3']); + kueries.set('baz', ['baz 1', 'baz 2']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (val1 OR val2 OR val3) AND bar: barValue AND baz: (\\"baz 1\\" OR \\"baz 2\\")"` + ); + }); + + it('handles number values', () => { + kueries.set('port', [80, 8080, 443]); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (fooValue1 OR fooValue2) AND bar: barValue AND port: (80 OR 8080 OR 443)"` + ); + }); + + it('handles colon characters in values', () => { + kueries.set('monitor.id', ['https://elastic.co', 'https://example.com']); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"foo: (fooValue1 OR fooValue2) AND bar: barValue AND monitor.id: (\\"https://elastic.co\\" OR \\"https://example.com\\")"` + ); + }); + + it('handles precending empty array', () => { + kueries = new Map( + Object.entries({ + 'monitor.type': [], + 'observer.geo.name': ['us-east', 'apj', 'sydney', 'us-west'], + tags: [], + 'url.port': [], + }) + ); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"observer.geo.name: (us-east OR apj OR sydney OR us-west)"` + ); + }); + + it('handles skipped empty arrays', () => { + kueries = new Map( + Object.entries({ + tags: ['tag1', 'tag2'], + 'monitor.type': ['http'], + 'url.port': [], + 'observer.geo.name': ['us-east', 'apj', 'sydney', 'us-west'], + }) + ); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"tags: (tag1 OR tag2) AND monitor.type: http AND observer.geo.name: (us-east OR apj OR sydney OR us-west)"` + ); + }); + + it('handles tags AND logic', () => { + kueries = new Map( + Object.entries({ + 'monitor.type': ['http'], + 'url.port': [], + 'observer.geo.name': ['us-east', 'apj', 'sydney', 'us-west'], + tags: ['tag1', 'tag2'], + }) + ); + expect(stringifyKueries(kueries, true)).toMatchInlineSnapshot( + `"monitor.type: http AND observer.geo.name: (us-east OR apj OR sydney OR us-west) AND tags: (tag1 AND tag2)"` + ); + }); + + it('handles tags AND logic with only tags', () => { + kueries = new Map( + Object.entries({ + 'monitor.type': [], + 'url.port': [], + 'observer.geo.name': [], + tags: ['tag1', 'tag2'], + }) + ); + expect(stringifyKueries(kueries, true)).toMatchInlineSnapshot(`"tags: (tag1 AND tag2)"`); + }); + + it('handles values with spaces', () => { + kueries = new Map( + Object.entries({ + tags: ['Weird tag'], + 'monitor.type': ['http'], + 'url.port': [], + 'observer.geo.name': ['us east', 'apj', 'sydney', 'us-west'], + }) + ); + expect(stringifyKueries(kueries)).toMatchInlineSnapshot( + `"tags: \\"Weird tag\\" AND monitor.type: http AND observer.geo.name: (\\"us east\\" OR apj OR sydney OR us-west)"` + ); + }); +}); diff --git a/x-pack/plugins/uptime/common/lib/stringify_kueries.ts b/x-pack/plugins/uptime/common/lib/stringify_kueries.ts new file mode 100644 index 0000000000000..3860dcd848521 --- /dev/null +++ b/x-pack/plugins/uptime/common/lib/stringify_kueries.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * Extract a map's keys to an array, then map those keys to a string per key. + * The strings contain all of the values chosen for the given field (which is also the key value). + * Reduce the list of query strings to a singular string, with AND operators between. + */ + +export const stringifyKueries = ( + kueries: Map>, + logicalANDForTag?: boolean +): string => { + const defaultCondition = 'OR'; + + return Array.from(kueries.keys()) + .map((key) => { + let condition = defaultCondition; + if (key === 'tags' && logicalANDForTag) { + condition = 'AND'; + } + const value = kueries.get(key)?.filter((v) => v !== ''); + if (!value || value.length === 0) return ''; + + if (value.length === 1) { + return isAlphaNumeric(value[0] as string) ? `${key}: ${value[0]}` : `${key}: "${value[0]}"`; + } + + const values = value + .map((v) => (isAlphaNumeric(v as string) ? v : `"${v}"`)) + .join(` ${condition} `); + + return `${key}: (${values})`; + }) + .reduce((prev, cur, index, array) => { + if (array.length === 1 || index === 0) { + return cur; + } else if (cur === '') { + return prev; + } else if (prev === '' && !!cur) { + return cur; + } + return `${prev} AND ${cur}`; + }, ''); +}; + +const isAlphaNumeric = (str: string) => { + const format = /[ `!@#$%^&*()_+=\[\]{};':"\\|,.<>\/?~]/; + return !format.test(str); +}; diff --git a/x-pack/plugins/uptime/common/requests/get_certs_request_body.ts b/x-pack/plugins/uptime/common/requests/get_certs_request_body.ts new file mode 100644 index 0000000000000..7a57f8ab13d41 --- /dev/null +++ b/x-pack/plugins/uptime/common/requests/get_certs_request_body.ts @@ -0,0 +1,211 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import DateMath from '@kbn/datemath'; +import { CertResult, GetCertsParams, Ping } from '../runtime_types'; +import { createEsQuery } from '../utils/es_search'; + +import type { CertificatesResults } from '../../server/legacy_uptime/lib/requests/get_certs'; +import { asMutableArray } from '../utils/as_mutable_array'; + +enum SortFields { + 'issuer' = 'tls.server.x509.issuer.common_name', + 'not_after' = 'tls.server.x509.not_after', + 'not_before' = 'tls.server.x509.not_before', + 'common_name' = 'tls.server.x509.subject.common_name', +} + +export const DEFAULT_SORT = 'not_after'; +export const DEFAULT_DIRECTION = 'asc'; +export const DEFAULT_SIZE = 20; +export const DEFAULT_FROM = 'now-20m'; +export const DEFAULT_TO = 'now'; + +function absoluteDate(relativeDate: string) { + return DateMath.parse(relativeDate)?.valueOf() ?? relativeDate; +} + +export const getCertsRequestBody = ({ + monitorIds, + pageIndex, + search, + notValidBefore, + notValidAfter, + size = DEFAULT_SIZE, + to = DEFAULT_TO, + from = DEFAULT_FROM, + sortBy = DEFAULT_SORT, + direction = DEFAULT_DIRECTION, + filters, +}: GetCertsParams) => { + const sort = SortFields[sortBy as keyof typeof SortFields]; + + const searchRequest = createEsQuery({ + body: { + from: pageIndex * size, + size, + sort: asMutableArray([ + { + [sort]: { + order: direction, + }, + }, + ]) as estypes.SortCombinations[], + query: { + bool: { + ...(search + ? { + minimum_should_match: 1, + should: [ + { + multi_match: { + query: escape(search), + type: 'phrase_prefix' as const, + fields: [ + 'monitor.id.text', + 'monitor.name.text', + 'url.full.text', + 'tls.server.x509.subject.common_name.text', + 'tls.server.x509.issuer.common_name.text', + ], + }, + }, + ], + } + : {}), + filter: [ + ...(filters ? [filters] : []), + ...(monitorIds && monitorIds.length > 0 + ? [{ terms: { 'monitor.id': monitorIds } }] + : []), + { + exists: { + field: 'tls.server.hash.sha256', + }, + }, + { + range: { + 'monitor.timespan': { + gte: absoluteDate(from), + lte: absoluteDate(to), + }, + }, + }, + { + bool: { + // these notValidBefore and notValidAfter should be inside should block, since + // we want to match either of the condition, making ir an OR operation + minimum_should_match: 1, + should: [ + ...(notValidBefore + ? [ + { + range: { + 'tls.certificate_not_valid_before': { + lte: absoluteDate(notValidBefore), + }, + }, + }, + ] + : []), + ...(notValidAfter + ? [ + { + range: { + 'tls.certificate_not_valid_after': { + lte: absoluteDate(notValidAfter), + }, + }, + }, + ] + : []), + ], + }, + }, + ] as estypes.QueryDslQueryContainer, + }, + }, + _source: [ + 'monitor.id', + 'monitor.name', + 'monitor.type', + 'url.full', + 'observer.geo.name', + 'tls.server.x509.issuer.common_name', + 'tls.server.x509.subject.common_name', + 'tls.server.hash.sha1', + 'tls.server.hash.sha256', + 'tls.server.x509.not_after', + 'tls.server.x509.not_before', + ], + collapse: { + field: 'tls.server.hash.sha256', + inner_hits: { + _source: { + includes: ['monitor.id', 'monitor.name', 'url.full', 'config_id'], + }, + collapse: { + field: 'monitor.id', + }, + name: 'monitors', + sort: [{ 'monitor.id': 'asc' as const }], + }, + }, + aggs: { + total: { + cardinality: { + field: 'tls.server.hash.sha256', + }, + }, + }, + }, + }); + + return searchRequest.body; +}; + +export const processCertsResult = (result: CertificatesResults): CertResult => { + const certs = result.hits?.hits?.map((hit) => { + const ping = hit._source; + const server = ping.tls?.server!; + + const notAfter = server?.x509?.not_after; + const notBefore = server?.x509?.not_before; + const issuer = server?.x509?.issuer?.common_name; + const commonName = server?.x509?.subject?.common_name; + const sha1 = server?.hash?.sha1; + const sha256 = server?.hash?.sha256; + + const monitors = hit.inner_hits!.monitors.hits.hits.map((monitor) => { + const monitorPing = monitor._source as Ping; + + return { + name: monitorPing?.monitor.name, + id: monitorPing?.monitor.id, + configId: monitorPing?.config_id, + url: monitorPing?.url?.full, + }; + }); + + return { + monitors, + issuer, + sha1, + sha256: sha256 as string, + not_after: notAfter, + not_before: notBefore, + common_name: commonName, + monitorName: ping?.monitor?.name, + monitorUrl: ping?.url?.full, + monitorType: ping?.monitor?.type, + locationName: ping?.observer?.geo?.name, + }; + }); + const total = result.aggregations?.total?.value ?? 0; + return { certs, total }; +}; diff --git a/x-pack/plugins/uptime/common/rules/alert_actions.test.ts b/x-pack/plugins/uptime/common/rules/alert_actions.test.ts new file mode 100644 index 0000000000000..3289259031706 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/alert_actions.test.ts @@ -0,0 +1,237 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { populateAlertActions } from './alert_actions'; +import { ActionConnector } from './types'; +import { MONITOR_STATUS } from '../constants/uptime_alerts'; +import { MonitorStatusTranslations } from './legacy_uptime/translations'; + +describe('Legacy Alert Actions factory', () => { + it('generate expected action for pager duty', async () => { + const resp = populateAlertActions({ + groupId: MONITOR_STATUS.id, + defaultActions: [ + { + actionTypeId: '.pagerduty', + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + params: { + dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus', + eventAction: 'trigger', + severity: 'error', + summary: MonitorStatusTranslations.defaultActionMessage, + }, + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + }, + ] as unknown as ActionConnector[], + translations: { + defaultActionMessage: MonitorStatusTranslations.defaultActionMessage, + defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage, + defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage, + defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage, + }, + isLegacy: true, + }); + expect(resp).toEqual([ + { + group: 'recovered', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + dedupKey: expect.any(String), + eventAction: 'resolve', + summary: + 'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered', + }, + }, + { + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + dedupKey: expect.any(String), + eventAction: 'trigger', + severity: 'error', + summary: MonitorStatusTranslations.defaultActionMessage, + }, + }, + ]); + }); + + it('generate expected action for email', async () => { + const resp = populateAlertActions({ + groupId: MONITOR_STATUS.id, + defaultActions: [ + { + actionTypeId: '.email', + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + params: { + dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus', + eventAction: 'trigger', + severity: 'error', + summary: MonitorStatusTranslations.defaultActionMessage, + }, + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + }, + ] as unknown as ActionConnector[], + translations: { + defaultActionMessage: MonitorStatusTranslations.defaultActionMessage, + defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage, + defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage, + defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage, + }, + isLegacy: true, + defaultEmail: { + to: ['test@email.com'], + }, + }); + expect(resp).toEqual([ + { + group: 'recovered', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + bcc: [], + cc: [], + kibanaFooterLink: { + path: '', + text: '', + }, + message: + 'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered', + messageHTML: null, + subject: + 'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} has recovered', + to: ['test@email.com'], + }, + }, + { + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + bcc: [], + cc: [], + kibanaFooterLink: { + path: '', + text: '', + }, + message: + 'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} {{{context.statusMessage}}} The latest error message is {{{context.latestErrorMessage}}}, checked at {{context.checkedAt}}', + messageHTML: null, + subject: 'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} is down', + to: ['test@email.com'], + }, + }, + ]); + }); + + it('generate expected action for index', async () => { + const resp = populateAlertActions({ + groupId: MONITOR_STATUS.id, + defaultActions: [ + { + actionTypeId: '.index', + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + params: { + dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus', + eventAction: 'trigger', + severity: 'error', + summary: MonitorStatusTranslations.defaultActionMessage, + }, + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + }, + ] as unknown as ActionConnector[], + translations: { + defaultActionMessage: MonitorStatusTranslations.defaultActionMessage, + defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage, + defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage, + defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage, + }, + isLegacy: true, + }); + expect(resp).toEqual([ + { + group: 'recovered', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + documents: [ + { + latestErrorMessage: '', + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + observerLocation: '{{context.observerLocation}}', + statusMessage: + 'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered', + }, + ], + indexOverride: null, + }, + }, + { + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + documents: [ + { + latestErrorMessage: '{{{context.latestErrorMessage}}}', + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + observerLocation: '{{context.observerLocation}}', + statusMessage: '{{{context.statusMessage}}}', + }, + ], + indexOverride: null, + }, + }, + ]); + }); + + it('generate expected action for slack action connector', async () => { + const resp = populateAlertActions({ + groupId: MONITOR_STATUS.id, + defaultActions: [ + { + actionTypeId: '.pagerduty', + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + params: { + dedupKey: 'always-downxpack.uptime.alerts.actionGroups.monitorStatus', + eventAction: 'trigger', + severity: 'error', + summary: + 'Monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} {{{context.statusMessage}}} The latest error message is {{{context.latestErrorMessage}}}', + }, + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + }, + ] as unknown as ActionConnector[], + translations: { + defaultActionMessage: MonitorStatusTranslations.defaultActionMessage, + defaultRecoveryMessage: MonitorStatusTranslations.defaultRecoveryMessage, + defaultSubjectMessage: MonitorStatusTranslations.defaultSubjectMessage, + defaultRecoverySubjectMessage: MonitorStatusTranslations.defaultRecoverySubjectMessage, + }, + isLegacy: true, + }); + expect(resp).toEqual([ + { + group: 'recovered', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + dedupKey: expect.any(String), + eventAction: 'resolve', + summary: + 'Alert for monitor {{context.monitorName}} with url {{{context.monitorUrl}}} from {{context.observerLocation}} has recovered', + }, + }, + { + group: 'xpack.uptime.alerts.actionGroups.monitorStatus', + id: 'f2a3b195-ed76-499a-805d-82d24d4eeba9', + params: { + dedupKey: expect.any(String), + eventAction: 'trigger', + severity: 'error', + summary: MonitorStatusTranslations.defaultActionMessage, + }, + }, + ]); + }); +}); diff --git a/x-pack/plugins/uptime/common/rules/alert_actions.ts b/x-pack/plugins/uptime/common/rules/alert_actions.ts new file mode 100644 index 0000000000000..70a2de4d7cf59 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/alert_actions.ts @@ -0,0 +1,311 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + IndexActionParams, + PagerDutyActionParams, + ServerLogActionParams, + ServiceNowActionParams, + JiraActionParams, + WebhookActionParams, + EmailActionParams, +} from '@kbn/stack-connectors-plugin/server/connector_types'; +import { RuleAction as RuleActionOrig } from '@kbn/alerting-plugin/common'; +import { v4 as uuidv4 } from 'uuid'; + +import { ActionConnector, ActionTypeId } from './types'; +import { DefaultEmail } from '../runtime_types'; + +export const SLACK_WEBHOOK_ACTION_ID: ActionTypeId = '.slack'; +export const PAGER_DUTY_ACTION_ID: ActionTypeId = '.pagerduty'; +export const SERVER_LOG_ACTION_ID: ActionTypeId = '.server-log'; +export const INDEX_ACTION_ID: ActionTypeId = '.index'; +export const TEAMS_ACTION_ID: ActionTypeId = '.teams'; +export const SERVICE_NOW_ACTION_ID: ActionTypeId = '.servicenow'; +export const JIRA_ACTION_ID: ActionTypeId = '.jira'; +export const WEBHOOK_ACTION_ID: ActionTypeId = '.webhook'; +export const EMAIL_ACTION_ID: ActionTypeId = '.email'; + +export type RuleAction = Omit; + +interface Translations { + defaultActionMessage: string; + defaultRecoveryMessage: string; + defaultSubjectMessage: string; + defaultRecoverySubjectMessage: string; +} + +export function populateAlertActions({ + defaultActions, + defaultEmail, + groupId, + translations, + isLegacy = false, +}: { + groupId: string; + defaultActions: ActionConnector[]; + defaultEmail?: DefaultEmail; + translations: Translations; + isLegacy?: boolean; +}) { + const actions: RuleAction[] = []; + defaultActions.forEach((aId) => { + const action: RuleAction = { + id: aId.id, + group: groupId, + params: {}, + frequency: !isLegacy + ? { + notifyWhen: 'onActionGroupChange', + throttle: null, + summary: false, + } + : undefined, + }; + + const recoveredAction: RuleAction = { + id: aId.id, + group: 'recovered', + params: { + message: translations.defaultRecoveryMessage, + }, + frequency: !isLegacy + ? { + notifyWhen: 'onActionGroupChange', + throttle: null, + summary: false, + } + : undefined, + }; + + switch (aId.actionTypeId) { + case PAGER_DUTY_ACTION_ID: + const dedupKey = uuidv4(); + action.params = getPagerDutyActionParams(translations, dedupKey); + recoveredAction.params = getPagerDutyActionParams(translations, dedupKey, true); + actions.push(recoveredAction); + break; + case SERVER_LOG_ACTION_ID: + action.params = getServerLogActionParams(translations); + recoveredAction.params = getServerLogActionParams(translations, true); + actions.push(recoveredAction); + break; + case INDEX_ACTION_ID: + action.params = getIndexActionParams(translations, false, isLegacy); + recoveredAction.params = getIndexActionParams(translations, true, isLegacy); + actions.push(recoveredAction); + break; + case SERVICE_NOW_ACTION_ID: + action.params = getServiceNowActionParams(translations); + // Recovery action for service now is not implemented yet + break; + case JIRA_ACTION_ID: + action.params = getJiraActionParams(translations); + // Recovery action for Jira is not implemented yet + break; + case WEBHOOK_ACTION_ID: + action.params = getWebhookActionParams(translations); + recoveredAction.params = getWebhookActionParams(translations, true); + actions.push(recoveredAction); + break; + case SLACK_WEBHOOK_ACTION_ID: + case TEAMS_ACTION_ID: + action.params = { + message: translations.defaultActionMessage, + }; + actions.push(recoveredAction); + break; + case EMAIL_ACTION_ID: + if (defaultEmail) { + action.params = getEmailActionParams(translations, defaultEmail); + recoveredAction.params = getEmailActionParams(translations, defaultEmail, true); + actions.push(recoveredAction); + } + break; + default: + action.params = { + message: translations.defaultActionMessage, + }; + } + + actions.push(action); + }); + + return actions; +} + +function getIndexActionParams( + translations: Translations, + recovery = false, + isLegacy = false +): IndexActionParams { + if (isLegacy && recovery) { + return { + documents: [ + { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + statusMessage: translations.defaultRecoveryMessage, + latestErrorMessage: '', + observerLocation: '{{context.observerLocation}}', + }, + ], + indexOverride: null, + }; + } + + if (isLegacy) { + return { + documents: [ + { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + statusMessage: '{{{context.statusMessage}}}', + latestErrorMessage: '{{{context.latestErrorMessage}}}', + observerLocation: '{{context.observerLocation}}', + }, + ], + indexOverride: null, + }; + } + + if (recovery) { + return { + documents: [ + { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + statusMessage: '{{{context.status}}}', + latestErrorMessage: '{{{context.latestErrorMessage}}}', + observerLocation: '{{context.locationName}}', + recoveryReason: '{{context.recoveryReason}}', + }, + ], + indexOverride: null, + }; + } + return { + documents: [ + { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + statusMessage: '{{{context.status}}}', + latestErrorMessage: '{{{context.lastErrorMessage}}}', + observerLocation: '{{context.locationName}}', + }, + ], + indexOverride: null, + }; +} + +function getServerLogActionParams( + { defaultActionMessage, defaultRecoveryMessage }: Translations, + recovery = false +): ServerLogActionParams { + if (recovery) { + return { + level: 'info', + message: defaultRecoveryMessage, + }; + } + return { + level: 'warn', + message: defaultActionMessage, + }; +} + +function getWebhookActionParams( + { defaultActionMessage, defaultRecoveryMessage }: Translations, + recovery = false +): WebhookActionParams { + return { + body: recovery ? defaultRecoveryMessage : defaultActionMessage, + }; +} + +function getPagerDutyActionParams( + { defaultActionMessage, defaultRecoveryMessage }: Translations, + dedupKey: string, + recovery = false +): PagerDutyActionParams { + if (recovery) { + return { + dedupKey, + eventAction: 'resolve', + summary: defaultRecoveryMessage, + }; + } + return { + dedupKey, + eventAction: 'trigger', + severity: 'error', + summary: defaultActionMessage, + }; +} + +function getServiceNowActionParams({ defaultActionMessage }: Translations): ServiceNowActionParams { + return { + subAction: 'pushToService', + subActionParams: { + incident: { + short_description: defaultActionMessage, + description: defaultActionMessage, + impact: '2', + severity: '2', + urgency: '2', + category: null, + subcategory: null, + externalId: null, + correlation_id: null, + correlation_display: null, + }, + comments: [], + }, + }; +} + +function getJiraActionParams({ defaultActionMessage }: Translations): JiraActionParams { + return { + subAction: 'pushToService', + subActionParams: { + incident: { + summary: defaultActionMessage, + externalId: null, + description: defaultActionMessage, + issueType: null, + priority: '2', + labels: null, + parent: null, + }, + comments: [], + }, + }; +} + +function getEmailActionParams( + { + defaultActionMessage, + defaultSubjectMessage, + defaultRecoverySubjectMessage, + defaultRecoveryMessage, + }: Translations, + defaultEmail: DefaultEmail, + isRecovery?: boolean +): EmailActionParams { + return { + to: defaultEmail.to, + subject: isRecovery ? defaultRecoverySubjectMessage : defaultSubjectMessage, + message: isRecovery ? defaultRecoveryMessage : defaultActionMessage, + messageHTML: null, + cc: defaultEmail.cc ?? [], + bcc: defaultEmail.bcc ?? [], + kibanaFooterLink: { + path: '', + text: '', + }, + }; +} diff --git a/x-pack/plugins/uptime/common/rules/legacy_uptime/translations.ts b/x-pack/plugins/uptime/common/rules/legacy_uptime/translations.ts new file mode 100644 index 0000000000000..dba7277c8cc73 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/legacy_uptime/translations.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; + +export const MonitorStatusTranslations = { + defaultActionMessage: i18n.translate('xpack.uptime.alerts.monitorStatus.defaultActionMessage', { + defaultMessage: + 'Monitor {monitorName} with url {monitorUrl} from {observerLocation} {statusMessage} The latest error message is {latestErrorMessage}, checked at {checkedAt}', + values: { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + statusMessage: '{{{context.statusMessage}}}', + latestErrorMessage: '{{{context.latestErrorMessage}}}', + observerLocation: '{{context.observerLocation}}', + checkedAt: '{{context.checkedAt}}', + }, + }), + defaultSubjectMessage: i18n.translate('xpack.uptime.alerts.monitorStatus.defaultSubjectMessage', { + defaultMessage: 'Monitor {monitorName} with url {monitorUrl} is down', + values: { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + }, + }), + defaultRecoverySubjectMessage: i18n.translate( + 'xpack.uptime.alerts.monitorStatus.defaultRecoverySubjectMessage', + { + defaultMessage: 'Monitor {monitorName} with url {monitorUrl} has recovered', + values: { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + }, + } + ), + defaultRecoveryMessage: i18n.translate( + 'xpack.uptime.alerts.monitorStatus.defaultRecoveryMessage', + { + defaultMessage: + 'Alert for monitor {monitorName} with url {monitorUrl} from {observerLocation} has recovered', + values: { + monitorName: '{{context.monitorName}}', + monitorUrl: '{{{context.monitorUrl}}}', + observerLocation: '{{context.observerLocation}}', + }, + } + ), + name: i18n.translate('xpack.uptime.alerts.monitorStatus.clientName', { + defaultMessage: 'Uptime monitor status', + }), + description: i18n.translate('xpack.uptime.alerts.monitorStatus.description', { + defaultMessage: 'Alert when a monitor is down or an availability threshold is breached.', + }), +}; + +export const TlsTranslations = { + defaultActionMessage: i18n.translate('xpack.uptime.alerts.tls.defaultActionMessage', { + defaultMessage: `Detected TLS certificate {commonName} from issuer {issuer} is {status}. Certificate {summary}`, + values: { + commonName: '{{context.commonName}}', + issuer: '{{context.issuer}}', + summary: '{{context.summary}}', + status: '{{context.status}}', + }, + }), + defaultRecoveryMessage: i18n.translate('xpack.uptime.alerts.tls.defaultRecoveryMessage', { + defaultMessage: `Alert for TLS certificate {commonName} from issuer {issuer} has recovered`, + values: { + commonName: '{{context.commonName}}', + issuer: '{{context.issuer}}', + }, + }), + name: i18n.translate('xpack.uptime.alerts.tls.clientName', { + defaultMessage: 'Uptime TLS', + }), + description: i18n.translate('xpack.uptime.alerts.tls.description', { + defaultMessage: 'Alert when the TLS certificate of an Uptime monitor is about to expire.', + }), +}; + +export const TlsTranslationsLegacy = { + defaultActionMessage: i18n.translate('xpack.uptime.alerts.tls.legacy.defaultActionMessage', { + defaultMessage: `Detected {count} TLS certificates expiring or becoming too old. +{expiringConditionalOpen} +Expiring cert count: {expiringCount} +Expiring Certificates: {expiringCommonNameAndDate} +{expiringConditionalClose} +{agingConditionalOpen} +Aging cert count: {agingCount} +Aging Certificates: {agingCommonNameAndDate} +{agingConditionalClose} +`, + values: { + count: '{{state.count}}', + expiringCount: '{{state.expiringCount}}', + expiringCommonNameAndDate: '{{state.expiringCommonNameAndDate}}', + expiringConditionalOpen: '{{#state.hasExpired}}', + expiringConditionalClose: '{{/state.hasExpired}}', + agingCount: '{{state.agingCount}}', + agingCommonNameAndDate: '{{state.agingCommonNameAndDate}}', + agingConditionalOpen: '{{#state.hasAging}}', + agingConditionalClose: '{{/state.hasAging}}', + }, + }), + name: i18n.translate('xpack.uptime.alerts.tls.legacy.clientName', { + defaultMessage: 'Uptime TLS (Legacy)', + }), + description: i18n.translate('xpack.uptime.alerts.tls.legacy.description', { + defaultMessage: + 'Alert when the TLS certificate of an Uptime monitor is about to expire. This alert will be deprecated in a future version.', + }), +}; + +export const DurationAnomalyTranslations = { + defaultActionMessage: i18n.translate('xpack.uptime.alerts.durationAnomaly.defaultActionMessage', { + defaultMessage: `Abnormal ({severity} level) response time detected on {monitor} with url {monitorUrl} at {anomalyStartTimestamp}. Anomaly severity score is {severityScore}. +Response times as high as {slowestAnomalyResponse} have been detected from location {observerLocation}. Expected response time is {expectedResponseTime}.`, + values: { + severity: '{{context.severity}}', + anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}', + monitor: '{{context.monitor}}', + monitorUrl: '{{{context.monitorUrl}}}', + slowestAnomalyResponse: '{{context.slowestAnomalyResponse}}', + expectedResponseTime: '{{context.expectedResponseTime}}', + severityScore: '{{context.severityScore}}', + observerLocation: '{{context.observerLocation}}', + }, + }), + defaultRecoveryMessage: i18n.translate( + 'xpack.uptime.alerts.durationAnomaly.defaultRecoveryMessage', + { + defaultMessage: `Alert for abnormal ({severity} level) response time detected on monitor {monitor} with url {monitorUrl} from location {observerLocation} at {anomalyStartTimestamp} has recovered`, + values: { + severity: '{{context.severity}}', + anomalyStartTimestamp: '{{context.anomalyStartTimestamp}}', + monitor: '{{context.monitor}}', + monitorUrl: '{{{context.monitorUrl}}}', + observerLocation: '{{context.observerLocation}}', + }, + } + ), + name: i18n.translate('xpack.uptime.alerts.durationAnomaly.clientName', { + defaultMessage: 'Uptime Duration Anomaly', + }), + description: i18n.translate('xpack.uptime.alerts.durationAnomaly.description', { + defaultMessage: 'Alert when the Uptime monitor duration is anomalous.', + }), +}; diff --git a/x-pack/plugins/uptime/common/rules/status_rule.ts b/x-pack/plugins/uptime/common/rules/status_rule.ts new file mode 100644 index 0000000000000..375e0c0dd08c1 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/status_rule.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +export const StatusRulePramsSchema = schema.object({}); + +export type StatusRuleParams = TypeOf; diff --git a/x-pack/plugins/uptime/common/rules/types.ts b/x-pack/plugins/uptime/common/rules/types.ts new file mode 100644 index 0000000000000..c398d66e376a2 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/types.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + IndexConnectorTypeId, + JiraConnectorTypeId, + PagerDutyConnectorTypeId, + ServerLogConnectorTypeId, + ServiceNowITSMConnectorTypeId as ServiceNowConnectorTypeId, + SlackWebhookConnectorTypeId, + TeamsConnectorTypeId, + WebhookConnectorTypeId, + EmailConnectorTypeId, +} from '@kbn/stack-connectors-plugin/server/connector_types'; + +import type { ActionConnector as RawActionConnector } from '@kbn/triggers-actions-ui-plugin/public'; + +export type ActionTypeId = + | typeof SlackWebhookConnectorTypeId + | typeof PagerDutyConnectorTypeId + | typeof ServerLogConnectorTypeId + | typeof IndexConnectorTypeId + | typeof TeamsConnectorTypeId + | typeof ServiceNowConnectorTypeId + | typeof JiraConnectorTypeId + | typeof WebhookConnectorTypeId + | typeof EmailConnectorTypeId; + +export type ActionConnector = Omit; diff --git a/x-pack/plugins/uptime/common/rules/uptime_rule_field_map.ts b/x-pack/plugins/uptime/common/rules/uptime_rule_field_map.ts new file mode 100644 index 0000000000000..be097ed8d8268 --- /dev/null +++ b/x-pack/plugins/uptime/common/rules/uptime_rule_field_map.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const uptimeRuleFieldMap = { + // common fields + 'monitor.id': { + type: 'keyword', + required: false, + }, + 'url.full': { + type: 'keyword', + required: false, + }, + 'observer.geo.name': { + type: 'keyword', + required: false, + }, + // monitor status alert fields + 'error.message': { + type: 'text', + required: false, + }, + 'agent.name': { + type: 'keyword', + required: false, + }, + 'monitor.name': { + type: 'keyword', + required: false, + }, + 'monitor.type': { + type: 'keyword', + required: false, + }, + // tls alert fields + 'tls.server.x509.issuer.common_name': { + type: 'keyword', + required: false, + }, + 'tls.server.x509.subject.common_name': { + type: 'keyword', + required: false, + }, + 'tls.server.x509.not_after': { + type: 'date', + required: false, + }, + 'tls.server.x509.not_before': { + type: 'date', + required: false, + }, + 'tls.server.hash.sha256': { + type: 'keyword', + required: false, + }, + // anomaly alert fields + 'anomaly.start': { + type: 'date', + required: false, + }, + 'anomaly.bucket_span.minutes': { + type: 'keyword', + required: false, + }, +} as const; + +export type UptimeRuleFieldMap = typeof uptimeRuleFieldMap; diff --git a/x-pack/plugins/uptime/common/runtime_types/alert_rules/common.ts b/x-pack/plugins/uptime/common/runtime_types/alert_rules/common.ts new file mode 100644 index 0000000000000..6f7009f89aa8b --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/alert_rules/common.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const SyntheticsCommonStateCodec = t.intersection([ + t.partial({ + firstTriggeredAt: t.string, + lastTriggeredAt: t.string, + lastResolvedAt: t.string, + meta: t.record(t.string, t.unknown), + idWithLocation: t.string, + }), + t.type({ + firstCheckedAt: t.string, + lastCheckedAt: t.string, + isTriggered: t.boolean, + }), +]); + +export type SyntheticsCommonState = t.TypeOf; + +export const SyntheticsMonitorStatusAlertStateCodec = t.type({ + configId: t.string, + locationId: t.string, + locationName: t.string, + errorStartedAt: t.string, + lastErrorMessage: t.string, + stateId: t.string, +}); + +export type SyntheticsMonitorStatusAlertState = t.TypeOf< + typeof SyntheticsMonitorStatusAlertStateCodec +>; diff --git a/x-pack/plugins/uptime/common/runtime_types/alerts/common.ts b/x-pack/plugins/uptime/common/runtime_types/alerts/common.ts new file mode 100644 index 0000000000000..d569888bde246 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/alerts/common.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const UptimeCommonStateType = t.intersection([ + t.partial({ + currentTriggerStarted: t.string, + firstTriggeredAt: t.string, + lastTriggeredAt: t.string, + lastResolvedAt: t.string, + }), + t.type({ + firstCheckedAt: t.string, + lastCheckedAt: t.string, + isTriggered: t.boolean, + }), +]); + +export type UptimeCommonState = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/alerts/index.ts b/x-pack/plugins/uptime/common/runtime_types/alerts/index.ts new file mode 100644 index 0000000000000..c427ec862e854 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/alerts/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './common'; +export * from './status_check'; diff --git a/x-pack/plugins/uptime/common/runtime_types/alerts/status_check.ts b/x-pack/plugins/uptime/common/runtime_types/alerts/status_check.ts new file mode 100644 index 0000000000000..1a9eb33714408 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/alerts/status_check.ts @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +export const StatusCheckFiltersType = t.type({ + 'monitor.type': t.array(t.string), + 'observer.geo.name': t.array(t.string), + tags: t.array(t.string), + 'url.port': t.array(t.string), +}); + +export type StatusCheckFilters = t.TypeOf; + +export const AtomicStatusCheckParamsType = t.intersection([ + t.type({ + numTimes: t.number, + timerangeCount: t.number, + timerangeUnit: t.string, + }), + t.partial({ + search: t.string, + filters: StatusCheckFiltersType, + shouldCheckStatus: t.boolean, + isAutoGenerated: t.boolean, + shouldCheckAvailability: t.boolean, + }), +]); + +export type AtomicStatusCheckParams = t.TypeOf; + +export const StatusCheckParamsType = t.intersection([ + t.partial({ + filters: t.string, + shouldCheckStatus: t.boolean, + isAutoGenerated: t.boolean, + }), + t.type({ + locations: t.array(t.string), + numTimes: t.number, + timerange: t.type({ + from: t.string, + to: t.string, + }), + }), +]); + +export const RangeUnitType = t.union([ + t.literal('s', 'Second'), + t.literal('m', 'Minute'), + t.literal('h', 'Hour'), + t.literal('d', 'Day'), + t.literal('w', 'Week'), + t.literal('M', 'Month'), + t.literal('y', 'Year'), +]); + +export type RangeUnit = t.TypeOf; + +export type StatusCheckParams = t.TypeOf; + +export const GetMonitorAvailabilityParamsType = t.intersection([ + t.type({ + range: t.number, + rangeUnit: RangeUnitType, + threshold: t.string, + }), + t.partial({ + filters: t.string, + }), +]); + +export type GetMonitorAvailabilityParams = t.TypeOf; + +export const MonitorAvailabilityType = t.intersection([ + t.type({ + availability: GetMonitorAvailabilityParamsType, + shouldCheckAvailability: t.boolean, + }), + t.partial({ + filters: StatusCheckFiltersType, + search: t.string, + }), +]); + +export type MonitorAvailability = t.Type; diff --git a/x-pack/plugins/uptime/common/runtime_types/alerts/tls.ts b/x-pack/plugins/uptime/common/runtime_types/alerts/tls.ts new file mode 100644 index 0000000000000..564485d44f239 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/alerts/tls.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const TLSParamsType = t.partial({ + search: t.string, + certAgeThreshold: t.number, + certExpirationThreshold: t.number, +}); + +export type TLSParams = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/certs.ts b/x-pack/plugins/uptime/common/runtime_types/certs.ts new file mode 100644 index 0000000000000..bb854930f8e4d --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/certs.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const GetCertsParamsType = t.intersection([ + t.type({ + pageIndex: t.number, + }), + t.partial({ + search: t.string, + notValidBefore: t.string, + notValidAfter: t.string, + from: t.string, + to: t.string, + sortBy: t.string, + direction: t.string, + size: t.number, + filters: t.unknown, + monitorIds: t.array(t.string), + }), +]); + +export type GetCertsParams = t.TypeOf; + +export const CertMonitorType = t.partial({ + name: t.string, + id: t.string, + configId: t.string, + url: t.string, +}); + +export const CertType = t.intersection([ + t.type({ + monitors: t.array(CertMonitorType), + sha256: t.string, + }), + t.partial({ + not_after: t.string, + not_before: t.string, + common_name: t.string, + issuer: t.string, + sha1: t.string, + monitorName: t.string, + monitorType: t.string, + monitorUrl: t.string, + locationName: t.string, + }), +]); + +export const CertResultType = t.type({ + certs: t.array(CertType), + total: t.number, +}); + +export type Cert = t.TypeOf; +export type CertMonitor = t.TypeOf; +export type CertResult = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/common.ts b/x-pack/plugins/uptime/common/runtime_types/common.ts new file mode 100644 index 0000000000000..15306ee0f495f --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/common.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const LocationType = t.type({ + lat: t.string, + lon: t.string, +}); + +export const CheckGeoType = t.intersection([ + t.type({ + name: t.string, + }), + t.partial({ + location: LocationType, + }), +]); + +export const SummaryType = t.partial({ + up: t.number, + down: t.number, + geo: CheckGeoType, +}); + +export const StatesIndexStatusType = t.type({ + indexExists: t.boolean, + indices: t.string, +}); + +export const DateRangeType = t.type({ + from: t.string, + to: t.string, +}); + +export type Summary = t.TypeOf; +export type Location = t.TypeOf; +export type GeoPoint = t.TypeOf; +export type StatesIndexStatus = t.TypeOf; +export type DateRange = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/dynamic_settings.ts b/x-pack/plugins/uptime/common/runtime_types/dynamic_settings.ts new file mode 100644 index 0000000000000..9b8099b0720b7 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/dynamic_settings.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +const DefaultEmailCodec = t.intersection([ + t.type({ + to: t.array(t.string), + }), + t.partial({ + cc: t.array(t.string), + bcc: t.array(t.string), + }), +]); + +export const DynamicSettingsSaveCodec = t.intersection([ + t.type({ + success: t.boolean, + }), + t.partial({ + error: t.string, + }), +]); + +export const DynamicSettingsCodec = t.intersection([ + t.strict({ + heartbeatIndices: t.string, + certAgeThreshold: t.number, + certExpirationThreshold: t.number, + defaultConnectors: t.array(t.string), + }), + t.partial({ + defaultEmail: DefaultEmailCodec, + }), +]); + +export type DynamicSettings = t.TypeOf; +export type DefaultEmail = t.TypeOf; +export type DynamicSettingsSaveResponse = t.TypeOf; + +export const LocationMonitorsType = t.type({ + status: t.number, + payload: t.array( + t.type({ + id: t.string, + count: t.number, + }) + ), +}); + +export type LocationMonitorsResponse = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/index.ts b/x-pack/plugins/uptime/common/runtime_types/index.ts new file mode 100644 index 0000000000000..e97fa5a1360d8 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './alerts'; +export * from './certs'; +export * from './common'; +export * from './dynamic_settings'; +export * from './monitor'; +export * from './ping'; +export * from './snapshot'; +export * from './network_events'; +export * from './monitor_management'; +export * from './monitor_management/synthetics_private_locations'; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor/index.ts b/x-pack/plugins/uptime/common/runtime_types/monitor/index.ts new file mode 100644 index 0000000000000..41daa9d2148ad --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './locations'; +export * from './state'; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor/locations.ts b/x-pack/plugins/uptime/common/runtime_types/monitor/locations.ts new file mode 100644 index 0000000000000..e37621c47ddf9 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor/locations.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { CheckGeoType, SummaryType } from '../common'; + +// IO type for validation +export const MonitorLocationType = t.type({ + up_history: t.number, + down_history: t.number, + timestamp: t.string, + summary: SummaryType, + geo: CheckGeoType, +}); + +// Typescript type for type checking +export type MonitorLocation = t.TypeOf; + +export const MonitorLocationsType = t.intersection([ + t.type({ + monitorId: t.string, + up_history: t.number, + down_history: t.number, + }), + t.partial({ locations: t.array(MonitorLocationType) }), +]); +export type MonitorLocations = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor/state.ts b/x-pack/plugins/uptime/common/runtime_types/monitor/state.ts new file mode 100644 index 0000000000000..74a3bba6ae027 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor/state.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { PingErrorType, PingType } from '../ping/ping'; + +export const StateType = t.intersection([ + t.type({ + timestamp: t.string, + url: t.partial({ + domain: t.string, + full: t.string, + path: t.string, + port: t.number, + scheme: t.string, + }), + summaryPings: t.array(PingType), + summary: t.partial({ + status: t.string, + up: t.number, + down: t.number, + }), + monitor: t.intersection([ + t.partial({ + name: t.string, + checkGroup: t.string, + duration: t.type({ us: t.number }), + }), + t.type({ + type: t.string, + }), + ]), + }), + t.partial({ + tls: t.partial({ + not_after: t.union([t.string, t.null]), + not_before: t.union([t.string, t.null]), + }), + observer: t.type({ + geo: t.type({ + name: t.array(t.string), + }), + }), + service: t.partial({ + name: t.string, + }), + error: PingErrorType, + }), +]); + +export type MonitorSummaryState = t.TypeOf; + +export const HistogramPointType = t.type({ + timestamp: t.number, + up: t.union([t.number, t.undefined]), + down: t.union([t.number, t.undefined]), +}); + +export type HistogramPoint = t.TypeOf; + +export const HistogramType = t.type({ + points: t.array(HistogramPointType), +}); + +export type Histogram = t.TypeOf; + +export const MonitorSummaryType = t.intersection([ + t.type({ + monitor_id: t.string, + state: StateType, + }), + t.partial({ + histogram: HistogramType, + minInterval: t.number, + configId: t.string, + }), +]); + +export type MonitorSummary = t.TypeOf; + +export const MonitorSummariesResultType = t.intersection([ + t.partial({ + totalSummaryCount: t.number, + }), + t.type({ + summaries: t.array(MonitorSummaryType), + prevPagePagination: t.union([t.string, t.null]), + nextPagePagination: t.union([t.string, t.null]), + }), +]); + +export type MonitorSummariesResult = t.TypeOf; + +export const FetchMonitorStatesQueryArgsType = t.intersection([ + t.partial({ + pagination: t.string, + filters: t.string, + statusFilter: t.string, + query: t.string, + }), + t.type({ + dateRangeStart: t.string, + dateRangeEnd: t.string, + pageSize: t.number, + }), +]); + +export type FetchMonitorStatesQueryArgs = t.TypeOf; + +export enum CursorDirection { + AFTER = 'AFTER', + BEFORE = 'BEFORE', +} + +export enum SortOrder { + ASC = 'ASC', + DESC = 'DESC', +} diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/alert_config.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/alert_config.ts new file mode 100644 index 0000000000000..a2beff50149dd --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/alert_config.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const AlertConfigCodec = t.intersection([ + t.interface({ + enabled: t.boolean, + }), + t.partial({ + groupBy: t.string, + }), +]); + +export const AlertConfigsCodec = t.partial({ + tls: AlertConfigCodec, + status: AlertConfigCodec, +}); + +export type AlertConfig = t.TypeOf; +export type AlertConfigs = t.TypeOf; + +export const toggleStatusAlert = (configs: AlertConfigs = {}): AlertConfigs => { + if (configs.status?.enabled) { + return { + ...configs, + status: { + ...configs.status, + enabled: false, + }, + }; + } + return { + ...configs, + status: { + enabled: true, + }, + }; +}; + +export const isStatusEnabled = (configs: AlertConfigs = {}): boolean => { + return configs.status?.enabled ?? false; +}; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/config_key.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/config_key.ts new file mode 100644 index 0000000000000..52cdbd08f06c9 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/config_key.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { tEnum } from '../../utils/t_enum'; +import { ConfigKey } from '../../constants/monitor_management'; +export { ConfigKey } from '../../constants/monitor_management'; + +export const ConfigKeyCodec = tEnum('ConfigKey', ConfigKey); +export type ConfigKeyType = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/filters.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/filters.ts new file mode 100644 index 0000000000000..0a56f849edac4 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/filters.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +const MonitorFilterCodec = t.interface({ + label: t.string, + count: t.number, +}); + +export type MonitorFilter = t.TypeOf; + +export const MonitorFiltersResultCodec = t.interface({ + monitorTypes: t.array(MonitorFilterCodec), + tags: t.array(MonitorFilterCodec), + locations: t.array(MonitorFilterCodec), + projects: t.array(MonitorFilterCodec), + schedules: t.array(MonitorFilterCodec), +}); + +export type MonitorFiltersResult = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/index.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/index.ts new file mode 100644 index 0000000000000..7922a423313e1 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './state'; +export * from './config_key'; +export * from './monitor_configs'; +export * from './monitor_meta_data'; +export * from './monitor_types'; +export * from './monitor_types_project'; +export * from './locations'; +export * from './synthetics_private_locations'; +export * from './synthetics_overview_status'; +export * from './synthetics_params'; +export * from './filters'; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts new file mode 100644 index 0000000000000..263bc0e8dcb15 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/locations.ts @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isLeft } from 'fp-ts/lib/Either'; +import * as t from 'io-ts'; +import { tEnum } from '../../utils/t_enum'; + +export enum LocationStatus { + GA = 'ga', + BETA = 'beta', + EXPERIMENTAL = 'experimental', +} + +export enum BandwidthLimitKey { + DOWNLOAD = 'download', + UPLOAD = 'upload', +} + +export const DEFAULT_BANDWIDTH_LIMIT = { + [BandwidthLimitKey.DOWNLOAD]: 100, + [BandwidthLimitKey.UPLOAD]: 30, +}; + +export const DEFAULT_THROTTLING = { + [BandwidthLimitKey.DOWNLOAD]: DEFAULT_BANDWIDTH_LIMIT[BandwidthLimitKey.DOWNLOAD], + [BandwidthLimitKey.UPLOAD]: DEFAULT_BANDWIDTH_LIMIT[BandwidthLimitKey.UPLOAD], +}; + +export const BandwidthLimitKeyCodec = tEnum( + 'BandwidthLimitKey', + BandwidthLimitKey +); + +export type BandwidthLimitKeyType = t.TypeOf; + +export const LocationGeoCodec = t.interface({ + lat: t.union([t.string, t.number]), + lon: t.union([t.string, t.number]), +}); + +export const LocationStatusCodec = tEnum('LocationStatus', LocationStatus); +export type LocationStatusType = t.TypeOf; + +export const ManifestLocationCodec = t.interface({ + url: t.string, + geo: t.interface({ + name: t.string, + location: LocationGeoCodec, + }), + status: LocationStatusCodec, +}); + +export const ServiceLocationCodec = t.intersection([ + t.interface({ + id: t.string, + label: t.string, + isServiceManaged: t.boolean, + }), + t.partial({ + url: t.string, + geo: LocationGeoCodec, + status: LocationStatusCodec, + isInvalid: t.boolean, + }), +]); + +export const PublicLocationCodec = t.intersection([ + ServiceLocationCodec, + t.interface({ url: t.string }), +]); + +export const PublicLocationsCodec = t.array(PublicLocationCodec); + +export const MonitorServiceLocationCodec = t.intersection([ + t.interface({ + id: t.string, + }), + t.partial({ + label: t.string, + geo: LocationGeoCodec, + url: t.string, + isServiceManaged: t.boolean, + status: t.string, + }), +]); + +export const ServiceLocationErrors = t.array( + t.interface({ + locationId: t.string, + error: t.intersection([ + t.interface({ + reason: t.string, + status: t.number, + }), + t.partial({ + failed_monitors: t.union([ + t.array( + t.interface({ + id: t.string, + message: t.string, + }) + ), + t.null, + ]), + }), + ]), + }) +); + +export const ServiceLocationsCodec = t.array(ServiceLocationCodec); +export const MonitorServiceLocationsCodec = t.array(MonitorServiceLocationCodec); + +export const LocationCodec = t.intersection([ + ServiceLocationCodec, + t.partial({ isServiceManaged: t.boolean }), +]); + +export const LocationsCodec = t.array(LocationCodec); + +export const isServiceLocationInvalid = (location: MonitorServiceLocation) => + isLeft(MonitorServiceLocationCodec.decode(location)); + +export const ThrottlingOptionsCodec = t.interface({ + [BandwidthLimitKey.DOWNLOAD]: t.number, + [BandwidthLimitKey.UPLOAD]: t.number, +}); + +export const ServiceLocationsApiResponseCodec = t.interface({ + throttling: t.union([ThrottlingOptionsCodec, t.undefined]), + locations: ServiceLocationsCodec, +}); + +export type ManifestLocation = t.TypeOf; +export type ServiceLocation = t.TypeOf; +export type ServiceLocations = t.TypeOf; +export type MonitorServiceLocation = t.TypeOf; +export type MonitorServiceLocations = t.TypeOf; +export type ServiceLocationsApiResponse = t.TypeOf; +export type ServiceLocationErrors = t.TypeOf; +export type ThrottlingOptions = t.TypeOf; +export type Locations = t.TypeOf; +export type PublicLocation = t.TypeOf; +export type PublicLocations = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_configs.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_configs.ts new file mode 100644 index 0000000000000..5cbf2efbe62f7 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_configs.ts @@ -0,0 +1,146 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { tEnum } from '../../utils/t_enum'; + +export enum DataStream { + HTTP = 'http', + TCP = 'tcp', + ICMP = 'icmp', + BROWSER = 'browser', +} + +export const DataStreamCodec = tEnum('DataStream', DataStream); +export type DataStreamType = t.TypeOf; + +export enum HTTPMethod { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', + HEAD = 'HEAD', +} + +export const HTTPMethodCodec = tEnum('HTTPMethod', HTTPMethod); +export type HTTPMethodType = t.TypeOf; + +export enum ResponseBodyIndexPolicy { + ALWAYS = 'always', + NEVER = 'never', + ON_ERROR = 'on_error', +} + +export const ResponseBodyIndexPolicyCodec = tEnum( + 'ResponseBodyIndexPolicy', + ResponseBodyIndexPolicy +); +export type ResponseBodyIndexPolicyType = t.TypeOf; + +export enum MonacoEditorLangId { + JSON = 'xjson', + PLAINTEXT = 'plaintext', + XML = 'xml', + JAVASCRIPT = 'javascript', +} + +export const MonacoEditorLangIdCodec = tEnum( + 'MonacoEditorLangId', + MonacoEditorLangId +); +export type MonacoEditorLangIdType = t.TypeOf; + +export enum CodeEditorMode { + FORM = 'form', + JSON = 'json', + PLAINTEXT = 'text', + XML = 'xml', +} + +export const CodeEditorModeCodec = tEnum('CodeEditorMode', CodeEditorMode); +export type CodeEditorModeType = t.TypeOf; + +export enum ContentType { + JSON = 'application/json', + TEXT = 'text/plain', + XML = 'application/xml', + FORM = 'application/x-www-form-urlencoded', +} + +export const ContentTypeCodec = tEnum('ContentType', ContentType); +export type ContentTypeType = t.TypeOf; + +export enum ScheduleUnit { + MINUTES = 'm', + SECONDS = 's', +} + +export const ScheduleUnitCodec = tEnum('ScheduleUnit', ScheduleUnit); +export type ScheduleUnitType = t.TypeOf; + +export enum VerificationMode { + CERTIFICATE = 'certificate', + FULL = 'full', + NONE = 'none', + STRICT = 'strict', +} + +export const VerificationModeCodec = tEnum('VerificationMode', VerificationMode); +export type VerificationModeType = t.TypeOf; + +export enum TLSVersion { + ONE_ZERO = 'TLSv1.0', + ONE_ONE = 'TLSv1.1', + ONE_TWO = 'TLSv1.2', + ONE_THREE = 'TLSv1.3', +} + +export const TLSVersionCodec = tEnum('TLSVersion', TLSVersion); +export type TLSVersionType = t.TypeOf; + +export enum ScreenshotOption { + ON = 'on', + OFF = 'off', + ONLY_ON_FAILURE = 'only-on-failure', +} + +export const ScreenshotOptionCodec = tEnum('ScreenshotOption', ScreenshotOption); +export type ScreenshotOptionType = t.TypeOf; + +export enum SourceType { + UI = 'ui', + PROJECT = 'project', +} + +export const SourceTypeCodec = tEnum('SourceType', SourceType); + +export enum FormMonitorType { + SINGLE = 'single', + MULTISTEP = 'multistep', + HTTP = 'http', + TCP = 'tcp', + ICMP = 'icmp', +} + +export const FormMonitorTypeCodec = tEnum('FormMonitorType', FormMonitorType); + +export enum Mode { + ANY = 'any', + ALL = 'all', +} +export const ModeCodec = tEnum('Mode', Mode); +export type ModeType = t.TypeOf; + +export const ResponseCheckJSONCodec = t.interface({ + description: t.string, + expression: t.string, +}); +export type ResponseCheckJSON = t.TypeOf; + +export const RequestBodyCheckCodec = t.interface({ value: t.string, type: CodeEditorModeCodec }); + +export type RequestBodyCheck = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_meta_data.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_meta_data.ts new file mode 100644 index 0000000000000..5ef3c448e7e84 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_meta_data.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +const ScriptSourceCodec = t.interface({ + is_generated_script: t.boolean, + file_name: t.string, +}); + +export const MetadataCodec = t.partial({ + is_tls_enabled: t.boolean, + script_source: ScriptSourceCodec, +}); + +export type Metadata = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types.ts new file mode 100644 index 0000000000000..cd9e96081778b --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types.ts @@ -0,0 +1,428 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { AlertConfigsCodec } from './alert_config'; +import { secretKeys } from '../../constants/monitor_management'; +import { ConfigKey } from './config_key'; +import { MonitorServiceLocationCodec, ServiceLocationErrors } from './locations'; +import { + DataStream, + DataStreamCodec, + FormMonitorTypeCodec, + ModeCodec, + ResponseBodyIndexPolicyCodec, + ResponseCheckJSONCodec, + ScheduleUnitCodec, + SourceTypeCodec, + TLSVersionCodec, + VerificationModeCodec, + RequestBodyCheckCodec, +} from './monitor_configs'; +import { MetadataCodec } from './monitor_meta_data'; +import { PrivateLocationCodec } from './synthetics_private_locations'; + +const ScheduleCodec = t.interface({ + number: t.string, + unit: ScheduleUnitCodec, +}); + +export type SyntheticsMonitorSchedule = t.TypeOf; + +// TLSFields +export const TLSFieldsCodec = t.partial({ + [ConfigKey.TLS_CERTIFICATE_AUTHORITIES]: t.string, + [ConfigKey.TLS_CERTIFICATE]: t.string, + [ConfigKey.TLS_VERIFICATION_MODE]: VerificationModeCodec, + [ConfigKey.TLS_VERSION]: t.array(TLSVersionCodec), +}); + +export const TLSSensitiveFieldsCodec = t.partial({ + [ConfigKey.TLS_KEY]: t.string, + [ConfigKey.TLS_KEY_PASSPHRASE]: t.string, +}); + +export const TLSCodec = t.intersection([TLSFieldsCodec, TLSSensitiveFieldsCodec]); + +export type TLSFields = t.TypeOf; + +// CommonFields +export const CommonFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.NAME]: t.string, + [ConfigKey.NAMESPACE]: t.string, + [ConfigKey.MONITOR_TYPE]: DataStreamCodec, + [ConfigKey.ENABLED]: t.boolean, + [ConfigKey.SCHEDULE]: ScheduleCodec, + [ConfigKey.APM_SERVICE_NAME]: t.string, + [ConfigKey.TAGS]: t.array(t.string), + [ConfigKey.LOCATIONS]: t.array(t.union([MonitorServiceLocationCodec, PrivateLocationCodec])), + [ConfigKey.MONITOR_QUERY_ID]: t.string, + [ConfigKey.CONFIG_ID]: t.string, + }), + t.partial({ + [ConfigKey.FORM_MONITOR_TYPE]: FormMonitorTypeCodec, + [ConfigKey.TIMEOUT]: t.union([t.string, t.null]), + [ConfigKey.REVISION]: t.number, + [ConfigKey.MONITOR_SOURCE_TYPE]: SourceTypeCodec, + [ConfigKey.CONFIG_HASH]: t.string, + [ConfigKey.JOURNEY_ID]: t.string, + [ConfigKey.PROJECT_ID]: t.string, + [ConfigKey.ORIGINAL_SPACE]: t.string, + [ConfigKey.CUSTOM_HEARTBEAT_ID]: t.string, + [ConfigKey.ALERT_CONFIG]: AlertConfigsCodec, + [ConfigKey.PARAMS]: t.string, + }), +]); + +export type CommonFields = t.TypeOf; + +// TCP Simple Fields +export const TCPSimpleFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.METADATA]: MetadataCodec, + [ConfigKey.HOSTS]: t.string, + [ConfigKey.PORT]: t.union([t.number, t.null]), + }), + t.partial({ + [ConfigKey.URLS]: t.string, + }), + CommonFieldsCodec, +]); + +export type TCPSimpleFields = t.TypeOf; + +// TCPAdvancedFields +export const TCPAdvancedFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.PROXY_URL]: t.string, + [ConfigKey.PROXY_USE_LOCAL_RESOLVER]: t.boolean, + }), + t.partial({ + [ConfigKey.MODE]: ModeCodec, + [ConfigKey.IPV4]: t.boolean, + [ConfigKey.IPV6]: t.boolean, + }), +]); + +export const TCPSensitiveAdvancedFieldsCodec = t.interface({ + [ConfigKey.RESPONSE_RECEIVE_CHECK]: t.string, + [ConfigKey.REQUEST_SEND_CHECK]: t.string, +}); + +export const TCPAdvancedCodec = t.intersection([ + TCPAdvancedFieldsCodec, + TCPSensitiveAdvancedFieldsCodec, +]); + +export type TCPAdvancedFields = t.TypeOf; + +// TCPFields +export const EncryptedTCPFieldsCodec = t.intersection([ + TCPSimpleFieldsCodec, + TCPAdvancedFieldsCodec, + TLSFieldsCodec, +]); + +export const TCPFieldsCodec = t.intersection([ + EncryptedTCPFieldsCodec, + TCPSensitiveAdvancedFieldsCodec, + TLSSensitiveFieldsCodec, +]); + +export type TCPFields = t.TypeOf; + +// ICMP SimpleFields +export const ICMPSimpleFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.HOSTS]: t.string, + [ConfigKey.WAIT]: t.string, + }), + CommonFieldsCodec, +]); + +export type ICMPSimpleFields = t.TypeOf; + +// ICMPAdvancedFields +export const ICMPAdvancedFieldsCodec = t.partial({ + [ConfigKey.MODE]: ModeCodec, + [ConfigKey.IPV4]: t.boolean, + [ConfigKey.IPV6]: t.boolean, +}); + +// ICMPFields +export const ICMPFieldsCodec = t.intersection([ICMPSimpleFieldsCodec, ICMPAdvancedFieldsCodec]); + +export type ICMPFields = t.TypeOf; + +// HTTPSimpleFields +export const HTTPSimpleFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.METADATA]: MetadataCodec, + [ConfigKey.MAX_REDIRECTS]: t.string, + [ConfigKey.URLS]: t.string, + [ConfigKey.PORT]: t.union([t.number, t.null]), + }), + CommonFieldsCodec, +]); + +export type HTTPSimpleFields = t.TypeOf; + +// HTTPAdvancedFields +export const HTTPAdvancedFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.PROXY_URL]: t.string, + [ConfigKey.RESPONSE_BODY_INDEX]: ResponseBodyIndexPolicyCodec, + [ConfigKey.RESPONSE_HEADERS_INDEX]: t.boolean, + [ConfigKey.RESPONSE_STATUS_CHECK]: t.array(t.string), + [ConfigKey.REQUEST_METHOD_CHECK]: t.string, + }), + t.partial({ + [ConfigKey.MODE]: ModeCodec, + [ConfigKey.RESPONSE_BODY_MAX_BYTES]: t.string, + [ConfigKey.IPV4]: t.boolean, + [ConfigKey.IPV6]: t.boolean, + }), +]); + +export const HTTPSensitiveAdvancedFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.PASSWORD]: t.string, + [ConfigKey.RESPONSE_BODY_CHECK_NEGATIVE]: t.array(t.string), + [ConfigKey.RESPONSE_BODY_CHECK_POSITIVE]: t.array(t.string), + [ConfigKey.RESPONSE_HEADERS_CHECK]: t.record(t.string, t.string), + [ConfigKey.REQUEST_BODY_CHECK]: RequestBodyCheckCodec, + [ConfigKey.REQUEST_HEADERS_CHECK]: t.record(t.string, t.string), + [ConfigKey.USERNAME]: t.string, + }), + t.partial({ + [ConfigKey.PROXY_HEADERS]: t.record(t.string, t.string), + [ConfigKey.RESPONSE_JSON_CHECK]: t.array(ResponseCheckJSONCodec), + }), +]); + +export const HTTPAdvancedCodec = t.intersection([ + HTTPAdvancedFieldsCodec, + HTTPSensitiveAdvancedFieldsCodec, +]); + +export type HTTPAdvancedFields = t.TypeOf; + +// HTTPFields +export const EncryptedHTTPFieldsCodec = t.intersection([ + HTTPSimpleFieldsCodec, + HTTPAdvancedFieldsCodec, + TLSFieldsCodec, +]); + +export const HTTPFieldsCodec = t.intersection([ + EncryptedHTTPFieldsCodec, + HTTPSensitiveAdvancedFieldsCodec, + TLSSensitiveFieldsCodec, +]); + +export type HTTPFields = t.TypeOf; + +export const EncryptedBrowserSimpleFieldsCodec = t.intersection([ + t.intersection([ + t.interface({ + [ConfigKey.METADATA]: MetadataCodec, + }), + t.partial({ + [ConfigKey.PLAYWRIGHT_OPTIONS]: t.string, + [ConfigKey.TEXT_ASSERTION]: t.string, + }), + ]), + CommonFieldsCodec, +]); + +export const BrowserSensitiveSimpleFieldsCodec = t.intersection([ + t.interface({ + [ConfigKey.SOURCE_INLINE]: t.string, + [ConfigKey.SOURCE_PROJECT_CONTENT]: t.string, + [ConfigKey.URLS]: t.union([t.string, t.null]), + [ConfigKey.PORT]: t.union([t.number, t.null]), + }), + CommonFieldsCodec, +]); + +export const ThrottlingConfigValueCodec = t.interface({ + download: t.string, + upload: t.string, + latency: t.string, +}); + +export type ThrottlingConfigValue = t.TypeOf; + +export const ThrottlingConfigCodec = t.interface({ + value: t.union([ThrottlingConfigValueCodec, t.null]), + label: t.string, + id: t.string, +}); + +export type ThrottlingConfig = t.TypeOf; + +export const EncryptedBrowserAdvancedFieldsCodec = t.interface({ + [ConfigKey.SCREENSHOTS]: t.string, + [ConfigKey.JOURNEY_FILTERS_MATCH]: t.string, + [ConfigKey.JOURNEY_FILTERS_TAGS]: t.array(t.string), + [ConfigKey.IGNORE_HTTPS_ERRORS]: t.boolean, + [ConfigKey.THROTTLING_CONFIG]: ThrottlingConfigCodec, +}); + +export const BrowserSimpleFieldsCodec = t.intersection([ + EncryptedBrowserSimpleFieldsCodec, + BrowserSensitiveSimpleFieldsCodec, +]); + +export const BrowserSensitiveAdvancedFieldsCodec = t.interface({ + [ConfigKey.SYNTHETICS_ARGS]: t.array(t.string), +}); + +export const BrowserAdvancedFieldsCodec = t.intersection([ + EncryptedBrowserAdvancedFieldsCodec, + BrowserSensitiveAdvancedFieldsCodec, +]); + +export const EncryptedBrowserFieldsCodec = t.intersection([ + EncryptedBrowserSimpleFieldsCodec, + EncryptedBrowserAdvancedFieldsCodec, + TLSFieldsCodec, +]); + +export const BrowserFieldsCodec = t.intersection([ + BrowserSimpleFieldsCodec, + BrowserAdvancedFieldsCodec, + TLSCodec, +]); + +export type BrowserFields = t.TypeOf; +export type BrowserSimpleFields = t.TypeOf; +export type BrowserAdvancedFields = t.TypeOf; + +// MonitorFields, represents any possible monitor type +export const MonitorFieldsCodec = t.intersection([ + HTTPFieldsCodec, + TCPFieldsCodec, + ICMPSimpleFieldsCodec, + BrowserFieldsCodec, +]); + +export type MonitorFields = t.TypeOf; + +// Monitor, represents one of (Icmp | Tcp | Http | Browser) +export const SyntheticsMonitorCodec = t.union([ + HTTPFieldsCodec, + TCPFieldsCodec, + ICMPSimpleFieldsCodec, + BrowserFieldsCodec, +]); + +export const EncryptedSyntheticsMonitorCodec = t.union([ + EncryptedHTTPFieldsCodec, + EncryptedTCPFieldsCodec, + ICMPSimpleFieldsCodec, + EncryptedBrowserFieldsCodec, +]); + +export type SyntheticsMonitor = t.TypeOf; + +export const SyntheticsMonitorWithIdCodec = t.intersection([ + SyntheticsMonitorCodec, + t.interface({ id: t.string }), +]); + +export const HeartbeatConfigCodec = t.intersection([ + SyntheticsMonitorWithIdCodec, + t.partial({ + fields_under_root: t.boolean, + fields: t.intersection([ + t.interface({ + config_id: t.string, + }), + t.partial({ + run_once: t.boolean, + test_run_id: t.string, + 'monitor.project.name': t.string, + 'monitor.project.id': t.string, + }), + ]), + }), +]); + +export const EncryptedSyntheticsSavedMonitorCodec = t.intersection([ + EncryptedSyntheticsMonitorCodec, + t.interface({ id: t.string, updated_at: t.string, created_at: t.string }), +]); + +export type SyntheticsMonitorWithId = t.TypeOf; + +export type EncryptedSyntheticsSavedMonitor = t.TypeOf; + +export type HeartbeatConfig = t.TypeOf; + +export const MonitorDefaultsCodec = t.interface({ + [DataStream.HTTP]: HTTPFieldsCodec, + [DataStream.TCP]: TCPFieldsCodec, + [DataStream.ICMP]: ICMPSimpleFieldsCodec, + [DataStream.BROWSER]: BrowserFieldsCodec, +}); + +export type MonitorDefaults = t.TypeOf; + +export const MonitorManagementListResultCodec = t.type({ + monitors: t.array(EncryptedSyntheticsSavedMonitorCodec), + page: t.number, + perPage: t.number, + total: t.union([t.number, t.null]), + absoluteTotal: t.union([t.number, t.null]), + syncErrors: t.union([ServiceLocationErrors, t.null]), +}); + +export type MonitorManagementListResult = t.TypeOf; + +export const MonitorOverviewItemCodec = t.intersection([ + t.interface({ + name: t.string, + id: t.string, + configId: t.string, + location: MonitorServiceLocationCodec, + isEnabled: t.boolean, + isStatusAlertEnabled: t.boolean, + type: t.string, + tags: t.array(t.string), + }), + t.partial({ + projectId: t.string, + }), +]); + +export type MonitorOverviewItem = t.TypeOf; + +export const MonitorOverviewResultCodec = t.type({ + total: t.number, + allMonitorIds: t.array(t.string), + monitors: t.array(MonitorOverviewItemCodec), +}); + +export type MonitorOverviewResult = t.TypeOf; + +export const SyntheticsMonitorWithSecretsCodec = t.intersection([ + EncryptedSyntheticsMonitorCodec, + t.interface({ + secrets: t.string, + }), +]); + +export type Secret = typeof secretKeys[number]; + +export type SyntheticsMonitorWithSecrets = Omit< + t.TypeOf, + Secret +>; + +export type EncryptedSyntheticsMonitor = Omit; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types_project.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types_project.ts new file mode 100644 index 0000000000000..4a2a1a97ed88e --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/monitor_types_project.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { AlertConfigsCodec } from './alert_config'; +import { ScreenshotOptionCodec } from './monitor_configs'; + +export const ProjectMonitorThrottlingConfigCodec = t.union([ + t.interface({ + download: t.number, + upload: t.number, + latency: t.number, + }), + t.boolean, +]); + +export const ProjectMonitorCodec = t.intersection([ + t.interface({ + type: t.string, + id: t.string, + name: t.string, + schedule: t.number, + }), + t.partial({ + content: t.string, + timeout: t.string, + privateLocations: t.array(t.string), + locations: t.array(t.string), + throttling: ProjectMonitorThrottlingConfigCodec, + screenshot: ScreenshotOptionCodec, + tags: t.union([t.string, t.array(t.string)]), + ignoreHTTPSErrors: t.boolean, + playwrightOptions: t.record(t.string, t.unknown), + filter: t.interface({ + match: t.string, + }), + params: t.record(t.string, t.unknown), + enabled: t.boolean, + alert: AlertConfigsCodec, + urls: t.union([t.string, t.array(t.string)]), + hosts: t.union([t.string, t.array(t.string)]), + max_redirects: t.string, + wait: t.string, + hash: t.string, + namespace: t.string, + }), +]); + +export const ProjectMonitorsRequestCodec = t.interface({ + monitors: t.array(ProjectMonitorCodec), +}); + +export const LegacyProjectMonitorsRequestCodec = t.interface({ + project: t.string, + keep_stale: t.boolean, + monitors: t.array(ProjectMonitorCodec), +}); + +export const ProjectMonitorMetaDataCodec = t.interface({ + hash: t.string, + journey_id: t.string, +}); + +export const ProjectMonitorsResponseCodec = t.intersection([ + t.interface({ + total: t.number, + monitors: t.array(ProjectMonitorMetaDataCodec), + }), + t.partial({ + after_key: t.string, + }), +]); + +export type ProjectMonitorThrottlingConfig = t.TypeOf; + +export type ProjectMonitor = t.TypeOf; + +export type LegacyProjectMonitorsRequest = t.TypeOf; + +export type ProjectMonitorsRequest = t.TypeOf; + +export type ProjectMonitorsResponse = t.TypeOf; + +export type ProjectMonitorMetaData = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/sort_field.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/sort_field.ts new file mode 100644 index 0000000000000..58c6743ae0ed1 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/sort_field.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { schema, TypeOf } from '@kbn/config-schema'; +import { ConfigKey } from '../../constants/monitor_management'; + +export const MonitorSortFieldSchema = schema.maybe( + schema.oneOf([ + schema.literal('enabled'), + schema.literal('status'), + schema.literal('updated_at'), + schema.literal(`${ConfigKey.NAME}.keyword`), + schema.literal(`${ConfigKey.TAGS}.keyword`), + schema.literal(`${ConfigKey.PROJECT_ID}.keyword`), + schema.literal(`${ConfigKey.MONITOR_TYPE}.keyword`), + schema.literal(`${ConfigKey.SCHEDULE}.keyword`), + schema.literal(ConfigKey.JOURNEY_ID), + ]) +); + +export type MonitorListSortField = TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/state.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/state.ts new file mode 100644 index 0000000000000..ee552c74ef7b8 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/state.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const FetchMonitorManagementListQueryArgsCodec = t.partial({ + page: t.number, + perPage: t.number, + sortField: t.string, + sortOrder: t.union([t.literal('desc'), t.literal('asc')]), + query: t.string, + searchFields: t.array(t.string), + tags: t.array(t.string), + locations: t.array(t.string), + monitorTypes: t.array(t.string), + projects: t.array(t.string), + schedules: t.array(t.string), + monitorQueryIds: t.array(t.string), +}); + +export type FetchMonitorManagementListQueryArgs = t.TypeOf< + typeof FetchMonitorManagementListQueryArgsCodec +>; + +export const FetchMonitorOverviewQueryArgsCodec = t.partial({ + query: t.string, + searchFields: t.array(t.string), + tags: t.array(t.string), + locations: t.array(t.string), + projects: t.array(t.string), + schedules: t.array(t.string), + monitorTypes: t.array(t.string), + sortField: t.string, + sortOrder: t.string, +}); + +export type FetchMonitorOverviewQueryArgs = t.TypeOf; + +export const MonitorManagementEnablementResultCodec = t.type({ + isEnabled: t.boolean, + canEnable: t.boolean, + canManageApiKeys: t.boolean, + areApiKeysEnabled: t.boolean, + isValidApiKey: t.boolean, +}); + +export type MonitorManagementEnablementResult = t.TypeOf< + typeof MonitorManagementEnablementResultCodec +>; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_overview_status.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_overview_status.ts new file mode 100644 index 0000000000000..f89688b36fee4 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_overview_status.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { ObserverCodec } from '../ping/observer'; +import { ErrorStateCodec } from '../ping/error_state'; +import { AgentType, MonitorType, PingErrorType, UrlType } from '..'; + +export const OverviewPingCode = t.interface({ + '@timestamp': t.string, + summary: t.partial({ + down: t.number, + up: t.number, + }), + monitor: MonitorType, + observer: ObserverCodec, + config_id: t.string, + error: PingErrorType, + agent: AgentType, + url: UrlType, + state: ErrorStateCodec, +}); + +export const OverviewStatusMetaDataCodec = t.interface({ + monitorQueryId: t.string, + configId: t.string, + status: t.string, + location: t.string, + timestamp: t.string, + ping: OverviewPingCode, +}); + +export const OverviewPendingStatusMetaDataCodec = t.intersection([ + t.interface({ + monitorQueryId: t.string, + configId: t.string, + status: t.string, + location: t.string, + }), + t.partial({ + timestamp: t.string, + ping: OverviewPingCode, + }), +]); + +export const OverviewStatusCodec = t.interface({ + allMonitorsCount: t.number, + disabledMonitorsCount: t.number, + projectMonitorsCount: t.number, + up: t.number, + down: t.number, + pending: t.number, + disabledCount: t.number, + upConfigs: t.record(t.string, OverviewStatusMetaDataCodec), + downConfigs: t.record(t.string, OverviewStatusMetaDataCodec), + pendingConfigs: t.record(t.string, OverviewPendingStatusMetaDataCodec), + enabledMonitorQueryIds: t.array(t.string), + disabledMonitorQueryIds: t.array(t.string), + allIds: t.array(t.string), +}); + +export const OverviewStatusStateCodec = t.intersection([ + OverviewStatusCodec, + t.interface({ + allConfigs: t.record(t.string, OverviewStatusMetaDataCodec), + }), +]); + +export type OverviewPing = t.TypeOf; +export type OverviewStatus = t.TypeOf; +export type OverviewStatusState = t.TypeOf; +export type OverviewStatusMetaData = t.TypeOf; +export type OverviewPendingStatusMetaData = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_params.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_params.ts new file mode 100644 index 0000000000000..078dfa7b45d04 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_params.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const SyntheticsParamSOCodec = t.intersection([ + t.interface({ + key: t.string, + value: t.string, + }), + t.partial({ + description: t.string, + tags: t.array(t.string), + namespaces: t.array(t.string), + }), +]); + +export type SyntheticsParamSO = t.TypeOf; + +export const SyntheticsParamRequestCodec = t.intersection([ + t.interface({ + key: t.string, + value: t.string, + }), + t.partial({ + description: t.string, + tags: t.array(t.string), + share_across_spaces: t.boolean, + }), +]); + +export type SyntheticsParamRequest = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_private_locations.ts b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_private_locations.ts new file mode 100644 index 0000000000000..5b0d12579b5cb --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/monitor_management/synthetics_private_locations.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const PrivateLocationCodec = t.intersection([ + t.interface({ + label: t.string, + id: t.string, + agentPolicyId: t.string, + concurrentMonitors: t.number, + }), + t.partial({ + isServiceManaged: t.boolean, + isInvalid: t.boolean, + tags: t.array(t.string), + /* Empty Lat lon was accidentally saved as an empty string instead of undefined or null + * Need a migration to fix */ + geo: t.interface({ lat: t.union([t.string, t.number]), lon: t.union([t.string, t.number]) }), + }), +]); + +export const SyntheticsPrivateLocationsType = t.type({ + locations: t.array(PrivateLocationCodec), +}); +export type PrivateLocation = t.TypeOf; +export type SyntheticsPrivateLocations = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/network_events.ts b/x-pack/plugins/uptime/common/runtime_types/network_events.ts new file mode 100644 index 0000000000000..0b717f46cedc8 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/network_events.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +const NetworkTimingsType = t.type({ + queueing: t.number, + connect: t.number, + total: t.number, + send: t.number, + blocked: t.number, + receive: t.number, + wait: t.number, + dns: t.number, + proxy: t.number, + ssl: t.number, +}); + +const CertificateDataType = t.partial({ + validFrom: t.string, + validTo: t.string, + issuer: t.string, + subjectName: t.string, +}); + +const NetworkEventType = t.intersection([ + t.type({ + timestamp: t.string, + requestSentTime: t.number, + loadEndTime: t.number, + url: t.string, + }), + t.partial({ + certificates: CertificateDataType, + ip: t.string, + method: t.string, + status: t.number, + mimeType: t.string, + responseHeaders: t.record(t.string, t.string), + requestHeaders: t.record(t.string, t.string), + timings: NetworkTimingsType, + transferSize: t.number, + resourceSize: t.number, + }), +]); + +export type NetworkTimings = t.TypeOf; +export type CertificateData = t.TypeOf; +export type NetworkEvent = t.TypeOf; + +export const SyntheticsNetworkEventsApiResponseType = t.type({ + events: t.array(NetworkEventType), + total: t.number, + isWaterfallSupported: t.boolean, + hasNavigationRequest: t.boolean, +}); + +export type SyntheticsNetworkEventsApiResponse = t.TypeOf< + typeof SyntheticsNetworkEventsApiResponseType +>; diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/error_state.ts b/x-pack/plugins/uptime/common/runtime_types/ping/error_state.ts new file mode 100644 index 0000000000000..cf09da6eb92fc --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/error_state.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +export const StateEndsCodec = t.type({ + duration_ms: t.union([t.string, t.number]), + checks: t.number, + ends: t.union([t.string, t.null]), + started_at: t.string, + id: t.string, + up: t.number, + down: t.number, + status: t.string, +}); + +export const ErrorStateCodec = t.type({ + duration_ms: t.union([t.string, t.number]), + checks: t.number, + ends: t.union([StateEndsCodec, t.null]), + started_at: t.string, + id: t.string, + up: t.number, + down: t.number, + status: t.string, +}); + +export type ErrorState = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/histogram.ts b/x-pack/plugins/uptime/common/runtime_types/ping/histogram.ts new file mode 100644 index 0000000000000..127fd7edf75e2 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/histogram.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface HistogramDataPoint { + upCount?: number; + + downCount?: number; + + x?: number; + + x0?: number; + + y?: number; +} + +export interface GetPingHistogramParams { + dateStart: string; + dateEnd: string; + filters?: string; + monitorId?: string; + bucketSize?: string; + query?: string; + timeZone: string; +} + +export interface HistogramResult { + histogram: HistogramDataPoint[]; + minInterval: number; +} diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/index.ts b/x-pack/plugins/uptime/common/runtime_types/ping/index.ts new file mode 100644 index 0000000000000..38ef0c7a835ad --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './histogram'; +export * from './ping'; +export * from './synthetics'; diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/observer.ts b/x-pack/plugins/uptime/common/runtime_types/ping/observer.ts new file mode 100644 index 0000000000000..67635c9fe9a8b --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/observer.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const ObserverCodec = t.partial({ + hostname: t.string, + ip: t.array(t.string), + mac: t.array(t.string), + name: t.union([t.string, t.undefined]), + geo: t.partial({ + name: t.string, + continent_name: t.string, + city_name: t.string, + country_iso_code: t.string, + location: t.union([ + t.string, + t.partial({ lat: t.number, lon: t.number }), + t.partial({ lat: t.string, lon: t.string }), + ]), + }), +}); diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/ping.ts b/x-pack/plugins/uptime/common/runtime_types/ping/ping.ts new file mode 100644 index 0000000000000..a241161c3cf92 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/ping.ts @@ -0,0 +1,328 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { ObserverCodec } from './observer'; +import { ErrorStateCodec } from './error_state'; +import { DateRangeType } from '../common'; +import { SyntheticsDataType } from './synthetics'; + +// IO type for validation +export const PingErrorType = t.intersection([ + t.partial({ + code: t.string, + id: t.string, + stack_trace: t.string, + type: t.string, + }), + t.type({ + // this is _always_ on the error field + message: t.string, + }), +]); + +// Typescript type for type checking +export type PingError = t.TypeOf; + +export const MonitorDetailsType = t.intersection([ + t.type({ monitorId: t.string }), + t.partial({ error: PingErrorType, timestamp: t.string, alerts: t.unknown }), +]); +export type MonitorDetails = t.TypeOf; + +export const HttpResponseBodyType = t.partial({ + bytes: t.number, + content: t.string, + content_bytes: t.number, + hash: t.string, +}); + +export type HttpResponseBody = t.TypeOf; + +const ECSDistinguishedName = t.type({ + common_name: t.string, + distinguished_name: t.string, +}); + +export const X509ExpiryType = t.type({ + not_after: t.string, + not_before: t.string, +}); + +export type X509Expiry = t.TypeOf; + +export const X509Type = t.intersection([ + t.type({ + issuer: ECSDistinguishedName, + subject: ECSDistinguishedName, + serial_number: t.string, + public_key_algorithm: t.string, + signature_algorithm: t.string, + }), + X509ExpiryType, + t.partial({ + public_key_curve: t.string, + public_key_exponent: t.number, + public_key_size: t.number, + }), +]); + +export type X509 = t.TypeOf; + +export const TlsType = t.partial({ + // deprecated in favor of server.x509.not_after/not_before + certificate_not_valid_after: t.string, + certificate_not_valid_before: t.string, + cipher: t.string, + established: t.boolean, + server: t.partial({ + hash: t.type({ + sha256: t.string, + sha1: t.string, + }), + x509: X509Type, + }), +}); + +export type Tls = t.TypeOf; + +export const MonitorType = t.intersection([ + t.type({ + id: t.string, + status: t.string, + type: t.string, + check_group: t.string, + }), + t.partial({ + duration: t.type({ + us: t.number, + }), + ip: t.string, + name: t.string, + timespan: t.type({ + gte: t.string, + lt: t.string, + }), + fleet_managed: t.boolean, + project: t.type({ + id: t.string, + name: t.string, + }), + }), +]); + +export type Monitor = t.TypeOf; + +export const PingHeadersType = t.record(t.string, t.union([t.string, t.array(t.string)])); + +export type PingHeaders = t.TypeOf; + +export const AgentType = t.intersection([ + t.type({ + ephemeral_id: t.string, + id: t.string, + type: t.string, + version: t.string, + }), + t.partial({ + name: t.string, + hostname: t.string, + }), +]); + +// should this be partial? +export const UrlType = t.partial({ + domain: t.string, + full: t.string, + port: t.number, + scheme: t.string, + path: t.string, +}); + +export const PingType = t.intersection([ + t.type({ + timestamp: t.string, + monitor: MonitorType, + docId: t.string, + }), + t.partial({ + agent: AgentType, + container: t.partial({ + id: t.string, + image: t.partial({ + name: t.string, + tag: t.string, + }), + name: t.string, + runtime: t.string, + }), + ecs: t.partial({ + version: t.string, + }), + error: PingErrorType, + http: t.partial({ + request: t.partial({ + body: t.partial({ + bytes: t.number, + content: t.partial({ + text: t.string, + }), + }), + bytes: t.number, + method: t.string, + referrer: t.string, + }), + response: t.partial({ + body: HttpResponseBodyType, + bytes: t.number, + redirects: t.array(t.string), + status_code: t.number, + headers: PingHeadersType, + }), + version: t.string, + }), + icmp: t.partial({ + requests: t.number, + rtt: t.partial({ + us: t.number, + }), + }), + kubernetes: t.partial({ + pod: t.partial({ + name: t.string, + uid: t.string, + }), + }), + observer: ObserverCodec, + resolve: t.partial({ + ip: t.string, + rtt: t.partial({ + us: t.number, + }), + }), + summary: t.partial({ + down: t.number, + up: t.number, + }), + synthetics: SyntheticsDataType, + tags: t.array(t.string), + tcp: t.partial({ + rtt: t.partial({ + connect: t.partial({ + us: t.number, + }), + }), + }), + tls: TlsType, + // should this be partial? + url: UrlType, + service: t.partial({ + name: t.string, + }), + config_id: t.string, + state: ErrorStateCodec, + data_stream: t.interface({ + namespace: t.string, + type: t.string, + dataset: t.string, + }), + }), +]); + +export const PingStateType = t.type({ + timestamp: t.string, + '@timestamp': t.string, + monitor: MonitorType, + docId: t.string, + state: ErrorStateCodec, + error: PingErrorType, +}); +export type Ping = t.TypeOf; +export type PingState = t.TypeOf; + +export const PingStatusType = t.intersection([ + t.type({ + timestamp: t.string, + docId: t.string, + config_id: t.string, + locationId: t.string, + summary: t.partial({ + down: t.number, + up: t.number, + }), + }), + t.partial({ + error: PingErrorType, + }), +]); + +export type PingStatus = t.TypeOf; + +// Convenience function for tests etc that makes an empty ping +// object with the minimum of fields. +export const makePing = (f: { + docId?: string; + type?: string; + id?: string; + timestamp?: string; + ip?: string; + status?: string; + duration?: number; + location?: string; + name?: string; + url?: string; +}): Ping => { + return { + docId: f.docId || 'myDocId', + timestamp: f.timestamp || '2020-07-07T01:14:08Z', + monitor: { + id: f.id || 'myId', + type: f.type || 'myType', + ip: f.ip || '127.0.0.1', + status: f.status || 'up', + duration: { us: f.duration || 100000 }, + name: f.name, + check_group: 'myCheckGroup', + }, + ...(f.location ? { observer: { geo: { name: f.location } } } : {}), + ...(f.url ? { url: { full: f.url } } : {}), + }; +}; + +export const PingsResponseType = t.type({ + total: t.number, + pings: t.array(PingType), +}); + +export type PingsResponse = t.TypeOf; + +export const PingStatusesResponseType = t.type({ + total: t.number, + pings: t.array(PingStatusType), + from: t.string, + to: t.string, +}); + +export type PingStatusesResponse = t.TypeOf; + +export const GetPingsParamsType = t.intersection([ + t.type({ + dateRange: DateRangeType, + }), + t.partial({ + excludedLocations: t.string, + index: t.number, + size: t.number, + pageIndex: t.number, + locations: t.string, + monitorId: t.string, + sort: t.string, + status: t.string, + }), +]); + +export type GetPingsParams = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.test.ts b/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.test.ts new file mode 100644 index 0000000000000..84f405d6ee494 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.test.ts @@ -0,0 +1,134 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + isRefResult, + isFullScreenshot, + isScreenshotRef, + isScreenshotImageBlob, + RefResult, + FullScreenshot, + ScreenshotImageBlob, + ScreenshotRefImageData, +} from './synthetics'; + +describe('synthetics runtime types', () => { + let refResult: RefResult; + let fullScreenshot: FullScreenshot; + let screenshotImageBlob: ScreenshotImageBlob; + let screenshotRef: ScreenshotRefImageData; + + beforeEach(() => { + refResult = { + '@timestamp': '123', + monitor: { + check_group: 'check-group', + }, + screenshot_ref: { + width: 1200, + height: 900, + blocks: [ + { + hash: 'hash1', + top: 0, + left: 0, + height: 120, + width: 90, + }, + { + hash: 'hash2', + top: 0, + left: 90, + height: 120, + width: 90, + }, + ], + }, + synthetics: { + package_version: 'v1', + step: { + name: 'step name', + index: 0, + }, + type: 'step/screenshot_ref', + }, + }; + + fullScreenshot = { + synthetics: { + blob: 'image data', + blob_mime: 'image/jpeg', + step: { + name: 'step name', + }, + type: 'step/screenshot', + }, + }; + + screenshotImageBlob = { + stepName: null, + maxSteps: 1, + src: 'image data', + }; + + screenshotRef = { + stepName: null, + maxSteps: 1, + ref: { + screenshotRef: refResult, + }, + }; + }); + + describe('isRefResult', () => { + it('identifies refs correctly', () => { + expect(isRefResult(refResult)).toBe(true); + }); + + it('fails objects that do not correspond to the type', () => { + expect(isRefResult(fullScreenshot)).toBe(false); + expect(isRefResult(screenshotRef)).toBe(false); + expect(isRefResult(screenshotImageBlob)).toBe(false); + }); + }); + + describe('isScreenshot', () => { + it('identifies screenshot objects correctly', () => { + expect(isFullScreenshot(fullScreenshot)).toBe(true); + }); + + it('fails objects that do not correspond to the type', () => { + expect(isFullScreenshot(refResult)).toBe(false); + expect(isFullScreenshot(screenshotRef)).toBe(false); + expect(isFullScreenshot(screenshotImageBlob)).toBe(false); + }); + }); + + describe('isScreenshotImageBlob', () => { + it('identifies screenshot image blob objects correctly', () => { + expect(isScreenshotImageBlob(screenshotImageBlob)).toBe(true); + }); + + it('fails objects that do not correspond to the type', () => { + expect(isScreenshotImageBlob(refResult)).toBe(false); + expect(isScreenshotImageBlob(screenshotRef)).toBe(false); + expect(isScreenshotImageBlob(fullScreenshot)).toBe(false); + }); + }); + + describe('isScreenshotRef', () => { + it('identifies screenshot ref objects correctly', () => { + expect(isScreenshotRef(screenshotRef)).toBe(true); + }); + + it('fails objects that do not correspond to the type', () => { + expect(isScreenshotRef(refResult)).toBe(false); + expect(isScreenshotRef(fullScreenshot)).toBe(false); + expect(isScreenshotRef(screenshotImageBlob)).toBe(false); + }); + }); +}); diff --git a/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.ts b/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.ts new file mode 100644 index 0000000000000..793e1c05f5f0c --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/ping/synthetics.ts @@ -0,0 +1,265 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isRight } from 'fp-ts/lib/Either'; +import * as t from 'io-ts'; +import { ObserverCodec } from './observer'; +import { ErrorStateCodec } from './error_state'; + +/** + * This type has some overlap with the Ping type, but it helps avoid runtime type + * check failures and removes a lot of unnecessary fields that our Synthetics UI code + * does not care about. + */ +export const SyntheticsDataType = t.partial({ + index: t.number, + journey: t.type({ + id: t.string, + name: t.string, + }), + error: t.partial({ + message: t.string, + name: t.string, + stack: t.string, + }), + package_version: t.string, + step: t.type({ + status: t.string, + index: t.number, + name: t.string, + duration: t.type({ + us: t.number, + }), + }), + type: t.string, + blob: t.string, + blob_mime: t.string, + payload: t.partial({ + duration: t.number, + index: t.number, + is_navigation_request: t.boolean, + message: t.string, + method: t.string, + name: t.string, + params: t.partial({ + homepage: t.string, + }), + source: t.string, + start: t.number, + status: t.string, + ts: t.number, + type: t.string, + url: t.string, + end: t.number, + text: t.string, + }), + isFullScreenshot: t.boolean, + isScreenshotRef: t.boolean, +}); + +export const JourneyStepType = t.intersection([ + t.partial({ + config_id: t.string, + monitor: t.partial({ + duration: t.type({ + us: t.number, + }), + name: t.string, + status: t.string, + type: t.string, + timespan: t.type({ + gte: t.string, + lt: t.string, + }), + }), + observer: ObserverCodec, + synthetics: SyntheticsDataType, + error: t.type({ + message: t.string, + }), + }), + t.type({ + _id: t.string, + '@timestamp': t.string, + monitor: t.type({ + id: t.string, + check_group: t.string, + }), + synthetics: t.type({ + type: t.string, + }), + }), +]); + +export type JourneyStep = t.TypeOf; + +export const FailedStepsApiResponseType = t.type({ + checkGroups: t.array(t.string), + steps: t.array(JourneyStepType), +}); + +export type FailedStepsApiResponse = t.TypeOf; + +/** + * The individual screenshot blocks Synthetics uses to reduce disk footprint. + */ +export const ScreenshotBlockType = t.type({ + hash: t.string, + top: t.number, + left: t.number, + height: t.number, + width: t.number, +}); + +/** + * The old style of screenshot document that contains a full screenshot blob. + */ +export const FullScreenshotType = t.type({ + synthetics: t.intersection([ + t.partial({ + blob: t.string, + blob_mime: t.string, + }), + t.type({ + step: t.type({ + name: t.string, + }), + type: t.literal('step/screenshot'), + }), + ]), +}); + +export type FullScreenshot = t.TypeOf; + +export function isFullScreenshot(data: unknown): data is FullScreenshot { + return isRight(FullScreenshotType.decode(data)); +} + +/** + * The ref used by synthetics to organize the blocks needed to recompose a + * fragmented image. + */ +export const RefResultType = t.type({ + '@timestamp': t.string, + monitor: t.type({ + check_group: t.string, + }), + screenshot_ref: t.type({ + width: t.number, + height: t.number, + blocks: t.array(ScreenshotBlockType), + }), + synthetics: t.type({ + package_version: t.string, + step: t.type({ + name: t.string, + index: t.number, + }), + type: t.literal('step/screenshot_ref'), + }), +}); + +export type RefResult = t.TypeOf; + +export function isRefResult(data: unknown): data is RefResult { + return isRight(RefResultType.decode(data)); +} + +/** + * Represents the result of querying for the legacy-style full screenshot blob. + */ +export const ScreenshotImageBlobType = t.type({ + stepName: t.union([t.null, t.string]), + maxSteps: t.number, + src: t.string, +}); + +export type ScreenshotImageBlob = t.TypeOf; + +export function isScreenshotImageBlob(data: unknown): data is ScreenshotImageBlob { + return isRight(ScreenshotImageBlobType.decode(data)); +} + +/** + * Represents the block blobs stored by hash. These documents are used to recompose synthetics images. + */ +export const ScreenshotBlockDocType = t.type({ + id: t.string, + synthetics: t.type({ + blob: t.string, + blob_mime: t.string, + }), +}); + +export type ScreenshotBlockDoc = t.TypeOf; + +export interface PendingBlock { + status: 'pending' | 'loading'; +} + +export type StoreScreenshotBlock = ScreenshotBlockDoc | PendingBlock; +export interface ScreenshotBlockCache { + [hash: string]: StoreScreenshotBlock; +} + +export function isScreenshotBlockDoc(data: unknown): data is ScreenshotBlockDoc { + return isRight(ScreenshotBlockDocType.decode(data)); +} + +export function isPendingBlock(data: unknown): data is PendingBlock { + return ['pending', 'loading'].some((s) => s === (data as PendingBlock)?.status); +} + +/** + * Contains the fields requried by the Synthetics UI when utilizing screenshot refs. + */ +export const ScreenshotRefImageDataType = t.type({ + stepName: t.union([t.null, t.string]), + maxSteps: t.number, + ref: t.type({ + screenshotRef: RefResultType, + }), +}); + +export type ScreenshotRefImageData = t.TypeOf; + +export function isScreenshotRef(data: unknown): data is ScreenshotRefImageData { + return isRight(ScreenshotRefImageDataType.decode(data)); +} + +export const SyntheticsJourneyApiResponseType = t.intersection([ + t.type({ + checkGroup: t.string, + steps: t.array(JourneyStepType), + }), + t.partial({ + details: t.union([ + t.intersection([ + t.type({ + timestamp: t.string, + journey: JourneyStepType, + }), + t.partial({ + next: t.type({ + timestamp: t.string, + checkGroup: t.string, + }), + previous: t.type({ + timestamp: t.string, + checkGroup: t.string, + }), + summary: t.type({ + state: ErrorStateCodec, + }), + }), + ]), + t.null, + ]), + }), +]); + +export type SyntheticsJourneyApiResponse = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/snapshot/index.ts b/x-pack/plugins/uptime/common/runtime_types/snapshot/index.ts new file mode 100644 index 0000000000000..15f190a0dacd2 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/snapshot/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type { Snapshot } from './snapshot_count'; +export { SnapshotType } from './snapshot_count'; diff --git a/x-pack/plugins/uptime/common/runtime_types/snapshot/snapshot_count.ts b/x-pack/plugins/uptime/common/runtime_types/snapshot/snapshot_count.ts new file mode 100644 index 0000000000000..1d9065218fdcf --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/snapshot/snapshot_count.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const SnapshotType = t.type({ + down: t.number, + total: t.number, + up: t.number, +}); + +export type Snapshot = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/runtime_types/synthetics_service_api_key.ts b/x-pack/plugins/uptime/common/runtime_types/synthetics_service_api_key.ts new file mode 100644 index 0000000000000..e216c0f791203 --- /dev/null +++ b/x-pack/plugins/uptime/common/runtime_types/synthetics_service_api_key.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +export const SyntheticsServiceApiKeyType = t.type({ + id: t.string, + name: t.string, + apiKey: t.string, +}); + +export const SyntheticsServiceApiKeySaveType = t.intersection([ + t.type({ + success: t.boolean, + }), + t.partial({ + error: t.string, + }), +]); + +export type SyntheticsServiceApiKey = t.TypeOf; +export type SyntheticsServiceApiKeySaveResponse = t.TypeOf; diff --git a/x-pack/plugins/uptime/common/saved_objects/private_locations.ts b/x-pack/plugins/uptime/common/saved_objects/private_locations.ts new file mode 100644 index 0000000000000..bb3639e816059 --- /dev/null +++ b/x-pack/plugins/uptime/common/saved_objects/private_locations.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const privateLocationsSavedObjectId = 'synthetics-privates-locations-singleton'; +export const privateLocationsSavedObjectName = 'synthetics-privates-locations'; diff --git a/x-pack/plugins/uptime/common/translations.ts b/x-pack/plugins/uptime/common/translations.ts new file mode 100644 index 0000000000000..3ac2a78658d71 --- /dev/null +++ b/x-pack/plugins/uptime/common/translations.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const VALUE_MUST_BE_GREATER_THAN_ZERO = i18n.translate( + 'xpack.uptime.settings.invalid.error', + { + defaultMessage: 'Value must be greater than 0.', + } +); + +export const VALUE_MUST_BE_AN_INTEGER = i18n.translate('xpack.uptime.settings.invalid.nanError', { + defaultMessage: 'Value must be an integer.', +}); diff --git a/x-pack/plugins/uptime/common/translations/translations.ts b/x-pack/plugins/uptime/common/translations/translations.ts new file mode 100644 index 0000000000000..2b51b55aed809 --- /dev/null +++ b/x-pack/plugins/uptime/common/translations/translations.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const URL_LABEL = i18n.translate('xpack.uptime.monitorList.table.url.name', { + defaultMessage: 'Url', +}); + +export const TAGS_LABEL = i18n.translate('xpack.uptime.monitorList.table.tags.name', { + defaultMessage: 'Tags', +}); + +export const PROJECT_LABEL = i18n.translate('xpack.uptime.monitorList.table.project.name', { + defaultMessage: 'Project ID', +}); + +export const STATUS_UP_LABEL = i18n.translate('xpack.uptime.monitorList.statusColumn.upLabel', { + defaultMessage: 'Up', +}); + +export const STATUS_DOWN_LABEL = i18n.translate('xpack.uptime.monitorList.statusColumn.downLabel', { + defaultMessage: 'Down', +}); + +export const STATUS_COMPLETE_LABEL = i18n.translate( + 'xpack.uptime.monitorList.statusColumn.completeLabel', + { + defaultMessage: 'Complete', + } +); + +export const STATUS_FAILED_LABEL = i18n.translate( + 'xpack.uptime.monitorList.statusColumn.failedLabel', + { + defaultMessage: 'Failed', + } +); + +export const SECONDS_LABEL = i18n.translate('xpack.uptime.seconds.label', { + defaultMessage: 'seconds', +}); + +export const SEC_LABEL = i18n.translate('xpack.uptime.seconds.shortForm.label', { + defaultMessage: 'sec', +}); + +export const MS_LABEL = i18n.translate('xpack.uptime.millisecond.abbreviation.label', { + defaultMessage: 'ms', +}); diff --git a/x-pack/plugins/uptime/common/types/index.ts b/x-pack/plugins/uptime/common/types/index.ts new file mode 100644 index 0000000000000..6a864b700092d --- /dev/null +++ b/x-pack/plugins/uptime/common/types/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './monitor_duration'; +export * from './synthetics_monitor'; +export * from './monitor_validation'; +export * from './integration_deprecation'; diff --git a/x-pack/plugins/uptime/common/types/integration_deprecation.ts b/x-pack/plugins/uptime/common/types/integration_deprecation.ts new file mode 100644 index 0000000000000..951de85c046b6 --- /dev/null +++ b/x-pack/plugins/uptime/common/types/integration_deprecation.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface SyntheticsHasIntegrationMonitorsResponse { + hasIntegrationMonitors: boolean; +} diff --git a/x-pack/plugins/uptime/common/types/monitor_duration.ts b/x-pack/plugins/uptime/common/types/monitor_duration.ts new file mode 100644 index 0000000000000..253adba03cdcf --- /dev/null +++ b/x-pack/plugins/uptime/common/types/monitor_duration.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** Represents the average monitor duration ms at a point in time. */ +export interface MonitorDurationAveragePoint { + /** The timeseries value for this point. */ + x: number; + /** The average duration ms for the monitor. */ + y?: number | null; +} + +export interface LocationDurationLine { + name: string; + + line: MonitorDurationAveragePoint[]; +} + +/** The data used to populate the monitor charts. */ +export interface MonitorDurationResult { + /** The average values for the monitor duration. */ + locationDurationLines: LocationDurationLine[]; +} diff --git a/x-pack/plugins/uptime/common/types/monitor_validation.ts b/x-pack/plugins/uptime/common/types/monitor_validation.ts new file mode 100644 index 0000000000000..09cf19cff4e48 --- /dev/null +++ b/x-pack/plugins/uptime/common/types/monitor_validation.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ConfigKey, MonitorFields, ThrottlingConfig } from '../runtime_types'; + +export type Validator = (config: Partial) => boolean; +export type NamespaceValidator = ( + config: Partial +) => false | string; + +export type ConfigValidation = Omit, ConfigKey.NAMESPACE> & + Record; + +export type Validation = Partial; diff --git a/x-pack/plugins/uptime/common/types/saved_objects.ts b/x-pack/plugins/uptime/common/types/saved_objects.ts new file mode 100644 index 0000000000000..4e0992f78ee0b --- /dev/null +++ b/x-pack/plugins/uptime/common/types/saved_objects.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const syntheticsMonitorType = 'synthetics-monitor'; +export const monitorAttributes = `${syntheticsMonitorType}.attributes`; + +export const syntheticsParamType = 'synthetics-param'; diff --git a/x-pack/plugins/uptime/common/types/synthetics_monitor.ts b/x-pack/plugins/uptime/common/types/synthetics_monitor.ts new file mode 100644 index 0000000000000..29afd67b7f6bb --- /dev/null +++ b/x-pack/plugins/uptime/common/types/synthetics_monitor.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SimpleSavedObject } from '@kbn/core/public'; +import { + Locations, + MonitorFields, + ServiceLocationErrors, + SyntheticsMonitor, + SyntheticsMonitorSchedule, +} from '../runtime_types'; + +export interface MonitorIdParam { + monitorId: string; +} + +export type DecryptedSyntheticsMonitorSavedObject = SimpleSavedObject & { + updated_at: string; +}; + +export interface TestNowResponse { + schedule: SyntheticsMonitorSchedule; + locations: Locations; + errors?: ServiceLocationErrors; + testRunId: string; + configId: string; + monitor: MonitorFields; +} diff --git a/x-pack/plugins/uptime/common/utils/as_mutable_array.ts b/x-pack/plugins/uptime/common/utils/as_mutable_array.ts new file mode 100644 index 0000000000000..ce1d7e607ec4c --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/as_mutable_array.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// Sometimes we use `as const` to have a more specific type, +// because TypeScript by default will widen the value type of an +// array literal. Consider the following example: +// +// const filter = [ +// { term: { 'agent.name': 'nodejs' } }, +// { range: { '@timestamp': { gte: 'now-15m ' }} +// ]; + +// The result value type will be: + +// const filter: ({ +// term: { +// 'agent.name'?: string +// }; +// range?: undefined +// } | { +// term?: undefined; +// range: { +// '@timestamp': { +// gte: string +// } +// } +// })[]; + +// This can sometimes leads to issues. In those cases, we can +// use `as const`. However, the Readonly type is not compatible +// with Array. This function returns a mutable version of a type. + +export function asMutableArray>( + arr: T +): T extends Readonly<[...infer U]> ? U : unknown[] { + return arr as any; +} diff --git a/x-pack/plugins/uptime/common/utils/es_search.ts b/x-pack/plugins/uptime/common/utils/es_search.ts new file mode 100644 index 0000000000000..6a41b83d19ee0 --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/es_search.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +export function createEsQuery(params: T): T { + return params; +} diff --git a/x-pack/plugins/uptime/common/utils/get_monitor_url.ts b/x-pack/plugins/uptime/common/utils/get_monitor_url.ts new file mode 100644 index 0000000000000..09b02150957d0 --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/get_monitor_url.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { stringify } from 'querystring'; + +export const format = ({ + pathname, + query, +}: { + pathname: string; + query: Record; +}): string => { + return `${pathname}?${stringify(query)}`; +}; + +export const getMonitorRouteFromMonitorId = ({ + monitorId, + dateRangeStart, + dateRangeEnd, + filters = {}, +}: { + monitorId: string; + dateRangeStart: string; + dateRangeEnd: string; + filters?: Record; +}) => + format({ + pathname: `/app/uptime/monitor/${btoa(monitorId)}`, + query: { + dateRangeEnd, + dateRangeStart, + ...(Object.keys(filters).length + ? { filters: JSON.stringify(Object.keys(filters).map((key) => [key, filters[key]])) } + : {}), + }, + }); diff --git a/x-pack/plugins/uptime/common/utils/get_synthetics_monitor_url.ts b/x-pack/plugins/uptime/common/utils/get_synthetics_monitor_url.ts new file mode 100644 index 0000000000000..007b0c5812dce --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/get_synthetics_monitor_url.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { format } from './get_monitor_url'; + +export const getSyntheticsErrorRouteFromMonitorId = ({ + configId, + stateId, + locationId, +}: { + stateId: string; + configId: string; + locationId: string; +}) => + format({ + pathname: encodeURI(`/app/synthetics/monitor/${configId}/errors/${stateId}`), + query: { + locationId, + }, + }); diff --git a/x-pack/plugins/uptime/common/utils/location_formatter.ts b/x-pack/plugins/uptime/common/utils/location_formatter.ts new file mode 100644 index 0000000000000..6eb441fa8ad23 --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/location_formatter.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PrivateLocation, ServiceLocation } from '../runtime_types'; + +export const formatLocation = (location: ServiceLocation | PrivateLocation) => { + return { + id: location.id, + label: location.label, + geo: location.geo, + isServiceManaged: location.isServiceManaged, + }; +}; diff --git a/x-pack/plugins/uptime/common/utils/t_enum.ts b/x-pack/plugins/uptime/common/utils/t_enum.ts new file mode 100644 index 0000000000000..e00a51dbdf438 --- /dev/null +++ b/x-pack/plugins/uptime/common/utils/t_enum.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; + +/** + * This utility function can be used to turn a TypeScript enum into a io-ts codec. + * + * @example + * import { PathReporter } from "io-ts/lib/PathReporter"; + * + * enum Thing { + * FOO = "foo", + * BAR = "bar" + * } + * + * const ThingCodec = tEnum("Thing", Thing); + * + * console.log(PathReporter.report(ThingCodec.decode('invalidvalue'))); + * // prints [ 'Invalid value "invalidvalue" supplied to : Thing' ] + * console.log(PathReporter.report(ThingCodec.decode('foo'))); + * // prints [ 'No errors!' ] + */ +export function tEnum(enumName: string, theEnum: Record) { + const isEnumValue = (input: unknown): input is EnumType => + Object.values(theEnum).includes(input); + + return new t.Type( + enumName, + isEnumValue, + (input, context) => (isEnumValue(input) ? t.success(input) : t.failure(input, context)), + t.identity + ); +} diff --git a/x-pack/plugins/uptime/e2e/README.md b/x-pack/plugins/uptime/e2e/README.md new file mode 100644 index 0000000000000..9a7617cd3d055 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/README.md @@ -0,0 +1,32 @@ +## How to run these tests + +These tests rely on the Kibana functional test runner. There is a Kibana config in this directory, and a dedicated +script for standing up the test server. + +### Start the server + +From `~/x-pack/plugins/synthetics/scripts`, run `node e2e.js --server`. Wait for the server to startup. It will provide you +with an example run command when it finishes. + +### Run the tests + +From the same directory you can now run `node node e2e.js --runner`. + +In addition to the usual flags like `--grep`, you can also specify `--no-headless` in order to view your tests as you debug/develop. + + +## Uptime App Tests + +These tests rely on the Kibana functional test runner. There is a Kibana config in this directory, and a dedicated +script for standing up the test server. + +### Start the server + +From `~/x-pack/plugins/synthetics/scripts`, run `node uptime_e2e.js --server`. Wait for the server to startup. It will provide you +with an example run command when it finishes. + +### Run the tests + +From the same directory you can now run `node node uptime_e2e.js --runner`. + +In addition to the usual flags like `--grep`, you can also specify `--no-headless` in order to view your tests as you debug/develop. diff --git a/x-pack/plugins/uptime/e2e/config.ts b/x-pack/plugins/uptime/e2e/config.ts new file mode 100644 index 0000000000000..3745680315dcf --- /dev/null +++ b/x-pack/plugins/uptime/e2e/config.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; +import { CA_CERT_PATH } from '@kbn/dev-utils'; +import { readKibanaConfig } from './tasks/read_kibana_config'; +const MANIFEST_KEY = 'xpack.uptime.service.manifestUrl'; +const SERVICE_PASSWORD = 'xpack.uptime.service.password'; +const SERVICE_USERNAME = 'xpack.uptime.service.username'; + +async function config({ readConfigFile }: FtrConfigProviderContext) { + const kibanaCommonTestsConfig = await readConfigFile( + require.resolve('../../../../test/common/config.js') + ); + const xpackFunctionalTestsConfig = await readConfigFile( + require.resolve('../../../test/functional/config.base.js') + ); + + const kibanaConfig = readKibanaConfig(); + + const manifestUrl = process.env.SYNTHETICS_SERVICE_MANIFEST ?? kibanaConfig[MANIFEST_KEY]; + const serviceUsername = process.env.SYNTHETICS_SERVICE_USERNAME ?? kibanaConfig[SERVICE_USERNAME]; + const servicePassword = process.env.SYNTHETICS_SERVICE_PASSWORD ?? kibanaConfig[SERVICE_PASSWORD]; + + return { + ...kibanaCommonTestsConfig.getAll(), + + esTestCluster: { + ...xpackFunctionalTestsConfig.get('esTestCluster'), + serverArgs: [ + ...xpackFunctionalTestsConfig.get('esTestCluster.serverArgs'), + // define custom es server here + // API Keys is enabled at the top level + 'xpack.security.enabled=true', + ], + }, + + kbnTestServer: { + ...xpackFunctionalTestsConfig.get('kbnTestServer'), + sourceArgs: process.env.WATCH_ENABLED + ? [] + : [...xpackFunctionalTestsConfig.get('kbnTestServer.sourceArgs'), '--no-watch'], + serverArgs: [ + ...xpackFunctionalTestsConfig.get('kbnTestServer.serverArgs'), + '--csp.strict=false', + '--home.disableWelcomeScreen=true', + '--csp.warnLegacyBrowsers=false', + // define custom kibana server args here + `--elasticsearch.ssl.certificateAuthorities=${CA_CERT_PATH}`, + // `--elasticsearch.ignoreVersionMismatch=${process.env.CI ? 'false' : 'true'}`, + `--elasticsearch.username=kibana_system`, + `--elasticsearch.password=changeme`, + '--xpack.reporting.enabled=false', + `--xpack.uptime.service.manifestUrl=${manifestUrl}`, + `--xpack.uptime.service.showExperimentalLocations=true`, + `--xpack.uptime.service.username=${ + process.env.SYNTHETICS_REMOTE_ENABLED + ? serviceUsername + : 'localKibanaIntegrationTestsUser' + }`, + `--xpack.uptime.service.password=${servicePassword}`, + `--xpack.uptime.service.showExperimentalLocations=${true}`, + '--uiSettings.overrides.observability:enableLegacyUptimeApp=true', + ], + }, + }; +} + +// eslint-disable-next-line import/no-default-export +export default config; diff --git a/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/data.json.gz b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/data.json.gz new file mode 100644 index 0000000000000..86b1b1cba1d29 Binary files /dev/null and b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/data.json.gz differ diff --git a/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/mappings.json b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/mappings.json new file mode 100644 index 0000000000000..c022a7ab04249 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/browser/mappings.json @@ -0,0 +1,7762 @@ +{ + "type": "index", + "value": { + "aliases": { + "heartbeat-8.1.0": { + "is_write_index": true + } + }, + "index": "heartbeat-8.1.0-2021.11.21-000001", + "mappings": { + "_meta": { + "beat": "heartbeat", + "version": "8.2.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.namespace.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.namespace.labels.*" + } + }, + { + "kubernetes.namespace.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.namespace.annotations.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "kubernetes.selectors.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.selectors.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "properties": { + "build": { + "properties": { + "original": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "target": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "data_stream": { + "properties": { + "dataset": { + "type": "constant_keyword" + }, + "namespace": { + "type": "constant_keyword" + }, + "type": { + "type": "constant_keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "type": "match_only_text" + }, + "stack_trace": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "agent_id_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "doc_values": false, + "ignore_above": 1024, + "index": false, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reason": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "faas": { + "properties": { + "coldstart": { + "type": "boolean" + }, + "execution": { + "ignore_above": 1024, + "type": "keyword" + }, + "trigger": { + "properties": { + "request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + } + } + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "cpu": { + "properties": { + "usage": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + }, + "disk": { + "properties": { + "read": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "write": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "network": { + "properties": { + "egress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + }, + "ingress": { + "properties": { + "bytes": { + "type": "long" + }, + "packets": { + "type": "long" + } + } + } + } + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + } + } + }, + "bytes": { + "type": "long" + }, + "has_post_data": { + "type": "boolean" + }, + "headers": { + "properties": { + "accept": { + "ignore_above": 1024, + "type": "keyword" + }, + "accept_encoding": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_request_headers": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_request_method": { + "ignore_above": 1024, + "type": "keyword" + }, + "authority": { + "ignore_above": 1024, + "type": "keyword" + }, + "authorization": { + "ignore_above": 1024, + "type": "keyword" + }, + "connection": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_length": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "cookie": { + "ignore_above": 1024, + "type": "keyword" + }, + "host": { + "ignore_above": 1024, + "type": "keyword" + }, + "if_modified_since": { + "ignore_above": 1024, + "type": "keyword" + }, + "if_none_match": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "purpose": { + "ignore_above": 1024, + "type": "keyword" + }, + "range": { + "ignore_above": 1024, + "type": "keyword" + }, + "referer": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua_mobile": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua_platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_dest": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_site": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_user": { + "ignore_above": 1024, + "type": "keyword" + }, + "traceparent": { + "ignore_above": 1024, + "type": "keyword" + }, + "upgrade_insecure_requests": { + "ignore_above": 1024, + "type": "keyword" + }, + "user_agent": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_client": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_client_version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "initial_priority": { + "ignore_above": 1024, + "type": "keyword" + }, + "is_link_preload": { + "type": "boolean" + }, + "is_same_site": { + "type": "boolean" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mixed_content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "post_data": { + "ignore_above": 1024, + "type": "keyword" + }, + "post_data_entries": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "connection_id": { + "type": "long" + }, + "connection_reused": { + "type": "boolean" + }, + "encoded_data_length": { + "type": "long" + }, + "from_disk_cache": { + "type": "boolean" + }, + "from_prefetch_cache": { + "type": "boolean" + }, + "from_service_worker": { + "type": "boolean" + }, + "headers": { + "properties": { + "*": { + "enabled": false, + "type": "object" + }, + "accept_ranges": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_allow_credentials": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_allow_headers": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_allow_methods": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_allow_origin": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_expose_headers": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_max_age": { + "ignore_above": 1024, + "type": "keyword" + }, + "access_control_request_method": { + "ignore_above": 1024, + "type": "keyword" + }, + "age": { + "ignore_above": 1024, + "type": "keyword" + }, + "alt_svc": { + "ignore_above": 1024, + "type": "keyword" + }, + "bfcache_opt_in": { + "ignore_above": 1024, + "type": "keyword" + }, + "cache_control": { + "ignore_above": 1024, + "type": "keyword" + }, + "cached": { + "ignore_above": 1024, + "type": "keyword" + }, + "cf_cache_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "cf_ray": { + "ignore_above": 1024, + "type": "keyword" + }, + "connection": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_disposition": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_encoding": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_language": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_length": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_range": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_security_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_security_policy_report_only": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "cross_origin_opener_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "cross_origin_opener_policy_report_only": { + "ignore_above": 1024, + "type": "keyword" + }, + "cross_origin_resource_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "date": { + "ignore_above": 1024, + "type": "keyword" + }, + "e_tag": { + "ignore_above": 1024, + "type": "keyword" + }, + "elastic_vi": { + "ignore_above": 1024, + "type": "keyword" + }, + "etag": { + "ignore_above": 1024, + "type": "keyword" + }, + "expect_ct": { + "ignore_above": 1024, + "type": "keyword" + }, + "expires": { + "ignore_above": 1024, + "type": "keyword" + }, + "fastly_io_error": { + "ignore_above": 1024, + "type": "keyword" + }, + "fastly_io_info": { + "ignore_above": 1024, + "type": "keyword" + }, + "fastly_io_warning": { + "ignore_above": 1024, + "type": "keyword" + }, + "fastly_stats": { + "ignore_above": 1024, + "type": "keyword" + }, + "last_modified": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "ignore_above": 1024, + "type": "keyword" + }, + "p3p": { + "ignore_above": 1024, + "type": "keyword" + }, + "permissions_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer_policy": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_to": { + "ignore_above": 1024, + "type": "keyword" + }, + "request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "server": { + "ignore_above": 1024, + "type": "keyword" + }, + "server_timing": { + "ignore_above": 1024, + "type": "keyword" + }, + "set_cookie": { + "ignore_above": 1024, + "type": "keyword" + }, + "source_age": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "strict_transport_security": { + "ignore_above": 1024, + "type": "keyword" + }, + "timing_allow_origin": { + "ignore_above": 1024, + "type": "keyword" + }, + "transfer_encoding": { + "ignore_above": 1024, + "type": "keyword" + }, + "vary": { + "ignore_above": 1024, + "type": "keyword" + }, + "via": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_cf_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_cf_pop": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_id_2": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_meta_pci_enabled": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_meta_revision": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_replication_status": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_server_side_encryption": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_storage_class": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_amz_version_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_cache": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_cache_hits": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_cdn": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_change_language": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_china": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_cloud_request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_content_type_options": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_contentstack_organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_cs_surrogate_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_dns_prefetch_control": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_download_options": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_fastly_request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_found_handling_cluster": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_found_handling_instance": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_frame_options": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_github_request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_influxdb_build": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_influxdb_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_permitted_cross_domain_policies": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_powered_by": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_ratelimit_limit": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_ratelimit_remaining": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_request_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_runtime": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_served_by": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_backend_datacenter": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_backend_node": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_backend_region": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_edge_datacenter": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_edge_node": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_frontend_datacenter": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_swiftype_frontend_node": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_timer": { + "ignore_above": 1024, + "type": "keyword" + }, + "x_xss_protection": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "redirects": { + "ignore_above": 1024, + "type": "keyword" + }, + "remote_i_p_address": { + "ignore_above": 1024, + "type": "keyword" + }, + "remote_port": { + "type": "long" + }, + "request_headers": { + "properties": { + "accept": { + "ignore_above": 1024, + "type": "keyword" + }, + "accept_encoding": { + "ignore_above": 1024, + "type": "keyword" + }, + "authority": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_length": { + "ignore_above": 1024, + "type": "keyword" + }, + "content_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "cookie": { + "ignore_above": 1024, + "type": "keyword" + }, + "if_none_match": { + "ignore_above": 1024, + "type": "keyword" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "referer": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua_mobile": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_ch_ua_platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_dest": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_site": { + "ignore_above": 1024, + "type": "keyword" + }, + "sec_fetch_user": { + "ignore_above": 1024, + "type": "keyword" + }, + "traceparent": { + "ignore_above": 1024, + "type": "keyword" + }, + "upgrade_insecure_requests": { + "ignore_above": 1024, + "type": "keyword" + }, + "user_agent": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response_time": { + "type": "float" + }, + "security_details": { + "properties": { + "certificate_id": { + "type": "long" + }, + "certificate_transparency_compliance": { + "ignore_above": 1024, + "type": "keyword" + }, + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "key_exchange": { + "ignore_above": 1024, + "type": "keyword" + }, + "key_exchange_group": { + "ignore_above": 1024, + "type": "keyword" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "san_list": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "valid_from": { + "type": "float" + }, + "valid_to": { + "type": "float" + } + } + }, + "security_state": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "type": "long" + }, + "status_code": { + "type": "long" + }, + "status_text": { + "ignore_above": 1024, + "type": "keyword" + }, + "timing": { + "properties": { + "connect_end": { + "type": "float" + }, + "connect_start": { + "type": "float" + }, + "dns_end": { + "type": "float" + }, + "dns_start": { + "type": "float" + }, + "proxy_end": { + "type": "long" + }, + "proxy_start": { + "type": "long" + }, + "push_end": { + "type": "long" + }, + "push_start": { + "type": "long" + }, + "receive_headers_end": { + "type": "float" + }, + "request_time": { + "type": "float" + }, + "send_end": { + "type": "float" + }, + "send_start": { + "type": "float" + }, + "ssl_end": { + "type": "float" + }, + "ssl_start": { + "type": "float" + }, + "worker_fetch_start": { + "type": "long" + }, + "worker_ready": { + "type": "long" + }, + "worker_respond_with_settled": { + "type": "long" + }, + "worker_start": { + "type": "long" + } + } + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "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": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "icmp": { + "properties": { + "requests": { + "type": "long" + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jolokia": { + "properties": { + "agent": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "secured": { + "type": "boolean" + }, + "server": { + "properties": { + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "kubernetes": { + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "node": { + "properties": { + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "ip": { + "type": "ip" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "selectors": { + "properties": { + "*": { + "type": "object" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "type": "object" + }, + "log": { + "properties": { + "file": { + "properties": { + "path": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "type": "match_only_text" + }, + "monitor": { + "properties": { + "check_group": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "fields": { + "text": { + "analyzer": "simple", + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "name": { + "fields": { + "text": { + "analyzer": "simple", + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "timespan": { + "type": "date_range" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "orchestrator": { + "properties": { + "api_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "cluster": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "end": { + "type": "date" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "hosts": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolve": { + "properties": { + "ip": { + "type": "ip" + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "screenshot_ref": { + "properties": { + "blocks": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "height": { + "type": "long" + }, + "left": { + "type": "long" + }, + "top": { + "type": "long" + }, + "width": { + "type": "long" + } + } + }, + "height": { + "type": "long" + }, + "width": { + "type": "long" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "origin": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "socks5": { + "properties": { + "rtt": { + "properties": { + "connect": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "source": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "summary": { + "properties": { + "down": { + "type": "long" + }, + "up": { + "type": "long" + } + } + }, + "synthetics": { + "properties": { + "blob": { + "type": "binary" + }, + "blob_mime": { + "ignore_above": 1024, + "type": "keyword" + }, + "browser": { + "properties": { + "experience": { + "properties": { + "cls": { + "type": "long" + }, + "dcl": { + "properties": { + "us": { + "type": "long" + } + } + }, + "fcp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "lcp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "load": { + "properties": { + "duration": { + "type": "long" + } + } + } + } + }, + "relative_trace": { + "properties": { + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "score": { + "type": "long" + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "type": { + "norms": false, + "type": "text" + } + } + } + } + }, + "error": { + "properties": { + "message": { + "norms": false, + "type": "text" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "stack": { + "norms": false, + "type": "text" + } + } + }, + "index": { + "type": "long" + }, + "journey": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "norms": false, + "type": "text" + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "payload": { + "enabled": false, + "type": "object" + }, + "screenshot_ref": { + "dynamic": "false", + "properties": { + "blocks": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "height": { + "type": "long" + }, + "width": { + "type": "long" + } + } + }, + "step": { + "properties": { + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "index": { + "type": "long" + }, + "name": { + "fields": { + "keyword": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "norms": false, + "type": "text" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "tcp": { + "properties": { + "rtt": { + "properties": { + "connect": { + "properties": { + "us": { + "type": "long" + } + } + }, + "validate": { + "properties": { + "us": { + "type": "long" + } + } + } + } + } + } + }, + "threat": { + "properties": { + "enrichments": { + "properties": { + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "matched": { + "properties": { + "atomic": { + "ignore_above": 1024, + "type": "keyword" + }, + "field": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "index": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "indicator": { + "properties": { + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "confidence": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "digest_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "exists": { + "type": "boolean" + }, + "signing_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "team_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "elf": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "byte_order": { + "ignore_above": 1024, + "type": "keyword" + }, + "cpu_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "creation_date": { + "type": "date" + }, + "exports": { + "type": "flattened" + }, + "header": { + "properties": { + "abi_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "entrypoint": { + "type": "long" + }, + "object_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "os_abi": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "imports": { + "type": "flattened" + }, + "sections": { + "properties": { + "chi2": { + "type": "long" + }, + "entropy": { + "type": "long" + }, + "flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_offset": { + "ignore_above": 1024, + "type": "keyword" + }, + "physical_size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "virtual_address": { + "type": "long" + }, + "virtual_size": { + "type": "long" + } + }, + "type": "nested" + }, + "segments": { + "properties": { + "sections": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + }, + "type": "nested" + }, + "shared_libraries": { + "ignore_above": 1024, + "type": "keyword" + }, + "telfhash": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fork_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + }, + "ssdeep": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "imphash": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "first_seen": { + "type": "date" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "postal_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "last_seen": { + "type": "date" + }, + "marking": { + "properties": { + "tlp": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "modified_at": { + "type": "date" + }, + "port": { + "type": "long" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "wildcard" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "scanner_stats": { + "type": "long" + }, + "sightings": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "software": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platforms": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "subtechnique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tls": { + "properties": { + "certificate_not_valid_after": { + "type": "date" + }, + "certificate_not_valid_before": { + "type": "date" + }, + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "rtt": { + "properties": { + "handshake": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "wildcard" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "wildcard" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "properties": { + "changes": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "effective": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + }, + "target": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "roles": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "type": "match_only_text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "x509": { + "properties": { + "alternative_names": { + "ignore_above": 1024, + "type": "keyword" + }, + "issuer": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "public_key_exponent": { + "doc_values": false, + "index": false, + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "signature_algorithm": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "properties": { + "common_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country": { + "ignore_above": 1024, + "type": "keyword" + }, + "distinguished_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "locality": { + "ignore_above": 1024, + "type": "keyword" + }, + "organization": { + "ignore_above": 1024, + "type": "keyword" + }, + "organizational_unit": { + "ignore_above": 1024, + "type": "keyword" + }, + "state_or_province": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version_number": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "name": "heartbeat", + "rollover_alias": "heartbeat-8.1.0" + }, + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "max_docvalue_fields_search": "200", + "number_of_replicas": "1", + "number_of_shards": "1", + "refresh_interval": "5s" + } + } + } +} diff --git a/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/data.json.gz b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/data.json.gz new file mode 100644 index 0000000000000..250db8c8471d7 Binary files /dev/null and b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/data.json.gz differ diff --git a/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/mappings.json b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/mappings.json new file mode 100644 index 0000000000000..97b72510da286 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/full_heartbeat/mappings.json @@ -0,0 +1,3795 @@ +{ + "type": "index", + "value": { + "aliases": { + "heartbeat-8.0.0-full": { + "is_write_index": true + } + }, + "index": "heartbeat-8-full-test", + "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" + } + } + }, + { + "dns.answers": { + "path_match": "dns.answers.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "log.syslog": { + "path_match": "log.syslog.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "network.inner": { + "path_match": "network.inner.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "observer.egress": { + "path_match": "observer.egress.*", + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + }, + { + "observer.ingress": { + "path_match": "observer.ingress.*", + "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" + } + } + }, + { + "kubernetes.labels.*": { + "path_match": "kubernetes.labels.*", + "mapping": { + "type": "keyword" + } + } + }, + { + "kubernetes.annotations.*": { + "path_match": "kubernetes.annotations.*", + "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 + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + } + } + }, + "client": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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 + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "availability_zone": { + "type": "keyword", + "ignore_above": 1024 + }, + "image": { + "properties": { + "id": { + "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 + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "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 + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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 + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha512": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "pe": { + "properties": { + "company": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "file_version": { + "type": "keyword", + "ignore_above": 1024 + }, + "original_file_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "product": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "type": "keyword", + "ignore_above": 1024 + }, + "data": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "ttl": { + "type": "long" + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "header_flags": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "op_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "question": { + "properties": { + "class": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "subdomain": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "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 + }, + "stack_trace": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "event": { + "properties": { + "action": { + "type": "keyword", + "ignore_above": 1024 + }, + "category": { + "type": "keyword", + "ignore_above": 1024 + }, + "code": { + "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 + }, + "ingested": { + "type": "date" + }, + "kind": { + "type": "keyword", + "ignore_above": 1024 + }, + "module": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + }, + "outcome": { + "type": "keyword", + "ignore_above": 1024 + }, + "provider": { + "type": "keyword", + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "url": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "type": "keyword", + "ignore_above": 1024 + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "type": "keyword", + "ignore_above": 1024 + }, + "directory": { + "type": "keyword", + "ignore_above": 1024 + }, + "drive_letter": { + "type": "keyword", + "ignore_above": 1 + }, + "extension": { + "type": "keyword", + "ignore_above": 1024 + }, + "gid": { + "type": "keyword", + "ignore_above": 1024 + }, + "group": { + "type": "keyword", + "ignore_above": 1024 + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha512": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "inode": { + "type": "keyword", + "ignore_above": 1024 + }, + "mime_type": { + "type": "keyword", + "ignore_above": 1024 + }, + "mode": { + "type": "keyword", + "ignore_above": 1024 + }, + "mtime": { + "type": "date" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "owner": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "pe": { + "properties": { + "company": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "file_version": { + "type": "keyword", + "ignore_above": 1024 + }, + "original_file_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "product": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha512": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "host": { + "properties": { + "architecture": { + "type": "keyword", + "ignore_above": 1024 + }, + "containerized": { + "type": "boolean" + }, + "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 + } + } + }, + "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 + }, + "codename": { + "type": "keyword", + "ignore_above": 1024 + }, + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + } + } + }, + "http": { + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "hash": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "bytes": { + "type": "long" + }, + "redirects": { + "type": "keyword", + "ignore_above": 1024 + }, + "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" + } + } + } + } + }, + "interface": { + "properties": { + "alias": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "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": { + "properties": { + "*": { + "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": { + "properties": { + "*": { + "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 + }, + "logger": { + "type": "keyword", + "ignore_above": 1024 + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "function": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "original": { + "type": "keyword", + "ignore_above": 1024 + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "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", + "fields": { + "text": { + "type": "text", + "norms": false, + "analyzer": "simple" + } + }, + "ignore_above": 1024 + }, + "ip": { + "type": "ip" + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false, + "analyzer": "simple" + } + }, + "ignore_above": 1024 + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "timespan": { + "type": "date_range" + }, + "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 + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "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 + }, + "vlan": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "observer": { + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "vlan": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "zone": { + "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 + } + } + }, + "hostname": { + "type": "keyword", + "ignore_above": 1024 + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "vlan": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "zone": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "product": { + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "package": { + "properties": { + "architecture": { + "type": "keyword", + "ignore_above": 1024 + }, + "build_version": { + "type": "keyword", + "ignore_above": 1024 + }, + "checksum": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "install_scope": { + "type": "keyword", + "ignore_above": 1024 + }, + "installed": { + "type": "date" + }, + "license": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + }, + "size": { + "type": "long" + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "pe": { + "properties": { + "company": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "file_version": { + "type": "keyword", + "ignore_above": 1024 + }, + "original_file_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "product": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "process": { + "properties": { + "args": { + "type": "keyword", + "ignore_above": 1024 + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "entity_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "executable": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha512": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "parent": { + "properties": { + "args": { + "type": "keyword", + "ignore_above": 1024 + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "entity_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "executable": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha512": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "title": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + }, + "pe": { + "properties": { + "company": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "file_version": { + "type": "keyword", + "ignore_above": 1024 + }, + "original_file_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "product": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "title": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "type": "keyword", + "ignore_above": 1024 + }, + "strings": { + "type": "keyword", + "ignore_above": 1024 + }, + "type": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "hive": { + "type": "keyword", + "ignore_above": 1024 + }, + "key": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "value": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "related": { + "properties": { + "hash": { + "type": "keyword", + "ignore_above": 1024 + }, + "ip": { + "type": "ip" + }, + "user": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "resolve": { + "properties": { + "ip": { + "type": "ip" + }, + "rtt": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "rule": { + "properties": { + "author": { + "type": "keyword", + "ignore_above": 1024 + }, + "category": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "license": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + }, + "ruleset": { + "type": "keyword", + "ignore_above": 1024 + }, + "uuid": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "server": { + "properties": { + "address": { + "type": "keyword", + "ignore_above": 1024 + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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 + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + } + } + }, + "service": { + "properties": { + "ephemeral_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "node": { + "properties": { + "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 + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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 + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "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" + } + } + } + } + } + } + }, + "threat": { + "properties": { + "framework": { + "type": "keyword", + "ignore_above": 1024 + }, + "tactic": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "technique": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "tls": { + "properties": { + "certificate_not_valid_after": { + "type": "date" + }, + "certificate_not_valid_before": { + "type": "date" + }, + "cipher": { + "type": "keyword", + "ignore_above": 1024 + }, + "client": { + "properties": { + "certificate": { + "type": "keyword", + "ignore_above": 1024 + }, + "certificate_chain": { + "type": "keyword", + "ignore_above": 1024 + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "issuer": { + "type": "keyword", + "ignore_above": 1024 + }, + "ja3": { + "type": "keyword", + "ignore_above": 1024 + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject": { + "type": "keyword", + "ignore_above": 1024 + }, + "supported_ciphers": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "curve": { + "type": "keyword", + "ignore_above": 1024 + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "type": "keyword", + "ignore_above": 1024 + }, + "resumed": { + "type": "boolean" + }, + "rtt": { + "properties": { + "handshake": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "server": { + "properties": { + "certificate": { + "type": "keyword", + "ignore_above": 1024 + }, + "certificate_chain": { + "type": "keyword", + "ignore_above": 1024 + }, + "hash": { + "properties": { + "md5": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha1": { + "type": "keyword", + "ignore_above": 1024 + }, + "sha256": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "issuer": { + "type": "keyword", + "ignore_above": 1024 + }, + "ja3s": { + "type": "keyword", + "ignore_above": 1024 + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "type": "keyword", + "ignore_above": 1024 + }, + "x509": { + "properties": { + "alternative_names": { + "type": "keyword", + "ignore_above": 1024 + }, + "issuer": { + "properties": { + "common_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false, + "analyzer": "simple" + } + }, + "ignore_above": 1024 + }, + "distinguished_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "public_key_algorithm": { + "type": "keyword", + "ignore_above": 1024 + }, + "public_key_curve": { + "type": "keyword", + "ignore_above": 1024 + }, + "public_key_exponent": { + "type": "long" + }, + "public_key_size": { + "type": "long" + }, + "serial_number": { + "type": "keyword", + "ignore_above": 1024 + }, + "signature_algorithm": { + "type": "keyword", + "ignore_above": 1024 + }, + "subject": { + "properties": { + "common_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false, + "analyzer": "simple" + } + }, + "ignore_above": 1024 + }, + "distinguished_name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "version_number": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + }, + "version_protocol": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "transaction": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "url": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "extension": { + "type": "keyword", + "ignore_above": 1024 + }, + "fragment": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "password": { + "type": "keyword", + "ignore_above": 1024 + }, + "path": { + "type": "keyword", + "ignore_above": 1024 + }, + "port": { + "type": "long" + }, + "query": { + "type": "keyword", + "ignore_above": 1024 + }, + "registered_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "scheme": { + "type": "keyword", + "ignore_above": 1024 + }, + "top_level_domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "username": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "user": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "email": { + "type": "keyword", + "ignore_above": 1024 + }, + "full_name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "group": { + "properties": { + "domain": { + "type": "keyword", + "ignore_above": 1024 + }, + "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", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + } + } + }, + "user_agent": { + "properties": { + "device": { + "properties": { + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + }, + "original": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "os": { + "properties": { + "family": { + "type": "keyword", + "ignore_above": 1024 + }, + "full": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "kernel": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "platform": { + "type": "keyword", + "ignore_above": 1024 + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "vlan": { + "properties": { + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "name": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "vulnerability": { + "properties": { + "category": { + "type": "keyword", + "ignore_above": 1024 + }, + "classification": { + "type": "keyword", + "ignore_above": 1024 + }, + "description": { + "type": "keyword", + "fields": { + "text": { + "type": "text", + "norms": false + } + }, + "ignore_above": 1024 + }, + "enumeration": { + "type": "keyword", + "ignore_above": 1024 + }, + "id": { + "type": "keyword", + "ignore_above": 1024 + }, + "reference": { + "type": "keyword", + "ignore_above": 1024 + }, + "report_id": { + "type": "keyword", + "ignore_above": 1024 + }, + "scanner": { + "properties": { + "vendor": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "type": "keyword", + "ignore_above": 1024 + } + } + }, + "severity": { + "type": "keyword", + "ignore_above": 1024 + } + } + } + } + }, + "settings": { + "index": { + "mapping": { + "total_fields": { + "limit": "10000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "query": { + "default_field": [ + "message", + "tags", + "agent.ephemeral_id", + "agent.id", + "agent.name", + "agent.type", + "agent.version", + "as.organization.name", + "client.address", + "client.as.organization.name", + "client.domain", + "client.geo.city_name", + "client.geo.continent_name", + "client.geo.country_iso_code", + "client.geo.country_name", + "client.geo.name", + "client.geo.region_iso_code", + "client.geo.region_name", + "client.mac", + "client.user.domain", + "client.user.email", + "client.user.full_name", + "client.user.group.id", + "client.user.group.name", + "client.user.hash", + "client.user.id", + "client.user.name", + "cloud.account.id", + "cloud.availability_zone", + "cloud.instance.id", + "cloud.instance.name", + "cloud.machine.type", + "cloud.provider", + "cloud.region", + "container.id", + "container.image.name", + "container.image.tag", + "container.name", + "container.runtime", + "destination.address", + "destination.as.organization.name", + "destination.domain", + "destination.geo.city_name", + "destination.geo.continent_name", + "destination.geo.country_iso_code", + "destination.geo.country_name", + "destination.geo.name", + "destination.geo.region_iso_code", + "destination.geo.region_name", + "destination.mac", + "destination.user.domain", + "destination.user.email", + "destination.user.full_name", + "destination.user.group.id", + "destination.user.group.name", + "destination.user.hash", + "destination.user.id", + "destination.user.name", + "dns.answers.class", + "dns.answers.data", + "dns.answers.name", + "dns.answers.type", + "dns.header_flags", + "dns.id", + "dns.op_code", + "dns.question.class", + "dns.question.name", + "dns.question.registered_domain", + "dns.question.type", + "dns.response_code", + "dns.type", + "ecs.version", + "error.code", + "error.id", + "error.message", + "event.action", + "event.category", + "event.code", + "event.dataset", + "event.hash", + "event.id", + "event.kind", + "event.module", + "event.original", + "event.outcome", + "event.provider", + "event.timezone", + "event.type", + "file.device", + "file.directory", + "file.extension", + "file.gid", + "file.group", + "file.hash.md5", + "file.hash.sha1", + "file.hash.sha256", + "file.hash.sha512", + "file.inode", + "file.mode", + "file.name", + "file.owner", + "file.path", + "file.target_path", + "file.type", + "file.uid", + "geo.city_name", + "geo.continent_name", + "geo.country_iso_code", + "geo.country_name", + "geo.name", + "geo.region_iso_code", + "geo.region_name", + "group.id", + "group.name", + "hash.md5", + "hash.sha1", + "hash.sha256", + "hash.sha512", + "host.architecture", + "host.geo.city_name", + "host.geo.continent_name", + "host.geo.country_iso_code", + "host.geo.country_name", + "host.geo.name", + "host.geo.region_iso_code", + "host.geo.region_name", + "host.hostname", + "host.id", + "host.mac", + "host.name", + "host.os.family", + "host.os.full", + "host.os.kernel", + "host.os.name", + "host.os.platform", + "host.os.version", + "host.type", + "host.user.domain", + "host.user.email", + "host.user.full_name", + "host.user.group.id", + "host.user.group.name", + "host.user.hash", + "host.user.id", + "host.user.name", + "http.request.body.content", + "http.request.method", + "http.request.referrer", + "http.response.body.content", + "http.version", + "log.level", + "log.logger", + "log.original", + "network.application", + "network.community_id", + "network.direction", + "network.iana_number", + "network.name", + "network.protocol", + "network.transport", + "network.type", + "observer.geo.city_name", + "observer.geo.continent_name", + "observer.geo.country_iso_code", + "observer.geo.country_name", + "observer.geo.name", + "observer.geo.region_iso_code", + "observer.geo.region_name", + "observer.hostname", + "observer.mac", + "observer.os.family", + "observer.os.full", + "observer.os.kernel", + "observer.os.name", + "observer.os.platform", + "observer.os.version", + "observer.serial_number", + "observer.type", + "observer.vendor", + "observer.version", + "organization.id", + "organization.name", + "os.family", + "os.full", + "os.kernel", + "os.name", + "os.platform", + "os.version", + "process.args", + "process.executable", + "process.hash.md5", + "process.hash.sha1", + "process.hash.sha256", + "process.hash.sha512", + "process.name", + "process.thread.name", + "process.title", + "process.working_directory", + "server.address", + "server.as.organization.name", + "server.domain", + "server.geo.city_name", + "server.geo.continent_name", + "server.geo.country_iso_code", + "server.geo.country_name", + "server.geo.name", + "server.geo.region_iso_code", + "server.geo.region_name", + "server.mac", + "server.user.domain", + "server.user.email", + "server.user.full_name", + "server.user.group.id", + "server.user.group.name", + "server.user.hash", + "server.user.id", + "server.user.name", + "service.ephemeral_id", + "service.id", + "service.name", + "service.state", + "service.type", + "service.version", + "source.address", + "source.as.organization.name", + "source.domain", + "source.geo.city_name", + "source.geo.continent_name", + "source.geo.country_iso_code", + "source.geo.country_name", + "source.geo.name", + "source.geo.region_iso_code", + "source.geo.region_name", + "source.mac", + "source.user.domain", + "source.user.email", + "source.user.full_name", + "source.user.group.id", + "source.user.group.name", + "source.user.hash", + "source.user.id", + "source.user.name", + "tracing.trace.id", + "tracing.transaction.id", + "url.domain", + "url.fragment", + "url.full", + "url.original", + "url.password", + "url.path", + "url.query", + "url.scheme", + "url.username", + "user.domain", + "user.email", + "user.full_name", + "user.group.id", + "user.group.name", + "user.hash", + "user.id", + "user.name", + "user_agent.device.name", + "user_agent.name", + "user_agent.original", + "user_agent.os.family", + "user_agent.os.full", + "user_agent.os.kernel", + "user_agent.os.name", + "user_agent.os.platform", + "user_agent.os.version", + "user_agent.version", + "agent.hostname", + "error.type", + "timeseries.instance", + "cloud.project.id", + "cloud.image.id", + "host.os.build", + "host.os.codename", + "kubernetes.pod.name", + "kubernetes.pod.uid", + "kubernetes.namespace", + "kubernetes.node.name", + "kubernetes.replicaset.name", + "kubernetes.deployment.name", + "kubernetes.statefulset.name", + "kubernetes.container.name", + "kubernetes.container.image", + "jolokia.agent.version", + "jolokia.agent.id", + "jolokia.server.product", + "jolokia.server.version", + "jolokia.server.vendor", + "jolokia.url", + "monitor.type", + "monitor.name", + "monitor.id", + "monitor.status", + "monitor.check_group", + "http.response.body.hash", + "fields.*" + ] + }, + "refresh_interval": "5s" + } + } + } +} diff --git a/x-pack/plugins/uptime/e2e/fixtures/es_archiver/synthetics_data/data.json.gz b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/synthetics_data/data.json.gz new file mode 100644 index 0000000000000..f45419e4ada6d Binary files /dev/null and b/x-pack/plugins/uptime/e2e/fixtures/es_archiver/synthetics_data/data.json.gz differ diff --git a/x-pack/plugins/uptime/e2e/helpers/make_checks.ts b/x-pack/plugins/uptime/e2e/helpers/make_checks.ts new file mode 100644 index 0000000000000..534a486e085ce --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/make_checks.ts @@ -0,0 +1,182 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidv4 } from 'uuid'; +import { merge, flattenDeep } from 'lodash'; +import type { Client } from '@elastic/elasticsearch'; +import { makePing } from './make_ping'; +import { TlsProps } from './make_tls'; + +interface CheckProps { + es: Client; + monitorId?: string; + numIps?: number; + fields?: { [key: string]: any }; + mogrify?: (doc: any) => any; + refresh?: boolean; + tls?: boolean | TlsProps; + isFleetManaged?: boolean; +} + +const getRandomMonitorId = () => { + return 'monitor-' + Math.random().toString(36).substring(7); +}; +export const makeCheck = async ({ + es, + monitorId = getRandomMonitorId(), + numIps = 1, + fields = {}, + mogrify = (d) => d, + refresh = true, + tls = false, + isFleetManaged = false, +}: CheckProps): Promise<{ monitorId: string; docs: any }> => { + const cgFields = { + monitor: { + check_group: uuidv4(), + }, + }; + + const docs = []; + const summary = { + up: 0, + down: 0, + }; + for (let i = 0; i < numIps; i++) { + const pingFields = merge(fields, cgFields, { + monitor: { + ip: `127.0.0.${i}`, + }, + }); + if (i === numIps - 1) { + pingFields.summary = summary; + } + const doc = await makePing( + es, + monitorId, + pingFields, + mogrify, + false, + tls as any, + isFleetManaged + ); + docs.push(doc); + // @ts-ignore + summary[doc.monitor.status]++; + } + + if (refresh) { + await es.indices.refresh(); + } + + return { monitorId, docs }; +}; + +export const makeChecks = async ( + es: Client, + monitorId: string, + numChecks: number = 1, + numIps: number = 1, + every: number = 10000, // number of millis between checks + fields: { [key: string]: any } = {}, + mogrify: (doc: any) => any = (d) => d, + refresh: boolean = true, + isFleetManaged: boolean = false +) => { + const checks = []; + const oldestTime = new Date().getTime() - numChecks * every; + let newestTime = oldestTime; + for (let li = 0; li < numChecks; li++) { + const checkDate = new Date(newestTime + every); + newestTime = checkDate.getTime() + every; + fields = merge(fields, { + '@timestamp': checkDate.toISOString(), + monitor: { + timespan: { + gte: checkDate.toISOString(), + lt: new Date(newestTime).toISOString(), + }, + }, + }); + const { docs } = await makeCheck({ + es, + monitorId, + numIps, + fields, + mogrify, + refresh: false, + isFleetManaged, + }); + checks.push(docs); + } + + if (refresh) { + await es.indices.refresh(); + } + + return checks; +}; + +export const makeChecksWithStatus = async ( + es: Client, + monitorId: string, + numChecks: number, + numIps: number, + every: number, + fields: { [key: string]: any } = {}, + status: 'up' | 'down', + mogrify: (doc: any) => any = (d) => d, + refresh: boolean = true, + isFleetManaged: boolean = false +) => { + const oppositeStatus = status === 'up' ? 'down' : 'up'; + + return await makeChecks( + es, + monitorId, + numChecks, + numIps, + every, + fields, + (d) => { + d.monitor.status = status; + if (d.summary) { + d.summary[status] += d.summary[oppositeStatus]; + d.summary[oppositeStatus] = 0; + } + + return mogrify(d); + }, + refresh, + isFleetManaged + ); +}; + +// Helper for processing a list of checks to find the time picker bounds. +export const getChecksDateRange = (checks: any[]) => { + // Flatten 2d arrays + const flattened = flattenDeep(checks); + + let startTime = 1 / 0; + let endTime = -1 / 0; + flattened.forEach((c) => { + const ts = Date.parse(c['@timestamp']); + + if (ts < startTime) { + startTime = ts; + } + + if (ts > endTime) { + endTime = ts; + } + }); + + return { + start: new Date(startTime).toISOString(), + end: new Date(endTime).toISOString(), + }; +}; diff --git a/x-pack/plugins/uptime/e2e/helpers/make_ping.ts b/x-pack/plugins/uptime/e2e/helpers/make_ping.ts new file mode 100644 index 0000000000000..e39244e51bfff --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/make_ping.ts @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { v4 as uuidv4 } from 'uuid'; +import { merge } from 'lodash'; +import type { Client } from '@elastic/elasticsearch'; +import { makeTls, TlsProps } from './make_tls'; + +const DEFAULT_INDEX_NAME = 'heartbeat-8-full-test'; +const DATA_STREAM_INDEX_NAME = 'synthetics-http-default'; + +export const makePing = async ( + es: Client, + monitorId: string, + fields: { [key: string]: any }, + mogrify: (doc: any) => any, + refresh: boolean = true, + tls: boolean | TlsProps = false, + isFleetManaged: boolean | undefined = false +) => { + const timestamp = new Date(); + const baseDoc: any = { + tcp: { + rtt: { + connect: { + us: 14687, + }, + }, + }, + observer: { + geo: { + name: 'mpls', + location: '37.926868, -78.024902', + }, + hostname: 'avc-x1e', + }, + agent: { + hostname: 'avc-x1e', + id: '10730a1a-4cb7-45ce-8524-80c4820476ab', + type: 'heartbeat', + ephemeral_id: '0d9a8dc6-f604-49e3-86a0-d8f9d6f2cbad', + version: '8.0.0', + }, + '@timestamp': timestamp.toISOString(), + resolve: { + rtt: { + us: 350, + }, + ip: '127.0.0.1', + }, + ecs: { + version: '1.1.0', + }, + host: { + name: 'avc-x1e', + }, + http: { + rtt: { + response_header: { + us: 19349, + }, + total: { + us: 48954, + }, + write_request: { + us: 33, + }, + content: { + us: 51, + }, + validate: { + us: 19400, + }, + }, + response: { + status_code: 200, + body: { + bytes: 3, + hash: '27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf', + }, + }, + }, + monitor: { + duration: { + us: 49347, + }, + ip: '127.0.0.1', + id: monitorId, + check_group: uuidv4(), + type: 'http', + status: 'up', + timespan: { + gte: timestamp.toISOString(), + lt: new Date(timestamp.getTime() + 5000).toISOString, + }, + }, + event: { + dataset: 'uptime', + }, + url: { + path: '/pattern', + scheme: 'http', + port: 5678, + domain: 'localhost', + query: 'r=200x5,500x1', + full: 'http://localhost:5678/pattern?r=200x5,500x1', + }, + }; + + if (tls) { + baseDoc.tls = makeTls(tls as any); + } + + const doc = mogrify(merge(baseDoc, fields)); + + await es.index({ + index: isFleetManaged ? DATA_STREAM_INDEX_NAME : DEFAULT_INDEX_NAME, + refresh, + body: doc, + }); + return doc; +}; diff --git a/x-pack/plugins/uptime/e2e/helpers/make_tls.ts b/x-pack/plugins/uptime/e2e/helpers/make_tls.ts new file mode 100644 index 0000000000000..e654a2754e51d --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/make_tls.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import moment from 'moment'; +import crypto from 'crypto'; + +export interface TlsProps { + valid?: boolean; + commonName?: string; + expiry?: string; + sha256?: string; +} + +type Props = TlsProps & boolean; + +// Note This is just a mock sha256 value, this doesn't actually generate actually sha 256 val +export const getSha256 = () => { + return crypto.randomBytes(64).toString('hex').toUpperCase(); +}; + +export const makeTls = ({ valid = true, commonName = '*.elastic.co', expiry, sha256 }: Props) => { + const expiryDate = + expiry ?? + moment() + .add(valid ? 2 : -2, 'months') + .toISOString(); + + return { + version: '1.3', + cipher: 'TLS-AES-128-GCM-SHA256', + certificate_not_valid_before: '2020-03-01T00:00:00.000Z', + certificate_not_valid_after: expiryDate, + server: { + x509: { + not_before: '2020-03-01T00:00:00.000Z', + not_after: expiryDate, + issuer: { + distinguished_name: + 'CN=DigiCert SHA2 High Assurance Server CA,OU=www.digicert.com,O=DigiCert Inc,C=US', + common_name: 'DigiCert SHA2 High Assurance Server CA', + }, + subject: { + common_name: commonName, + distinguished_name: 'CN=*.facebook.com,O=Facebook Inc.,L=Menlo Park,ST=California,C=US', + }, + serial_number: '10043199409725537507026285099403602396', + signature_algorithm: 'SHA256-RSA', + public_key_algorithm: 'ECDSA', + public_key_curve: 'P-256', + }, + hash: { + sha256: sha256 ?? '1a48f1db13c3bd1482ba1073441e74a1bb1308dc445c88749e0dc4f1889a88a4', + sha1: '23291c758d925b9f4bb3584de3763317e94c6ce9', + }, + }, + established: true, + rtt: { + handshake: { + us: 33103, + }, + }, + version_protocol: 'tls', + }; +}; diff --git a/x-pack/plugins/uptime/e2e/helpers/parse_args_params.ts b/x-pack/plugins/uptime/e2e/helpers/parse_args_params.ts new file mode 100644 index 0000000000000..a69cae912dfee --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/parse_args_params.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import yargs from 'yargs'; + +const { argv } = yargs(process.argv.slice(2)) + .option('headless', { + default: true, + type: 'boolean', + description: 'Start in headless mode', + }) + .option('bail', { + default: false, + type: 'boolean', + description: 'Pause on error', + }) + .option('grep', { + default: undefined, + type: 'string', + description: 'run only journeys with a name or tags that matches the glob', + }) + .help(); + +export { argv }; diff --git a/x-pack/plugins/uptime/e2e/helpers/record_video.ts b/x-pack/plugins/uptime/e2e/helpers/record_video.ts new file mode 100644 index 0000000000000..23bcdfb643e72 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/record_video.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import fs from 'fs'; +import Runner from '@elastic/synthetics/dist/core/runner'; +import { after, Page } from '@elastic/synthetics'; + +const SYNTHETICS_RUNNER = Symbol.for('SYNTHETICS_RUNNER'); + +// @ts-ignore +export const runner: Runner = global[SYNTHETICS_RUNNER]; + +export const recordVideo = (page: Page, postfix = '') => { + after(async () => { + try { + const videoFilePath = await page.video()?.path(); + const pathToVideo = videoFilePath?.replace('.journeys/videos/', '').replace('.webm', ''); + const newVideoPath = videoFilePath?.replace( + pathToVideo!, + postfix ? runner.currentJourney!.name + `-${postfix}` : runner.currentJourney!.name + ); + fs.renameSync(videoFilePath!, newVideoPath!); + } catch (e) { + // eslint-disable-next-line no-console + console.log('Error while renaming video file', e); + } + }); +}; diff --git a/x-pack/plugins/uptime/e2e/helpers/synthetics_runner.ts b/x-pack/plugins/uptime/e2e/helpers/synthetics_runner.ts new file mode 100644 index 0000000000000..2a1ebce4126f2 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/synthetics_runner.ts @@ -0,0 +1,155 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* eslint-disable no-console */ + +import Url from 'url'; +import { run as syntheticsRun } from '@elastic/synthetics'; +import { PromiseType } from 'utility-types'; +import { createApmUsers } from '@kbn/apm-plugin/server/test_helpers/create_apm_users/create_apm_users'; + +import { EsArchiver } from '@kbn/es-archiver'; +import { esArchiverUnload } from '../tasks/es_archiver'; +import { TestReporter } from './test_reporter'; + +export interface ArgParams { + headless: boolean; + match?: string; + pauseOnError: boolean; +} + +export class SyntheticsRunner { + public getService: any; + public kibanaUrl: string; + private elasticsearchUrl: string; + + public testFilesLoaded: boolean = false; + + public params: ArgParams; + + private loadTestFilesCallback?: (reload?: boolean) => Promise; + + constructor(getService: any, params: ArgParams) { + this.getService = getService; + this.kibanaUrl = this.getKibanaUrl(); + this.elasticsearchUrl = this.getElasticsearchUrl(); + this.params = params; + } + + async setup() { + await this.createTestUsers(); + } + + async createTestUsers() { + await createApmUsers({ + elasticsearch: { node: this.elasticsearchUrl, username: 'elastic', password: 'changeme' }, + kibana: { hostname: this.kibanaUrl }, + }); + } + + async loadTestFiles(callback: (reload?: boolean) => Promise, reload = false) { + console.log('Loading test files'); + await callback(reload); + this.loadTestFilesCallback = callback; + this.testFilesLoaded = true; + console.log('Successfully loaded test files'); + } + + async loadTestData(e2eDir: string, dataArchives: string[]) { + try { + console.log('Loading esArchiver...'); + + const esArchiver: EsArchiver = this.getService('esArchiver'); + + const promises = dataArchives.map((archive) => { + if (archive === 'synthetics_data') { + return esArchiver.load(e2eDir + archive, { + docsOnly: true, + skipExisting: true, + }); + } + return esArchiver.load(e2eDir + archive, { skipExisting: true }); + }); + + await Promise.all([...promises]); + } catch (e) { + console.log(e); + } + } + + getKibanaUrl() { + const config = this.getService('config'); + + return Url.format({ + protocol: config.get('servers.kibana.protocol'), + hostname: config.get('servers.kibana.hostname'), + port: config.get('servers.kibana.port'), + }); + } + + getElasticsearchUrl() { + const config = this.getService('config'); + + return Url.format({ + protocol: config.get('servers.elasticsearch.protocol'), + hostname: config.get('servers.elasticsearch.hostname'), + port: config.get('servers.elasticsearch.port'), + }); + } + + async run() { + if (!this.testFilesLoaded) { + throw new Error('Test files not loaded'); + } + const { headless, match, pauseOnError } = this.params; + const noOfRuns = process.env.NO_OF_RUNS ? Number(process.env.NO_OF_RUNS) : 1; + console.log(`Running ${noOfRuns} times`); + let results: PromiseType> = {}; + for (let i = 0; i < noOfRuns; i++) { + results = await syntheticsRun({ + params: { kibanaUrl: this.kibanaUrl, getService: this.getService }, + playwrightOptions: { + headless, + chromiumSandbox: false, + timeout: 60 * 1000, + viewport: { + height: 900, + width: 1600, + }, + recordVideo: { + dir: '.journeys/videos', + }, + }, + match: match === 'undefined' ? '' : match, + pauseOnError, + screenshots: 'only-on-failure', + reporter: TestReporter, + }); + if (noOfRuns > 1) { + // need to reload again since runner resets the journeys + await this.loadTestFiles(this.loadTestFilesCallback!, true); + } + } + + await this.assertResults(results); + } + + assertResults(results: PromiseType>) { + Object.entries(results).forEach(([_journey, result]) => { + if (result.status !== 'succeeded') { + process.exitCode = 1; + process.exit(); + } + }); + } + + cleanUp() { + console.log('Removing esArchiver...'); + esArchiverUnload('full_heartbeat'); + esArchiverUnload('browser'); + } +} diff --git a/x-pack/plugins/uptime/e2e/helpers/test_reporter.ts b/x-pack/plugins/uptime/e2e/helpers/test_reporter.ts new file mode 100644 index 0000000000000..198a038ec027f --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/test_reporter.ts @@ -0,0 +1,229 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Journey, Step } from '@elastic/synthetics/dist/dsl'; +import { Reporter, ReporterOptions } from '@elastic/synthetics'; +import { + JourneyEndResult, + JourneyStartResult, + StepEndResult, +} from '@elastic/synthetics/dist/common_types'; + +import { yellow, green, cyan, red, bold } from 'chalk'; + +// eslint-disable-next-line no-console +const log = console.log; + +import { performance } from 'perf_hooks'; +import * as fs from 'fs'; +import { gatherScreenshots } from '@elastic/synthetics/dist/reporters/json'; +import { CACHE_PATH } from '@elastic/synthetics/dist/helpers'; +import { join } from 'path'; + +function renderError(error: any) { + let output = ''; + const outer = indent(''); + const inner = indent(outer); + const container = outer + '---\n'; + output += container; + let stack = error.stack; + if (stack) { + output += inner + 'stack: |-\n'; + stack = rewriteErrorStack(stack, findPWLogsIndexes(stack)); + const lines = String(stack).split('\n'); + for (const line of lines) { + output += inner + ' ' + line + '\n'; + } + } + output += container; + return red(output); +} + +function renderDuration(durationMs: number) { + return Number(durationMs).toFixed(0); +} + +export class TestReporter implements Reporter { + metrics = { + succeeded: 0, + failed: 0, + skipped: 0, + }; + + journeys: Map> = new Map(); + + constructor(options: ReporterOptions = {}) {} + + onJourneyStart(journey: Journey, {}: JourneyStartResult) { + if (process.env.CI) { + this.write(`\n--- Journey: ${journey.name}`); + } else { + this.write(bold(`\n Journey: ${journey.name}`)); + } + } + + onStepEnd(journey: Journey, step: Step, result: StepEndResult) { + const { status, end, start, error } = result; + const message = `${symbols[status]} Step: '${step.name}' ${status} (${renderDuration( + (end - start) * 1000 + )} ms)`; + this.write(indent(message)); + if (error) { + this.write(renderError(error)); + } + this.metrics[status]++; + if (!this.journeys.has(journey.name)) { + this.journeys.set(journey.name, []); + } + this.journeys.get(journey.name)?.push({ name: step.name, ...result }); + } + + async onJourneyEnd(journey: Journey, { error, start, end, status }: JourneyEndResult) { + const { failed, succeeded, skipped } = this.metrics; + const total = failed + succeeded + skipped; + if (total === 0 && error) { + this.write(renderError(error)); + } + const message = `${symbols[status]} Took (${renderDuration(end - start)} seconds)`; + this.write(message); + + await fs.promises.mkdir('.journeys/failed_steps', { recursive: true }); + + await gatherScreenshots(join(CACHE_PATH, 'screenshots'), async (screenshot) => { + const { data, step } = screenshot; + + if (status === 'failed') { + await (async () => { + await fs.promises.writeFile(join('.journeys/failed_steps/', `${step.name}.jpg`), data, { + encoding: 'base64', + }); + })(); + } + }); + } + + onEnd() { + const failedJourneys = Array.from(this.journeys.entries()).filter(([, steps]) => + steps.some((step) => step.status === 'failed') + ); + + if (failedJourneys.length > 0) { + failedJourneys.forEach(([journeyName, steps]) => { + if (process.env.CI) { + const name = red(`Journey: ${journeyName} 🥵`); + this.write(`\n+++ ${name}`); + steps.forEach((stepResult) => { + const { status, end, start, error, name: stepName } = stepResult; + const message = `${symbols[status]} Step: '${stepName}' ${status} (${renderDuration( + (end - start) * 1000 + )} ms)`; + this.write(indent(message)); + if (error) { + this.write(renderError(error)); + } + }); + } + }); + } + + const successfulJourneys = Array.from(this.journeys.entries()).filter(([, steps]) => + steps.every((step) => step.status === 'succeeded') + ); + + successfulJourneys.forEach(([journeyName, steps]) => { + try { + fs.unlinkSync('.journeys/videos/' + journeyName + '.webm'); + } catch (e) { + // eslint-disable-next-line no-console + console.log( + 'Failed to delete video file for path ' + '.journeys/videos/' + journeyName + '.webm' + ); + } + }); + + const { failed, succeeded, skipped } = this.metrics; + const total = failed + succeeded + skipped; + + let message = '\n'; + if (total === 0) { + message = 'No tests found!'; + message += ` (${renderDuration(now())} ms) \n`; + this.write(message); + return; + } + + message += succeeded > 0 ? green(` ${succeeded} passed`) : ''; + message += failed > 0 ? red(` ${failed} failed`) : ''; + message += skipped > 0 ? cyan(` ${skipped} skipped`) : ''; + message += ` (${renderDuration(now() / 1000)} seconds) \n`; + this.write(message); + } + + write(message: any) { + if (typeof message === 'object') { + message = JSON.stringify(message); + } + log(message + '\n'); + } +} + +const SEPARATOR = '\n'; + +function indent(lines: string, tab = ' ') { + return lines.replace(/^/gm, tab); +} + +const NO_UTF8_SUPPORT = process.platform === 'win32'; +const symbols = { + warning: yellow(NO_UTF8_SUPPORT ? '!' : '⚠'), + skipped: cyan('-'), + progress: cyan('>'), + succeeded: green(NO_UTF8_SUPPORT ? 'ok' : '✓'), + failed: red(NO_UTF8_SUPPORT ? 'x' : '✖'), +}; + +function now() { + return performance.now(); +} + +function findPWLogsIndexes(msgOrStack: string): [number, number] { + let startIndex = 0; + let endIndex = 0; + if (!msgOrStack) { + return [startIndex, endIndex]; + } + const lines = String(msgOrStack).split(SEPARATOR); + const logStart = /[=]{3,} logs [=]{3,}/; + const logEnd = /[=]{10,}/; + lines.forEach((line, index) => { + if (logStart.test(line)) { + startIndex = index; + } else if (logEnd.test(line)) { + endIndex = index; + } + }); + return [startIndex, endIndex]; +} + +function rewriteErrorStack(stack: string, indexes: [number, number]) { + const [start, end] = indexes; + /** + * Do not rewrite if its not a playwright error + */ + if (start === 0 && end === 0) { + return stack; + } + const linesToKeep = start + 3; + if (start > 0 && linesToKeep < end) { + const lines = stack.split(SEPARATOR); + return lines + .slice(0, linesToKeep) + .concat(...lines.slice(end)) + .join(SEPARATOR); + } + return stack; +} diff --git a/x-pack/plugins/uptime/e2e/helpers/utils.ts b/x-pack/plugins/uptime/e2e/helpers/utils.ts new file mode 100644 index 0000000000000..f340ef8b78b3a --- /dev/null +++ b/x-pack/plugins/uptime/e2e/helpers/utils.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { expect, Page } from '@elastic/synthetics'; + +export async function waitForLoadingToFinish({ page }: { page: Page }) { + while (true) { + if (!(await page.isVisible(byTestId('kbnLoadingMessage'), { timeout: 5000 }))) break; + await page.waitForTimeout(1000); + } +} + +export async function loginToKibana({ + page, + user, +}: { + page: Page; + user?: { username: string; password: string }; +}) { + await page.fill('[data-test-subj=loginUsername]', user?.username ?? 'elastic', { + timeout: 60 * 1000, + }); + + await page.fill('[data-test-subj=loginPassword]', user?.password ?? 'changeme'); + + await page.click('[data-test-subj=loginSubmit]'); + + await waitForLoadingToFinish({ page }); +} + +export const byTestId = (testId: string) => { + return `[data-test-subj=${testId}]`; +}; + +export const assertText = async ({ page, text }: { page: Page; text: string }) => { + const element = await page.waitForSelector(`text=${text}`); + expect(await element.isVisible()).toBeTruthy(); +}; + +export const assertNotText = async ({ page, text }: { page: Page; text: string }) => { + expect(await page.$(`text=${text}`)).toBeFalsy(); +}; + +export const getQuerystring = (params: object) => { + return Object.entries(params) + .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value)) + .join('&'); +}; + +export const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +export const TIMEOUT_60_SEC = { + timeout: 60 * 1000, +}; diff --git a/x-pack/plugins/uptime/e2e/page_objects/login.tsx b/x-pack/plugins/uptime/e2e/page_objects/login.tsx new file mode 100644 index 0000000000000..92c4de21ff154 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/page_objects/login.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Page } from '@elastic/synthetics'; +import { waitForLoadingToFinish } from '@kbn/ux-plugin/e2e/journeys/utils'; + +export function loginPageProvider({ + page, + isRemote = false, + username = 'elastic', + password = 'changeme', +}: { + page: Page; + isRemote?: boolean; + username?: string; + password?: string; +}) { + return { + async waitForLoadingToFinish() { + await waitForLoadingToFinish({ page }); + }, + async loginToKibana(usernameT?: 'editor' | 'viewer', passwordT?: string) { + if (isRemote) { + await page.click('text="Log in with Elasticsearch"'); + } + await page.fill('[data-test-subj=loginUsername]', usernameT ?? username, { + timeout: 60 * 1000, + }); + await page.fill('[data-test-subj=loginPassword]', passwordT ?? password); + + await page.click('[data-test-subj=loginSubmit]'); + + try { + while (await page.isVisible('[data-test-subj=loginSubmit]')) { + await page.waitForTimeout(1000); + } + } catch (e) { + // ignore + } + + await waitForLoadingToFinish({ page }); + }, + }; +} diff --git a/x-pack/plugins/uptime/e2e/page_objects/utils.tsx b/x-pack/plugins/uptime/e2e/page_objects/utils.tsx new file mode 100644 index 0000000000000..b9137632be266 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/page_objects/utils.tsx @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { expect, Page } from '@elastic/synthetics'; +import { waitForLoadingToFinish } from '@kbn/ux-plugin/e2e/journeys/utils'; + +export function utilsPageProvider({ page }: { page: Page }) { + return { + byTestId(testId: string) { + return `[data-test-subj=${testId}]`; + }, + + async waitForLoadingToFinish() { + await waitForLoadingToFinish({ page }); + }, + + async assertText({ text }: { text: string }) { + await page.waitForSelector(`text=${text}`); + expect(await page.$(`text=${text}`)).toBeTruthy(); + }, + + async fillByTestSubj(dataTestSubj: string, value: string) { + await page.fill(`[data-test-subj=${dataTestSubj}]`, value); + }, + + async selectByTestSubj(dataTestSubj: string, value: string) { + await page.selectOption(`[data-test-subj=${dataTestSubj}]`, value); + }, + + async checkByTestSubj(dataTestSubj: string, value: string) { + await page.check(`[data-test-subj=${dataTestSubj}]`); + }, + + async clickByTestSubj(dataTestSubj: string) { + await page.click(`[data-test-subj=${dataTestSubj}]`); + }, + + async findByTestSubj(dataTestSubj: string) { + return await page.waitForSelector(`[data-test-subj=${dataTestSubj}]`); + }, + + async findByText(text: string) { + return await page.waitForSelector(`text=${text}`); + }, + }; +} diff --git a/x-pack/plugins/uptime/e2e/tasks/es_archiver.ts b/x-pack/plugins/uptime/e2e/tasks/es_archiver.ts new file mode 100644 index 0000000000000..bbb66b19f5a5e --- /dev/null +++ b/x-pack/plugins/uptime/e2e/tasks/es_archiver.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Path from 'path'; +import { execSync } from 'child_process'; + +const ES_ARCHIVE_DIR = './fixtures/es_archiver'; + +// Otherwise execSync would inject NODE_TLS_REJECT_UNAUTHORIZED=0 and node would abort if used over https +const NODE_TLS_REJECT_UNAUTHORIZED = '1'; + +export const esArchiverLoad = (folder: string) => { + const path = Path.join(ES_ARCHIVE_DIR, folder); + execSync( + `node ../../../../scripts/es_archiver load "${path}" --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; + +export const esArchiverUnload = (folder: string) => { + const path = Path.join(ES_ARCHIVE_DIR, folder); + execSync( + `node ../../../../scripts/es_archiver unload "${path}" --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; + +export const esArchiverResetKibana = () => { + execSync( + `node ../../../../scripts/es_archiver empty-kibana-index --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; diff --git a/x-pack/plugins/uptime/e2e/tasks/read_kibana_config.ts b/x-pack/plugins/uptime/e2e/tasks/read_kibana_config.ts new file mode 100644 index 0000000000000..3867386e41104 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/tasks/read_kibana_config.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import path from 'path'; +import fs from 'fs'; +import yaml from 'js-yaml'; + +export type KibanaConfig = ReturnType; + +export const readKibanaConfig = () => { + const kibanaConfigDir = path.join(__filename, '../../../../../../config'); + const kibanaDevConfig = path.join(kibanaConfigDir, 'kibana.dev.yml'); + const kibanaConfig = path.join(kibanaConfigDir, 'kibana.yml'); + + return (yaml.safeLoad( + fs.readFileSync(fs.existsSync(kibanaDevConfig) ? kibanaDevConfig : kibanaConfig, 'utf8') + ) || {}) as Record; +}; diff --git a/x-pack/plugins/uptime/e2e/tsconfig.json b/x-pack/plugins/uptime/e2e/tsconfig.json new file mode 100644 index 0000000000000..c00c388ec86e0 --- /dev/null +++ b/x-pack/plugins/uptime/e2e/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../../../tsconfig.base.json", + "exclude": ["tmp", "target/**/*"], + "include": ["**/*"], + "compilerOptions": { + "outDir": "target/types", + "types": [ "node"], + "isolatedModules": false, + }, + "kbn_references": [ + { "path": "../../../test/tsconfig.json" }, + { "path": "../../../../test/tsconfig.json" }, + "@kbn/test", + "@kbn/dev-utils", + "@kbn/ux-plugin/e2e", + "@kbn/ftr-common-functional-services", + "@kbn/apm-plugin", + "@kbn/es-archiver", + ] +} diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/default_email_settings.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/alerts/default_email_settings.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/default_email_settings.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/alerts/default_email_settings.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/index.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/alerts/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/index.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/alerts/index.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/status_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/alerts/status_alert_flyouts_in_alerting_app.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/status_alert_flyouts_in_alerting_app.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/alerts/status_alert_flyouts_in_alerting_app.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/data_view_permissions.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/data_view_permissions.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/data_view_permissions.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/data_view_permissions.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/index.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/index.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/index.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/locations/index.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/locations/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/locations/index.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/locations/index.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/locations/locations.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/locations/locations.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/locations/locations.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/locations/locations.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/index.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/index.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/index.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/monitor_alerts.journey.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/monitor_alerts.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/monitor_alerts.journey.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/monitor_alerts.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/monitor_details.journey.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/monitor_details.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/monitor_details.journey.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/monitor_details.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/ping_redirects.journey.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/ping_redirects.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/monitor_details/ping_redirects.journey.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/monitor_details/ping_redirects.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/step_duration.journey.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/step_duration.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/step_duration.journey.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/step_duration.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/journeys/uptime.journey.ts b/x-pack/plugins/uptime/e2e/uptime/journeys/uptime.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/journeys/uptime.journey.ts rename to x-pack/plugins/uptime/e2e/uptime/journeys/uptime.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/uptime/page_objects/monitor_details.tsx b/x-pack/plugins/uptime/e2e/uptime/page_objects/monitor_details.tsx similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/page_objects/monitor_details.tsx rename to x-pack/plugins/uptime/e2e/uptime/page_objects/monitor_details.tsx diff --git a/x-pack/plugins/synthetics/e2e/uptime/page_objects/settings.tsx b/x-pack/plugins/uptime/e2e/uptime/page_objects/settings.tsx similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/page_objects/settings.tsx rename to x-pack/plugins/uptime/e2e/uptime/page_objects/settings.tsx diff --git a/x-pack/plugins/synthetics/e2e/uptime/synthetics_run.ts b/x-pack/plugins/uptime/e2e/uptime/synthetics_run.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/uptime/synthetics_run.ts rename to x-pack/plugins/uptime/e2e/uptime/synthetics_run.ts diff --git a/x-pack/plugins/uptime/jest.config.js b/x-pack/plugins/uptime/jest.config.js new file mode 100644 index 0000000000000..baafb5ce133e6 --- /dev/null +++ b/x-pack/plugins/uptime/jest.config.js @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/plugins/uptime'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/uptime', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/plugins/uptime/{common,public,server}/**/*.{ts,tsx}'], +}; diff --git a/x-pack/plugins/uptime/kibana.jsonc b/x-pack/plugins/uptime/kibana.jsonc new file mode 100644 index 0000000000000..9d082f5f1a70b --- /dev/null +++ b/x-pack/plugins/uptime/kibana.jsonc @@ -0,0 +1,45 @@ +{ + "type": "plugin", + "id": "@kbn/uptime-plugin", + "owner": "@elastic/uptime", + "description": "This plugin visualizes data from Heartbeat, and integrates with other Observability solutions.", + "plugin": { + "id": "uptime", + "server": true, + "browser": true, + "configPath": ["xpack", "legacy_uptime"], + "requiredPlugins": [ + "actions", + "alerting", + "cases", + "data", + "fleet", + "embeddable", + "discover", + "dataViews", + "encryptedSavedObjects", + "exploratoryView", + "features", + "inspector", + "licensing", + "observability", + "observabilityShared", + "ruleRegistry", + "security", + "share", + "taskManager", + "triggersActionsUi", + "usageCollection", + "unifiedSearch", + "bfetch" + ], + "optionalPlugins": ["cloud", "data", "fleet", "home", "ml", "spaces", "telemetry"], + "requiredBundles": [ + "unifiedSearch", + "fleet", + "kibanaReact", + "kibanaUtils", + "observability", + ] + } +} diff --git a/x-pack/plugins/uptime/public/index.ts b/x-pack/plugins/uptime/public/index.ts new file mode 100644 index 0000000000000..cc0ad290e6f0a --- /dev/null +++ b/x-pack/plugins/uptime/public/index.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PluginInitializerContext } from '@kbn/core/public'; +import { UptimePlugin } from './plugin'; + +export const plugin = (initializerContext: PluginInitializerContext) => + new UptimePlugin(initializerContext); diff --git a/x-pack/plugins/uptime/public/kibana_services.ts b/x-pack/plugins/uptime/public/kibana_services.ts new file mode 100644 index 0000000000000..eb125eb87c744 --- /dev/null +++ b/x-pack/plugins/uptime/public/kibana_services.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CoreStart } from '@kbn/core/public'; + +let coreStart: CoreStart; +export function setStartServices(core: CoreStart) { + coreStart = core; +} + +export const getDocLinks = () => coreStart?.docLinks; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/app/render_app.tsx b/x-pack/plugins/uptime/public/legacy_uptime/app/render_app.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/app/render_app.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/app/render_app.tsx index 3e067356bcce5..d0c6a2f550e4e 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/app/render_app.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/app/render_app.tsx @@ -55,7 +55,7 @@ export function renderApp( isLogsAvailable: logs, renderGlobalHelpControls: () => setHelpExtension({ - appName: i18nFormatter.translate('xpack.synthetics.legacyHeader.appName', { + appName: i18nFormatter.translate('xpack.uptime.legacyHeader.appName', { defaultMessage: 'Uptime', }), links: [ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_app.tsx b/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx similarity index 97% rename from x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_app.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx index 74b37e2c234c4..c967c732ec8d4 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_app.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_app.tsx @@ -84,10 +84,10 @@ const Application = (props: UptimeAppProps) => { setBadge( !canSave ? { - text: i18n.translate('xpack.synthetics.badge.readOnly.text', { + text: i18n.translate('xpack.uptime.badge.readOnly.text', { defaultMessage: 'Read only', }), - tooltip: i18n.translate('xpack.synthetics.badge.readOnly.tooltip', { + tooltip: i18n.translate('xpack.uptime.badge.readOnly.tooltip', { defaultMessage: 'Unable to save', }), iconType: 'glasses', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_overview_fetcher.ts b/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_overview_fetcher.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_overview_fetcher.ts rename to x-pack/plugins/uptime/public/legacy_uptime/app/uptime_overview_fetcher.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_page_template.tsx b/x-pack/plugins/uptime/public/legacy_uptime/app/uptime_page_template.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/app/uptime_page_template.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/app/uptime_page_template.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/app/use_no_data_config.ts b/x-pack/plugins/uptime/public/legacy_uptime/app/use_no_data_config.ts similarity index 85% rename from x-pack/plugins/synthetics/public/legacy_uptime/app/use_no_data_config.ts rename to x-pack/plugins/uptime/public/legacy_uptime/app/use_no_data_config.ts index 64d72aa248d78..bb16054c0d788 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/app/use_no_data_config.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/app/use_no_data_config.ts @@ -26,15 +26,15 @@ export function useNoDataConfig(): NoDataConfig | undefined { // Returns no data config when there is no historical data if (data && !data.indexExists) { return { - solution: i18n.translate('xpack.synthetics.noDataConfig.solutionName', { + solution: i18n.translate('xpack.uptime.noDataConfig.solutionName', { defaultMessage: 'Observability', }), action: { beats: { - title: i18n.translate('xpack.synthetics.noDataConfig.beatsCard.title', { + title: i18n.translate('xpack.uptime.noDataConfig.beatsCard.title', { defaultMessage: 'Add monitors with Heartbeat', }), - description: i18n.translate('xpack.synthetics.noDataConfig.beatsCard.description', { + description: i18n.translate('xpack.uptime.noDataConfig.beatsCard.description', { defaultMessage: 'Proactively monitor the availability of your sites and services. Receive alerts and resolve issues faster to optimize your users experience.', }), diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_monitors.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_monitors.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_monitors.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_monitors.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_search.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_search.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_search.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_search.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_status.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_status.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/__snapshots__/cert_status.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/__snapshots__/cert_status.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_monitors.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_monitors.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_monitors.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_monitors.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_monitors.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_monitors.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_monitors.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_monitors.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_refresh_btn.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_refresh_btn.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_refresh_btn.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_refresh_btn.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_search.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_search.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_search.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_search.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_search.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_search.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_search.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_search.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_status.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_status.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_status.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_status.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_status.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_status.tsx similarity index 97% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_status.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_status.tsx index ec11fc240d6a1..6c7b71d82668c 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/cert_status.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/cert_status.tsx @@ -86,7 +86,7 @@ export const CertStatus: React.FC = ({ cert }) => { {' '} { return ( {total ?? 0}, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/certificates_list.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/certificates_list.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/certificates_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/certificates_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/certificates_list.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/fingerprint_col.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/fingerprint_col.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/fingerprint_col.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/fingerprint_col.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/fingerprint_col.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/fingerprint_col.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/fingerprint_col.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/fingerprint_col.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/index.ts diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/translations.ts new file mode 100644 index 0000000000000..073cf4cbba9b5 --- /dev/null +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/translations.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const OK = i18n.translate('xpack.uptime.certs.ok', { + defaultMessage: 'OK', +}); + +export const EXPIRED = i18n.translate('xpack.uptime.certs.expired', { + defaultMessage: 'Expired', +}); + +export const EXPIRES_SOON = i18n.translate('xpack.uptime.certs.expireSoon', { + defaultMessage: 'Expires soon', +}); + +export const EXPIRES = i18n.translate('xpack.uptime.certs.expires', { + defaultMessage: 'Expires', +}); + +export const SEARCH_CERTS = i18n.translate('xpack.uptime.certs.searchCerts', { + defaultMessage: 'Search certificates', +}); + +export const STATUS_COL = i18n.translate('xpack.uptime.certs.list.status', { + defaultMessage: 'Status', +}); + +export const TOO_OLD = i18n.translate('xpack.uptime.certs.list.status.old', { + defaultMessage: 'Too old', +}); + +export const COMMON_NAME_COL = i18n.translate('xpack.uptime.certs.list.commonName', { + defaultMessage: 'Common name', +}); + +export const MONITORS_COL = i18n.translate('xpack.uptime.certs.list.monitors', { + defaultMessage: 'Monitors', +}); + +export const ISSUED_BY_COL = i18n.translate('xpack.uptime.certs.list.issuedBy', { + defaultMessage: 'Issued by', +}); + +export const VALID_UNTIL_COL = i18n.translate('xpack.uptime.certs.list.validUntil', { + defaultMessage: 'Valid until', +}); + +export const AGE_COL = i18n.translate('xpack.uptime.certs.list.ageCol', { + defaultMessage: 'Age', +}); + +export const DAYS = i18n.translate('xpack.uptime.certs.list.days', { + defaultMessage: 'days', +}); + +export const FINGERPRINTS_COL = i18n.translate('xpack.uptime.certs.list.expirationDate', { + defaultMessage: 'Fingerprints', +}); + +export const COPY_FINGERPRINT = i18n.translate('xpack.uptime.certs.list.copyFingerprint', { + defaultMessage: 'Click to copy fingerprint value', +}); + +export const NO_CERTS_AVAILABLE = i18n.translate('xpack.uptime.certs.list.noCerts', { + defaultMessage: 'No Certificates found.', +}); + +export const LOADING_CERTIFICATES = i18n.translate('xpack.uptime.certificates.loading', { + defaultMessage: 'Loading certificates ...', +}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/use_cert_search.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/certificates/use_cert_search.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/certificates/use_cert_search.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/certificates/use_cert_search.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/location_link.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/location_link.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/location_link.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/location_link.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/monitor_page_link.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/monitor_page_link.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/monitor_page_link.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/monitor_page_link.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/monitor_tags.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/monitor_tags.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/__snapshots__/monitor_tags.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/__snapshots__/monitor_tags.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/alerts/uptime_edit_alert_flyout.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/alerts/uptime_edit_alert_flyout.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/alerts/uptime_edit_alert_flyout.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/alerts/uptime_edit_alert_flyout.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/chart_empty_state.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/chart_empty_state.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/chart_empty_state.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/chart_empty_state.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/chart_wrapper.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/chart_wrapper.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/chart_wrapper.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/chart_wrapper.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart_legend_row.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart_legend_row.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart_legend_row.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart_legend_row.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/monitor_bar_series.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/monitor_bar_series.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/monitor_bar_series.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/__snapshots__/monitor_bar_series.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx index 68269c016ab0b..50a8760c10af0 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/annotation_tooltip.tsx @@ -39,14 +39,14 @@ export const AnnotationTooltip = ({ details }: { details: string }) => { {moment(data.time).format('lll')}
diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_empty_state.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_empty_state.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_empty_state.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_empty_state.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_empty_state.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_empty_state.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_empty_state.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_empty_state.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper/chart_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper/chart_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper/chart_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper/chart_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/chart_wrapper/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/chart_wrapper/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/donut_chart.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/donut_chart.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/donut_chart.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/donut_chart.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/donut_chart.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/donut_chart.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/donut_chart.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/donut_chart.tsx index ee31aad9a349e..432c950ee0624 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/donut_chart.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/donut_chart.tsx @@ -52,7 +52,7 @@ export const DonutChart = ({ height, down, up }: DonutChartProps) => { getTickFormat(d)} - title={i18n.translate('xpack.synthetics.monitorCharts.durationChart.leftAxis.title', { + title={i18n.translate('xpack.uptime.monitorCharts.durationChart.leftAxis.title', { defaultMessage: 'Duration in {unit}', values: { unit: monitor.monitor.type === 'browser' ? SECONDS_LABEL : MS_LABEL }, })} @@ -141,12 +141,12 @@ export const DurationChartComponent = ({ up }} /> } - title={i18n.translate('xpack.synthetics.durationChart.emptyPrompt.title', { + title={i18n.translate('xpack.uptime.durationChart.emptyPrompt.title', { defaultMessage: 'No duration data available', })} /> diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_charts.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_charts.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_charts.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_charts.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_line_bar_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_line_bar_list.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_line_bar_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_line_bar_list.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_line_series_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_line_series_list.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/duration_line_series_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/duration_line_series_list.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/get_tick_format.test.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/get_tick_format.test.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/get_tick_format.test.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/get_tick_format.test.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/get_tick_format.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/get_tick_format.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/get_tick_format.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/get_tick_format.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/monitor_bar_series.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/monitor_bar_series.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/monitor_bar_series.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/monitor_bar_series.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx index 35b2b830d91bd..a2d37ee2439c1 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/monitor_bar_series.tsx @@ -92,7 +92,7 @@ export const MonitorBarSeries = ({ histogramSeries, minInterval }: MonitorBarSer id={id} color={danger} data={(histogramSeries || []).map(({ timestamp, down }) => [timestamp, down])} - name={i18n.translate('xpack.synthetics.monitorList.downLineSeries.downLabel', { + name={i18n.translate('xpack.uptime.monitorList.downLineSeries.downLabel', { defaultMessage: 'Down checks', })} timeZone="local" @@ -108,7 +108,7 @@ export const MonitorBarSeries = ({ histogramSeries, minInterval }: MonitorBarSer position="top" content={ down }} /> diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/ping_histogram.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/ping_histogram.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/ping_histogram.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/ping_histogram.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/ping_histogram.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/ping_histogram.tsx similarity index 89% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/ping_histogram.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/ping_histogram.tsx index f0acec9d74cde..bb3948b7c8c7f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/ping_histogram.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/ping_histogram.tsx @@ -82,10 +82,10 @@ export const PingHistogramComponent: React.FC = ({ if (!data?.histogram?.length && !loading) { content = ( @@ -123,7 +123,7 @@ export const PingHistogramComponent: React.FC = ({ = ({ {...chartTheme} /> = ({ tickFormat={timeFormatter(getChartDateLabel(absoluteStartDate, absoluteEndDate))} /> numeral(d).format('0')} labelFormat={(d) => numeral(d).format('0a')} - title={i18n.translate('xpack.synthetics.snapshotHistogram.yAxis.title', { + title={i18n.translate('xpack.uptime.snapshotHistogram.yAxis.title', { defaultMessage: 'Pings', description: 'The label on the y-axis of a chart that displays the number of times Heartbeat has pinged a set of services/websites.', @@ -170,7 +170,7 @@ export const PingHistogramComponent: React.FC = ({ color={[danger, gray]} data={barData} id={STATUS_DOWN_LABEL} - name={i18n.translate('xpack.synthetics.snapshotHistogram.series.pings', { + name={i18n.translate('xpack.uptime.snapshotHistogram.series.pings', { defaultMessage: 'Monitor Pings', })} stackAccessors={['x']} @@ -193,7 +193,7 @@ export const PingHistogramComponent: React.FC = ({

diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/utils.test.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/utils.test.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/utils.test.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/utils.test.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/utils.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/utils.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/utils.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/charts/utils.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu_content.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu_content.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu_content.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu_content.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu_content.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu_content.tsx similarity index 86% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu_content.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu_content.tsx index 311b35908bcd5..66c977fb9cb36 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/action_menu_content.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/action_menu_content.tsx @@ -22,15 +22,15 @@ import { InspectorHeaderLink } from './inspector_header_link'; import { monitorStatusSelector } from '../../../state/selectors'; import { ManageMonitorsBtn } from './manage_monitors_btn'; -const ADD_DATA_LABEL = i18n.translate('xpack.synthetics.addDataButtonLabel', { +const ADD_DATA_LABEL = i18n.translate('xpack.uptime.addDataButtonLabel', { defaultMessage: 'Add data', }); -const ANALYZE_DATA = i18n.translate('xpack.synthetics.analyzeDataButtonLabel', { +const ANALYZE_DATA = i18n.translate('xpack.uptime.analyzeDataButtonLabel', { defaultMessage: 'Explore data', }); -const ANALYZE_MESSAGE = i18n.translate('xpack.synthetics.analyzeDataButtonLabel.message', { +const ANALYZE_MESSAGE = i18n.translate('xpack.uptime.analyzeDataButtonLabel.message', { defaultMessage: 'Explore Data allows you to select and filter result data in any dimension and look for the cause or impact of performance problems.', }); @@ -76,7 +76,7 @@ export function ActionMenuContent(): React.ReactElement { - + {ANALYZE_MESSAGE}

}> - {i18n.translate('xpack.synthetics.inspectButtonText', { + {i18n.translate('xpack.uptime.inspectButtonText', { defaultMessage: 'Inspect', })} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx similarity index 86% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx index 26408e6206b7b..159041fd68f09 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/header/manage_monitors_btn.tsx @@ -19,7 +19,7 @@ export const ManageMonitorsBtn = () => { data-test-subj="syntheticsManagementPageLink" > @@ -27,7 +27,7 @@ export const ManageMonitorsBtn = () => { ); }; -const NAVIGATE_LABEL = i18n.translate('xpack.synthetics.page_header.manageLink.not', { +const NAVIGATE_LABEL = i18n.translate('xpack.uptime.page_header.manageLink.not', { defaultMessage: 'Monitor Management is no longer available in Uptime, use the Synthetics app instead.', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/responsive_wrapper.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/responsive_wrapper.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/responsive_wrapper.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/responsive_wrapper.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/responsive_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/responsive_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/higher_order/responsive_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/higher_order/responsive_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/location_link.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/location_link.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/location_link.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/location_link.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/location_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/location_link.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/location_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/location_link.tsx index 4fde90904c39a..32152495f3545 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/location_link.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/location_link.tsx @@ -32,7 +32,7 @@ export const LocationLink = ({ location, textSize }: LocationLinkProps) => { href={locationDocsLink} target="_blank" > - {i18n.translate('xpack.synthetics.monitorList.geoName.helpLinkAnnotation', { + {i18n.translate('xpack.uptime.monitorList.geoName.helpLinkAnnotation', { defaultMessage: 'Add location', description: 'Text that instructs the user to navigate to our docs to add a geographic location to their data', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_page_link.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_page_link.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_page_link.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_page_link.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_page_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_page_link.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_page_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_page_link.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_tags.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_tags.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_tags.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_tags.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_tags.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_tags.tsx similarity index 98% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_tags.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_tags.tsx index 7483599cd8f1a..d794f14b0d6bc 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/monitor_tags.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/common/monitor_tags.tsx @@ -37,7 +37,7 @@ const getTagsFromPing = (ping: Ping) => { }; const getFilterLabel = (tag: string) => { - return i18n.translate('xpack.synthetics.monitorList.tags.filter', { + return i18n.translate('xpack.uptime.monitorList.tags.filter', { defaultMessage: 'Filter all monitors with tag {tag}', values: { tag, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_events.test.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_events.test.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_events.test.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_events.test.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_events.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_events.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_events.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_events.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/react_router_helpers/link_for_eui.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/step_detail_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/step_detail_link.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/step_detail_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/step_detail_link.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/uptime_date_picker.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/uptime_date_picker.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/uptime_date_picker.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/uptime_date_picker.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/uptime_date_picker.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/common/uptime_date_picker.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/common/uptime_date_picker.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/common/uptime_date_picker.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx similarity index 76% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx index b8dce759568a6..b07293df33778 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx @@ -30,7 +30,7 @@ export const DeprecateNoticeModal = ({ onCancel }: { onCancel: () => void }) => >

@@ -38,32 +38,32 @@ export const DeprecateNoticeModal = ({ onCancel }: { onCancel: () => void }) =>

  • void }) => ); }; -const HEADER_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.headerText', { +const HEADER_TEXT = i18n.translate('xpack.uptime.deprecateNoticeModal.headerText', { defaultMessage: 'Synthetic Monitoring is now available out of the box in Synthetics', }); -const GO_BACK_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.goBack', { +const GO_BACK_TEXT = i18n.translate('xpack.uptime.deprecateNoticeModal.goBack', { defaultMessage: 'Go back', }); -const READ_DOCS_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.readDocs', { +const READ_DOCS_TEXT = i18n.translate('xpack.uptime.deprecateNoticeModal.readDocs', { defaultMessage: 'read docs.', }); -const GO_SYNTHETICS_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.goToSynthetics', { +const GO_SYNTHETICS_TEXT = i18n.translate('xpack.uptime.deprecateNoticeModal.goToSynthetics', { defaultMessage: 'Go to Synthetics', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/index.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/index.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/index.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/index.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_custom_assets_extension.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_custom_assets_extension.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_custom_assets_extension.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_custom_assets_extension.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_create_extension.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_create_extension.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_create_extension.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_create_extension.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_edit_extension.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_edit_extension.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_edit_extension.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/lazy_synthetics_policy_edit_extension.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx similarity index 86% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx index 6ff5046f0792c..4f40203ef04e0 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx @@ -21,11 +21,11 @@ export const SyntheticsCustomAssetsExtension: PackageAssetsComponent = () => { const { http } = useKibana().services; const views: CustomAssetsAccordionProps['views'] = [ { - name: i18n.translate('xpack.synthetics.fleetIntegration.assets.name', { + name: i18n.translate('xpack.uptime.fleetIntegration.assets.name', { defaultMessage: 'Monitors', }), url: http?.basePath.prepend(`/app/${PLUGIN.SYNTHETICS_PLUGIN_ID}`) ?? '', - description: i18n.translate('xpack.synthetics.fleetIntegration.assets.description', { + description: i18n.translate('xpack.uptime.fleetIntegration.assets.description', { defaultMessage: 'View monitors in Synthetics', }), }, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_edit_policy_extension_wrapper.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_edit_policy_extension_wrapper.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_edit_policy_extension_wrapper.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_edit_policy_extension_wrapper.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_create_extension_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx similarity index 86% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx index 682b583f207a4..972050ce2f07c 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx @@ -11,9 +11,9 @@ import type { FleetStartServices } from '@kbn/fleet-plugin/public'; import { EuiButton, EuiCallOut } from '@elastic/eui'; import type { PackagePolicyEditExtensionComponentProps } from '@kbn/fleet-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { useEditMonitorLocator } from './use_edit_monitor_locator'; import { ConfigKey, DataStream } from '../../../../common/runtime_types'; import { DeprecateNoticeModal } from './deprecate_notice_modal'; -import { useEditMonitorLocator } from '../../../apps/synthetics/hooks'; /** * Exports Synthetics-specific package policy instructions @@ -61,13 +61,10 @@ export const SyntheticsPolicyEditExtensionWrapper = memo(undefined); + const syntheticsLocators = useKibana<{ + share: SharePluginSetup; + }>().services?.share?.url.locators; + const locator = (locators || syntheticsLocators)?.get(syntheticsEditMonitorLocatorID); + + useEffect(() => { + async function generateUrl() { + const url = await locator?.getUrl({ + configId, + }); + setEditUrl(url); + } + generateUrl(); + }, [locator, configId]); + + return editUrl; +} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/__snapshots__/monitor_charts.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/__snapshots__/monitor_charts.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/__snapshots__/monitor_charts.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/__snapshots__/monitor_charts.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap index aeab5ef85266d..9d670158bc53a 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/__snapshots__/confirm_delete.test.tsx.snap @@ -14,14 +14,14 @@ exports[`ML Confirm Job Delete shallow renders without errors 1`] = `

    @@ -42,7 +42,7 @@ exports[`ML Confirm Job Delete shallow renders without errors while loading 1`]

    ) diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/__snapshots__/ml_integerations.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/__snapshots__/ml_integerations.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/__snapshots__/ml_integerations.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/__snapshots__/ml_integerations.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx index 0ba5f139d8f28..0d8700ff41169 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_alert_delete.tsx @@ -29,7 +29,7 @@ export const ConfirmAlertDeletion: React.FC = ({ onConfirm, onCancel }) = >

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_delete.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_delete.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_delete.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_delete.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx similarity index 88% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx index ccbfbd917488a..a0d1d7b5c1732 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/confirm_delete.tsx @@ -31,14 +31,14 @@ export const ConfirmJobDeletion: React.FC = ({ loading, onConfirm, onCanc {!loading ? (

    ) : (

    ) @@ -47,7 +47,7 @@ export const ConfirmJobDeletion: React.FC = ({ loading, onConfirm, onCanc {!loading ? (

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/license_info.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/license_info.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/license_info.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/license_info.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/license_info.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/license_info.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/license_info.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/license_info.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/manage_ml_job.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/manage_ml_job.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/manage_ml_job.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/manage_ml_job.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx index 98c0b51be9105..4ed915ed07602 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout.tsx @@ -56,7 +56,7 @@ export function MLFlyoutView({ isCreatingJob, onClickCreate, onClose, canCreateM

    {labels.CREAT_ML_JOB_DESC}

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_flyout_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_integeration.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_integeration.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_integeration.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_integeration.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_integerations.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_integerations.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_integerations.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_integerations.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_job_link.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_job_link.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_job_link.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_job_link.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_job_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_job_link.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_job_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_job_link.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_manage_job.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_manage_job.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/ml_manage_job.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/ml_manage_job.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/translations.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/translations.tsx similarity index 65% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/translations.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/translations.tsx index 9236d809177af..6816dea66c180 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/translations.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/translations.tsx @@ -8,14 +8,14 @@ import { i18n } from '@kbn/i18n'; export const JOB_CREATED_SUCCESS_TITLE = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationTitle', { defaultMessage: 'Job successfully created', } ); export const JOB_CREATED_SUCCESS_MESSAGE = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText', { defaultMessage: 'The analysis is now running for response duration chart. It might take a while before results are added to the response times graph.', @@ -23,7 +23,7 @@ export const JOB_CREATED_SUCCESS_MESSAGE = i18n.translate( ); export const JOB_CREATED_LAZY_SUCCESS_MESSAGE = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedLazyNotificationText', { defaultMessage: 'The analysis is waiting for an ML node to become available. It might take a while before results are added to the response times graph.', @@ -31,14 +31,14 @@ export const JOB_CREATED_LAZY_SUCCESS_MESSAGE = i18n.translate( ); export const JOB_CREATION_FAILED = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationTitle', { defaultMessage: 'Job creation failed', } ); export const JOB_CREATION_FAILED_MESSAGE = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreationFailedNotificationText', { defaultMessage: 'Your current license may not allow for creating machine learning jobs, or this job may already exist.', @@ -46,119 +46,116 @@ export const JOB_CREATION_FAILED_MESSAGE = i18n.translate( ); export const JOB_DELETION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionNotificationTitle', { defaultMessage: 'Job deleted', } ); export const JOB_DELETION_SUCCESS = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionSuccessNotificationText', { defaultMessage: 'Job is successfully deleted', } ); export const JOB_DELETION_CONFIRMATION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobDeletionConfirmLabel', { defaultMessage: 'Delete anomaly detection job?', } ); export const VIEW_JOB = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.jobCreatedNotificationText.viewJobLinkText', { defaultMessage: 'View job', } ); -export const EXPLORE_IN_ML_APP = i18n.translate( - 'xpack.synthetics.ml.durationChart.exploreInMlApp', - { - defaultMessage: 'Explore in ML App', - } -); +export const EXPLORE_IN_ML_APP = i18n.translate('xpack.uptime.ml.durationChart.exploreInMlApp', { + defaultMessage: 'Explore in ML App', +}); export const ENABLE_ANOMALY_DETECTION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyDetectionTitle', { defaultMessage: 'Enable anomaly detection', } ); export const ANOMALY_DETECTION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.anomalyDetectionTitle', { defaultMessage: 'Anomaly detection', } ); export const DISABLE_ANOMALY_DETECTION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyDetectionTitle', { defaultMessage: 'Disable anomaly detection', } ); export const ENABLE_ANOMALY_ALERT = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.enableAnomalyAlert', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.enableAnomalyAlert', { defaultMessage: 'Enable anomaly alert', } ); export const ENABLE_ANOMALY_NO_PERMISSIONS_TOOLTIP = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.noPermissionsTooltip', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.noPermissionsTooltip', { defaultMessage: 'You need read-write access to Uptime to create anomaly alerts.', } ); export const DISABLE_ANOMALY_ALERT = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.disableAnomalyAlert', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.disableAnomalyAlert', { defaultMessage: 'Disable anomaly alert', } ); export const MANAGE_ANOMALY_DETECTION = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.manageAnomalyDetectionTitle', { defaultMessage: 'Manage anomaly detection', } ); export const ML_MANAGEMENT_PAGE = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.mlJobsPageLinkText', { defaultMessage: 'Machine Learning jobs management page', } ); export const TAKE_SOME_TIME_TEXT = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.manageMLJobDescription.noteText', { defaultMessage: 'Note: It might take a few minutes for the job to begin calculating results.', } ); export const CREATE_NEW_JOB = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.createNewJobButtonLabel', { defaultMessage: 'Create new job', } ); export const CANCEL_LABEL = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.cancelLabel', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.cancelLabel', { defaultMessage: 'Cancel', } ); export const CREAT_ML_JOB_DESC = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.createMLJobDescription', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.createMLJobDescription', { defaultMessage: `Here you can create a machine learning job to calculate anomaly scores on response durations for Uptime Monitor. Once enabled, the monitor duration chart on the details page @@ -168,14 +165,14 @@ export const CREAT_ML_JOB_DESC = i18n.translate( ); export const START_TRAIL = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrial', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.startTrial', { defaultMessage: 'Start free 14-day trial', } ); export const START_TRAIL_DESC = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.startTrialDesc', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.startTrialDesc', { defaultMessage: 'In order to access duration anomaly detection, you have to be subscribed to an Elastic Platinum license.', @@ -183,7 +180,7 @@ export const START_TRAIL_DESC = i18n.translate( ); export const ENABLE_MANAGE_JOB = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.enable_or_manage_job', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.enable_or_manage_job', { defaultMessage: 'You can enable anomaly detection job or if job is already there you can manage the job or alert.', @@ -191,7 +188,7 @@ export const ENABLE_MANAGE_JOB = i18n.translate( ); export const ADD_JOB_PERMISSIONS_NEEDED = i18n.translate( - 'xpack.synthetics.ml.enableAnomalyDetectionPanel.add_job_permissions_needed', + 'xpack.uptime.ml.enableAnomalyDetectionPanel.add_job_permissions_needed', { defaultMessage: 'Permissions needed', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/use_anomaly_alert.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/use_anomaly_alert.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ml/use_anomaly_alert.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ml/use_anomaly_alert.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_charts.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_charts.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_charts.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_charts.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_charts.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_charts.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_charts.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_charts.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx similarity index 89% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx index 562cfd8030095..1f10887ecb8d0 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration.tsx @@ -40,13 +40,13 @@ export const MonitorDurationComponent = ({

    {hasMLJob ? ( ) : ( )} @@ -58,7 +58,7 @@ export const MonitorDurationComponent = ({ {/* */} {/* */} - {/* */} + {/* */} {/* */} {/* */} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_duration/monitor_duration_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_title.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_title.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_title.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_title.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_title.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_title.tsx similarity index 89% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_title.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_title.tsx index 3b00f1e7e3d88..a15b941e4e935 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/monitor_title.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/monitor_title.tsx @@ -42,28 +42,28 @@ export const MonitorPageTitleContent: React.FC = () => { case 'http': return ( ); case 'tcp': return ( ); case 'icmp': return ( ); case 'browser': return ( ); @@ -85,7 +85,7 @@ export const MonitorPageTitleContent: React.FC = () => { {renderMonitorType(type)}{' '} @@ -100,7 +100,7 @@ export const MonitorPageTitleContent: React.FC = () => { target="_blank" > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_histogram/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_histogram/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_histogram/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_histogram/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_histogram/ping_histogram_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_histogram/ping_histogram_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_histogram/ping_histogram_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_histogram/ping_histogram_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/ping_headers.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/ping_headers.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/ping_headers.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/ping_headers.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx index 3e5104357463f..3f2ac5d4ba055 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/expand_row.tsx @@ -50,10 +50,10 @@ export const ExpandRowColumn = ({ item, expandedRows, setExpandedRows }: Props) isDisabled={!rowShouldExpand(item)} aria-label={ expandedRows[item.docId] - ? i18n.translate('xpack.synthetics.pingList.collapseRow', { + ? i18n.translate('xpack.uptime.pingList.collapseRow', { defaultMessage: 'Collapse', }) - : i18n.translate('xpack.synthetics.pingList.expandRow', { defaultMessage: 'Expand' }) + : i18n.translate('xpack.uptime.pingList.expandRow', { defaultMessage: 'Expand' }) } iconType={expandedRows[item.docId] ? 'arrowUp' : 'arrowDown'} /> diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/failed_step.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/failed_step.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/failed_step.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/failed_step.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_error.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_error.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_error.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_error.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx index e603e39f3193c..e63bc4f08e6a5 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_status.tsx @@ -56,7 +56,7 @@ export const PingStatusColumn = ({ pingStatus, item }: Props) => { - {i18n.translate('xpack.synthetics.pingList.recencyMessage', { + {i18n.translate('xpack.uptime.pingList.recencyMessage', { values: { fromNow: checkedTime }, defaultMessage: 'Checked {fromNow}', description: diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx index 4fe1e8424b90b..2627dcdc6c686 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_available.tsx @@ -26,7 +26,7 @@ export const NoImageAvailable = () => { @@ -54,7 +54,7 @@ export const LoadingImageState = () => { > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/no_image_display.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/ping_timestamp.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_caption.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/step_image_popover.tsx diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.ts new file mode 100644 index 0000000000000..f781610745ced --- /dev/null +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/translations.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 + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const prevAriaLabel = i18n.translate('xpack.uptime.synthetics.prevStepButton.airaLabel', { + defaultMessage: 'Previous step', +}); + +export const nextAriaLabel = i18n.translate('xpack.uptime.synthetics.nextStepButton.ariaLabel', { + defaultMessage: 'Next step', +}); + +export const imageLoadingSpinnerAriaLabel = i18n.translate( + 'xpack.uptime.synthetics.imageLoadingSpinner.ariaLabel', + { + defaultMessage: 'An animated spinner indicating the image is loading', + } +); + +export const fullSizeImageAlt = i18n.translate('xpack.uptime.synthetics.thumbnail.fullSize.alt', { + defaultMessage: `A larger version of the screenshot for this journey step's thumbnail.`, +}); + +export const formatCaptionContent = (stepNumber: number, totalSteps?: number) => + i18n.translate('xpack.uptime.synthetics.pingTimestamp.captionContent', { + defaultMessage: 'Step: {stepNumber} of {totalSteps}', + values: { + stepNumber, + totalSteps, + }, + }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/use_in_progress_image.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/use_in_progress_image.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/use_in_progress_image.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/ping_timestamp/use_in_progress_image.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/response_code.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/response_code.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/columns/response_code.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/columns/response_code.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/doc_link_body.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/doc_link_body.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/doc_link_body.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/doc_link_body.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx index e433e05cdab37..e8d786546c041 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/doc_link_body.tsx @@ -16,7 +16,7 @@ const bodyDocsLink = export const DocLinkForBody = () => { const docsLink = ( - {i18n.translate('xpack.synthetics.pingList.drawer.body.docsLink', { + {i18n.translate('xpack.uptime.pingList.drawer.body.docsLink', { defaultMessage: 'docs', description: 'Docs link to set response body', })} @@ -26,7 +26,7 @@ export const DocLinkForBody = () => { return ( diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/expanded_row.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/expanded_row.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/expanded_row.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/expanded_row.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx index 0d27d7cbb92b9..4335d098eff33 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/expanded_row.tsx @@ -33,14 +33,14 @@ const BodyDescription = ({ body }: { body: HttpResponseBody }) => { const truncatedText = contentBytes > 0 && contentBytes < bodyBytes - ? i18n.translate('xpack.synthetics.pingList.expandedRow.truncated', { + ? i18n.translate('xpack.uptime.pingList.expandedRow.truncated', { defaultMessage: 'Showing first {contentBytes} bytes.', values: { contentBytes }, }) : null; const bodySizeText = bodyBytes > 0 - ? i18n.translate('xpack.synthetics.pingList.expandedRow.bodySize', { + ? i18n.translate('xpack.uptime.pingList.expandedRow.bodySize', { defaultMessage: 'Body size is {bodyBytes}.', values: { bodyBytes: formatNumber(bodyBytes, '0b') }, }) @@ -59,7 +59,7 @@ export const PingListExpandedRowComponent = ({ ping }: Props) => { // Show the error block if (ping.error) { listItems.push({ - title: i18n.translate('xpack.synthetics.pingList.expandedRow.error', { + title: i18n.translate('xpack.uptime.pingList.expandedRow.error', { defaultMessage: 'Error', }), description: {ping.error.message}, @@ -71,7 +71,7 @@ export const PingListExpandedRowComponent = ({ ping }: Props) => { const body = ping.http.response.body; listItems.push({ - title: i18n.translate('xpack.synthetics.pingList.expandedRow.response_body', { + title: i18n.translate('xpack.uptime.pingList.expandedRow.response_body', { defaultMessage: 'Response Body', }), description: ( diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/headers.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/headers.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/headers.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/headers.tsx index bff0e91f2cd05..d40c1f08171a3 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/headers.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/headers.tsx @@ -30,7 +30,7 @@ export const PingHeaders = ({ headers }: Props) => { buttonContent={

    - {i18n.translate('xpack.synthetics.pingList.headers.title', { + {i18n.translate('xpack.uptime.pingList.headers.title', { defaultMessage: 'Response headers', })}

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/index.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/index.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/index.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/index.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/location_name.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/location_name.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/location_name.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/location_name.tsx index 67b6bcb362293..9801d2d227525 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/location_name.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/location_name.tsx @@ -21,7 +21,7 @@ export const LocationName = ({ location }: LocationNameProps) => href="https://www.elastic.co/guide/en/beats/heartbeat/current/configuration-observer-options.html" target="_blank" > - {i18n.translate('xpack.synthetics.locationName.helpLinkAnnotation', { + {i18n.translate('xpack.uptime.locationName.helpLinkAnnotation', { defaultMessage: 'Add location', description: 'Text that instructs the user to navigate to our docs to add a geographic location to their data', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_headers.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_headers.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_headers.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_headers.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx index 948172e1ea681..27141aa436d67 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list.tsx @@ -29,7 +29,7 @@ const MILLIS_LIMIT = ONE_SECOND_AS_MICROS * 1; export const formatDuration = (durationMicros: number) => { if (durationMicros < MILLIS_LIMIT) { - return i18n.translate('xpack.synthetics.pingList.durationMsColumnFormatting', { + return i18n.translate('xpack.uptime.pingList.durationMsColumnFormatting', { values: { millis: microsToMillis(durationMicros) }, defaultMessage: '{millis} ms', }); @@ -39,12 +39,12 @@ export const formatDuration = (durationMicros: number) => { // we format seconds with correct pluralization here and not for `ms` because it is much more likely users // will encounter times of exactly '1' second. if (seconds === '1') { - return i18n.translate('xpack.synthetics.pingist.durationSecondsColumnFormatting.singular', { + return i18n.translate('xpack.uptime.pingist.durationSecondsColumnFormatting.singular', { values: { seconds }, defaultMessage: '{seconds} second', }); } - return i18n.translate('xpack.synthetics.pingist.durationSecondsColumnFormatting', { + return i18n.translate('xpack.uptime.pingist.durationSecondsColumnFormatting', { values: { seconds }, defaultMessage: '{seconds} seconds', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx index 51e86627a1b0d..b94663630aee6 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_header.tsx @@ -18,7 +18,7 @@ export const PingListHeader = () => {

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx index 1dbda32925161..98ccc4524d48c 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_list_table.tsx @@ -128,7 +128,7 @@ export function PingListTable({ loading, error, pings, pagination, onChange, fai align: 'right', dataType: 'number', field: 'monitor.ip', - name: i18n.translate('xpack.synthetics.pingList.ipAddressColumnLabel', { + name: i18n.translate('xpack.uptime.pingList.ipAddressColumnLabel', { defaultMessage: 'IP', }), }, @@ -137,7 +137,7 @@ export function PingListTable({ loading, error, pings, pagination, onChange, fai { align: 'center', field: 'monitor.duration.us', - name: i18n.translate('xpack.synthetics.pingList.durationMsColumnLabel', { + name: i18n.translate('xpack.uptime.pingList.durationMsColumnLabel', { defaultMessage: 'Duration', }), render: (duration: number | null) => @@ -164,7 +164,7 @@ export function PingListTable({ loading, error, pings, pagination, onChange, fai { field: 'monitor.status', align: 'left', - name: i18n.translate('xpack.synthetics.pingList.columns.failedStep', { + name: i18n.translate('xpack.uptime.pingList.columns.failedStep', { defaultMessage: 'Failed step', }), render: (_timestamp: string, item: Ping) => ( @@ -234,10 +234,10 @@ export function PingListTable({ loading, error, pings, pagination, onChange, fai pagination={pagination} noItemsMessage={ loading - ? i18n.translate('xpack.synthetics.pingList.pingsLoadingMesssage', { + ? i18n.translate('xpack.uptime.pingList.pingsLoadingMesssage', { defaultMessage: 'Loading history...', }) - : i18n.translate('xpack.synthetics.pingList.pingsUnavailableMessage', { + : i18n.translate('xpack.uptime.pingList.pingsUnavailableMessage', { defaultMessage: 'No history found', }) } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx index 365a52e8f54fe..96628aac6e1cd 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/ping_redirects.tsx @@ -41,7 +41,7 @@ export const PingRedirects: React.FC = ({ monitorStatus, showTitle }) => iconType: 'popout', iconSize: 's', alwaysShow: true, - 'aria-label': i18n.translate('xpack.synthetics.monitorList.redirects.openWindow', { + 'aria-label': i18n.translate('xpack.uptime.monitorList.redirects.openWindow', { defaultMessage: 'Link will open in new window.', }), }, @@ -59,7 +59,7 @@ export const PingRedirects: React.FC = ({ monitorStatus, showTitle }) => color: 'text', iconType: 'popout', iconSize: 's', - 'aria-label': i18n.translate('xpack.synthetics.monitorList.redirects.openWindow', { + 'aria-label': i18n.translate('xpack.uptime.monitorList.redirects.openWindow', { defaultMessage: 'Link will open in new window.', }), alwaysShow: true, @@ -74,7 +74,7 @@ export const PingRedirects: React.FC = ({ monitorStatus, showTitle }) => {showTitle && (

    - {i18n.translate('xpack.synthetics.monitorList.redirects.title', { + {i18n.translate('xpack.uptime.monitorList.redirects.title', { defaultMessage: 'Redirects', })}

    @@ -83,7 +83,7 @@ export const PingRedirects: React.FC = ({ monitorStatus, showTitle }) => { - {i18n.translate('xpack.synthetics.monitorList.redirects.description', { + {i18n.translate('xpack.uptime.monitorList.redirects.description', { defaultMessage: 'Heartbeat followed {number} redirects while executing ping.', values: { number: list?.length ?? 0, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/response_code.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/response_code.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/response_code.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/response_code.test.tsx diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/translations.ts new file mode 100644 index 0000000000000..674b5c32332b4 --- /dev/null +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/translations.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const STATUS_LABEL = i18n.translate('xpack.uptime.pingList.statusColumnLabel', { + defaultMessage: 'Status', +}); + +export const RES_CODE_LABEL = i18n.translate('xpack.uptime.pingList.responseCodeColumnLabel', { + defaultMessage: 'Response code', +}); +export const ERROR_TYPE_LABEL = i18n.translate('xpack.uptime.pingList.errorTypeColumnLabel', { + defaultMessage: 'Error type', +}); +export const ERROR_LABEL = i18n.translate('xpack.uptime.pingList.errorColumnLabel', { + defaultMessage: 'Error', +}); + +export const LOCATION_LABEL = i18n.translate('xpack.uptime.pingList.locationNameColumnLabel', { + defaultMessage: 'Location', +}); + +export const TIMESTAMP_LABEL = i18n.translate('xpack.uptime.pingList.timestampColumnLabel', { + defaultMessage: 'Timestamp', +}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/use_pings.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/use_pings.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/use_pings.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/use_pings.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/ssl_certificate.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/ssl_certificate.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/ssl_certificate.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/ssl_certificate.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap index e944e7530ebb6..0abc23bfcd9c1 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/status_by_location.test.tsx.snap @@ -15,7 +15,7 @@ exports[`StatusByLocation component renders properly against props 1`] = `

    = ({ allLocations }) => { return ( = ({ monitorStatus }) => { onClick={() => setIsPopoverOpen(!isPopoverOpen)} data-test-subj="uptimeMonitorRedirectInfo" > - {i18n.translate('xpack.synthetics.monitorList.redirects.title.number', { + {i18n.translate('xpack.uptime.monitorList.redirects.title.number', { defaultMessage: '{number}', values: { number: list?.length ?? 0, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx index 5d421cbd4a448..211bc4117081a 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/ssl_certificate.tsx @@ -40,7 +40,7 @@ export const MonitorSSLCertificate = ({ tls }: Props) => { <> diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.test.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.test.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.test.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.test.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx index 82f8270ee3fc2..50e4ca36dabc5 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/status_bar/status_bar.tsx @@ -48,19 +48,19 @@ export const MonListDescription = styled(EuiDescriptionListDescription)` export const renderMonitorType = (type: string | undefined) => { switch (type) { case 'http': - return i18n.translate('xpack.synthetics.monitorDetails.statusBar.pingType.http', { + return i18n.translate('xpack.uptime.monitorDetails.statusBar.pingType.http', { defaultMessage: 'HTTP', }); case 'tcp': - return i18n.translate('xpack.synthetics.monitorDetails.statusBar.pingType.tcp', { + return i18n.translate('xpack.uptime.monitorDetails.statusBar.pingType.tcp', { defaultMessage: 'TCP', }); case 'icmp': - return i18n.translate('xpack.synthetics.monitorDetails.statusBar.pingType.icmp', { + return i18n.translate('xpack.uptime.monitorDetails.statusBar.pingType.icmp', { defaultMessage: 'ICMP', }); case 'browser': - return i18n.translate('xpack.synthetics.monitorDetails.statusBar.pingType.browser', { + return i18n.translate('xpack.uptime.monitorDetails.statusBar.pingType.browser', { defaultMessage: 'Browser', }); default: @@ -87,7 +87,7 @@ export const MonitorStatusBar: React.FC = () => { {OverallAvailability} {

    {locations.length <= 1 ? ( { /> ) : ( = ({ checkGroup, stepIndex @@ -94,7 +88,7 @@ export const WaterfallChartContainer: React.FC = ({ checkGroup, stepIndex } @@ -102,7 +96,7 @@ export const WaterfallChartContainer: React.FC = ({ checkGroup, stepIndex iconType="help" > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_chart_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_filter.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx index cdce5b1785983..44af409c03b42 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_flyout.tsx @@ -24,26 +24,26 @@ import { MiddleTruncatedText } from '../../waterfall'; import { WaterfallMetadataEntry } from '../../waterfall/types'; import { OnFlyoutClose } from '../../waterfall/components/use_flyout'; -export const DETAILS = i18n.translate('xpack.synthetics.synthetics.waterfall.flyout.details', { +export const DETAILS = i18n.translate('xpack.uptime.synthetics.waterfall.flyout.details', { defaultMessage: 'Details', }); export const CERTIFICATES = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.flyout.certificates', + 'xpack.uptime.synthetics.waterfall.flyout.certificates', { defaultMessage: 'Certificate headers', } ); export const REQUEST_HEADERS = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.flyout.requestHeaders', + 'xpack.uptime.synthetics.waterfall.flyout.requestHeaders', { defaultMessage: 'Request headers', } ); export const RESPONSE_HEADERS = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.flyout.responseHeaders', + 'xpack.uptime.synthetics.waterfall.flyout.responseHeaders', { defaultMessage: 'Response headers', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/step_detail/waterfall/waterfall_sidebar_item.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/translations.ts similarity index 86% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/translations.ts index cf7ab30c8867d..bc9bfb5fb352f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/translations.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; export const VIEW_PERFORMANCE = i18n.translate( - 'xpack.synthetics.pingList.synthetics.performanceBreakDown', + 'xpack.uptime.pingList.synthetics.performanceBreakDown', { defaultMessage: 'View performance breakdown', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/README.md b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/README.md similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/README.md rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/README.md diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/constants.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/constants.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/constants.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/constants.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/legend.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/legend.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/legend.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/legend.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx index f64ebcdbec054..7fe39a6b99fc4 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/middle_truncated_text.tsx @@ -146,12 +146,9 @@ export const MiddleTruncatedText = ({ type="lock" size="s" color="success" - aria-label={i18n.translate( - 'xpack.synthetics.waterfallChart.sidebar.url.https', - { - defaultMessage: 'https', - } - )} + aria-label={i18n.translate('xpack.uptime.waterfallChart.sidebar.url.https', { + defaultMessage: 'https', + })} /> )} {chunks.first} @@ -178,7 +175,7 @@ export const MiddleTruncatedText = ({ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx similarity index 79% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx index 4fac0b3cd00d2..fe45c45b13d25 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/network_requests_total.tsx @@ -28,13 +28,13 @@ export const NetworkRequestsTotal = ({ fetchedNetworkRequests ? ( @@ -45,7 +45,7 @@ export const NetworkRequestsTotal = ({ />{' '} {showHighlightedNetworkRequests && highlightedNetworkRequests >= 0 && ( fetchedNetworkRequests && ( )} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/sidebar.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/sidebar.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/sidebar.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/sidebar.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/styles.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/styles.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/styles.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/styles.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts similarity index 68% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts index 6bb0c03f7b99e..b63ffacaadd2e 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/translations.ts @@ -8,42 +8,42 @@ import { i18n } from '@kbn/i18n'; export const FILTER_REQUESTS_LABEL = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.searchBox.placeholder', + 'xpack.uptime.synthetics.waterfall.searchBox.placeholder', { defaultMessage: 'Filter network requests', } ); export const FILTER_SCREENREADER_LABEL = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.filterGroup.filterScreenreaderLabel', + 'xpack.uptime.synthetics.waterfall.filterGroup.filterScreenreaderLabel', { defaultMessage: 'Filter by', } ); export const FILTER_REMOVE_SCREENREADER_LABEL = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.filterGroup.removeFilterScreenReaderLabel', + 'xpack.uptime.synthetics.waterfall.filterGroup.removeFilterScreenReaderLabel', { defaultMessage: 'Remove filter by', } ); export const FILTER_POPOVER_OPEN_LABEL = i18n.translate( - 'xpack.synthetics.pingList.synthetics.waterfall.filters.popover', + 'xpack.uptime.pingList.synthetics.waterfall.filters.popover', { defaultMessage: 'Click to open waterfall filters', } ); export const FILTER_COLLAPSE_REQUESTS_LABEL = i18n.translate( - 'xpack.synthetics.pingList.synthetics.waterfall.filters.collapseRequestsLabel', + 'xpack.uptime.pingList.synthetics.waterfall.filters.collapseRequestsLabel', { defaultMessage: 'Collapse to only show matching requests', } ); export const SIDEBAR_FILTER_MATCHES_SCREENREADER_LABEL = i18n.translate( - 'xpack.synthetics.synthetics.waterfall.sidebar.filterMatchesScreenReaderLabel', + 'xpack.uptime.synthetics.waterfall.sidebar.filterMatchesScreenReaderLabel', { defaultMessage: 'Resource matches filter', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_bar_charts.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/use_flyout.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_bar_chart.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_bar_chart.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_bar_chart.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_bar_chart.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart_fixed_axis.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart_fixed_axis.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart_fixed_axis.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_chart_fixed_axis.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_flyout_table.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_flyout_table.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_flyout_table.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_flyout_table.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx similarity index 78% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx index 675224bfa8f79..4bef5fb041520 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/synthetics/waterfall/components/waterfall_marker_icon.tsx @@ -16,7 +16,7 @@ export function WaterfallMarkerIcon({ field, label }: { field: string; label: st if (!field) { return ( { autoSubmit={true} disableLanguageSwitcher={true} isInvalid={!!(inputVal && !query)} - placeholder={i18n.translate('xpack.synthetics.alerts.searchPlaceholder.kql', { + placeholder={i18n.translate('xpack.uptime.alerts.searchPlaceholder.kql', { defaultMessage: 'Filter using kql syntax', })} appName={appName} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alert_tls.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alert_tls.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alert_tls.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alert_tls.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_monitor_status.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_monitor_status.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_monitor_status.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_monitor_status.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_tls.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_tls.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_tls.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/alert_tls.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/toggle_alert_flyout_button.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/toggle_alert_flyout_button.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/toggle_alert_flyout_button.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/toggle_alert_flyout_button.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/uptime_alerts_flyout_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/uptime_alerts_flyout_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/uptime_alerts_flyout_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/uptime_alerts_flyout_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/use_snap_shot.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/use_snap_shot.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/alerts_containers/use_snap_shot.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/alerts_containers/use_snap_shot.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/anomaly_alert.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/anomaly_alert.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/anomaly_alert.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/anomaly_alert.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx index 68578a1262e80..21269c1e7a930 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/select_severity.tsx @@ -12,16 +12,16 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiHealth, EuiSpacer, EuiSuperSelect, EuiText } from '@elastic/eui'; import { getSeverityColor } from '@kbn/ml-anomaly-utils/get_severity_color'; -const warningLabel = i18n.translate('xpack.synthetics.controls.selectSeverity.warningLabel', { +const warningLabel = i18n.translate('xpack.uptime.controls.selectSeverity.warningLabel', { defaultMessage: 'warning', }); -const minorLabel = i18n.translate('xpack.synthetics.controls.selectSeverity.minorLabel', { +const minorLabel = i18n.translate('xpack.uptime.controls.selectSeverity.minorLabel', { defaultMessage: 'minor', }); -const majorLabel = i18n.translate('xpack.synthetics.controls.selectSeverity.majorLabel', { +const majorLabel = i18n.translate('xpack.uptime.controls.selectSeverity.majorLabel', { defaultMessage: 'major', }); -const criticalLabel = i18n.translate('xpack.synthetics.controls.selectSeverity.criticalLabel', { +const criticalLabel = i18n.translate('xpack.uptime.controls.selectSeverity.criticalLabel', { defaultMessage: 'critical', }); @@ -95,7 +95,7 @@ const getSeverityOptions = () =>

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts similarity index 58% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts index ea9aac0ddb48b..1249c66f92cbb 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/anomaly_alert/translations.ts @@ -8,20 +8,17 @@ import { i18n } from '@kbn/i18n'; export const AnomalyTranslations = { - criteriaAriaLabel: i18n.translate( - 'xpack.synthetics.alerts.anomaly.criteriaExpression.ariaLabel', - { - defaultMessage: 'An expression displaying the criteria for a selected monitor.', - } - ), - whenMonitor: i18n.translate('xpack.synthetics.alerts.anomaly.criteriaExpression.description', { + criteriaAriaLabel: i18n.translate('xpack.uptime.alerts.anomaly.criteriaExpression.ariaLabel', { + defaultMessage: 'An expression displaying the criteria for a selected monitor.', + }), + whenMonitor: i18n.translate('xpack.uptime.alerts.anomaly.criteriaExpression.description', { defaultMessage: 'When monitor', }), - scoreAriaLabel: i18n.translate('xpack.synthetics.alerts.anomaly.scoreExpression.ariaLabel', { + scoreAriaLabel: i18n.translate('xpack.uptime.alerts.anomaly.scoreExpression.ariaLabel', { defaultMessage: 'An expression displaying the criteria for an anomaly alert threshold.', }), hasAnomalyWithSeverity: i18n.translate( - 'xpack.synthetics.alerts.anomaly.scoreExpression.description', + 'xpack.uptime.alerts.anomaly.scoreExpression.description', { defaultMessage: 'has anomaly with severity', description: 'An expression displaying the criteria for an anomaly alert threshold.', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/down_number_select.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/down_number_select.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/down_number_select.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/down_number_select.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/time_expression_select.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/time_expression_select.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/time_expression_select.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/__snapshots__/time_expression_select.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/availability_expression_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/availability_expression_select.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/availability_expression_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/availability_expression_select.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/down_number_select.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/filters_expression_select.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/status_expression_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/status_expression_select.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/status_expression_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/status_expression_select.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_expression_select.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_unit_selectable.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_unit_selectable.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_unit_selectable.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/time_unit_selectable.tsx diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts new file mode 100644 index 0000000000000..ca00aabc8b9b3 --- /dev/null +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_expressions/translations.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const alertFilterLabels = { + USING: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.using', { + defaultMessage: 'Using', + }), + + USING_PORT: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.usingPort', { + defaultMessage: 'Using port', + }), + + ANY_PORT: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.anyPort', { + defaultMessage: 'any port', + }), + + WITH: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.with', { + defaultMessage: 'Using', + }), + + WITH_TAG: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.withTag', { + defaultMessage: 'With tag', + }), + + ANY_TAG: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.anyTag', { + defaultMessage: 'any tag', + }), + + OF: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.of', { + defaultMessage: 'Of', + }), + + OF_TYPE: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.ofType', { + defaultMessage: 'Of type', + }), + + ANY_TYPE: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.anyType', { + defaultMessage: 'any type', + }), + + FROM: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.from', { + defaultMessage: 'From', + }), + + FROM_LOCATION: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.fromLocation', { + defaultMessage: 'From location', + }), + + ANY_LOCATION: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.anyLocation', { + defaultMessage: 'any location', + }), + + REMOVE_FILTER_LABEL: (title: string) => + i18n.translate('xpack.uptime.alerts.monitorExpression.label', { + defaultMessage: 'Remove filter {title}', + values: { title }, + }), +}; + +export const statusExpLabels = { + ENABLED_CHECKBOX: i18n.translate('xpack.uptime.alerts.monitorStatus.statusEnabledCheck.label', { + defaultMessage: 'Status check', + }), +}; + +export const timeExpLabels = { + OPEN_TIME_POPOVER: i18n.translate( + 'xpack.uptime.alerts.monitorStatus.timerangeUnitExpression.ariaLabel', + { + defaultMessage: 'Open the popover for time range unit select field', + } + ), + SELECT_TIME_RANGE_ARIA: i18n.translate( + 'xpack.uptime.alerts.monitorStatus.timerangeUnitSelectable', + { + defaultMessage: 'Selectable field for the time range units alerts should use', + } + ), + SELECT_TIME_RANGE_HEADLINE: i18n.translate( + 'xpack.uptime.alerts.monitorStatus.timerangeSelectionHeader', + { + defaultMessage: 'Select time range unit', + } + ), +}; + +export const filterAriaLabels = { + PORT: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.port.label', { + defaultMessage: `Select port filters to apply to the alert's query.`, + }), + TAG: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.tag.label', { + defaultMessage: `Select tag filters to apply to the alert's query.`, + }), + SCHEME: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.scheme.label', { + defaultMessage: `Select protocol scheme filters to apply to the alert's query.`, + }), + LOCATION: i18n.translate('xpack.uptime.alerts.monitorStatus.filters.location.label', { + defaultMessage: `Select location filters to apply to the alert's query.`, + }), +}; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/add_filter_btn.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx similarity index 98% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx index 0ff17f22d5c00..40b10d2f1b9e9 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/alert_monitor_status.tsx @@ -123,7 +123,7 @@ export const AlertMonitorCount = ({ count, loading }: { count: number; loading?: title={ {' '} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx index 79db351b9706d..7d7ae73ba15f1 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_call_out.tsx @@ -23,7 +23,7 @@ export const OldAlertCallOut: React.FC = ({ isOldAlert }) => { size="s" title={ } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx index 2e93d7404bd57..7917ebe66a998 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/monitor_status_alert/old_alert_callout.test.tsx @@ -26,7 +26,7 @@ describe('OldAlertCallOut', () => { title={ } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx index e6d1348bfe87b..ee46b22ab5cf3 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/toggle_alert_flyout_button.tsx @@ -33,7 +33,7 @@ const ALERT_CONTEXT_MAIN_PANEL_ID = 0; const ALERT_CONTEXT_SELECT_TYPE_PANEL_ID = 1; const noWritePermissionsTooltipContent = i18n.translate( - 'xpack.synthetics.alertDropdown.noWritePermissions', + 'xpack.uptime.alertDropdown.noWritePermissions', { defaultMessage: 'You need read-write access to Uptime to create alerts in this app.', } @@ -81,7 +81,7 @@ export const ToggleAlertFlyoutButtonComponent: React.FC = ({ href={manageRulesUrl.href} > @@ -149,7 +149,7 @@ export const ToggleAlertFlyoutButtonComponent: React.FC = ({ onClick={() => setIsOpen(!isOpen)} > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/translations.ts similarity index 51% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/translations.ts index bbe794c118fcc..b246a718c1f18 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/translations.ts @@ -8,197 +8,188 @@ import { i18n } from '@kbn/i18n'; export const SECONDS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.secondsOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.secondsOption.ariaLabel', { defaultMessage: '"Seconds" time range select item', } ); -export const SECONDS = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeOption.seconds', - { - defaultMessage: 'seconds', - } -); +export const SECONDS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.seconds', { + defaultMessage: 'seconds', +}); export const MINUTES_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.minutesOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.minutesOption.ariaLabel', { defaultMessage: '"Minutes" time range select item', } ); -export const MINUTES = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeOption.minutes', - { - defaultMessage: 'minutes', - } -); +export const MINUTES = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.minutes', { + defaultMessage: 'minutes', +}); export const HOURS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.hoursOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.hoursOption.ariaLabel', { defaultMessage: '"Hours" time range select item', } ); -export const HOURS = i18n.translate('xpack.synthetics.alerts.monitorStatus.timerangeOption.hours', { +export const HOURS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.hours', { defaultMessage: 'hours', }); export const DAYS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.daysOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.daysOption.ariaLabel', { defaultMessage: '"Days" time range select item', } ); -export const DAYS = i18n.translate('xpack.synthetics.alerts.monitorStatus.timerangeOption.days', { +export const DAYS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.days', { defaultMessage: 'days', }); export const WEEKS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.weeksOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.weeksOption.ariaLabel', { defaultMessage: '"Weeks" time range select item', } ); -export const WEEKS = i18n.translate('xpack.synthetics.alerts.monitorStatus.timerangeOption.weeks', { +export const WEEKS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.weeks', { defaultMessage: 'weeks', }); export const MONTHS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.monthsOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.monthsOption.ariaLabel', { defaultMessage: '"Months" time range select item', } ); -export const MONTHS = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeOption.months', - { - defaultMessage: 'months', - } -); +export const MONTHS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.months', { + defaultMessage: 'months', +}); export const YEARS_TIME_RANGE = i18n.translate( - 'xpack.synthetics.alerts.timerangeUnitSelectable.yearsOption.ariaLabel', + 'xpack.uptime.alerts.timerangeUnitSelectable.yearsOption.ariaLabel', { defaultMessage: '"Years" time range select item', } ); -export const YEARS = i18n.translate('xpack.synthetics.alerts.monitorStatus.timerangeOption.years', { +export const YEARS = i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeOption.years', { defaultMessage: 'years', }); export const ALERT_KUERY_BAR_ARIA = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.filterBar.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.filterBar.ariaLabel', { defaultMessage: 'Input that allows filtering criteria for the monitor status alert', } ); export const OPEN_THE_POPOVER_DOWN_COUNT = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.numTimesExpression.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.numTimesExpression.ariaLabel', { defaultMessage: 'Open the popover for down count input', } ); export const ENTER_NUMBER_OF_DOWN_COUNTS = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.numTimesField.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.numTimesField.ariaLabel', { defaultMessage: 'Enter number of down counts required to trigger the alert', } ); export const MATCHING_MONITORS_DOWN = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.numTimesExpression.matchingMonitors.description', + 'xpack.uptime.alerts.monitorStatus.numTimesExpression.matchingMonitors.description', { defaultMessage: 'matching monitors are down >=', } ); export const ANY_MONITOR_DOWN = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.numTimesExpression.anyMonitors.description', + 'xpack.uptime.alerts.monitorStatus.numTimesExpression.anyMonitors.description', { defaultMessage: 'any monitor is down >=', } ); export const OPEN_THE_POPOVER_TIME_RANGE_VALUE = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeValueExpression.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.timerangeValueExpression.ariaLabel', { defaultMessage: 'Open the popover for time range value field', } ); export const ENTER_NUMBER_OF_TIME_UNITS = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeValueField.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.timerangeValueField.ariaLabel', { defaultMessage: `Enter the number of time units for the alert's range`, } ); export const ENTER_NUMBER_OF_TIME_UNITS_DESCRIPTION = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.timerangeValueField.expression', + 'xpack.uptime.alerts.monitorStatus.timerangeValueField.expression', { defaultMessage: 'within', } ); export const ENTER_NUMBER_OF_TIME_UNITS_VALUE = (value: number) => - i18n.translate('xpack.synthetics.alerts.monitorStatus.timerangeValueField.value', { + i18n.translate('xpack.uptime.alerts.monitorStatus.timerangeValueField.value', { defaultMessage: 'last {value}', values: { value }, }); export const ENTER_AVAILABILITY_RANGE_ENABLED = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.isEnabledCheckbox.label', + 'xpack.uptime.alerts.monitorStatus.availability.isEnabledCheckbox.label', { defaultMessage: 'Availability', } ); export const ENTER_AVAILABILITY_RANGE_POPOVER_ARIA_LABEL = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.popover.ariaLabel', { defaultMessage: 'Specify availability tracking time range', } ); export const ENTER_AVAILABILITY_RANGE_UNITS_ARIA_LABEL = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.ariaLabel', { defaultMessage: `Enter the number of units for the alert's availability check.`, } ); export const ENTER_AVAILABILITY_RANGE_UNITS_DESCRIPTION = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.timerangeValueField.expression', + 'xpack.uptime.alerts.monitorStatus.availability.timerangeValueField.expression', { defaultMessage: 'within the last', } ); export const ENTER_AVAILABILITY_THRESHOLD_ARIA_LABEL = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.threshold.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.availability.threshold.ariaLabel', { defaultMessage: 'Specify availability thresholds for this alert', } ); export const ENTER_AVAILABILITY_THRESHOLD_INPUT_ARIA_LABEL = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.threshold.input.ariaLabel', + 'xpack.uptime.alerts.monitorStatus.availability.threshold.input.ariaLabel', { defaultMessage: 'Input an availability threshold to check for this alert', } ); export const ENTER_AVAILABILITY_THRESHOLD_DESCRIPTION = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.threshold.description', + 'xpack.uptime.alerts.monitorStatus.availability.threshold.description', { defaultMessage: 'matching monitors are up in', description: @@ -207,7 +198,7 @@ export const ENTER_AVAILABILITY_THRESHOLD_DESCRIPTION = i18n.translate( ); export const ENTER_ANY_AVAILABILITY_THRESHOLD_DESCRIPTION = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.threshold.anyMonitorDescription', + 'xpack.uptime.alerts.monitorStatus.availability.threshold.anyMonitorDescription', { defaultMessage: 'any monitor is up in', description: @@ -216,7 +207,7 @@ export const ENTER_ANY_AVAILABILITY_THRESHOLD_DESCRIPTION = i18n.translate( ); export const ENTER_AVAILABILITY_THRESHOLD_VALUE = (value: string) => - i18n.translate('xpack.synthetics.alerts.monitorStatus.availability.threshold.value', { + i18n.translate('xpack.uptime.alerts.monitorStatus.availability.threshold.value', { defaultMessage: '< {value}% of checks', description: 'This fragment specifies criteria that will cause an alert to fire for uptime monitors', @@ -224,98 +215,92 @@ export const ENTER_AVAILABILITY_THRESHOLD_VALUE = (value: string) => }); export const ENTER_AVAILABILITY_RANGE_SELECT_ARIA = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.unit.selectable', + 'xpack.uptime.alerts.monitorStatus.availability.unit.selectable', { defaultMessage: 'Use this select to set the availability range units for this alert', } ); export const ENTER_AVAILABILITY_RANGE_SELECT_HEADLINE = i18n.translate( - 'xpack.synthetics.alerts.monitorStatus.availability.unit.headline', + 'xpack.uptime.alerts.monitorStatus.availability.unit.headline', { defaultMessage: 'Select time range unit', } ); -export const ADD_FILTER = i18n.translate('xpack.synthetics.alerts.monitorStatus.addFilter', { +export const ADD_FILTER = i18n.translate('xpack.uptime.alerts.monitorStatus.addFilter', { defaultMessage: `Add filter`, }); -export const LOCATION = i18n.translate('xpack.synthetics.alerts.monitorStatus.addFilter.location', { +export const LOCATION = i18n.translate('xpack.uptime.alerts.monitorStatus.addFilter.location', { defaultMessage: `Location`, }); -export const TAG = i18n.translate('xpack.synthetics.alerts.monitorStatus.addFilter.tag', { +export const TAG = i18n.translate('xpack.uptime.alerts.monitorStatus.addFilter.tag', { defaultMessage: `Tag`, }); -export const PORT = i18n.translate('xpack.synthetics.alerts.monitorStatus.addFilter.port', { +export const PORT = i18n.translate('xpack.uptime.alerts.monitorStatus.addFilter.port', { defaultMessage: `Port`, }); -export const TYPE = i18n.translate('xpack.synthetics.alerts.monitorStatus.addFilter.type', { +export const TYPE = i18n.translate('xpack.uptime.alerts.monitorStatus.addFilter.type', { defaultMessage: `Type`, }); export const TlsTranslations = { - criteriaAriaLabel: i18n.translate('xpack.synthetics.alerts.tls.criteriaExpression.ariaLabel', { + criteriaAriaLabel: i18n.translate('xpack.uptime.alerts.tls.criteriaExpression.ariaLabel', { defaultMessage: 'An expression displaying the criteria for monitor that are watched by this alert', }), - criteriaDescription: i18n.translate( - 'xpack.synthetics.alerts.tls.criteriaExpression.description', - { - defaultMessage: 'when', - description: - 'The context of this `when` is in the conditional sense, like "when there are three cookies, eat them all".', - } - ), - criteriaValue: i18n.translate('xpack.synthetics.tls.criteriaExpression.value', { + criteriaDescription: i18n.translate('xpack.uptime.alerts.tls.criteriaExpression.description', { + defaultMessage: 'when', + description: + 'The context of this `when` is in the conditional sense, like "when there are three cookies, eat them all".', + }), + criteriaValue: i18n.translate('xpack.uptime.tls.criteriaExpression.value', { defaultMessage: 'matching monitor', }), - expirationDescription: i18n.translate('xpack.synthetics.tls.expirationExpression.description', { + expirationDescription: i18n.translate('xpack.uptime.tls.expirationExpression.description', { defaultMessage: 'has a certificate expiring within days: ', }), - ageDescription: i18n.translate('xpack.synthetics.tls.ageExpression.description', { + ageDescription: i18n.translate('xpack.uptime.tls.ageExpression.description', { defaultMessage: 'or older than days: ', }), }; export const ToggleFlyoutTranslations = { - toggleButtonAriaLabel: i18n.translate('xpack.synthetics.alertsPopover.toggleButton.ariaLabel', { + toggleButtonAriaLabel: i18n.translate('xpack.uptime.alertsPopover.toggleButton.ariaLabel', { defaultMessage: 'Open alerts and rules context menu', }), - openAlertContextPanelAriaLabel: i18n.translate( - 'xpack.synthetics.openAlertContextPanel.ariaLabel', - { - defaultMessage: 'Open the rule context panel so you can choose a rule type', - } - ), - openAlertContextPanelLabel: i18n.translate('xpack.synthetics.openAlertContextPanel.label', { + openAlertContextPanelAriaLabel: i18n.translate('xpack.uptime..openAlertContextPanel.ariaLabel', { + defaultMessage: 'Open the rule context panel so you can choose a rule type', + }), + openAlertContextPanelLabel: i18n.translate('xpack.uptime.openAlertContextPanel.label', { defaultMessage: 'Create rule', }), - toggleTlsAriaLabel: i18n.translate('xpack.synthetics.toggleTlsAlertButton.ariaLabel', { + toggleTlsAriaLabel: i18n.translate('xpack.uptime.toggleTlsAlertButton.ariaLabel', { defaultMessage: 'Open TLS rule flyout', }), - toggleTlsContent: i18n.translate('xpack.synthetics.toggleTlsAlertButton.content', { + toggleTlsContent: i18n.translate('xpack.uptime.toggleTlsAlertButton.content', { defaultMessage: 'TLS rule', }), - toggleMonitorStatusAriaLabel: i18n.translate('xpack.synthetics.toggleAlertFlyout.ariaLabel', { + toggleMonitorStatusAriaLabel: i18n.translate('xpack.uptime.toggleAlertFlyout.ariaLabel', { defaultMessage: 'Open add rule flyout', }), - toggleMonitorStatusContent: i18n.translate('xpack.synthetics.toggleAlertButton.content', { + toggleMonitorStatusContent: i18n.translate('xpack.uptime.toggleAlertButton.content', { defaultMessage: 'Monitor status rule', }), - navigateToAlertingUIAriaLabel: i18n.translate('xpack.synthetics.navigateToAlertingUi', { + navigateToAlertingUIAriaLabel: i18n.translate('xpack.uptime.navigateToAlertingUi', { defaultMessage: 'Leave Uptime and go to Alerting Management page', }), navigateToAlertingButtonContent: i18n.translate( - 'xpack.synthetics.navigateToAlertingButton.content', + 'xpack.uptime..navigateToAlertingButton.content', { defaultMessage: 'Manage rules', } ), - toggleAlertFlyoutButtonLabel: i18n.translate('xpack.synthetics.alerts.createRulesPanel.title', { + toggleAlertFlyoutButtonLabel: i18n.translate('xpack.uptime.alerts.createRulesPanel.title', { defaultMessage: 'Create rules', }), }; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/uptime_alerts_flyout_wrapper.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/uptime_alerts_flyout_wrapper.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/alerts/uptime_alerts_flyout_wrapper.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/alerts/uptime_alerts_flyout_wrapper.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx index 078e845e4ea40..224eaffa5f16a 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_error.tsx @@ -30,14 +30,14 @@ export const EmptyStateError = ({ errors }: EmptyStateErrorProps) => { {unauthorized ? (

    - {i18n.translate('xpack.synthetics.emptyStateError.notAuthorized', { + {i18n.translate('xpack.uptime.emptyStateError.notAuthorized', { defaultMessage: 'You are not authorized to view Uptime data, please contact your system administrator.', })}

    ) : (

    - {i18n.translate('xpack.synthetics.emptyStateError.title', { + {i18n.translate('xpack.uptime.emptyStateError.title', { defaultMessage: 'Error', })}

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx index 0f71c9bafa962..0943f581f049b 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/empty_state_loading.tsx @@ -17,7 +17,7 @@ export const EmptyStateLoading = () => (

    - {i18n.translate('xpack.synthetics.emptyState.loadingMessage', { + {i18n.translate('xpack.uptime.emptyState.loadingMessage', { defaultMessage: 'Loading…', })}

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/use_has_data.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/use_has_data.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/empty_state/use_has_data.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/empty_state/use_has_data.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/filter_group.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/filter_group.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/filter_group.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/filter_group.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/filter_group.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/filter_group.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/filter_group.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/filter_group.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/selected_filters.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/selected_filters.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/selected_filters.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/selected_filters.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/translations.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/translations.tsx similarity index 56% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/translations.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/translations.tsx index e1cf5e20e14c3..5882631dd8f3f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/filter_group/translations.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/filter_group/translations.tsx @@ -8,17 +8,17 @@ import { i18n } from '@kbn/i18n'; export const filterLabels = { - LOCATION: i18n.translate('xpack.synthetics.filterBar.options.location.name', { + LOCATION: i18n.translate('xpack.uptime.filterBar.options.location.name', { defaultMessage: 'Location', }), - PORT: i18n.translate('xpack.synthetics.filterBar.options.portLabel', { defaultMessage: 'Port' }), + PORT: i18n.translate('xpack.uptime.filterBar.options.portLabel', { defaultMessage: 'Port' }), - SCHEME: i18n.translate('xpack.synthetics.filterBar.options.schemeLabel', { + SCHEME: i18n.translate('xpack.uptime.filterBar.options.schemeLabel', { defaultMessage: 'Scheme', }), - TAG: i18n.translate('xpack.synthetics.filterBar.options.tagsLabel', { + TAG: i18n.translate('xpack.uptime.filterBar.options.tagsLabel', { defaultMessage: 'Tag', }), }; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/index.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/index.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/index.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/index.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx index 17baeb741cbce..deef965b30226 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/integration_deprecation/integration_deprecation_callout.tsx @@ -21,7 +21,7 @@ export function IntegrationDeprecationCallout({ } @@ -31,7 +31,7 @@ export function IntegrationDeprecationCallout({ @@ -59,7 +59,7 @@ export function IntegrationDeprecationCallout({ color="warning" > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/filter_status_button.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/__snapshots__/status_filter.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/cert_status_column.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/cert_status_column.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/cert_status_column.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/cert_status_column.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx index 5bb676178d9a7..0a6040249a663 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/define_connectors.tsx @@ -36,7 +36,7 @@ export const DefineAlertConnectors = ({ helpText={ showHelpText ? ( @@ -80,12 +80,12 @@ export const DefineAlertConnectors = ({ data-test-subj={'uptimeSettingsLink'} > {' '}
    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/enable_alert.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx index e3fffde5937a7..17fe3c88a0d66 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_name_col.tsx @@ -51,7 +51,7 @@ export const MonitorNameColumn = ({ summary }: Props) => { useFilterUpdate('monitor.type', filterType, excludedTypeFilters); - const filterLabel = i18n.translate('xpack.synthetics.monitorList.monitorType.filter', { + const filterLabel = i18n.translate('xpack.uptime.monitorList.monitorType.filter', { defaultMessage: 'Filter all monitors with type {type}', values: { type: summary.state.monitor.type, diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx index 6b04eb5a7f594..bfeaa7ac4eb67 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/monitor_status_column.tsx @@ -101,7 +101,7 @@ export const getLocationStatus = (summaryPings: Ping[], status: string) => { const upsMessage = upPings.size > 0 - ? i18n.translate('xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.up', { + ? i18n.translate('xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.up', { defaultMessage: 'Up in {locs}', values: { locs: [...upPings].join(', ') }, }) @@ -109,7 +109,7 @@ export const getLocationStatus = (summaryPings: Ping[], status: string) => { const downMessage = downPings.size > 0 - ? i18n.translate('xpack.synthetics.monitorList.statusColumn.locStatusMessage.tooltip.down', { + ? i18n.translate('xpack.uptime.monitorList.statusColumn.locStatusMessage.tooltip.down', { defaultMessage: 'Down in {locs}', values: { locs: [...downPings].join(', ') }, }) @@ -129,7 +129,7 @@ export const getLocationStatus = (summaryPings: Ping[], status: string) => { if (totalLocations > 1) { return { statusMessage: i18n.translate( - 'xpack.synthetics.monitorList.statusColumn.locStatusMessage.multiple', + 'xpack.uptime.monitorList.statusColumn.locStatusMessage.multiple', { defaultMessage: 'in {noLoc} locations', values: { noLoc: statusMessage }, @@ -146,7 +146,7 @@ export const getLocationStatus = (summaryPings: Ping[], status: string) => { } return { - statusMessage: i18n.translate('xpack.synthetics.monitorList.statusColumn.locStatusMessage', { + statusMessage: i18n.translate('xpack.uptime.monitorList.statusColumn.locStatusMessage', { defaultMessage: 'in {noLoc} location', values: { noLoc: statusMessage }, }), @@ -207,7 +207,7 @@ export const MonitorListStatusColumn = ({ }; const getCheckedLabel = (timestamp: Moment) => { - return i18n.translate('xpack.synthetics.monitorList.statusColumn.checkedTimestamp', { + return i18n.translate('xpack.uptime.monitorList.statusColumn.checkedTimestamp', { defaultMessage: 'Checked {timestamp}', values: { timestamp: getShortTimeStamp(timestamp) }, }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/status_badge.tsx diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts new file mode 100644 index 0000000000000..279307975d588 --- /dev/null +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/columns/translations.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const ENABLE_STATUS_ALERT = i18n.translate('xpack.uptime.monitorList.enableDownAlert', { + defaultMessage: 'Enable status alerts', +}); + +export const DISABLE_STATUS_ALERT = i18n.translate('xpack.uptime.monitorList.disableDownAlert', { + defaultMessage: 'Disable status alerts', +}); + +export const EXPAND_TAGS_LABEL = i18n.translate('xpack.uptime.monitorList.tags.expand', { + defaultMessage: 'Click to view remaining tags', +}); + +export const EXPAND_LOCATIONS_LABEL = i18n.translate('xpack.uptime.monitorList.locations.expand', { + defaultMessage: 'Click to view remaining locations', +}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/filter_status_button.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/filter_status_button.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/filter_status_button.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/filter_status_button.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/filter_status_button.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/filter_status_button.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/filter_status_button.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/filter_status_button.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx similarity index 98% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx index 03bf3cbf09c4b..38c3c64dc37da 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.test.tsx @@ -281,7 +281,7 @@ describe('MonitorList component', () => { await waitFor(() => { expect( - queryByTestId('xpack.synthetics.monitorList.always-down.expandMonitorDetail') + queryByTestId('xpack.uptime.monitorList.always-down.expandMonitorDetail') ).not.toBeInTheDocument(); expect(queryByText('Downtime history')).not.toBeInTheDocument(); }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx similarity index 98% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx index ce4e6eda9caa2..0543a2676791f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list.tsx @@ -256,14 +256,14 @@ export const MonitorListComponent: ({ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_group.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_group.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_group.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_group.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_link.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_link.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_link.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/integration_link.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/monitor_list_drawer.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/monitor_list_drawer.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/monitor_list_drawer.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/monitor_list_drawer.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/most_recent_error.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/most_recent_error.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/most_recent_error.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/__snapshots__/most_recent_error.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx index 9a8b660cb41bb..dfac5435724ed 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover.tsx @@ -34,7 +34,7 @@ export const ActionsPopoverComponent = ({ button={ togglePopoverIsVisible({ id: popoverId, open: true })} iconType="arrowDown" iconSide="right" > {i18n.translate( - 'xpack.synthetics.monitorList.observabilityInvestigateColumn.popoverIconButton.label', + 'xpack.uptime.monitorList.observabilityInvestigateColumn.popoverIconButton.label', { defaultMessage: 'Investigate', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/actions_popover_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx similarity index 81% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx index 51d24978026e4..40374e6d49d71 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_group.tsx @@ -60,20 +60,20 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { {isApmAvailable ? ( { { href={getInfraIpHref(summary, basePath)} iconType="metricsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.ip.message', + 'xpack.uptime.monitorList.infraIntegrationAction.ip.message', { defaultMessage: 'Show host metrics', description: `A message explaining that this link will take the user to the Infrastructure UI, filtered for this monitor's IP Address`, } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.ip.tooltip', + 'xpack.uptime.monitorList.infraIntegrationAction.ip.tooltip', { defaultMessage: 'Check Infrastructure UI for the IP "{ip}"', values: { @@ -121,7 +121,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { { href={getInfraKubernetesHref(summary, basePath)} iconType="metricsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.message', + 'xpack.uptime.monitorList.infraIntegrationAction.kubernetes.message', { defaultMessage: 'Show pod metrics', description: @@ -138,7 +138,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.kubernetes.tooltip', + 'xpack.uptime.monitorList.infraIntegrationAction.kubernetes.tooltip', { defaultMessage: 'Check Infrastructure UI for pod UID "{podUid}".', values: { @@ -151,7 +151,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { { href={getInfraContainerHref(summary, basePath)} iconType="metricsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.container.message', + 'xpack.uptime.monitorList.infraIntegrationAction.container.message', { defaultMessage: 'Show container metrics', } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.infraIntegrationAction.docker.tooltip', + 'xpack.uptime.monitorList.infraIntegrationAction.docker.tooltip', { defaultMessage: 'Check Infrastructure UI for container ID "{containerId}"', values: { @@ -182,7 +182,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { { href={getLoggingIpHref(summary, basePath)} iconType="logsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.ip.message', + 'xpack.uptime.monitorList.loggingIntegrationAction.ip.message', { defaultMessage: 'Show host logs', description: `A message explaining that this link will take the user to the Infrastructure UI filtered for the monitor's IP Address`, } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.ip.tooltip', + 'xpack.uptime.monitorList.loggingIntegrationAction.ip.tooltip', { defaultMessage: 'Check Logging UI for the IP "{ip}"', values: { @@ -211,7 +211,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { { href={getLoggingKubernetesHref(summary, basePath)} iconType="logsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.message', + 'xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.message', { defaultMessage: 'Show pod logs', } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.kubernetes.tooltip', + 'xpack.uptime.monitorList.loggingIntegrationAction.kubernetes.tooltip', { defaultMessage: 'Check for logs for pod UID "{podUid}"', values: { @@ -238,7 +238,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { { href={getLoggingContainerHref(summary, basePath)} iconType="logsApp" message={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.container.message', + 'xpack.uptime.monitorList.loggingIntegrationAction.container.message', { defaultMessage: 'Show container logs', } )} tooltipContent={i18n.translate( - 'xpack.synthetics.monitorList.loggingIntegrationAction.container.tooltip', + 'xpack.uptime.monitorList.loggingIntegrationAction.container.tooltip', { defaultMessage: 'Check Logging UI for container ID "{containerId}"', values: { @@ -269,7 +269,7 @@ export const IntegrationGroup = ({ summary }: IntegrationGroupProps) => { ); }; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx index b926db58830ea..fd8b092aea4d9 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/actions_popover/integration_link.tsx @@ -28,7 +28,7 @@ export const IntegrationLink = ({ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/data.json b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/data.json similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/data.json rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/data.json diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx index ec9eda6f8ca99..1875f4d335b0f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/enabled_alerts.tsx @@ -52,7 +52,7 @@ export const EnabledAlerts = ({ monitorAlerts, loading }: Props) => { return ( - {i18n.translate('xpack.synthetics.monitorList.enabledAlerts.title', { + {i18n.translate('xpack.uptime.monitorList.enabledAlerts.title', { defaultMessage: 'Enabled rules', description: 'Rules enabled for this monitor', })} @@ -61,7 +61,7 @@ export const EnabledAlerts = ({ monitorAlerts, loading }: Props) => { {listItems.length === 0 && !loading && ( diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_group.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_group.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_group.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_group.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_link.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_link.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_link.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/integration_link.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/list_drawer_container.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/list_drawer_container.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/list_drawer_container.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/list_drawer_container.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_list_drawer.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx similarity index 97% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx index 753ae0b1390db..a0cc61e108d61 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_list.tsx @@ -57,7 +57,7 @@ export const MonitorStatusList = ({ summaryPings }: MonitorStatusListProps) => { }} /> diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx similarity index 94% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx index 7804b9bc94b5e..0ee2724bbbaa7 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/monitor_status_row.tsx @@ -38,7 +38,7 @@ export const MonitorStatusRow = ({ locationNames, status }: MonitorStatusRowProp {getHealthMessage(status)} { return ( - {i18n.translate('xpack.synthetics.monitorList.drawer.url', { + {i18n.translate('xpack.uptime.monitorList.drawer.url', { defaultMessage: 'Url', })} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx index 59d1a2bfbb80c..cad19f46cfea3 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_error.tsx @@ -45,7 +45,7 @@ export const MostRecentError = ({ error, monitorId, timestamp }: MostRecentError return ( - {i18n.translate('xpack.synthetics.monitorList.mostRecentError.title', { + {i18n.translate('xpack.uptime.monitorList.mostRecentError.title', { defaultMessage: 'Most recent error ({timestamp})', values: { timestamp: timestampStr }, description: 'Most Recent Error title in Monitor List Expanded row', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx similarity index 92% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx index 06bb51c959404..690c8af5984c2 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_drawer/most_recent_run.tsx @@ -24,7 +24,7 @@ export const MostRecentRun = ({ summary }: Props) => { return ( - {i18n.translate('xpack.synthetics.monitorList.drawer.mostRecentRun', { + {i18n.translate('xpack.uptime.monitorList.drawer.mostRecentRun', { defaultMessage: 'Most recent test run', })} diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx index 146f4315c42c7..65de80cde31cc 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_header.tsx @@ -22,7 +22,7 @@ export const MonitorListHeader: React.FC = () => {

    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx index f63114d12d5b0..9b7e2a1917835 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.test.tsx @@ -17,11 +17,11 @@ describe('MonitorListPageSizeSelect', () => { ); wrapper - .find('[data-test-subj="xpack.synthetics.monitorList.pageSizeSelect.popoverOpen"]') + .find('[data-test-subj="xpack.uptime.monitorList.pageSizeSelect.popoverOpen"]') .first() .simulate('click'); wrapper - .find('[data-test-subj="xpack.synthetics.monitorList.pageSizeSelect.sizeSelectItem25"]') + .find('[data-test-subj="xpack.uptime.monitorList.pageSizeSelect.sizeSelectItem25"]') .first() .simulate('click'); expect(setSize).toHaveBeenCalledTimes(1); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx similarity index 85% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx index 75a9f92c3dacb..369bcb124eba0 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/monitor_list_page_size_select.tsx @@ -18,13 +18,13 @@ interface PopoverButtonProps { const PopoverButton: React.FC = ({ setIsOpen, size }) => ( setIsOpen(true)} > @@ -39,22 +39,22 @@ interface ContextItemProps { const items: ContextItemProps[] = [ { - 'data-test-subj': 'xpack.synthetics.monitorList.pageSizeSelect.sizeSelectItem10', + 'data-test-subj': 'xpack.uptime.monitorList.pageSizeSelect.sizeSelectItem10', key: '10 rows', numRows: 10, }, { - 'data-test-subj': 'xpack.synthetics.monitorList.pageSizeSelect.sizeSelectItem25', + 'data-test-subj': 'xpack.uptime.monitorList.pageSizeSelect.sizeSelectItem25', key: '25 rows', numRows: 25, }, { - 'data-test-subj': 'xpack.synthetics.monitorList.pageSizeSelect.sizeSelectItem50', + 'data-test-subj': 'xpack.uptime.monitorList.pageSizeSelect.sizeSelectItem50', key: '50 rows', numRows: 50, }, { - 'data-test-subj': 'xpack.synthetics.monitorList.pageSizeSelect.sizeSelectItem100', + 'data-test-subj': 'xpack.uptime.monitorList.pageSizeSelect.sizeSelectItem100', key: '100 rows', numRows: 100, }, @@ -121,7 +121,7 @@ export const MonitorListPageSizeSelectComponent: React.FC = ({ }} > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/no_items_meesage.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/no_items_meesage.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/no_items_meesage.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/no_items_meesage.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/no_items_message.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/no_items_message.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/no_items_message.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/no_items_message.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx similarity index 85% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx index 5ec45868073c2..1efc3e317113a 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/overview_page_link.tsx @@ -31,14 +31,14 @@ export const OverviewPageLink: FunctionComponent = ({ const ariaLabel = direction === 'next' - ? i18n.translate('xpack.synthetics.overviewPageLink.next.ariaLabel', { + ? i18n.translate('xpack.uptime.overviewPageLink.next.ariaLabel', { defaultMessage: 'Next page of results', }) - : i18n.translate('xpack.synthetics.overviewPageLink.prev.ariaLabel', { + : i18n.translate('xpack.uptime.overviewPageLink.prev.ariaLabel', { defaultMessage: 'Prev page of results', }); - const disableLinkLabel = i18n.translate('xpack.synthetics.overviewPageLink.disabled.ariaLabel', { + const disableLinkLabel = i18n.translate('xpack.uptime.overviewPageLink.disabled.ariaLabel', { defaultMessage: 'A disabled pagination button indicating that there cannot be any further navigation in the monitors list.', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.test.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.test.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.test.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.test.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/parse_timestamp.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/status_filter.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/status_filter.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/status_filter.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/status_filter.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx index 9147784f1aafc..15613307f3a1e 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/status_filter.tsx @@ -24,7 +24,7 @@ export const StatusFilter: React.FC = () => { return ( { - return i18n.translate('xpack.synthetics.monitorList.expandDrawerButton.ariaLabel', { + return i18n.translate('xpack.uptime.monitorList.expandDrawerButton.ariaLabel', { defaultMessage: 'Expand row for monitor with ID {id}', description: 'The user can click a button on this table and expand further details.', values: { @@ -40,7 +37,7 @@ export const getExpandDrawerLabel = (id: string) => { }; export const getDescriptionLabel = (itemsLength: number) => { - return i18n.translate('xpack.synthetics.monitorList.table.description', { + return i18n.translate('xpack.uptime.monitorList.table.description', { defaultMessage: 'Monitor Status table with columns for Status, Name, URL, IP, Downtime History and Integrations. The table is currently displaying {length} items.', values: { length: itemsLength }, @@ -48,7 +45,7 @@ export const getDescriptionLabel = (itemsLength: number) => { }; export const NO_MONITOR_ITEM_SELECTED = i18n.translate( - 'xpack.synthetics.monitorList.noItemForSelectedFiltersMessage', + 'xpack.uptime.monitorList.noItemForSelectedFiltersMessage', { defaultMessage: 'No monitors found for selected filter criteria', description: @@ -56,19 +53,16 @@ export const NO_MONITOR_ITEM_SELECTED = i18n.translate( } ); -export const LOADING = i18n.translate('xpack.synthetics.monitorList.loading', { +export const LOADING = i18n.translate('xpack.uptime.monitorList.loading', { defaultMessage: 'Loading...', description: 'Shown when the monitor list is waiting for a server response', }); -export const NO_DATA_MESSAGE = i18n.translate('xpack.synthetics.monitorList.noItemMessage', { +export const NO_DATA_MESSAGE = i18n.translate('xpack.uptime.monitorList.noItemMessage', { defaultMessage: 'No uptime monitors found', description: 'This message is shown if the monitors table is rendered but has no items.', }); -export const STATUS_ALERT_COLUMN = i18n.translate( - 'xpack.synthetics.monitorList.statusAlert.label', - { - defaultMessage: 'Status alert', - } -); +export const STATUS_ALERT_COLUMN = i18n.translate('xpack.uptime.monitorList.statusAlert.label', { + defaultMessage: 'Status alert', +}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx similarity index 91% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx index 5d3e9a9332962..b9027dc1e3b93 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/troubleshoot_popover.tsx @@ -55,7 +55,7 @@ export const TroubleshootPopover = () => {

    @@ -85,21 +85,21 @@ export const TroubleshootPopover = () => { }; export const APPLY_ABSOLUTE_DATE_RANGE = i18n.translate( - 'xpack.synthetics.monitorList.troubleshoot.tryDateRange', + 'xpack.uptime.monitorList.troubleshoot.tryDateRange', { defaultMessage: 'Apply absolute date range', } ); export const WHERE_ARE_MY_MONITORS = i18n.translate( - 'xpack.synthetics.monitorList.troubleshoot.whereAreMyMonitors', + 'xpack.uptime.monitorList.troubleshoot.whereAreMyMonitors', { defaultMessage: 'Where are my monitors?', } ); export const SYSTEM_CLOCK_OUT_OF_SYNC = i18n.translate( - 'xpack.synthetics.monitorList.troubleshoot.systemClockOutOfSync', + 'xpack.uptime.monitorList.troubleshoot.systemClockOutOfSync', { defaultMessage: 'System clock may be out of sync', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/types.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/types.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/types.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/types.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/monitor_list/use_monitor_histogram.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/query_bar.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/query_bar.tsx similarity index 97% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/query_bar.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/query_bar.tsx index 139952c5c6302..8f3f88bd039fe 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/query_bar.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/query_bar.tsx @@ -83,7 +83,7 @@ export const QueryBar = () => { submitImmediately(); }} query={{ ...query, query: inputVal }} - aria-label={i18n.translate('xpack.synthetics.filterBar.ariaLabel', { + aria-label={i18n.translate('xpack.uptime.filterBar.ariaLabel', { defaultMessage: 'Input filter criteria for the overview page', })} data-test-subj="uptimeSearchBarInput" diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/translations.ts similarity index 77% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/translations.ts index 40730e72c4723..7a950e62894e0 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/translations.ts @@ -7,13 +7,13 @@ import { i18n } from '@kbn/i18n'; -export const KQL_PLACE_HOLDER = i18n.translate('xpack.synthetics.kueryBar.searchPlaceholder.kql', { +export const KQL_PLACE_HOLDER = i18n.translate('xpack.uptime.kueryBar.searchPlaceholder.kql', { defaultMessage: 'Search using kql syntax for monitor IDs, names and type etc (E.g monitor.type: "http" AND tags: "dev")', }); export const SIMPLE_SEARCH_PLACEHOLDER = i18n.translate( - 'xpack.synthetics.kueryBar.searchPlaceholder.simpleText', + 'xpack.uptime.kueryBar.searchPlaceholder.simpleText', { defaultMessage: 'Search by monitor ID, name, URL, port or tags', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx similarity index 98% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx index 67fdf86618641..6b04916e4bbda 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/use_query_bar.test.tsx @@ -30,8 +30,6 @@ describe.skip('useQueryBar', () => { DEFAULT_URL_PARAMS = { absoluteDateRangeStart: 100, absoluteDateRangeEnd: 200, - autorefreshInterval: 10000, - autorefreshIsPaused: true, dateRangeStart: 'now-15m', dateRangeEnd: 'now', excludedFilters: '', diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/query_bar/use_query_bar.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/__snapshots__/snapshot.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/__snapshots__/snapshot.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/__snapshots__/snapshot.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/__snapshots__/snapshot.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/index.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/index.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/index.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/index.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx similarity index 75% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx index 0fcae549d5f71..63fd5e247883d 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/snapshot_heading.tsx @@ -12,8 +12,8 @@ import React from 'react'; export const SnapshotHeading = ({ total }: { total: number }) => { const monitorsText = total === 1 - ? i18n.translate('xpack.synthetics.snapshot.monitor', { defaultMessage: 'Monitor' }) - : i18n.translate('xpack.synthetics.snapshot.monitors', { defaultMessage: 'Monitors' }); + ? i18n.translate('xpack.uptime.snapshot.monitor', { defaultMessage: 'Monitor' }) + : i18n.translate('xpack.uptime.snapshot.monitors', { defaultMessage: 'Monitors' }); return ( diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/use_snap_shot.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/use_snap_shot.ts similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot/use_snap_shot.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot/use_snap_shot.ts diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot_heading.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot_heading.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/snapshot_heading.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/snapshot_heading.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/overview/status_panel.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/overview/status_panel.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/overview/status_panel.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/overview/status_panel.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/__snapshots__/certificate_form.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/__snapshots__/certificate_form.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/__snapshots__/certificate_form.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/__snapshots__/certificate_form.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/__snapshots__/indices_form.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/__snapshots__/indices_form.test.tsx.snap similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/__snapshots__/indices_form.test.tsx.snap rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/__snapshots__/indices_form.test.tsx.snap diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/add_connector_flyout.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/add_connector_flyout.tsx similarity index 96% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/add_connector_flyout.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/add_connector_flyout.tsx index 43943365a672b..33621c5e943d4 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/add_connector_flyout.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/add_connector_flyout.tsx @@ -59,7 +59,7 @@ export const AddConnectorFlyout = ({ focusInput, isDisabled }: Props) => { isDisabled={isDisabled || !canEdit} > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/alert_defaults_form.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/alert_defaults_form.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/alert_defaults_form.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/alert_defaults_form.tsx index 5b4b88fb6872d..008c8570d0453 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/alert_defaults_form.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/alert_defaults_form.tsx @@ -128,7 +128,7 @@ export const AlertDefaultsForm: React.FC = ({

    @@ -138,14 +138,14 @@ export const AlertDefaultsForm: React.FC = ({ title={

    } description={ } @@ -157,7 +157,7 @@ export const AlertDefaultsForm: React.FC = ({ isInvalid={!!error} label={ } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/certificate_form.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/certificate_form.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/certificate_form.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/certificate_form.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/certificate_form.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/certificate_form.tsx similarity index 87% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/certificate_form.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/certificate_form.tsx index dc44a7074c33f..e3ad50029a0bd 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/certificate_form.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/certificate_form.tsx @@ -40,7 +40,7 @@ export const CertificateExpirationForm: React.FC = ({

    @@ -50,14 +50,14 @@ export const CertificateExpirationForm: React.FC = ({ title={

    } description={ } @@ -68,7 +68,7 @@ export const CertificateExpirationForm: React.FC = ({ fullWidth helpText={ {DYNAMIC_SETTINGS_DEFAULTS.certExpirationThreshold}, @@ -78,7 +78,7 @@ export const CertificateExpirationForm: React.FC = ({ isInvalid={!!fieldErrors?.expirationThresholdError} label={ } @@ -103,7 +103,7 @@ export const CertificateExpirationForm: React.FC = ({ @@ -116,7 +116,7 @@ export const CertificateExpirationForm: React.FC = ({ fullWidth helpText={ {DYNAMIC_SETTINGS_DEFAULTS.certAgeThreshold}, @@ -126,7 +126,7 @@ export const CertificateExpirationForm: React.FC = ({ isInvalid={!!fieldErrors?.ageThresholdError} label={ } @@ -151,7 +151,7 @@ export const CertificateExpirationForm: React.FC = ({ diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/default_email.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/default_email.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/default_email.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/default_email.tsx index 5ba6278664c61..4de1eb2465e8f 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/default_email.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/default_email.tsx @@ -60,14 +60,14 @@ export function DefaultEmail({ title={

    } description={ } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/indices_form.test.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/indices_form.test.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/indices_form.test.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/indices_form.test.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/indices_form.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/indices_form.tsx similarity index 84% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/indices_form.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/indices_form.tsx index 4fe2917fbd357..f89e3ec71ec60 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/indices_form.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/indices_form.tsx @@ -29,7 +29,7 @@ export const IndicesForm: React.FC = ({

    @@ -39,14 +39,14 @@ export const IndicesForm: React.FC = ({ title={

    } description={ } @@ -57,7 +57,7 @@ export const IndicesForm: React.FC = ({ fullWidth helpText={ {DYNAMIC_SETTINGS_DEFAULTS.heartbeatIndices}, @@ -67,7 +67,7 @@ export const IndicesForm: React.FC = ({ isInvalid={!!fieldErrors?.heartbeatIndices} label={ } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/settings_actions.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/settings_actions.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/settings_actions.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/settings_actions.tsx index 6fab78e13ac4d..c7aec1dd90d70 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/settings_actions.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/settings_actions.tsx @@ -52,7 +52,7 @@ export const SettingsActions = ({ }} >
    @@ -67,7 +67,7 @@ export const SettingsActions = ({ fill >
    diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/settings_bottom_bar.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/settings_bottom_bar.tsx similarity index 100% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/settings_bottom_bar.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/settings_bottom_bar.tsx diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/translations.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/translations.ts similarity index 75% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/translations.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/translations.ts index 8d00c6ca948da..c06959e6aeef4 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/translations.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/translations.ts @@ -9,14 +9,14 @@ import { i18n } from '@kbn/i18n'; export const certificateFormTranslations = { ageInputAriaLabel: i18n.translate( - 'xpack.synthetics.sourceConfiguration.ageLimitThresholdInput.ariaLabel', + 'xpack.uptime.sourceConfiguration.ageLimitThresholdInput.ariaLabel', { defaultMessage: 'An input that controls the maximum number of days for which a TLS certificate may be valid before Kibana will show a warning.', } ), expirationInputAriaLabel: i18n.translate( - 'xpack.synthetics.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel', + 'xpack.uptime.sourceConfiguration.certificateExpirationThresholdInput.ariaLabel', { defaultMessage: 'An input that controls the minimum number of days remaining for TLS certificate expiration before Kibana will show a warning.', @@ -26,13 +26,13 @@ export const certificateFormTranslations = { export const alertFormI18n = { inputPlaceHolder: i18n.translate( - 'xpack.synthetics.sourceConfiguration.alertDefaultForm.selectConnector', + 'xpack.uptime.sourceConfiguration.alertDefaultForm.selectConnector', { defaultMessage: 'Select one or more connectors', } ), emailPlaceHolder: i18n.translate( - 'xpack.synthetics.sourceConfiguration.alertDefaultForm.emailConnectorPlaceHolder', + 'xpack.uptime.sourceConfiguration.alertDefaultForm.emailConnectorPlaceHolder', { defaultMessage: 'To: Email for email connector', } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/use_settings_errors.ts b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/use_settings_errors.ts similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/settings/use_settings_errors.ts rename to x-pack/plugins/uptime/public/legacy_uptime/components/settings/use_settings_errors.ts index 9638cc01e3364..242a3d9a97799 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/settings/use_settings_errors.ts +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/settings/use_settings_errors.ts @@ -102,7 +102,7 @@ export const useSettingsErrors = ( }; const REQUIRED_EMAIL = i18n.translate( - 'xpack.synthetics.sourceConfiguration.alertDefaultForm.requiredEmail', + 'xpack.uptime.sourceConfiguration.alertDefaultForm.requiredEmail', { defaultMessage: 'To email is required for email connector', } @@ -119,7 +119,7 @@ const getInvalidEmailError = (value?: string[]) => { return; } - return i18n.translate('xpack.synthetics.sourceConfiguration.alertDefaultForm.invalidEmail', { + return i18n.translate('xpack.uptime.sourceConfiguration.alertDefaultForm.invalidEmail', { defaultMessage: '{val} is not a valid email.', values: { val: inValidEmail }, }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx index e995cc40931fa..1b17bb5f1702b 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/stderr_logs.tsx @@ -144,21 +144,18 @@ export const StdErrorLogs = ({ ); }; -export const TIMESTAMP_LABEL = i18n.translate('xpack.synthetics.monitorList.timestamp', { +export const TIMESTAMP_LABEL = i18n.translate('xpack.uptime.monitorList.timestamp', { defaultMessage: 'Timestamp', }); -export const ERROR_SUMMARY_LABEL = i18n.translate('xpack.synthetics.monitorList.errorSummary', { +export const ERROR_SUMMARY_LABEL = i18n.translate('xpack.uptime.monitorList.errorSummary', { defaultMessage: 'Error summary', }); -export const VIEW_IN_DISCOVER_LABEL = i18n.translate( - 'xpack.synthetics.monitorList.viewInDiscover', - { - defaultMessage: 'View in discover', - } -); +export const VIEW_IN_DISCOVER_LABEL = i18n.translate('xpack.uptime.monitorList.viewInDiscover', { + defaultMessage: 'View in discover', +}); -export const TEST_RUN_LOGS_LABEL = i18n.translate('xpack.synthetics.monitorList.testRunLogs', { +export const TEST_RUN_LOGS_LABEL = i18n.translate('xpack.uptime.monitorList.testRunLogs', { defaultMessage: 'Test run logs', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx similarity index 93% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx index efa7a189f9b19..26bc9cbd4dd67 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_duration.tsx @@ -32,7 +32,7 @@ export const StepDuration = ({ }: Props) => { const stepDurationText = useMemo( () => - i18n.translate('xpack.synthetics.synthetics.step.duration', { + i18n.translate('xpack.uptime.synthetics.step.duration', { defaultMessage: '{value} seconds', values: { value: microToSec(step.synthetics.step?.duration.us!, 1), @@ -84,6 +84,6 @@ export const StepDuration = ({ ); }; -const STEP_DURATION_TREND = i18n.translate('xpack.synthetics.synthetics.step.durationTrend', { +const STEP_DURATION_TREND = i18n.translate('xpack.uptime.synthetics.step.durationTrend', { defaultMessage: 'Step duration trend', }); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx similarity index 89% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx index 64ab69e0aa39f..827e4edc8b6c4 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/screenshot_link.tsx @@ -24,7 +24,7 @@ export const ScreenshotLink = ({ lastSuccessfulCheck }: Props) => { return ( { > diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx similarity index 95% rename from x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx rename to x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx index 8243649589453..8a4f101fdc4da 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/synthetics/check_steps/step_expanded_row/step_screenshots.tsx @@ -50,13 +50,13 @@ export const StepScreenshots = ({ step }: Props) => {