From 072c70dc99a0cb239a9617414f4d4c72a62c7822 Mon Sep 17 00:00:00 2001 From: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com> Date: Wed, 16 Nov 2022 10:17:40 -0500 Subject: [PATCH 01/14] [Security Solution] Investigation guide - insights in markdown (#145240) ## Summary This pr adds a new parsing plugin to the EuiMarkdownEditor used in security solution that enables users to create run time queries that can be parameterized from alert data, or hard coded literal values. A count of the matching events is displayed in a button that when clicked will open the same event set in timeline. Markdown is expected to be in the following format: `!{insight{"description":"2 top level OR providers, 1 nested AND","label":"test insight", "providers": [[{ "field": "event.id", "value": "kibana.alert.original_event.id", "type": "parameter" }], [{ "field": "event.category", "value": "network", "type": "literal" }, {"field": "process.pid", "value": "process.pid", "type": "parameter"}]]}}` The 2d array is used to allow nested queries, the top level arrays are OR'ed together, and the inner array AND'ed together: image Following a prefix of !insight, the configuration object takes optional description and label strings, along with a 2 dimensional array called "providers". This value corresponds to what are called data providers in the timeline view, ![image](https://user-images.githubusercontent.com/56408403/201936006-64e32d99-2764-4650-bd8b-da0a9420f8ed.png) and are arrays of filters with 3 fields, "field" which is the field name for that part of the query clause, "value" which is the value to be used, and "type" which is either "parameter" or "literal". Filters of type parameter expect value to be the name of a field present in an alert document, and will use the value in the underlying document if found. If the field is not present for some reason, a wildcard is used. If the markdown is rendered in a context not tied to a specific alert, parameter fields are treated as a timeline template field. image ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) --- .../cypress/e2e/timelines/notes_tab.cy.ts | 8 + .../cypress/screens/timeline.ts | 3 + .../cypress/tasks/timeline.ts | 6 +- .../table/investigate_in_timeline_button.tsx | 50 ++++-- .../markdown_editor/plugins/index.ts | 3 + .../markdown_editor/plugins/insight/index.tsx | 146 ++++++++++++++++++ .../use_insight_data_providers.test.ts | 132 ++++++++++++++++ .../insight/use_insight_data_providers.ts | 114 ++++++++++++++ .../plugins/insight/use_insight_query.test.ts | 46 ++++++ .../plugins/insight/use_insight_query.ts | 79 ++++++++++ .../markdown_editor/plugins/osquery/index.tsx | 1 + .../components/markdown_editor/renderer.tsx | 1 - .../side_panel/event_details/helpers.tsx | 4 +- .../public/timelines/containers/index.tsx | 20 +-- .../common/search_strategy/timeline/index.ts | 2 +- .../search_strategy/timeline/eql/helpers.ts | 22 +-- .../timeline/factory/events/all/index.ts | 1 + .../events/all/query.events_all.dsl.ts | 1 - 18 files changed, 599 insertions(+), 40 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/index.tsx create mode 100644 x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.test.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.test.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts diff --git a/x-pack/plugins/security_solution/cypress/e2e/timelines/notes_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/timelines/notes_tab.cy.ts index c20a4ae39026d..a6691225808ef 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/timelines/notes_tab.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/timelines/notes_tab.cy.ts @@ -13,6 +13,7 @@ import { NOTES_LINK, NOTES_TEXT, NOTES_TEXT_AREA, + MARKDOWN_INVESTIGATE_BUTTON, } from '../../screens/timeline'; import { createTimeline } from '../../tasks/api_calls/timelines'; @@ -84,4 +85,11 @@ describe('Timeline notes tab', () => { cy.get(NOTES_LINK).last().should('have.text', `${text}(opens in a new tab or window)`); cy.get(NOTES_LINK).last().click(); }); + + it('should render insight query from markdown', () => { + addNotesToTimeline( + `!{insight{"description":"2 top level OR providers, 1 nested AND","label":"test insight", "providers": [[{ "field": "event.id", "value": "kibana.alert.original_event.id", "type": "parameter" }], [{ "field": "event.category", "value": "network", "type": "literal" }, {"field": "process.pid", "value": "process.pid", "type": "parameter"}]]}}` + ); + cy.get(MARKDOWN_INVESTIGATE_BUTTON).should('exist'); + }); }); diff --git a/x-pack/plugins/security_solution/cypress/screens/timeline.ts b/x-pack/plugins/security_solution/cypress/screens/timeline.ts index 529847261e06d..59c8d6a4103f7 100644 --- a/x-pack/plugins/security_solution/cypress/screens/timeline.ts +++ b/x-pack/plugins/security_solution/cypress/screens/timeline.ts @@ -90,6 +90,9 @@ export const NOTES_AUTHOR = '.euiCommentEvent__headerUsername'; export const NOTES_LINK = '[data-test-subj="markdown-link"]'; +export const MARKDOWN_INVESTIGATE_BUTTON = + '[data-test-subj="insight-investigate-in-timeline-button"]'; + export const OPEN_TIMELINE_ICON = '[data-test-subj="open-timeline-button"]'; export const OPEN_TIMELINE_MODAL = '[data-test-subj="open-timeline-modal"]'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/timeline.ts b/x-pack/plugins/security_solution/cypress/tasks/timeline.ts index 1ff04833db2a4..76a512a6fcb88 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/timeline.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/timeline.ts @@ -161,7 +161,11 @@ export const addNotesToTimeline = (notes: string) => { .then(($el) => { const notesCount = parseInt($el.text(), 10); - cy.get(NOTES_TEXT_AREA).type(notes); + cy.get(NOTES_TEXT_AREA).type(notes, { + parseSpecialCharSequences: false, + delay: 0, + force: true, + }); cy.get(ADD_NOTE_BUTTON).trigger('click'); cy.get(`${NOTES_TAB_BUTTON} .euiBadge`).should('have.text', `${notesCount + 1}`); }); diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/table/investigate_in_timeline_button.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/table/investigate_in_timeline_button.tsx index 820488225e17b..3c095c5ed87da 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/table/investigate_in_timeline_button.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/table/investigate_in_timeline_button.tsx @@ -5,13 +5,14 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useMemo, useCallback } from 'react'; import { EuiButton, EuiButtonEmpty } from '@elastic/eui'; import type { Filter } from '@kbn/es-query'; import { useDispatch } from 'react-redux'; import { sourcererSelectors } from '../../../store'; import { InputsModelId } from '../../../store/inputs/constants'; +import type { TimeRange } from '../../../store/inputs/model'; import { inputsActions } from '../../../store/inputs'; import { updateProviders, setFilters } from '../../../../timelines/store/timeline/actions'; import { sourcererActions } from '../../../store/actions'; @@ -26,7 +27,10 @@ export const InvestigateInTimelineButton: React.FunctionComponent<{ asEmptyButton: boolean; dataProviders: DataProvider[] | null; filters?: Filter[] | null; -}> = ({ asEmptyButton, children, dataProviders, filters, ...rest }) => { + timeRange?: TimeRange; + keepDataView?: boolean; + isDisabled?: boolean; +}> = ({ asEmptyButton, children, dataProviders, filters, timeRange, keepDataView, ...rest }) => { const dispatch = useDispatch(); const getDataViewsSelector = useMemo( @@ -37,15 +41,24 @@ export const InvestigateInTimelineButton: React.FunctionComponent<{ getDataViewsSelector(state) ); + const hasTemplateProviders = + dataProviders && dataProviders.find((provider) => provider.type === 'template'); + const clearTimeline = useCreateTimeline({ timelineId: TimelineId.active, - timelineType: TimelineType.default, + timelineType: hasTemplateProviders ? TimelineType.template : TimelineType.default, }); - const configureAndOpenTimeline = React.useCallback(() => { + const configureAndOpenTimeline = useCallback(() => { if (dataProviders || filters) { // Reset the current timeline - clearTimeline(); + if (timeRange) { + clearTimeline({ + timeRange, + }); + } else { + clearTimeline(); + } if (dataProviders) { // Update the timeline's providers to match the current prevalence field query dispatch( @@ -66,17 +79,28 @@ export const InvestigateInTimelineButton: React.FunctionComponent<{ } // Only show detection alerts // (This is required so the timeline event count matches the prevalence count) - dispatch( - sourcererActions.setSelectedDataView({ - id: SourcererScopeName.timeline, - selectedDataViewId: defaultDataView.id, - selectedPatterns: [signalIndexName || ''], - }) - ); + if (!keepDataView) { + dispatch( + sourcererActions.setSelectedDataView({ + id: SourcererScopeName.timeline, + selectedDataViewId: defaultDataView.id, + selectedPatterns: [signalIndexName || ''], + }) + ); + } // Unlock the time range from the global time range dispatch(inputsActions.removeLinkTo([InputsModelId.timeline, InputsModelId.global])); } - }, [dataProviders, clearTimeline, dispatch, defaultDataView.id, signalIndexName, filters]); + }, [ + dataProviders, + clearTimeline, + dispatch, + defaultDataView.id, + signalIndexName, + filters, + timeRange, + keepDataView, + ]); return asEmptyButton ? ( { + return value.indexOf(insightPrefix, fromIndex); + }; + tokenizers.insight = tokenizeInsight; + methods.splice(methods.indexOf('text'), 0, 'insight'); +}; + +// receives the configuration from the parser and renders +const InsightComponent = ({ label, description, providers }: InsightComponentProps) => { + const { addError } = useAppToasts(); + let parsedProviders = []; + try { + if (providers !== undefined) { + parsedProviders = JSON.parse(providers); + } + } catch (err) { + addError(err, { + title: i18n.translate('xpack.securitySolution.markdownEditor.plugins.insightProviderError', { + defaultMessage: 'Unable to parse insight provider configuration', + }), + }); + } + const { data: alertData } = useContext(BasicAlertDataContext); + const dataProviders = useInsightDataProviders({ + providers: parsedProviders, + alertData, + }); + const { totalCount, isQueryLoading, oldestTimestamp, hasError } = useInsightQuery({ + dataProviders, + }); + const timerange: AbsoluteTimeRange = useMemo(() => { + return { + kind: 'absolute', + from: oldestTimestamp ?? '', + to: new Date().toISOString(), + }; + }, [oldestTimestamp]); + if (isQueryLoading) { + return ; + } else { + return ( + + + {` ${label} (${totalCount}) - ${description}`} + + ); + } +}; + +export { InsightComponent as renderer }; diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.test.ts b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.test.ts new file mode 100644 index 0000000000000..8542c445b5d14 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.test.ts @@ -0,0 +1,132 @@ +/* + * 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 type { DataProvider } from '@kbn/timelines-plugin/common'; +import type { UseInsightDataProvidersProps, Provider } from './use_insight_data_providers'; +import type { TimelineEventsDetailsItem } from '../../../../../../common/search_strategy'; +import { useInsightDataProviders } from './use_insight_data_providers'; +import { mockAlertDetailsData } from '../../../event_details/__mocks__'; + +const mockAlertDetailsDataWithIsObject = mockAlertDetailsData.map((detail) => { + return { + ...detail, + isObjectArray: false, + }; +}) as TimelineEventsDetailsItem[]; + +const nestedAndProvider = [ + [ + { + field: 'event.id', + value: 'kibana.alert.rule.uuid', + type: 'parameter', + }, + ], + [ + { + field: 'event.category', + value: 'network', + type: 'literal', + }, + { + field: 'process.pid', + value: 'process.pid', + type: 'parameter', + }, + ], +] as Provider[][]; + +const topLevelOnly = [ + [ + { + field: 'event.id', + value: 'kibana.alert.rule.uuid', + type: 'parameter', + }, + ], + [ + { + field: 'event.category', + value: 'network', + type: 'literal', + }, + ], + [ + { + field: 'process.pid', + value: 'process.pid', + type: 'parameter', + }, + ], +] as Provider[][]; + +const nonExistantField = [ + [ + { + field: 'event.id', + value: 'kibana.alert.rule.parameters.threshold.field', + type: 'parameter', + }, + ], +] as Provider[][]; + +describe('useInsightDataProviders', () => { + it('should return 2 data providers, 1 with a nested provider ANDed to it', () => { + const { result } = renderHook(() => + useInsightDataProviders({ + providers: nestedAndProvider, + alertData: mockAlertDetailsDataWithIsObject, + }) + ); + const providers = result.current; + const providersWithNonEmptyAnd = providers.filter((provider) => provider.and.length > 0); + expect(providers.length).toBe(2); + expect(providersWithNonEmptyAnd.length).toBe(1); + }); + + it('should return 3 data providers without any containing nested ANDs', () => { + const { result } = renderHook(() => + useInsightDataProviders({ + providers: topLevelOnly, + alertData: mockAlertDetailsDataWithIsObject, + }) + ); + const providers = result.current; + const providersWithNonEmptyAnd = providers.filter((provider) => provider.and.length > 0); + expect(providers.length).toBe(3); + expect(providersWithNonEmptyAnd.length).toBe(0); + }); + + it('should use a wildcard for a field not present in an alert', () => { + const { result } = renderHook(() => + useInsightDataProviders({ + providers: nonExistantField, + alertData: mockAlertDetailsDataWithIsObject, + }) + ); + const providers = result.current; + const { + queryMatch: { value }, + } = providers[0]; + expect(providers.length).toBe(1); + expect(value).toBe('*'); + }); + + it('should use template data providers when called without alertData', () => { + const { result } = renderHook(() => + useInsightDataProviders({ + providers: nestedAndProvider, + }) + ); + const providers = result.current; + const [first, second] = providers; + const [nestedSecond] = second.and; + expect(second.type).toBe('default'); + expect(first.type).toBe('template'); + expect(nestedSecond.type).toBe('template'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.ts b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.ts new file mode 100644 index 0000000000000..5c5de496b04b5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_data_providers.ts @@ -0,0 +1,114 @@ +/* + * 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 { useMemo } from 'react'; +import type { QueryOperator, DataProvider } from '@kbn/timelines-plugin/common'; +import { DataProviderType } from '@kbn/timelines-plugin/common'; +import { IS_OPERATOR } from '../../../../../timelines/components/timeline/data_providers/data_provider'; +import type { TimelineEventsDetailsItem } from '../../../../../../common/search_strategy'; + +export interface Provider { + field: string; + value: string; + type: 'parameter' | 'value'; +} +export interface UseInsightDataProvidersProps { + providers: Provider[][]; + alertData?: TimelineEventsDetailsItem[] | null; +} + +export const useInsightDataProviders = ({ + providers, + alertData, +}: UseInsightDataProvidersProps): DataProvider[] => { + function getFieldValue(fields: TimelineEventsDetailsItem[], fieldToFind: string) { + const alertField = fields.find((dataField) => dataField.field === fieldToFind); + return alertField?.values ? alertField.values[0] : '*'; + } + const dataProviders: DataProvider[] = useMemo(() => { + if (alertData) { + return providers.map((innerProvider) => { + return innerProvider.reduce((prev, next, index): DataProvider => { + const { field, value, type } = next; + if (index === 0) { + return { + and: [], + enabled: true, + id: JSON.stringify(field + value + type), + name: field, + excluded: false, + kqlQuery: '', + type: DataProviderType.default, + queryMatch: { + field, + value: type === 'parameter' ? getFieldValue(alertData, value) : value, + operator: IS_OPERATOR as QueryOperator, + }, + }; + } else { + const newProvider = { + and: [], + enabled: true, + id: JSON.stringify(field + value + type), + name: field, + excluded: false, + kqlQuery: '', + type: DataProviderType.default, + queryMatch: { + field, + value: type === 'parameter' ? getFieldValue(alertData, value) : value, + operator: IS_OPERATOR as QueryOperator, + }, + }; + prev.and.push(newProvider); + } + return prev; + }, {} as DataProvider); + }); + } else { + return providers.map((innerProvider) => { + return innerProvider.reduce((prev, next, index) => { + const { field, value, type } = next; + if (index === 0) { + return { + and: [], + enabled: true, + id: JSON.stringify(field + value + type), + name: field, + excluded: false, + kqlQuery: '', + type: type === 'parameter' ? DataProviderType.template : DataProviderType.default, + queryMatch: { + field, + value: type === 'parameter' ? `{${value}}` : value, + operator: IS_OPERATOR as QueryOperator, + }, + }; + } else { + const newProvider = { + and: [], + enabled: true, + id: JSON.stringify(field + value + type), + name: field, + excluded: false, + kqlQuery: '', + type: type === 'parameter' ? DataProviderType.template : DataProviderType.default, + queryMatch: { + field, + value: type === 'parameter' ? `{${value}}` : value, + operator: IS_OPERATOR as QueryOperator, + }, + }; + prev.and.push(newProvider); + } + return prev; + }, {} as DataProvider); + }); + } + }, [alertData, providers]); + return dataProviders; +}; diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.test.ts b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.test.ts new file mode 100644 index 0000000000000..74942f0f4ad38 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.test.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 { renderHook } from '@testing-library/react-hooks'; +import type { QueryOperator } from '@kbn/timelines-plugin/common'; +import { DataProviderType } from '@kbn/timelines-plugin/common'; +import { useInsightQuery } from './use_insight_query'; +import { TestProviders } from '../../../../mock'; +import type { UseInsightQuery, UseInsightQueryResult } from './use_insight_query'; +import { IS_OPERATOR } from '../../../../../timelines/components/timeline/data_providers/data_provider'; + +const mockProvider = { + and: [], + enabled: true, + id: 'made-up-id', + name: 'test', + excluded: false, + kqlQuery: '', + type: DataProviderType.default, + queryMatch: { + field: 'event.id', + value: '*', + operator: IS_OPERATOR as QueryOperator, + }, +}; + +describe('useInsightQuery', () => { + it('should return renderable defaults', () => { + const { result } = renderHook( + () => + useInsightQuery({ + dataProviders: [mockProvider], + }), + { + wrapper: TestProviders, + } + ); + const { isQueryLoading, totalCount, oldestTimestamp } = result.current; + expect(isQueryLoading).toBeFalsy(); + expect(totalCount).toBe(-1); + expect(oldestTimestamp).toBe(undefined); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts new file mode 100644 index 0000000000000..e7836cd6cd3ad --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts @@ -0,0 +1,79 @@ +/* + * 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 { useMemo, useState } from 'react'; +import { getEsQueryConfig } from '@kbn/data-plugin/common'; +import type { DataProvider } from '@kbn/timelines-plugin/common'; +import { TimelineId } from '../../../../../../common/types/timeline'; +import { useKibana } from '../../../../lib/kibana'; +import { combineQueries } from '../../../../lib/kuery'; +import { useTimelineEvents } from '../../../../../timelines/containers'; +import { useSourcererDataView } from '../../../../containers/sourcerer'; +import { SourcererScopeName } from '../../../../store/sourcerer/model'; + +export interface UseInsightQuery { + dataProviders: DataProvider[]; +} + +export interface UseInsightQueryResult { + isQueryLoading: boolean; + totalCount: number; + oldestTimestamp: string | null | undefined; + hasError: boolean; +} + +export const useInsightQuery = ({ dataProviders }: UseInsightQuery): UseInsightQueryResult => { + const { uiSettings } = useKibana().services; + const esQueryConfig = useMemo(() => getEsQueryConfig(uiSettings), [uiSettings]); + const { browserFields, selectedPatterns, indexPattern, dataViewId } = useSourcererDataView( + SourcererScopeName.timeline + ); + const [hasError, setHasError] = useState(false); + const combinedQueries = useMemo(() => { + try { + if (hasError === false) { + const parsedCombinedQueries = combineQueries({ + config: esQueryConfig, + dataProviders, + indexPattern, + browserFields, + filters: [], + kqlQuery: { + query: '', + language: 'kuery', + }, + kqlMode: 'filter', + }); + return parsedCombinedQueries; + } + } catch (err) { + setHasError(true); + return null; + } + }, [browserFields, dataProviders, esQueryConfig, hasError, indexPattern]); + + const [isQueryLoading, { events, totalCount }] = useTimelineEvents({ + dataViewId, + fields: ['*'], + filterQuery: combinedQueries?.filterQuery, + id: TimelineId.active, + indexNames: selectedPatterns, + language: 'kuery', + limit: 1, + runtimeMappings: {}, + }); + const [oldestEvent] = events; + const timestamp = + oldestEvent && oldestEvent.data && oldestEvent.data.find((d) => d.field === '@timestamp'); + const oldestTimestamp = timestamp && timestamp.value && timestamp.value[0]; + return { + isQueryLoading, + totalCount, + oldestTimestamp, + hasError, + }; +}; diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/index.tsx b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/index.tsx index 3d046e349de31..d65405cd1c48f 100644 --- a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/index.tsx @@ -258,6 +258,7 @@ const RunOsqueryButtonRenderer = ({ label?: string; query: string; ecs_mapping: { [key: string]: {} }; + test: []; }; }) => { const [showFlyout, setShowFlyout] = useState(false); diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/renderer.tsx b/x-pack/plugins/security_solution/public/common/components/markdown_editor/renderer.tsx index 6dcb93321056e..449e2adee8bf8 100644 --- a/x-pack/plugins/security_solution/public/common/components/markdown_editor/renderer.tsx +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/renderer.tsx @@ -24,7 +24,6 @@ const MarkdownRendererComponent: React.FC = ({ children, disableLinks }) () => (props) => , [disableLinks] ); - // Deep clone of the processing plugins to prevent affecting the markdown editor. const processingPluginList = cloneDeep(processingPlugins); // This line of code is TS-compatible and it will break if [1][1] change in the future. diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx index 6bee089027477..f91a9eed0d165 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx @@ -19,6 +19,7 @@ export interface GetBasicDataFromDetailsData { userName: string; ruleName: string; timestamp: string; + data: TimelineEventsDetailsItem[] | null; } export const useBasicDataFromDetailsData = ( @@ -62,8 +63,9 @@ export const useBasicDataFromDetailsData = ( userName, ruleName, timestamp, + data, }), - [agentId, alertId, hostName, isAlert, ruleName, timestamp, userName] + [agentId, alertId, hostName, isAlert, ruleName, timestamp, userName, data] ); }; diff --git a/x-pack/plugins/security_solution/public/timelines/containers/index.tsx b/x-pack/plugins/security_solution/public/timelines/containers/index.tsx index 5324c02fcbfdf..55c8d2cad65bc 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/containers/index.tsx @@ -81,7 +81,7 @@ type TimelineResponse = T extends 'kuery' export interface UseTimelineEventsProps { dataViewId: string | null; - endDate: string; + endDate?: string; eqlOptions?: EqlOptionsSelected; fields: string[]; filterQuery?: ESQuery | string; @@ -92,7 +92,7 @@ export interface UseTimelineEventsProps { runtimeMappings: MappingRuntimeFields; skip?: boolean; sort?: TimelineRequestSortField[]; - startDate: string; + startDate?: string; timerangeKind?: 'absolute' | 'relative'; } @@ -360,17 +360,17 @@ export const useTimelineEventsHandler = ({ ...deStructureEqlOptions(prevEqlRequest), }; + const timerange = + startDate && endDate + ? { timerange: { interval: '12h', from: startDate, to: endDate } } + : {}; const currentSearchParameters = { defaultIndex: indexNames, filterQuery: createFilter(filterQuery), querySize: limit, sort, - timerange: { - interval: '12h', - from: startDate, - to: endDate, - }, runtimeMappings, + ...timerange, ...deStructureEqlOptions(eqlOptions), }; @@ -391,11 +391,7 @@ export const useTimelineEventsHandler = ({ language, runtimeMappings, sort, - timerange: { - interval: '12h', - from: startDate, - to: endDate, - }, + ...timerange, ...(eqlOptions ? eqlOptions : {}), }; diff --git a/x-pack/plugins/timelines/common/search_strategy/timeline/index.ts b/x-pack/plugins/timelines/common/search_strategy/timeline/index.ts index dfdc1ed3eabd4..a5856169a5748 100644 --- a/x-pack/plugins/timelines/common/search_strategy/timeline/index.ts +++ b/x-pack/plugins/timelines/common/search_strategy/timeline/index.ts @@ -32,7 +32,7 @@ export * from './events'; export type TimelineFactoryQueryTypes = TimelineEventsQueries; export interface TimelineRequestBasicOptions extends IEsSearchRequest { - timerange: TimerangeInput; + timerange?: TimerangeInput; filterQuery: ESQuery | string | undefined; defaultIndex: string[]; factoryQueryType?: TimelineFactoryQueryTypes; diff --git a/x-pack/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts b/x-pack/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts index 5424568c44a70..e9a2ef7e49cda 100644 --- a/x-pack/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts +++ b/x-pack/plugins/timelines/server/search_strategy/timeline/eql/helpers.ts @@ -27,17 +27,19 @@ export const buildEqlDsl = (options: TimelineEqlRequestOptions): Record = { // eslint-disable-next-line prefer-const let { fieldRequested, ...queryOptions } = cloneDeep(options); queryOptions.fields = buildFieldsRequest(fieldRequested, queryOptions.excludeEcsData); + const { activePage, querySize } = options.pagination; const producerBuckets = getOr([], 'aggregations.producers.buckets', response.rawResponse); const totalCount = response.rawResponse.hits.total || 0; diff --git a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/events/all/query.events_all.dsl.ts b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/events/all/query.events_all.dsl.ts index 9f6902c65f639..5ae88bcf6f460 100644 --- a/x-pack/plugins/timelines/server/search_strategy/timeline/factory/events/all/query.events_all.dsl.ts +++ b/x-pack/plugins/timelines/server/search_strategy/timeline/factory/events/all/query.events_all.dsl.ts @@ -28,7 +28,6 @@ export const buildTimelineEventsAllQuery = ({ timerange, }: Omit) => { const filterClause = [...createQueryFilterClauses(filterQuery)]; - const getTimerangeFilter = (timerangeOption: TimerangeInput | undefined): TimerangeFilter[] => { if (timerangeOption) { const { to, from } = timerangeOption; From 0fc9affc0ed9b1d497672755e6c48da2f647058d Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 16 Nov 2022 15:21:42 +0000 Subject: [PATCH 02/14] skip flaky suite (#145102) --- .../datatypes/scaled_float_datatype.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/__jest__/client_integration/datatypes/scaled_float_datatype.test.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/__jest__/client_integration/datatypes/scaled_float_datatype.test.tsx index bbd0afa495e48..4a251d41d69d9 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/__jest__/client_integration/datatypes/scaled_float_datatype.test.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/__jest__/client_integration/datatypes/scaled_float_datatype.test.tsx @@ -21,7 +21,8 @@ export const defaultScaledFloatParameters = { store: false, }; -describe('Mappings editor: scaled float datatype', () => { +// FLAKY: https://github.com/elastic/kibana/issues/145102 +describe.skip('Mappings editor: scaled float datatype', () => { /** * Variable to store the mappings data forwarded to the consumer component */ From a75bd338873094672deea728eacf372030d879bb Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Wed, 16 Nov 2022 15:28:13 +0000 Subject: [PATCH 03/14] [Fleet] Create file upload write indices on setup or package install (#145295) ## Summary Part of #143459. Create the write index for the diagnostic file upload feature on package install, also check installed packages on setup and create indices if they do not exist. This is behind a feature flag until the whole feature is released: `--xpack.fleet.enableExperimental.0=diagnosticFileUploadEnabled` As we use plain indices for file upload, before the files can be uploaded we need to create the write index e.g `.fleet-file-data-agent-00001` wjhich would be the write index for the alias `.fleet-file-data-agent` ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../fleet/common/constants/file_storage.ts | 9 ++ .../fleet/common/experimental_features.ts | 2 +- .../fleet/common/services/file_storage.ts | 17 ++++ .../components/actions_menu.tsx | 4 +- .../agents/agent_details_page/index.tsx | 6 +- .../components/bulk_actions.tsx | 4 +- .../components/search_and_filter_bar.test.tsx | 2 +- .../components/table_row_actions.tsx | 4 +- .../public/mock/create_test_renderer.tsx | 2 +- .../epm/elasticsearch/template/install.ts | 83 ++++++++++++++++++- .../services/epm/packages/_install_package.ts | 16 +++- .../fleet/server/services/epm/packages/get.ts | 20 +++++ .../fleet/server/services/setup.test.ts | 1 + x-pack/plugins/fleet/server/services/setup.ts | 33 +++++++- .../test/security_solution_endpoint/config.ts | 2 + .../apis/file_upload_index.ts | 34 ++++++++ .../apis/index.ts | 1 + .../config.ts | 2 + 18 files changed, 225 insertions(+), 17 deletions(-) create mode 100644 x-pack/test/security_solution_endpoint_api_int/apis/file_upload_index.ts diff --git a/x-pack/plugins/fleet/common/constants/file_storage.ts b/x-pack/plugins/fleet/common/constants/file_storage.ts index a1988570a5873..24994a28c9128 100644 --- a/x-pack/plugins/fleet/common/constants/file_storage.ts +++ b/x-pack/plugins/fleet/common/constants/file_storage.ts @@ -10,3 +10,12 @@ // found in `common/services/file_storage` export const FILE_STORAGE_METADATA_INDEX_PATTERN = '.fleet-files-*'; export const FILE_STORAGE_DATA_INDEX_PATTERN = '.fleet-file-data-*'; + +// which integrations support file upload and the name to use for the file upload index +export const FILE_STORAGE_INTEGRATION_INDEX_NAMES: Readonly> = { + elastic_agent: 'agent', + endpoint: 'endpoint', +}; +export const FILE_STORAGE_INTEGRATION_NAMES: Readonly = Object.keys( + FILE_STORAGE_INTEGRATION_INDEX_NAMES +); diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index 2c55ce4a2a08e..e7379ba1e2a4b 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -15,7 +15,7 @@ export const allowedExperimentalValues = Object.freeze({ createPackagePolicyMultiPageLayout: true, packageVerification: true, showDevtoolsRequest: true, - showRequestDiagnostics: false, + diagnosticFileUploadEnabled: false, }); type ExperimentalConfigKeys = Array; diff --git a/x-pack/plugins/fleet/common/services/file_storage.ts b/x-pack/plugins/fleet/common/services/file_storage.ts index 4c5e9ac204c58..afabb421e7d45 100644 --- a/x-pack/plugins/fleet/common/services/file_storage.ts +++ b/x-pack/plugins/fleet/common/services/file_storage.ts @@ -34,6 +34,11 @@ export const getFileDataIndexName = (integrationName: string): string => { ); }; +/** + * Returns the write index name for a given file upload alias name, this is the same for metadata and chunks + * @param aliasName + */ +export const getFileWriteIndexName = (aliasName: string) => aliasName + '-000001'; /** * Returns back the integration name for a given File Data (chunks) index name. * @@ -63,3 +68,15 @@ export const getIntegrationNameFromFileDataIndexName = (indexName: string): stri throw new Error(`Index name ${indexName} does not seem to be a File Data storage index`); }; + +export const getFileStorageWriteIndexBody = (aliasName: string) => ({ + aliases: { + [aliasName]: { + is_write_index: true, + }, + }, + settings: { + 'index.lifecycle.rollover_alias': aliasName, + 'index.hidden': true, + }, +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx index b52a0401b8650..76bcd21c0207c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx @@ -38,7 +38,7 @@ export const AgentDetailsActionMenu: React.FunctionComponent<{ const isUnenrolling = agent.status === 'unenrolling'; const hasFleetServer = agentPolicy && policyHasFleetServer(agentPolicy); - const { showRequestDiagnostics } = ExperimentalFeaturesService.get(); + const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get(); const onClose = useMemo(() => { if (onCancelReassign) { @@ -95,7 +95,7 @@ export const AgentDetailsActionMenu: React.FunctionComponent<{ , ]; - if (showRequestDiagnostics) { + if (diagnosticFileUploadEnabled) { menuItems.push( { navigateToApp(routeState.onDoneNavigateTo[0], routeState.onDoneNavigateTo[1]); } }, [routeState, navigateToApp]); - const { showRequestDiagnostics } = ExperimentalFeaturesService.get(); + const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get(); const host = agentData?.item?.local_metadata?.host; @@ -156,7 +156,7 @@ export const AgentDetailsPage: React.FunctionComponent = () => { isSelected: tabId === 'logs', }, ]; - if (showRequestDiagnostics) { + if (diagnosticFileUploadEnabled) { tabs.push({ id: 'diagnostics', name: i18n.translate('xpack.fleet.agentDetails.subTabs.diagnosticsTab', { @@ -167,7 +167,7 @@ export const AgentDetailsPage: React.FunctionComponent = () => { }); } return tabs; - }, [getHref, agentId, tabId, showRequestDiagnostics]); + }, [getHref, agentId, tabId, diagnosticFileUploadEnabled]); return ( = ({ const agentCount = selectionMode === 'manual' ? selectedAgents.length : totalActiveAgents; const agents = selectionMode === 'manual' ? selectedAgents : currentQuery; const [tagsPopoverButton, setTagsPopoverButton] = useState(); - const { showRequestDiagnostics } = ExperimentalFeaturesService.get(); + const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get(); const menuItems = [ { @@ -171,7 +171,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ }, ]; - if (showRequestDiagnostics) { + if (diagnosticFileUploadEnabled) { menuItems.push({ name: ( { createPackagePolicyMultiPageLayout: true, packageVerification: true, showDevtoolsRequest: false, - showRequestDiagnostics: false, + diagnosticFileUploadEnabled: false, }); }); it('should show no Actions button when no agent is selected', async () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx index ad9c9bdbf3f7b..6fdf4016d457f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx @@ -38,7 +38,7 @@ export const TableRowActions: React.FunctionComponent<{ const isUnenrolling = agent.status === 'unenrolling'; const kibanaVersion = useKibanaVersion(); const [isMenuOpen, setIsMenuOpen] = useState(false); - const { showRequestDiagnostics } = ExperimentalFeaturesService.get(); + const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get(); const menuItems = [ ); - if (showRequestDiagnostics) { + if (diagnosticFileUploadEnabled) { menuItems.push( { createPackagePolicyMultiPageLayout: true, packageVerification: true, showDevtoolsRequest: false, - showRequestDiagnostics: false, + diagnosticFileUploadEnabled: false, }); const HookWrapper = memo(({ children }) => { diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts index 14a773cfd94bf..ca03d272405f4 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts @@ -9,8 +9,21 @@ import { merge, concat, uniqBy, omit } from 'lodash'; import Boom from '@hapi/boom'; import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { IndicesCreateRequest } from '@elastic/elasticsearch/lib/api/types'; + +import { + FILE_STORAGE_INTEGRATION_INDEX_NAMES, + FILE_STORAGE_INTEGRATION_NAMES, +} from '../../../../../common/constants'; + import { ElasticsearchAssetType } from '../../../../types'; -import { getPipelineNameForDatastream } from '../../../../../common/services'; +import { + getFileWriteIndexName, + getFileStorageWriteIndexBody, + getPipelineNameForDatastream, + getFileDataIndexName, + getFileMetadataIndexName, +} from '../../../../../common/services'; import type { RegistryDataStream, IndexTemplateEntry, @@ -341,6 +354,43 @@ export async function ensureDefaultComponentTemplates( ); } +/* + * Given a list of integration names, if the integrations support file upload + * then ensure that the alias has a matching write index, as we use "plain" indices + * not data streams. + * e.g .fleet-file-data-agent must have .fleet-file-data-agent-00001 as the write index + * before files can be uploaded. + */ +export async function ensureFileUploadWriteIndices(opts: { + esClient: ElasticsearchClient; + logger: Logger; + integrationNames: string[]; +}) { + const { esClient, logger, integrationNames } = opts; + + const integrationsWithFileUpload = integrationNames.filter((integration) => + FILE_STORAGE_INTEGRATION_NAMES.includes(integration as any) + ); + + if (!integrationsWithFileUpload.length) return []; + + const ensure = (aliasName: string) => + ensureAliasHasWriteIndex({ + esClient, + logger, + aliasName, + writeIndexName: getFileWriteIndexName(aliasName), + body: getFileStorageWriteIndexBody(aliasName), + }); + + return Promise.all( + integrationsWithFileUpload.flatMap((integrationName) => { + const indexName = FILE_STORAGE_INTEGRATION_INDEX_NAMES[integrationName]; + return [ensure(getFileDataIndexName(indexName)), ensure(getFileMetadataIndexName(indexName))]; + }) + ); +} + export async function ensureComponentTemplate( esClient: ElasticsearchClient, logger: Logger, @@ -371,6 +421,37 @@ export async function ensureComponentTemplate( return { isCreated: !existingTemplate }; } +export async function ensureAliasHasWriteIndex(opts: { + esClient: ElasticsearchClient; + logger: Logger; + aliasName: string; + writeIndexName: string; + body: Omit; +}): Promise { + const { esClient, logger, aliasName, writeIndexName, body } = opts; + const existingIndex = await retryTransientEsErrors( + () => + esClient.indices.exists( + { + index: [aliasName], + }, + { + ignore: [404], + } + ), + { logger } + ); + + if (!existingIndex) { + await retryTransientEsErrors( + () => esClient.indices.create({ index: writeIndexName, ...body }, { ignore: [404] }), + { + logger, + } + ); + } +} + export function prepareTemplate({ pkg, dataStream, diff --git a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts index 78683ecd07e0a..4b0aed34f8520 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts @@ -32,7 +32,10 @@ import type { PackageAssetReference, PackageVerificationResult, } from '../../../types'; -import { prepareToInstallTemplates } from '../elasticsearch/template/install'; +import { + ensureFileUploadWriteIndices, + prepareToInstallTemplates, +} from '../elasticsearch/template/install'; import { removeLegacyTemplates } from '../elasticsearch/template/remove_legacy'; import { prepareToInstallPipelines, @@ -47,7 +50,7 @@ import { installMlModel } from '../elasticsearch/ml_model'; import { installIlmForDataStream } from '../elasticsearch/datastream_ilm/install'; import { saveArchiveEntries } from '../archive/storage'; import { ConcurrentInstallOperationError } from '../../../errors'; -import { packagePolicyService } from '../..'; +import { appContextService, packagePolicyService } from '../..'; import { createInstallation, updateEsAssetReferences, restartInstallation } from './install'; import { withPackageSpan } from './utils'; @@ -214,6 +217,15 @@ export async function _installPackage({ logger.warn(`Error removing legacy templates: ${e.message}`); } + const { diagnosticFileUploadEnabled } = appContextService.getExperimentalFeatures(); + if (diagnosticFileUploadEnabled) { + await ensureFileUploadWriteIndices({ + integrationNames: [packageInfo.name], + esClient, + logger, + }); + } + // update current backing indices of each data stream await withPackageSpan('Update write indices', () => updateCurrentWriteIndices(esClient, logger, installedTemplates) diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.ts index 3c4861b563b08..82c3175583a75 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.ts @@ -330,6 +330,18 @@ export async function getInstallationObject(options: { }); } +export async function getInstallationObjects(options: { + savedObjectsClient: SavedObjectsClientContract; + pkgNames: string[]; +}) { + const { savedObjectsClient, pkgNames } = options; + const res = await savedObjectsClient.bulkGet( + pkgNames.map((pkgName) => ({ id: pkgName, type: PACKAGES_SAVED_OBJECT_TYPE })) + ); + + return res.saved_objects.filter((so) => so?.attributes); +} + export async function getInstallation(options: { savedObjectsClient: SavedObjectsClientContract; pkgName: string; @@ -339,6 +351,14 @@ export async function getInstallation(options: { return savedObject?.attributes; } +export async function getInstallationsByName(options: { + savedObjectsClient: SavedObjectsClientContract; + pkgNames: string[]; +}) { + const savedObjects = await getInstallationObjects(options); + return savedObjects.map((so) => so.attributes); +} + function sortByName(a: { name: string }, b: { name: string }) { if (a.name > b.name) { return 1; diff --git a/x-pack/plugins/fleet/server/services/setup.test.ts b/x-pack/plugins/fleet/server/services/setup.test.ts index 34336f8167316..8837ae3522ac1 100644 --- a/x-pack/plugins/fleet/server/services/setup.test.ts +++ b/x-pack/plugins/fleet/server/services/setup.test.ts @@ -60,6 +60,7 @@ describe('setupFleet', () => { (upgradeManagedPackagePolicies as jest.Mock).mockResolvedValue([]); soClient.find.mockResolvedValue({ saved_objects: [] } as any); + soClient.bulkGet.mockResolvedValue({ saved_objects: [] } as any); }); afterEach(async () => { diff --git a/x-pack/plugins/fleet/server/services/setup.ts b/x-pack/plugins/fleet/server/services/setup.ts index 3cb2dc030cf75..e43efb44adb5f 100644 --- a/x-pack/plugins/fleet/server/services/setup.ts +++ b/x-pack/plugins/fleet/server/services/setup.ts @@ -12,7 +12,7 @@ import pMap from 'p-map'; import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; -import { AUTO_UPDATE_PACKAGES } from '../../common/constants'; +import { AUTO_UPDATE_PACKAGES, FILE_STORAGE_INTEGRATION_NAMES } from '../../common/constants'; import type { PreconfigurationError } from '../../common/constants'; import type { DefaultPackagesInstallationError, @@ -36,7 +36,10 @@ import { ensureDefaultEnrollmentAPIKeyForAgentPolicy } from './api_keys'; import { getRegistryUrl, settingsService } from '.'; import { awaitIfPending } from './setup_utils'; import { ensureFleetFinalPipelineIsInstalled } from './epm/elasticsearch/ingest_pipeline/install'; -import { ensureDefaultComponentTemplates } from './epm/elasticsearch/template/install'; +import { + ensureDefaultComponentTemplates, + ensureFileUploadWriteIndices, +} from './epm/elasticsearch/template/install'; import { getInstallations, reinstallPackageForInstallation } from './epm/packages'; import { isPackageInstalled } from './epm/packages/install'; import type { UpgradeManagedPackagePoliciesResult } from './managed_package_policies'; @@ -49,6 +52,7 @@ import { ensurePreconfiguredFleetServerHosts, getPreconfiguredFleetServerHostFromConfig, } from './preconfiguration/fleet_server_host'; +import { getInstallationsByName } from './epm/packages/get'; export interface SetupStatus { isInitialized: boolean; @@ -108,6 +112,7 @@ async function createSetupSideEffects( await ensureFleetGlobalEsAssets(soClient, esClient); } + await ensureFleetFileUploadIndices(soClient, esClient); // Ensure that required packages are always installed even if they're left out of the config const preconfiguredPackageNames = new Set(packages.map((pkg) => pkg.name)); @@ -168,6 +173,30 @@ async function createSetupSideEffects( }; } +/** + * Ensure ES assets shared by all Fleet index template are installed + */ +export async function ensureFleetFileUploadIndices( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +) { + const { diagnosticFileUploadEnabled } = appContextService.getExperimentalFeatures(); + if (!diagnosticFileUploadEnabled) return; + const logger = appContextService.getLogger(); + const installedFileUploadIntegrations = await getInstallationsByName({ + savedObjectsClient: soClient, + pkgNames: [...FILE_STORAGE_INTEGRATION_NAMES], + }); + + if (!installedFileUploadIntegrations.length) return []; + const integrationNames = installedFileUploadIntegrations.map(({ name }) => name); + logger.debug(`Ensuring file upload write indices for ${integrationNames}`); + return ensureFileUploadWriteIndices({ + esClient, + logger, + integrationNames, + }); +} /** * Ensure ES assets shared by all Fleet index template are installed */ diff --git a/x-pack/test/security_solution_endpoint/config.ts b/x-pack/test/security_solution_endpoint/config.ts index 0673e28888d10..00310d7a69938 100644 --- a/x-pack/test/security_solution_endpoint/config.ts +++ b/x-pack/test/security_solution_endpoint/config.ts @@ -51,6 +51,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { `--xpack.fleet.packages.0.version=latest`, // set the packagerTaskInterval to 5s in order to speed up test executions when checking fleet artifacts '--xpack.securitySolution.packagerTaskInterval=5s', + // this will be removed in 8.7 when the file upload feature is released + `--xpack.fleet.enableExperimental.0=diagnosticFileUploadEnabled`, ], }, layout: { diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/file_upload_index.ts b/x-pack/test/security_solution_endpoint_api_int/apis/file_upload_index.ts new file mode 100644 index 0000000000000..ce8179a050c47 --- /dev/null +++ b/x-pack/test/security_solution_endpoint_api_int/apis/file_upload_index.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 expect from '@kbn/expect'; +import { + FILE_STORAGE_DATA_INDEX, + FILE_STORAGE_METADATA_INDEX, +} from '@kbn/security-solution-plugin/common/endpoint/constants'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const esClient = getService('es'); + + describe('File upload indices', () => { + it('should have created the file data index on install', async () => { + const endpointFileUploadIndexExists = await esClient.indices.exists({ + index: FILE_STORAGE_METADATA_INDEX, + }); + + expect(endpointFileUploadIndexExists).equal(true); + }); + it('should have created the files index on install', async () => { + const endpointFileUploadIndexExists = await esClient.indices.exists({ + index: FILE_STORAGE_DATA_INDEX, + }); + + expect(endpointFileUploadIndexExists).equal(true); + }); + }); +} diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/index.ts b/x-pack/test/security_solution_endpoint_api_int/apis/index.ts index 7be4ce2243303..22a7a5d7567ef 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/index.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/index.ts @@ -32,6 +32,7 @@ export default function endpointAPIIntegrationTests(providerContext: FtrProvider loadTestFile(require.resolve('./policy')); loadTestFile(require.resolve('./package')); loadTestFile(require.resolve('./endpoint_authz')); + loadTestFile(require.resolve('./file_upload_index')); loadTestFile(require.resolve('./endpoint_artifacts/trusted_apps')); loadTestFile(require.resolve('./endpoint_artifacts/event_filters')); loadTestFile(require.resolve('./endpoint_artifacts/host_isolation_exceptions')); diff --git a/x-pack/test/security_solution_endpoint_api_int/config.ts b/x-pack/test/security_solution_endpoint_api_int/config.ts index 6e3ca0d718b6e..505d9734593b9 100644 --- a/x-pack/test/security_solution_endpoint_api_int/config.ts +++ b/x-pack/test/security_solution_endpoint_api_int/config.ts @@ -29,6 +29,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { // always install Endpoint package by default when Fleet sets up `--xpack.fleet.packages.0.name=endpoint`, `--xpack.fleet.packages.0.version=latest`, + // this will be removed in 8.7 when the file upload feature is released + `--xpack.fleet.enableExperimental.0=diagnosticFileUploadEnabled`, ], }, }; From 2a69211f6e70e4bb04e085e5f8a542683316728a Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 16 Nov 2022 16:46:44 +0100 Subject: [PATCH 04/14] [Enterprise Search] Display languages nicely in connector overview (#145362) This displays the language used in a connector in a user-friendly way. --- .../components/new_index/constants.ts | 109 +++--------------- .../search_index/connector_total_stats.tsx | 8 +- .../utils/language_to_text.ts | 71 ++++++++++++ .../translations/translations/fr-FR.json | 30 ++--- .../translations/translations/ja-JP.json | 30 ++--- .../translations/translations/zh-CN.json | 30 ++--- 6 files changed, 137 insertions(+), 141 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/language_to_text.ts diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/constants.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/constants.ts index c7a6b2d576a30..c39d26314671c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/constants.ts @@ -8,6 +8,8 @@ import { EuiSelectOption } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { languageToText } from '../../utils/language_to_text'; + export const NEW_INDEX_TEMPLATE_TYPES: { [key: string]: string } = { api: i18n.translate('xpack.enterpriseSearch.content.newIndex.types.api', { defaultMessage: 'API endpoint', @@ -45,142 +47,67 @@ export const UNIVERSAL_LANGUAGE_VALUE = ''; export const SUPPORTED_LANGUAGES: EuiSelectOption[] = [ { + text: languageToText(UNIVERSAL_LANGUAGE_VALUE), value: UNIVERSAL_LANGUAGE_VALUE, - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.universalDropDownOptionLabel', - { - defaultMessage: 'Universal', - } - ), }, { - text: '—', disabled: true, + text: '—', }, { + text: languageToText('zh'), value: 'zh', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.chineseDropDownOptionLabel', - { - defaultMessage: 'Chinese', - } - ), }, { + text: languageToText('da'), value: 'da', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.danishDropDownOptionLabel', - { - defaultMessage: 'Danish', - } - ), }, { + text: languageToText('nl'), value: 'nl', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.dutchDropDownOptionLabel', - { - defaultMessage: 'Dutch', - } - ), }, { + text: languageToText('en'), value: 'en', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.englishDropDownOptionLabel', - { - defaultMessage: 'English', - } - ), }, { + text: languageToText('fr'), value: 'fr', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.frenchDropDownOptionLabel', - { - defaultMessage: 'French', - } - ), }, { + text: languageToText('de'), value: 'de', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.germanDropDownOptionLabel', - { - defaultMessage: 'German', - } - ), }, { + text: languageToText('it'), value: 'it', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.italianDropDownOptionLabel', - { - defaultMessage: 'Italian', - } - ), }, { + text: languageToText('ja'), value: 'ja', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.japaneseDropDownOptionLabel', - { - defaultMessage: 'Japanese', - } - ), }, { + text: languageToText('ko'), value: 'ko', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.koreanDropDownOptionLabel', - { - defaultMessage: 'Korean', - } - ), }, { + text: languageToText('pt'), value: 'pt', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseDropDownOptionLabel', - { - defaultMessage: 'Portuguese', - } - ), }, { + text: languageToText('pt-br'), value: 'pt-br', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseBrazilDropDownOptionLabel', - { - defaultMessage: 'Portuguese (Brazil)', - } - ), }, { + text: languageToText('ru'), value: 'ru', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.russianDropDownOptionLabel', - { - defaultMessage: 'Russian', - } - ), }, { + text: languageToText('es'), value: 'es', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.spanishDropDownOptionLabel', - { - defaultMessage: 'Spanish', - } - ), }, { + text: languageToText('th'), value: 'th', - text: i18n.translate( - 'xpack.enterpriseSearch.content.newIndex.supportedLanguages.thaiDropDownOptionLabel', - { - defaultMessage: 'Thai', - } - ), }, ]; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector_total_stats.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector_total_stats.tsx index 2b5ef4cb68df7..fd70516a572d5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector_total_stats.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector_total_stats.tsx @@ -21,6 +21,8 @@ import { i18n } from '@kbn/i18n'; import { isConnectorIndex } from '../../utils/indices'; +import { languageToText } from '../../utils/language_to_text'; + import { ConnectorOverviewPanels } from './connector/connector_overview_panels'; import { NATIVE_CONNECTORS } from './connector/constants'; import { NameAndDescriptionStats } from './name_and_description_stats'; @@ -71,11 +73,7 @@ export const ConnectorTotalStats: React.FC = () => { } ), isLoading: hideStats, - title: - indexData.connector.language ?? - i18n.translate('xpack.enterpriseSearch.content.searchIndex.totalStats.noneLabel', { - defaultMessage: 'None', - }), + title: languageToText(indexData.connector.language ?? ''), }, ]; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/language_to_text.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/language_to_text.ts new file mode 100644 index 0000000000000..34b7f9fdcd7ff --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/utils/language_to_text.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. + */ + +import { i18n } from '@kbn/i18n'; + +export const UNIVERSAL_LANGUAGE_VALUE = ''; + +export const languageToTextMap: Record = { + [UNIVERSAL_LANGUAGE_VALUE]: i18n.translate( + 'xpack.enterpriseSearch.content.supportedLanguages.universalLabel', + { + defaultMessage: 'Universal', + } + ), + da: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.danishLabel', { + defaultMessage: 'Danish', + }), + de: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.germanLabel', { + defaultMessage: 'German', + }), + en: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.englishLabel', { + defaultMessage: 'English', + }), + es: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.spanishLabel', { + defaultMessage: 'Spanish', + }), + + fr: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.frenchLabel', { + defaultMessage: 'French', + }), + + it: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.italianLabel', { + defaultMessage: 'Italian', + }), + ja: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.japaneseLabel', { + defaultMessage: 'Japanese', + }), + ko: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.koreanLabel', { + defaultMessage: 'Korean', + }), + + nl: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.dutchLabel', { + defaultMessage: 'Dutch', + }), + pt: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.portugueseLabel', { + defaultMessage: 'Portuguese', + }), + 'pt-br': i18n.translate( + 'xpack.enterpriseSearch.content.supportedLanguages.portugueseBrazilLabel', + { + defaultMessage: 'Portuguese (Brazil)', + } + ), + ru: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.russianLabel', { + defaultMessage: 'Russian', + }), + th: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.thaiLabel', { + defaultMessage: 'Thai', + }), + zh: i18n.translate('xpack.enterpriseSearch.content.supportedLanguages.chineseLabel', { + defaultMessage: 'Chinese', + }), +}; + +export function languageToText(input: string): string { + return languageToTextMap[input] ?? input; +} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 32e7d696d8dc3..eb40a7ab003c0 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -11386,21 +11386,21 @@ "xpack.enterpriseSearch.content.newIndex.steps.configureIngestion.title": "Configurer les paramètres d’ingestion", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.crawler.title": "Indexer avec le robot d'indexation", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.title": "Créer un index Elasticsearch", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.chineseDropDownOptionLabel": "Chinois", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.danishDropDownOptionLabel": "Danois", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.dutchDropDownOptionLabel": "Néerlandais", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.englishDropDownOptionLabel": "Anglais", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.frenchDropDownOptionLabel": "Français", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.germanDropDownOptionLabel": "Allemand", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.italianDropDownOptionLabel": "Italien", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.japaneseDropDownOptionLabel": "Japonais", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.koreanDropDownOptionLabel": "Coréen", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseBrazilDropDownOptionLabel": "Portugais (Brésil)", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseDropDownOptionLabel": "Portugais", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.russianDropDownOptionLabel": "Russe", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.spanishDropDownOptionLabel": "Espagnol", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.thaiDropDownOptionLabel": "Thaï", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.universalDropDownOptionLabel": "Universel", + "xpack.enterpriseSearch.content.supportedLanguages.chineseLabel": "Chinois", + "xpack.enterpriseSearch.content.supportedLanguages.danishLabel": "Danois", + "xpack.enterpriseSearch.content.supportedLanguages.dutchLabel": "Néerlandais", + "xpack.enterpriseSearch.content.supportedLanguages.englishLabel": "Anglais", + "xpack.enterpriseSearch.content.supportedLanguages.frenchLabel": "Français", + "xpack.enterpriseSearch.content.supportedLanguages.germanLabel": "Allemand", + "xpack.enterpriseSearch.content.supportedLanguages.italianLabel": "Italien", + "xpack.enterpriseSearch.content.supportedLanguages.japaneseLabel": "Japonais", + "xpack.enterpriseSearch.content.supportedLanguages.koreanLabel": "Coréen", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseBrazilLabel": "Portugais (Brésil)", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseLabel": "Portugais", + "xpack.enterpriseSearch.content.supportedLanguages.russianLabel": "Russe", + "xpack.enterpriseSearch.content.supportedLanguages.spanishLabel": "Espagnol", + "xpack.enterpriseSearch.content.supportedLanguages.thaiLabel": "Thaï", + "xpack.enterpriseSearch.content.supportedLanguages.universalLabel": "Universel", "xpack.enterpriseSearch.content.newIndex.types.api": "Point de terminaison d'API", "xpack.enterpriseSearch.content.newIndex.types.connector": "Connecteur", "xpack.enterpriseSearch.content.newIndex.types.crawler": "Robot d'indexation", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index bcec0383dcb33..ea41ab1f3e6e7 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -11372,21 +11372,21 @@ "xpack.enterpriseSearch.content.newIndex.steps.configureIngestion.title": "インジェスチョン設定を構成", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.crawler.title": "Webクローラーを使用してインデックス", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.title": "Elasticsearchインデックスを作成", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.chineseDropDownOptionLabel": "中国語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.danishDropDownOptionLabel": "デンマーク語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.dutchDropDownOptionLabel": "オランダ語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.englishDropDownOptionLabel": "英語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.frenchDropDownOptionLabel": "フランス語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.germanDropDownOptionLabel": "ドイツ語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.italianDropDownOptionLabel": "イタリア語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.japaneseDropDownOptionLabel": "日本語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.koreanDropDownOptionLabel": "韓国語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseBrazilDropDownOptionLabel": "ポルトガル語(ブラジル)", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseDropDownOptionLabel": "ポルトガル語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.russianDropDownOptionLabel": "ロシア語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.spanishDropDownOptionLabel": "スペイン語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.thaiDropDownOptionLabel": "タイ語", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.universalDropDownOptionLabel": "ユニバーサル", + "xpack.enterpriseSearch.content.supportedLanguages.chineseLabel": "中国語", + "xpack.enterpriseSearch.content.supportedLanguages.danishLabel": "デンマーク語", + "xpack.enterpriseSearch.content.supportedLanguages.dutchLabel": "オランダ語", + "xpack.enterpriseSearch.content.supportedLanguages.englishLabel": "英語", + "xpack.enterpriseSearch.content.supportedLanguages.frenchLabel": "フランス語", + "xpack.enterpriseSearch.content.supportedLanguages.germanLabel": "ドイツ語", + "xpack.enterpriseSearch.content.supportedLanguages.italianLabel": "イタリア語", + "xpack.enterpriseSearch.content.supportedLanguages.japaneseLabel": "日本語", + "xpack.enterpriseSearch.content.supportedLanguages.koreanLabel": "韓国語", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseBrazilLabel": "ポルトガル語(ブラジル)", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseLabel": "ポルトガル語", + "xpack.enterpriseSearch.content.supportedLanguages.russianLabel": "ロシア語", + "xpack.enterpriseSearch.content.supportedLanguages.spanishLabel": "スペイン語", + "xpack.enterpriseSearch.content.supportedLanguages.thaiLabel": "タイ語", + "xpack.enterpriseSearch.content.supportedLanguages.universalLabel": "ユニバーサル", "xpack.enterpriseSearch.content.newIndex.types.api": "APIエンドポイント", "xpack.enterpriseSearch.content.newIndex.types.connector": "コネクター", "xpack.enterpriseSearch.content.newIndex.types.crawler": "Webクローラー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 0aa3a6f587043..72ec3c7ea73fc 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -11391,21 +11391,21 @@ "xpack.enterpriseSearch.content.newIndex.steps.configureIngestion.title": "配置采集设置", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.crawler.title": "使用网络爬虫编制索引", "xpack.enterpriseSearch.content.newIndex.steps.createIndex.title": "创建 Elasticsearch 索引", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.chineseDropDownOptionLabel": "中文", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.danishDropDownOptionLabel": "丹麦语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.dutchDropDownOptionLabel": "荷兰语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.englishDropDownOptionLabel": "英语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.frenchDropDownOptionLabel": "法语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.germanDropDownOptionLabel": "德语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.italianDropDownOptionLabel": "意大利语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.japaneseDropDownOptionLabel": "日语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.koreanDropDownOptionLabel": "朝鲜语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseBrazilDropDownOptionLabel": "葡萄牙语(巴西)", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.portugueseDropDownOptionLabel": "葡萄牙语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.russianDropDownOptionLabel": "俄语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.spanishDropDownOptionLabel": "西班牙语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.thaiDropDownOptionLabel": "泰语", - "xpack.enterpriseSearch.content.newIndex.supportedLanguages.universalDropDownOptionLabel": "通用", + "xpack.enterpriseSearch.content.supportedLanguages.chineseLabel": "中文", + "xpack.enterpriseSearch.content.supportedLanguages.danishLabel": "丹麦语", + "xpack.enterpriseSearch.content.supportedLanguages.dutchLabel": "荷兰语", + "xpack.enterpriseSearch.content.supportedLanguages.englishLabel": "英语", + "xpack.enterpriseSearch.content.supportedLanguages.frenchLabel": "法语", + "xpack.enterpriseSearch.content.supportedLanguages.germanLabel": "德语", + "xpack.enterpriseSearch.content.supportedLanguages.italianLabel": "意大利语", + "xpack.enterpriseSearch.content.supportedLanguages.japaneseLabel": "日语", + "xpack.enterpriseSearch.content.supportedLanguages.koreanLabel": "朝鲜语", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseBrazilLabel": "葡萄牙语(巴西)", + "xpack.enterpriseSearch.content.supportedLanguages.portugueseLabel": "葡萄牙语", + "xpack.enterpriseSearch.content.supportedLanguages.russianLabel": "俄语", + "xpack.enterpriseSearch.content.supportedLanguages.spanishLabel": "西班牙语", + "xpack.enterpriseSearch.content.supportedLanguages.thaiLabel": "泰语", + "xpack.enterpriseSearch.content.supportedLanguages.universalLabel": "通用", "xpack.enterpriseSearch.content.newIndex.types.api": "API 终端", "xpack.enterpriseSearch.content.newIndex.types.connector": "连接器", "xpack.enterpriseSearch.content.newIndex.types.crawler": "网络爬虫", From 12aeaa810123fa64eddb9f3c8799e517c3a5dcbd Mon Sep 17 00:00:00 2001 From: Spencer Date: Wed, 16 Nov 2022 08:57:51 -0700 Subject: [PATCH 05/14] [ts/checkProjects] validate extends of all ts projects (#145176) Fixes https://github.com/elastic/kibana/issues/145129 In order to make our TS setup in the repo far more efficient we needed to make it a little more complicated than it used to be. This includes a few rules that all tsconfig files need to follow which were currently assumed to be true, but with this PR will now be validated: 1. No tsconfig.json files are allowed to extend the `tsconfig.json` file. This file is used to produce types for the root of the repo, and include the `package.json` file in a project so it can be referenced in projects directly. Files which violate this rule were updated to point to the root `tsconfig.base.json` file. 2. Every tsconfig.json file must extend the `tsconfig.base.json` file, either directly or indirectly. --- examples/field_formats_example/tsconfig.json | 2 +- examples/files_example/tsconfig.json | 2 +- examples/hello_world/tsconfig.json | 2 +- .../partial_results_example/tsconfig.json | 2 +- src/dev/typescript/project.ts | 4 ++++ .../typescript/run_check_ts_projects_cli.ts | 20 +++++++++++++++++++ 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/examples/field_formats_example/tsconfig.json b/examples/field_formats_example/tsconfig.json index 66e9d7db028c7..a7651b649e5b3 100644 --- a/examples/field_formats_example/tsconfig.json +++ b/examples/field_formats_example/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./target", "skipLibCheck": true diff --git a/examples/files_example/tsconfig.json b/examples/files_example/tsconfig.json index 2ce0ddb8f7d66..9329f941c1006 100644 --- a/examples/files_example/tsconfig.json +++ b/examples/files_example/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./target/types" }, diff --git a/examples/hello_world/tsconfig.json b/examples/hello_world/tsconfig.json index f074171954048..6cfb28f7b3317 100644 --- a/examples/hello_world/tsconfig.json +++ b/examples/hello_world/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./target/types" }, diff --git a/examples/partial_results_example/tsconfig.json b/examples/partial_results_example/tsconfig.json index ba03cbc836189..97d4c752cc3b5 100644 --- a/examples/partial_results_example/tsconfig.json +++ b/examples/partial_results_example/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.json", + "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./target", "skipLibCheck": true diff --git a/src/dev/typescript/project.ts b/src/dev/typescript/project.ts index 32245e26c69ec..c148cccfa7351 100644 --- a/src/dev/typescript/project.ts +++ b/src/dev/typescript/project.ts @@ -174,4 +174,8 @@ export class Project { ? [this.tsConfigPath, ...this.baseProject.getConfigPaths()] : [this.tsConfigPath]; } + + public getProjectsDeep(): Project[] { + return this.baseProject ? [this, ...this.baseProject.getProjectsDeep()] : [this]; + } } diff --git a/src/dev/typescript/run_check_ts_projects_cli.ts b/src/dev/typescript/run_check_ts_projects_cli.ts index 9156c52a23d01..c4998e6791957 100644 --- a/src/dev/typescript/run_check_ts_projects_cli.ts +++ b/src/dev/typescript/run_check_ts_projects_cli.ts @@ -12,6 +12,7 @@ import { run } from '@kbn/dev-cli-runner'; import { asyncMapWithLimit } from '@kbn/std'; import { createFailError } from '@kbn/dev-cli-errors'; import { getRepoFiles } from '@kbn/get-repo-files'; +import { REPO_ROOT } from '@kbn/utils'; import globby from 'globby'; import { File } from '../file'; @@ -37,6 +38,25 @@ export async function runCheckTsProjectsCli() { const stats = new Stats(); let failed = false; + const everyProjectDeep = new Set(PROJECTS.flatMap((p) => p.getProjectsDeep())); + for (const proj of everyProjectDeep) { + const [, ...baseConfigRels] = proj.getConfigPaths().map((p) => Path.relative(REPO_ROOT, p)); + const configRel = Path.relative(REPO_ROOT, proj.tsConfigPath); + + if (baseConfigRels[0] === 'tsconfig.json') { + failed = true; + log.error( + `[${configRel}]: This tsconfig extends the root tsconfig.json file and shouldn't. The root tsconfig.json file is not a valid base config, you probably want to point to the tsconfig.base.json file.` + ); + } + if (configRel !== 'tsconfig.base.json' && !baseConfigRels.includes('tsconfig.base.json')) { + failed = true; + log.error( + `[${configRel}]: This tsconfig does not extend the tsconfig.base.json file either directly or indirectly. The TS config setup for the repo expects every tsconfig file to extend this base config file.` + ); + } + } + const pathsAndProjects = await asyncMapWithLimit(PROJECTS, 5, async (proj) => { const paths = await globby(proj.getIncludePatterns(), { ignore: proj.getExcludePatterns(), From 248b2360f9f630d448ee525c17554d1909a0577b Mon Sep 17 00:00:00 2001 From: Katerina Patticha Date: Wed, 16 Nov 2022 17:12:07 +0100 Subject: [PATCH 06/14] [APM] Display service icons without filled background (#145329) ## Summary ## Before https://user-images.githubusercontent.com/3369346/202012360-9694c183-e826-4eac-aced-d7c19c0b26db.mov ![image](https://user-images.githubusercontent.com/3369346/202148711-7aea3d69-936b-4112-94d2-a6a0429f8891.png) ## After https://user-images.githubusercontent.com/3369346/202012369-4387db32-369b-441f-aeea-78cfbdceda16.mov ![image](https://user-images.githubusercontent.com/3369346/202148764-f0d83140-10e6-4b01-b4e6-5b3c88efae00.png) ![image](https://user-images.githubusercontent.com/3369346/202149004-ab60b385-a403-4165-aa88-646f6a2b4047.png) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/components/shared/service_icons/icon_popover.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/plugins/apm/public/components/shared/service_icons/icon_popover.tsx b/x-pack/plugins/apm/public/components/shared/service_icons/icon_popover.tsx index ac7c38dc2f888..8a90a1cffb890 100644 --- a/x-pack/plugins/apm/public/components/shared/service_icons/icon_popover.tsx +++ b/x-pack/plugins/apm/public/components/shared/service_icons/icon_popover.tsx @@ -55,8 +55,7 @@ export function IconPopover({ ownFocus={false} button={ Date: Wed, 16 Nov 2022 08:14:51 -0800 Subject: [PATCH 07/14] [DOCS] Refresh screenshots for alerting banners (#145307) --- .../alerting-troubleshooting.asciidoc | 7 +++---- .../alerting/images/rules-details-health.png | Bin 278648 -> 0 bytes .../images/rules-management-health.png | Bin 193781 -> 161664 bytes 3 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 docs/user/alerting/images/rules-details-health.png diff --git a/docs/user/alerting/alerting-troubleshooting.asciidoc b/docs/user/alerting/alerting-troubleshooting.asciidoc index 9d254ce5fc834..62604c465dafc 100644 --- a/docs/user/alerting/alerting-troubleshooting.asciidoc +++ b/docs/user/alerting/alerting-troubleshooting.asciidoc @@ -83,12 +83,11 @@ The result of this HTTP request (and printed to stdout by https://github.com/pmu [[alerting-error-banners]] === Look for error banners -The *Rule Management* and *Rule Details* pages contain an error banner, which helps to identify the errors for the rules: -[role="screenshot"] -image::images/rules-management-health.png[Rule management page with the errors banner] +The **{stack-manage-app}** > *{rules-ui}* page contains an error banner that +helps to identify the errors for the rules: [role="screenshot"] -image::images/rules-details-health.png[Rule details page with the errors banner] +image::images/rules-management-health.png[Rule management page with the errors banner] [float] [[task-manager-diagnostics]] diff --git a/docs/user/alerting/images/rules-details-health.png b/docs/user/alerting/images/rules-details-health.png deleted file mode 100644 index ffdac4fcd19839519f698ac8e194c25d75847de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278648 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�YR<*e1tp?|?CtmRW04wMMZ_a`%rS#1pv?qQ`6K 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 >fUOSc+^`XRDF9 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 diff --git a/docs/user/alerting/images/rules-management-health.png b/docs/user/alerting/images/rules-management-health.png index e81c4e07dd7b2e98e94508046e816fb312851e5d..edd16b245ec6549c3a37691aea291373587440d9 100644 GIT binary patch literal 161664 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 z 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

AqzpEx6WxB4LO*4=Sd{+7*Kr9ng6Lhc>! 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%0DDBnOh@V^LxP{u{OfG#| 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 Q7Y74p?{!GvRUYKCnyyG&#mcOmwJv1~- zGh||BJsh3tn#w&KH0(U2kxIpPSZ%0@qAkm+uJydqV}Q%VQPZ;oQyr^#VSJKnT*b0s zu4<}kW?-4Qzi8H~Zi>RXh<8D7&@0gu;#&79WY{8|jE|R(-&GGg~t0 zN1kOYggyzq!cD*}CU+YS+3Ij)aw&9d;Li{c_VPGBx?UTVnf)mHtkS2e|4Fu9i|(mz zUE{LTg!{8ib?Ef(i}9s?y;c1kzqz1;CkLDh-`dwh3Lpi2&fm6OL7_7i%w*uCW9w$jua*`SPZ|-?1%* zIy&N+s=(H}W}VxQmkAgjgCj762$$(X>DU#U6E|XW6|9t|<&>1ml>E{O(yD0ke4*i$ z+`U()^k?Z!B6T1Ty}i4rfEevVzWUzHX&xJ| z#Fx;Q%C{uj=}PM|=()Li{yd>zIa4Pp^{8+<8)#H3QOhgVFVCvKc4;ub%IBTr9pK$3 z9wWxFww-3zxpB<&SV|m-9a!2^oB?S+xCJ?Mc7JMrX3d{!%e-*5#@Mes!!Kh~R$Nug zydt@%QolJiy-~{OZ}yy4o!D*M>ptJdDa5fw zm!`0=JF{PWxH(#>qpB9x^z1wOIo>(hd5Q<4U=kdkptIf;O!GaHIPKcf>FuFxTI9;l zJNKA8R%Pr^elFB6;JNYsM`2LGof6f{PEl3==^L9RfpX`Yhofs_|6+IRCC}_r98w<; zPwgigAs^1)zsBUhCM)S~>4|#NZ@pQV$}OHL&oi)YV{g9SkY4^o%8zA#v7F|d?$C4= zeUN$5lgRv*Y9Oq)MO8FjRNcqvcJfkS_jJGYwpEnOVB}B?)3D;JmKH+uBJLYbr=C66?4OZi${8{@0GF9zK8W1 zPK478cIpkk4&tZmXliZMFhhtXN4%sv+}m6FIRnF3epmSnfk#n&g;z~7*gYuwgWB)N zI0xKI=}Fkna;Mu`^df+8d)-|d0yTd`%A8?uEZpgcG}V+dQ&dD?hMxlvP!P!xP~m5Y z@UJN1v;R4lMtp&Q{MU6P1cWe41eAZbQGy@;eEy8|r_aBR$nl{F=zKC)vbVu;< zXD#1rx@amY2pZelvV%?RjZE1+Y#siLgCOi72tTzobpZoCY;EkE1wBM){%RozKmT(X zL<9V*iHo%eji%yT;46D4Qy?!p4?72qC?*gH6m~K(6I79s{&#oyUm`RXE-ns&AdtJe zJG(nKySV zmbP%3!RHX=;^F2K{;R|P=hpvD`LC{O&ZbVU>}}yaT}1zv>i_Qie{cT3JN`AN*8k4Q z$-)2f|IYb;ZvDHfFzCszUO`*j*OTyQAM0xL%2DHECN?x!&(GF+DFf|}NXz^PaB{M%rP37h`Kget-^D94m zXcyS_Zr%1C5jH>g{ZN0nvYo!)H}=_B@)ZIi3cmP1{CT;9TJ;1Vw6pR`9{~vf4ETpX zh8XyO^`L*+`cJ!C85BV9oy@YVKH4MZap*t>_eN7-d6McjO7`Ts2J2_LMT`9N<%t7H z0&TL;&7H~8hD#?-Kax?UFa=ip{tA-RBlBlTMf~TKQYsPGmKE=dq1|lw zBu`PC%Tdf?`gb>ksUAUAd{E%g*K!*p4IC^nhT4KY2cW_$eY>e29bs)5>&D)i(*Jx# z2uO@k0U+pRF@WTDC=jutx(FP2*RJteY~(GFl?^*d{mBp;U<>MeAmcAA{g3$zPEf}3 z0PfYz#X5s`hS}vtnuggT;|qLCffbYQaROgsexM*+N$JD;g%_TeNG9YbF~4|${Z-_G ztoEN1GCmFp~`%Q4A~r~nLYio2W7cq@LeMkIIh#M6{vXuouijg zaqBPhhla4X2tP6Y$KoZ95cu##yof0+F)g0Ce@ofQYWMi3hBgN)<=2W7WN=)E;dSi1 zQh(|zrw!R_yjJ>Vy2tSLI#Pc>lhcMp6>l8LN|lcED=;T&M{{tyk_dePU22gb&m#sy z2s}b!%2%0Pqm?N|JjM+1#0^FbYd>R(P9-qgvR7?YsC$nF!N0`%=MsZ|^a5X#Ng+9A zh#^p|!zIV2H#zyEXkmeP%2sPM#VH%QrSc9|(3K>(u^i7)yG#{2Ve{mls;ximgaOa5 zVc}{S^4ywkPluN0lg$T{mNFnQ9roYQIu<(&1v5i`K*hW=xXt4?hT>kiTRws{5RfQQ zqZt?n$G$O5TL=-6JO@l9=u3j1AcM)#Cg`d6tqi?#hsjVNuo}S>XA1ch*?Z}KsBr&U zVK`lES{k!9{Sa=@j^=i&Zz+f_U#$z8_0x7%T(h1dMd|CH%r$eERs^S;2rvXTy8F%bp{A~3oe{K;Oe)U!Qv?(D6uYug8i2W9$PP^PQ%9GWSC2F zOxq(k8WF{aaJKH@iyE=QD{$-2TmeqlG&UOjqm9MX1J=w;|NTq$$ z*vd%W7YC%?4YD}FmXIKDJ7L#T0G!1O6Hqh&5aysAg1D^=Zle4fI7Q|jM-dDQAge=z ztSbGGZrZ*_4aYXCWgv&M=yxei@emHs;A_DkLoY&+X-qIG)`s(Pg72dqI|iu<28A#O z3lsHO6=aJ;UNz|+6t5S;~H8Jexha*w#r8&I=q z1Bc20X6PN&%$inKksu;zAS*&T@*}7QBte94GCju%6;8-ihoRdMOZ}UarNgE$Yapv_ zgDeG+F7*&@uq8fpmJ{NVtBwvS4t@fN+H5gqeS`$#1M%?z69a|}&y(2F(Yk!{+Gx-_ z6h2j~(|43$g4?Is&y)}YIdJ?^#RNw%gLW!00==ph8LABHo0(B4Z6%D?&2XbyMGR6iyJ1UR#Vz2BK8zMe(y(V z(=1ds=%Q`NkNEg_xB#O4@KNjFLCHtt#0mRjXV^&#mA`^PO>=`%^LMSghT7B$fZ#dV z$C!ga7fckij_Ri=?4&!z1o^6h$uVaX1tFbK9c|+7=;w-@bLG`X$yqLx)=!7Zu=BSw zcvypCNP}r;_Xsv8)5_VK{Luw3 z*is2PTlszuQ;06fDk*$&46Y2NfkQ^CpvUmp5>iuY2O&PU@ppW)$|KUpupC5O8>oP6 zsEskCLB`5Nho3M1+6*EIZV%)rUSY#G0}<}%FptA*>;gIVCjw?URoO~p<0LuT0PK&k z+W7c$mBz^?+|(R60hT{me1HlyK40M~-*wN1;l&mu085ua1yqRyCPxrzeV?lipvB+n zGNF0|>X6MApA}D0$K*!jH0R~;Ucvp8w={+sOpjhdTF4?rDFmNm0wKk|P5Ms{cX5+0yno4 zxF6GscM=(GfVe>$##CKH&S2iFbGi9*!^S|6hZ+Rf=aQI^kBTxhhF0q-txS;~b;CcIyHl(DF z)n2^#Zaf?~X4kyff3PjH;e3G(PV5d>+&myy3;Q}M=x;3{0b{@^(?wH*$IvpK}{C0zA9*&zW;IMYXx zx-Q2&7UB5cwJd2W`wbVGq)PD=EoQE6ZDy4cdfJJkXddE@Xv&(ACje(B zNX#Qv??GCD1kPvHjLr}!jgmwH!+EjrsaYL1JVJn25sL{%>98?=luz1-l7rd-4M-93 zgpWo}Brm6wFPTz0^ccpK4GW+E$aBHDc6JaqU`IXO*G4(>Ks+V1wc65@!`oT|n-pD*TU<;f9hN0q!vbjEa46-xkpswrK~P9%tk7m1Q}>g%q!9}`Xl zcn}?-cf>oTyiW!}O~YEDrOwQCq9V$`p~9}mSP};$lqxA8G^G$fNiw8@@aV!>9tHoh z9PnJwMYh&arP0N*KVkdqVPJ66^&gQ_{3)Uk zev%0@94@tes2h>rcODU48hsm5@n8jnCM{_9PnY_m>UfHZo=>Xgz5V(@rNU5x$+d^f zY3w!WKnO1=_E&e5cNQ%RjQ=wpwJlOFrEz61V`I}J zX5PC_w0IHki)upXKhnlO1_69uF90)GLnmrH?ZR4mE(B?VK@nooC(lo%N>&In%=~< z-;L*G`=#2((Kvr8<{33S+W=oFO2;qyVd4L#li}G7KrsCg#Q;=XGo7zA*I;G)|2x%t zpv~zP+jy?lX)qh%4nxt`)Whx3qz|ZAjhXp)fvha}``e$zHIsbzJUIRvb_j>SZS%_@ z!Gco)z}~T;dw-Tl`YG33oqe0l;$>KgL7Rl14uoMl_Ko<#QeSNAs@A?j_6;7ois zJ96|u3yB0Nl#ciW)s5?C+I=yD8eM0Y1E1O1rbdeyLKMDO-&{~sUDvIcEH$2U4#!P( z=5e+>MSEBQ!1sV2|HA+D-D=2xv5-gpAaNjTAQc>cRfzGGz(cyZ70Q*SgX*5XM>H*~VKjki6Vn&9K74!f65T^!RvICZtD-{MwNiA*0=>nEV6vtMqGqZE3zU7a&=vA^&-`D&rcHOe%1YJP-O z?aj!`Z@C$6^Oj_3V#}n5%Pk9D)5AKoePw!0^aiayDkT>0n6#_IiI`NRc!cA!@^NKi zC^5Wum$UbA4CQ#txE_$e#X2&O#vlx%v&pvnZJTvcoR!(BRG zlM3JcvCOQ%nb3Z3UX_K@eBMt$!bvGuW5`Jil_-g3RB>Fb7@n?u|9?X!uz*eiu> z|7A~3-`exj?+*+%oDY1z+wijpD{ZFN+^_yy%ptIZEw&7vSMvE#CHe=1 z@^D<4`hArJLJ8&?&&$KJ11yL;GDyX4`@WqVGa6^=QQxdFfAJ{f<2fIcbJ9PzqIO1e zKl8lsB;&L3aB%-|T$P7a>JSIveiz8Wdw&KQ-Q2Tp{Y36Ews|J#Y6W7mYi!4S^)eeI za?^I-_-5Jn&{wO%5Znd)FjCr{iMcr_KbXYde?FtfQjnb`BvPjU|1$xY%b-*CQ1+L zmu?#rncu%S+~n+t)~Y;V^nAE`axKqwBpt z6QiUt|eyMpeM73w|DUySdjM6R}s9N7POo_Q9o_({;D{yF75uy6t+G zWwVGSUH%g}sZ{zrrre(OpoMq-Xu^19r(RZmf5~V)8cuPxKe!84GCI+cr`mgwb9nk0 z)cV=)4z1n~hU?Lgz38{V_QYU?kI;;g)2Q0#xO?*ZVS*oHGK(XA6=_)`^^$6R-{-Bu43d96SHF5lg9VzsgPs~N3>5;~^Z6aDNk zL)1i!8wsqvCLKgv-gd0sch};wI8|1<=~xJi>|9YVhJ!Xe;eR!KjOy_wtOv zclX^{3CiEg!!?m{+Y!Rp?+f026H9UrZ829>5_*OZ>nf6iaLcUBv9%Rd1K-7RI~qi($>A zaK!4UfxI)Ey*m~8Wv~P013B()-8rU+Nm(zKJw3bbv}@Quc}7ra(COJi<gvWy&3z8q=Zi{zOxZA**{m0CbqO9(+1-I``(iOwYQ>wG&b?4kuq(OT|$5EeJp|P zj3UJKd+R`sQbFeh3fpmFQO6F8kUY-pk4ent8g6c3OUg=0N%}FO)Y%`&NZk}z8LKg8 zgkG%-InaM`fKBdNvS}}GY4b8H@~&M^G0%?&>q}yjS24e@h^@9;U^hBXcNldX9A?|x zOx8csZLqqDrf|BUuzfAYUCD>j^YO|fx4Qo7B7CNJ_{22IICI&xneZ z7R3j961KN_>%1u6zxK;2CR^^$HdreJ7CW3;y4F^1ZI2B)#gAnfAcOUWAS-U(3*U)j z7PDlsO^15F(XiKS^WtAz<@S%?^o!cnMa;ug9$M91o4+H+;Qcfu;=TQj`14~e?*2kV zXmm3xJ+xWFtHXX|FY^W&{VaLGu4Qg+b7izdd^Y0pqxTi%PuSLKdk}*MtZ1dnmQfd| zP&{Rs*W$r*hx=UQ1i4Usf6+ss_xXPXfD&-9Nrv*##j_b1+{ikqWy&nwnCE%`iCE87 zFU3Ocxl2X@J8um^It&p(9LVU}rSh-9`pnd>Ep<&=zZ{&<4oJKT*%K~?XAF9LG5Xsc z?se>%cc$xu+o1*O#h?NoO1B6}5H(t<*BR6qWb$HYCSQ?dX9gy4Q`un$qk3tmHZ>?q z{MEXw;f>#euU zO&HoEb{{)!dk`s~$Z#XU6V7WlWWl6a@nvbV@tgo~W4z8Vw#h%SQ0+7~Gm$Slk|Cg1 za6|x5ZR4|DXwpBdIW6T!*BTs>epW8#zjWaJQ=5isUbB3g_v2KXfx&3|E4}-g!zhqv z=JG_nL*h6WExuch=(>KZd`)C}@@lpY&}Q;`Ozw0PaR<*BdJJap^q3`Sob7&@0{_eBRS_ zW%4(k7@WV)$*cM-(uKT3KeK4?{o>KSlP+GRYwU(d&K8%qup^_jk{rj?2+q25w?=#J zC~W60)Y?WhW*Bs166ab@^o$JN-h|;&aDkhijjQ<%ipix=G;!(N-(Gco#E&2WM9pkN zr!@2lO5bcxH^aS-kTt5WpS(n-2qcRbhYT|Y(I80qC|ZRT#>!G-n*pPI${Xz z#%HJ6O(S_Z@*E6Bis^y^c7wK-Qz_$!D7$ zpJeZ@;}af?+dL+l$1~Dp$E(fvDQrLNu#IInEd+0!fy*Qp)I%zjNqJQ0Z$7w^7|mv(gQqFvO`_I+lCK_qTk3R_ASy7(>U22G*7y@ z(KGYo*HJIKW$L1@H=gW+LQDnzSHGN(~ok>Lo93F7~;z zYqGh|xb4Ma*rNoDx7;tlleR(E$#2GTUMqw&)Vvcryf6vUrvSnOO(s-tvdy!T+wQLy z{DmhL#pXvV)P=C@`0MJKatW3r?mzaPHcgTNP6f-+{)B;Ot|7%M_SY-G6_75Sc00#B zL37Pe{8Xb0FV5c!RDzs1%Lhw*n+>SqeXnTKdrC`{((i@$iK;~zaWW(9i8Dng`Clv9 z@{MMVN`V&>Zdxr@0S{?q3`EmK?ON}#PopZ}!o~RJ4=Zf069XoI6A8*e(#L6r&m?(3Gz=FiNo(myzGyU-bV7ay@#?5+$nA8x5@jY6I1&uv>3!Vmz?We9GEVoy+n3=9c4Wek0<7% ze6rO~$Teb3--xrPE)TZ>$Yn5cz6#KItm1a`exAzaoA}||l{8*!lcV%kBIpf0eq7qs z@$VgUAa12RRz98%b$gZC7O&F>w#cgKjGUYzZ*K=dCqIz!y!CN8vjQtlttTVNZ(Vdm zN6)+IzeC_ofa(0qid3dvTg2(B}@V6R=6>~2=R(K`JfatxZ zvH)z+IoB`{>Ex#I`~>c?n9NqJjZwA>mP;t&*r3&EB7(^QS_ub#u6mMGhrtg^xvb>6Xf3NJiFRUvIZ;H7sjQv>W_RWgdv9}~sL46nGg(tEo zPr|MZbt`N;Oo)-z26OrM9%mZ(U8%8KQ<7I>QWo@*n>DXrEFiTq@>)!OlNtSvyM{D+ z;hU!Cr`ClTZ&h(UlX!6yzCd_K7IWV8-az4W5R@=q1B!pc08OSf$Gy5aY%`rITG==l zp~&?({x!XKuF|jAX_&yM__-qlE99x=<F^FqdDCI#oD)GlwJ}$1g-;h-)@-T1%ILv zd)Fv-S+SlNdSLa`CKy9tr!jwRJ~$$~|8B`USjhG~h6+|WS?cWg<7sImm*J{4qA#2o zi=yV%8T_sr7Tq6$F23$vz-4r~lyF|NYVjDrH6wy7El_I%$ZV@zRfk7QAA4kYq=TMq9z z)n@w(>a#a~H=7TU@Fs7Z5?9OJRn|syyq%5tP)6kWrI(h=ZZSCael=QlB~GW-Cb35m z6!SD~>dH^QVe&l>E52}z>+^DPP4&x8#^ehnd@ih(xj#;)8Jw58PcIsY zW+}09OrgxCUNO?%i5t1xEdk1q( z)EDUtn?57GO<+*wl$YCz^I`ay$e(>>%_Wm7ay{8~XyB zrnbrLFg{brU283E5M)i_IK8ZV5eE}{`owXl3&U8d*jgZc2ETJkLy!8f`7Y^nJixbf z+%*-W;MR;e^tBb9OPeyK=Svwn*%#a^bf;{V*Pw^VYbNUeC-sY4^QscSdpV#&k+YHGQ-I-q>5=d4tNm4nu>*s8IA zGryqR^AW`8}_@j7kK3qX^&$P_vu%FcF!{JtosN0YXqT1pI z#?0#}9s#ej@8|X!eh?mK$~$*fWqoV!#w)u4N+K7$)-2<{k4sm52nhXA=HZt`j0VZx zZde$VbB9;R1dCi9gD&2yb8HnapZ}taB@?u5snN}QkdDsGh0f&~9%QH#9a%c%VQjzW zlGhu@m(3NwX&38@cl9pO`OMR$p=9OQ+>LBOU~zjN1QPf z$N>rrYMQS}+|J%x-=T=CrOR31a)pDFWc1;9v$6U8x+NO-m8CK5Dwg@#5-2!57>tGG6EG)BiUUut78 zYM&B3jnn|zJOm=E zI*05DB4+-*Q)}WFxN1t18MB8SVmVbV$MCzx6xLSN2emG?O^O%(X2{+!@}2;aoQRDZ zGjT zU|T_xSg`cA#-~$%PxN|jY}D&WMz;9Fl#hvYz-SesqEt{sHQ`?gghL54v<|zbb2GA+ zU;Jk^oVn0D)E{c4(|BwtFKTu$^u|l!p*fo9O6B`MfMW3!G#^H-qZg^1yy09M5=Ano z$Y$s2_IhzYTJn{{_&3Mj8df+ z-<-|p@GrKh+M3j>oJIGlOvMIxXI}d$mp5!NdwTa7Zkzt%J*x1TGb(6n>DOjZN%p|Dvn9`<=k}XtPj|n2 z=EJ;N4|gNSbG6@*S#Dw4HKOE=EaiC$oEG>T?YL0&!mH)&RSKM_JzMTP{zLXPip6)0UGgI(oMQ(c`8cw=& zNd}>yykQL5Fgz>EqL{`L-{{I7y+;ri=#D8O=mt&slU2K|a7ks=KM5+)u6Z+Ez5*0- zgJM%aD;ZnhuH)b#>WX^y{w;Z+yb4;3BUUh*L8VGr$7OvE0A7 znJ1OuA5>3K!5Kwqi~i%US{K7E^p6w$uflNUx(DKr)xC;Wv$JLE%I*Eirb~6GEW_*B z;&$L!w}ql?8g^34m1@U?ttZKh!?M7Vo4cjlZCVkiPRNqg6mO{labW{$M_Eg2$ZwUH z)TykU(_9y*L-K?FLGpPPaWwbN(7&%NaNq*ia8iTxm{ro%kteov zcgJ>L-p|bCooEJ@YZGH$vv8I!H?L?{y+bxG=BIMNg&m@g7R$?Ifjf+kEk?vO{Zy%o z+@m0O6L#EF-_BCiQ_XK}tydw5Y-u{8JMVOyvdKj?R!%kigmJCA6FJ!D#T3 z#+ZJ*w!^p#fvSGgO-vK5x`$qLTKuFR?jrEmwX(=n{rTXPESSSLf)QSMGEWc_;eq9^ zTl-=oc~L+4)7iDKwrPPk%nn?<{_U>h<$4?yA$g(9> zWR6S}xeEQsImoJN6W{Q>-LZii+;sj@XMF;0zT*_C-|kla>N!nTFjWmK=3IY<~2+{~yht z9}wE+649$|hS3aboUXRpuiY@VR;4f5#!2iHO=A}lFqs!D9#3(Ob?)y^M`y1_(w<4* zq~DKCaklZg$b`Fc0~-nNmX@MyShXQKlpg*eYI#Gg%5^LQ^4o)hb73~hl7S^803i&F z2YbrYKgAonQfM7K0VnXt=bOr$*CH(+5(Mz`1M?ZZ#P)Ywd#ry>f*AWfr;1S(3KDa& zJP%O+WV^)urSV)E2Dh{QrQx1w!dM|v*$l!0mhVlk2*7NGt{AN&U*Spx9>O2?Q<$-> zrdJOFHQq(na(Ry|uG&2~!ndq$ar({Hu+D1sg6;PGP2-#LEWD=7Hx?`9ZDmzSn^7)= zr5_5iamt6~YjWafL*)roKlRN4g0FbqWU4Lq#~;B1Z06fdO#`F`e#FPEggyR7YM&!t zzQAQ%|DUZ`h0%~m`i`EpM431JVBHq@T@$EMX|xd;dECtC{P+23{NjMn`dtyu!A6^U zj37M|Nw6CvIc{=Y!pyU~$Bao9WSd_|H0@hoektw{Zqq-%G=5*2H_daZZ}GxYd2r2i zAlw+9#c_!b3R5kyvhc>Etl65RM>7|j5m&;3xNL;lKJcjpZ~?E!vje76;%quBfYWk!KO=EO8c--uaHe( zGlf;JPG+lYo*GNhgT4Ft46nR(ZFBDD&zw_}G&Leyspje1T9x4PlErFe6~(0063K%8 zDbmE)o-NTih&fh+@TIHh%IwH}HyU39l4RJBFE==5-uff!DX}YqzEed56q5 z%ucl&t*!D8yOp{=q4;ya+4o?@x7VD}#?LVyW-wCvi%w{{Q zi{5b6O8*Jzh@nNmt2~WCH*4NZ>Ln=!8sfkq!UX@HpXCViq(5QZ_FhDXcDQ&}BO)6> zntoN4s_jXVU9CCvr}NwEZaw4OrQJE#Jggrgwu^^LjN6}73_N~}2^*KZ{uWaGiwv+g z^I+;}d=wjN?%+0Asw2}AbJsVQSmvvTId$u8uXf&V=60r>yG74RXnkIj)k2v(M&(Pe zQ+slM>ISzCp5#9v3lGLXR&LRCc$|6X1~ye)o;UMNxr>*lWa^B; zSM=RTnQs4mc*X0#eV-60k1@N(ribaY_=*%=cp=e@tbf={pnvtP#*Z%?=x!+`pS4Jw zinJ)l=b+5+ca?`SX3!7em|()XP4_xkSa8?;fd@}dNAAEzciz85XlrKm;*Zt z^zNDI`%2r=V`eZLh`AQll>2|;LS*p8t5)NY$U`qHe6h5wXGeklz`M26*9I!gJe@XU{Ypn&dCRA)^B)?i zdp3enpOqpQ9EqG=-WM~6hxS;A{;7VtrGo>>(o4q(I(kz)kH|w(_IO;1LyX_fLiG?^ z>oNMS=4uak%J=ti_{V4b)W2+#+4P>Ow6M0ct=?~??~IrE7KFp1rsJ7y{`0>8VEvY= zjPf;B+o72kF^cIXUob*GWgl72a#m*5Uu}_`%(H-cy|nr+^W>BJYi8;IJFxk$Z9hj7 zSu`eN#no|w|0LoMEL_dIlAl=<7h4RTbaUfhY))E^7dj`0kCrovWxiCmnrVEoTkn9} zdcUR9Q0%+yP*8fmoBw86BVRjf3I0+u?Y4TkB~_!{U^0l&*-X)0WP7@BkZ#v0B5oe; z;BWkzuR#jM2b?-e6-N>Wkc0)Xlv}VL;>u&Oir(lNc-~~X(~kIXv5}>!iLUS5!MJ`s zTXQ=35g0Um0~@Jue+^q7dy~XUy)v53Cg5ap>%T@6vkk`md&f5e>B1>aFD*HNeRx9M zsFKCA0ku10CTwA5z<7VIKHpd-eO2pWy&d8( zW7US%DC${}q!uzrNqQ?dNGzr|{XlUK;}#4P4cgzJ$FJ=}>2RVbzvr9u*;?kx76I)i zx=rQHdA1r!!EuYdi?9JXCEn0$tl&?VBf;YguW|F{MqkbjJ$v5ejMnico#Pjk5bj*3 zUftoc>MJXu4=!av_sW78@VdB97k?6oo#cc7c}&m9q`F0FERx(j!&hj}4^#dh_TDq9 z$#z}aeH8@}DX$19f`|wxRVgAJM4B{3igf86loncuh=2-GM0!)I)F7SE6qF7T0tt|W zA|-?nLJJW>;Cq;BuD$18-*ArgcaJfDXF$qxx9hyl^SEWVFB=U?17%Q%4RUa>4j2#1 z#UjZPt-%&`CG!~$tMF_|sEpUcS%mD-f#U-gi6=J@u0tQ>{c-((Dz9wAvl;zE`KOS7|4k$OpJy7jeG5!0jx9HI}F>O^&;x0akM84vKr5y_UoSPWtO zo_f>9av4sQ7#rNq*E29kts5}e0V=BR(rk?(+ni-K!s5g0L8`<-x73=1Tv*>Yv?Mxv zW);MAGtZ_WbbPKaA98S|VLAi6&|{D_=<9jyh~aBI9&t~E1z0*6SGPXH^gW7pcay#) z8}m(sFlO`Dt2s zj{V7d-_&nY+tR(8=hAK3AEaZ#;9`$6M>zorlSJ8I5M3g0pewCB+3?%8fd`4V!Ao~S zHfZ&;pDx@Pl--pXypv}x)aiAb1EG@Fdh?@Hs)XF#!{o249Ws^TI8)^ms&gb(L{^Re%GM7^>Y!%Aq}GRK1T$qZy^f1 zP*CSSxB7`7qC4!jw-i?Av?#nBIQ>bUw-gTXY?r2`uVFyH4d@_UHX`t}cWf9|w zd+LB(FwS?x^0}sD&?#a^&2ltu4h4LSyX*4=kq05$d0vx;iDiC`T8*Ub)0Ca?SRv=4 z*0La=YyQUlr}x;eDyiS1c0cu^JX83pJagg69}M2|*o|#Mm5&CN;3IYWWJxfxTIjDb z`-&VF3|EOqPRs@3&m8)yl8gbb>BHND@#|FFXRnzMoppr{OxZ50w7O{6&0&X}=T5V&##KCWgG)wE9952n#>psYcU$4i;2k>}S>0;l~G zl9Uv*Z>u2Y!eNADr&yvZpimvsjF)o0zN$U4Par8BS@X42*r4au^;Kseb1y3Q0~?Mz zFSX%&57^IVi&`}uF73(hD@|Ad1~F1d_=Xzu-yTmTEfJKKLFL@yd(rjdt=n0Ns+YpX z=(_-4L9UG3_|Tr8H3h3u=tE~-WhrhT**Zr2&?%V*WVOciCUtw?U6!_#X!%ZIZMzcY zjc)W!=a!{A5*Q{GJT*Aia(UDG99b8 zv@9y&;BSyBsw0Cp1w*#0K8;i-(Vm%7IXQ+Tn>b+6?zdm2~Z8oIuocGSOsXEgF z56892+KlZCh)Sd*44G(lIV-<|fiOjvs}i6wewzWjl&P|wLq|Z@8NQ68xmvU>#(q|% zjL1v0R+fd|3eTvE`!|WM+E*{y#hjjTNGjgo#PAJjpiO&TM%e{*qW#`~8S+guFuJOr z{*q^xNbh-;`ET*{*~w`mKsSF!9om$%`h22zlNFWrQs~067d+8U&=Kdm3wqZ~y4Uj6 zWNNJBQ-KS3d0>Q2yV8;QgTY$J^RGOX#cTT!OqD-VSQHQ@7pYr}c7NTxdxIlUZBjf? zPuG_nS(_cxm8Bw$I#Ot`OYdx}_n0PK1!d!W9c*KH-@}GqeY*k(`K@H`%@ns4y=?l* z5@idcE!>EEeq$p{=2v?{v558zC^^UXr0eucyHYa|YR{0p`OetwFax%V(Z~J=@MjTI z2U1&yUrh^phNzEiGioejj8$ zc{H9~^?J!DU?%nHzH2KvRdb7w@80QXz4;*gEu%c?xzswa&CIo?C97qqnEiK+MrKsa zzH36}9l*e`*f;uj?+?J|=&}}!-+TyvO&L!)HbK5wP)!cs zJ9#u3AMojrXZ3v+6PI{`%#Z@kEOH~Sn$o}6Z+E}VtU}%0^s}4y_)6mO!TUZBXLZ)) z$Xk5bT-}>to z`ma_%UNS_|J2BW-R%d@yJHKy`&i0)`U~@kDGndpKkMMs*o?^;DIl=;CLnLL+eZF_0 zS~abA)LDQ4RI6F$xTb6@w0HANd66*Noq6i;*3hKsu0a1-diHCx4`Xvby`d$vnT?Rg z@Hd2v!4!xIXXE8Rb_~FCP!?qG8`H$&rW;-YQBAkvI$sd2zIut_RKcR_4FAa}y{f18j2ge+d zDeVh9Ej=bz{XIvXjbYPMQ^KG-(b+G7$<5KX*0LYJXDTFtap3i6_9+Pw9|3~M%REr~ z=Er_cpdbtCH}y(rC@Mwz?9x_Zoc7fr_n^Sx^IHxCf7-Sp$R{i?c~5Nrqz(6nY{&9f zQ^S|e_*<=;^n&Zcvz2z{A5hO{j^d0V4Kfhi(L4(vM0VgWF~6#^p|;9+goQb2s?m;cW;D z&)pjg!^X)B`hfy8|BX3Szm~EX<8~N{Pl*bfBc>QB3v|yO-D*~xYu;N*?+3iREGuzK zSErTh$3~&5lId$x8l4-tl$NDNGb!JhlgAwr;NXOh3bjC*XjsQ_jifv_WYlj`v|9m8 z>Bakd$=zuRDl?HafQeIg!XI(C(6y)kjk@1*S>B=fg1GVZ-zI&>_ySDWEZw8@i{nh) z;<|g&ALR<@@9p^SE{ti~i^}5_hC&Fo)HOOD(SXEP$wb%l?<^7RnBy3wWuDU+fj?txV6pgW1)nojA6fANkqbX&ReK z?xY56fU&SXAbYcEhifdPbaaNXHa$M<_?xdy*dTlVkW2J%WI=KCq`ktB-b8cd#wDZs zSM`sWXY27svz=DUU`01t*fLda?Q6s~Y3duDaf_dG%YJ#^iB3tt5R*%KbESmrzN7(?YB6WOicc{v=_#>l4O9Lprpg)`@7xP(?ZX+SwmE?UC{> zw*7ihkdq8sBUX&7%yepPSG|d;*d@fyRK68H6X9|4nNjxD9BfX$hU?YJY(`Yz9sbt2 zMi;^f_sy+)5Kyy+%i)P5Va4MXv6d?k#ZD}l@UK6qUw>yUm)~z9bzT(Yp7B7#bTlhQ zEvAF4)wkuv{WkQ=?BLeS25W(VeQqKM5Mw!bpo6YK(vcZPs@WGd11o7nS4f64a!uY$ zvsi~KxP_AbxKy`v#O9iTKod5!?i|lg)n6Gp!mX+s55GTfIyTq|#*Gaqz=p{SiGxe4 zp1uK!96!@j>FfbBpAfWTH}vZ^jMv(K*mP^(lWuAJu@SR;`>dE1>JviwQPlHLd%*0e zfV0w=N#oiNrHZ-zMR?Q8mzpN-^8wT1Pgpu(P*LK3BjDrnso$|ARlk$;%{*<=I|eO) zEnH*7?QSjd2l?K9lwv?xKUW?>0AMD4E3I7kR^l-eN3-=)#;t{eCfVxrpRRy_g+6}_ z=*m=59D5UT4I7ha|5b&rzX=PgNk5y!s=D(+>GxOKt{`%EQ#kKEt9JZZpvJ$by6#wJ z)e9~g1N@|D%T-glrsU~=R!h~#ZOJs+M*9U(vmtV5t29t|u>XDLu~k*$r7}FIe_%=V z{<(qBvcOkU3`O>%?VwGDilScf zxMvk^96lFkXfE3e7f84swA%xrSo*7Y8BdL37>xe3~U-@^j0G@2y=mjP^{ z?*+73P@e#oX9_phe#f{C!(9b3S68AEMq@;|wA@L~K4HQ|x8{=uK#O_5VzLPcXOg{= z)mC-|(N}!h<`pW=8v;QYUT9xa#l)k1GT+nF-uDa@6ao^y`L->SHZ800WOb+x(2?G- z!(m2$YQ-i{`rEB^GhkE zYtM^2uiSXatD+pS%d2=C0oz*GTDm>_cu-7T@%ceUP3q!*M+Dlc2p#m}^en;s;gY9g zx@0O#Kef9V(8UAV330z2AQTypqFA*D*xLon|3Z++>Ou#>n*NmhIN;EuM`#3T(sIJ( zwmr*CzBo(|56|qAFE5VKcN}r(eq~Ijqvf^XdkAzQmJ&cG?Mi5~`FMU4V07%yu|U|k zkOM=?&IJRCr@@aFS3z?LyB2hzb|SrrQk}5sX#OUUZQE(E0S_}TQ=dlDq->gCr|Qg> zn9OzkeiEXViqq|$wG84-II-0tZ9ogoIA zbV*1F@n4-wSRSaaK2Qn}cRX!#XMGA?eBY<5Pz^jx#cq%StK31QVZhMO@W0eO2p4q` zM}20Uv)1|&kc@B|SeUP46zGsntq`jEl83f%9+L0Pj5bP<%s-YRqbKb~M+n>Q7uV)l%?1F8 zF&2zbYVp&#Ci?1hwm5$F3Bc;Zl0%R{0pCF{wv&%w%ZSkWTO+~Q`+C#lZYL~ta=0geums@LQ*{Px=RBRZ7M9rRXc**dvSAi9tSB_T)KKfddZHZZRFB>ugVT7uzX6;Y1b5x#n zwA6L}MqwJJQi8?>CCM>9K+q-W27`chLYg)oMC#WK<|#MRN<9f((a5s-!Y_`!gWF)L zg`R^}&fM?*N`U*Jy>tGeUxy)cplP{@u35D;e(Gz7%HKc*8urg94-xG&jTGNmXltQg zs^?BgFHuc=$1N*!0^#ojG&Hw}JC`0sfbp`cbjrULa3{`W%>ci7{Dorpk@9r3Kv0w39aR3gf5A3mihyf2*xgoRPJN;*&!3|3bHR#VbYR2$JVe!n{wR_|Jm ztiW~q0Y?8q<^`ocdjK;fp2nsFg=cqk!IGr+{7Vz0?zVZS5hNvX z*{hZ%S6vv#t>_Iisoq zA^x}|kK%0$)agz`R}QhG?=HgsSgdnBi!6e+mKFvLSHIBzUNyfdW}ttu#^DX3xUK9w zg^~wZ+CQ8nxL5pWy*K&55jkLg2R{lkZhYcH4LX6I>Re0mAxTgu;3EeC!uDt0Q(XsQ zw@H9OI&+A6dh_gY0<*U~fy4WzI8Bi9{s+@_-#n#i)-t_N{FrU#==s0TAW#tdDuujz zta$LdRD-K-%kl2~=>*BIB+`sPk!l{VCCz0QG)r$X@+R_Fr7kbreBqziV2-_62$2aE~nOxQ9Tc@#V>5zn}-OwR_RX#>;M1&K;vj(`+h_ZJI5JxjeVhM$j`lf_Ai~m^Gfmy@$cVc zWXb;QN;J*d^_^DJ$r?Hl-qV3^m2ndl4m)bhEdYk?SX zIUPodhJtVDJ>fh6Lc;=JGA^H6K4t#=ESK>Z!Lp<6VFWr<4OG0@qUrQ7 zcDsr;C*O4%mQYeOP(qBY^xT0;3Go!E7r#RvC41Ug&ygUMJZ|GwKmMaH?TDUNacS8} z$&EnNi>UJKKDUZ&Z^VVY8g#UAVfcxoFX_2M=UxFYddmjygKjP=o!M?3y(HoyN$p9^ z6r#x_nKSTSde}JblA8z|>?ZQlory&Vu#`L*BXdR81bhi;yi5W+W>Zx^~C`K&mHP#oez`Qha&y zxXIV;=B!kel)ke2+fjLGrkWBAdq-~?_(laf=nLLK=2?c<8;iW!c8d~YbQ>4-OvxH6UW=`D}pe3I!a{6SAOak`HfL|O? z8Rm#n?p|G1!_g<35KTk~LdQP|(W z1AM#mTJ4FLN&xUZmMyik|*sy{n{tJijeDV^~;X=7Sl;-Y&hq$VnY{p{?Qx1uY%dy{ET|2{nT9WS~ zk5lX7riB9>Du;I#smDg(Gv8xP*sN+i(sy`hDXQ_sI6xm*bF8yoj&qsPZ^b&=<{yr_ z)}yUl_J%*XTrzCMLQGHNCo3xhkA1?Rk^wBOWFQwivlYFB?nT~Xber;;Ajxfm3% zVB13C>V5ppt?6#z8GqdmeOTpEq8F8LQC?xJ<~2?w_wJo?Qa`}|(Ya0!@PrN>WhnE1i-GhPYa%Q|3s*d z&Gz_BaT!3;C4V!Bcgoif#79jIZhsSK}4!4yXMmRbxYQfG(kP zqr-yj^BB%tz2xbC(6k(8&!36I4sCM)6|kVNuwGQmuu`g>8Yn-=2 z3z*#gCLB=xNMJS{P_u!QNoGVBo&A3Jv81grWSq4i9L{~voR?_T*!*a{r8UK*%JRpy zER{k^m!oG*mYd~X-Q#YG%H>@0e8G*JuLC?fF*oM zR{q&lBA=ZymmXqcf(}bc0ir=STl{eeOJhl2VAk^)Ulx{*!zWc@Tz;FIEVPi7&97j9 zx$)(h#>sugSErwy;<+wd+V^>suV0bWhQrUsy@*TXTLGyb^M#xTv#+O@C2@IL!2&WZ zR)6PaR0K{@0C`b#@mNs;&WDF6;oTNDwCWK?tO+wcuU?4=Hz=cYXiTD3Ep1+%s{3W%hBzHp9s+}cXv>88^ zD6KCj#GI(<;hH|+*yV8A+2mpBt#&QZI6MaMI!HqXw6lat`~fqAPdPYdM+P9^e!Je3 zEpFFoKHa_-r5e6;M~k}dWny`yt+C*4g~5~~#JW>^J=EWQTwXy=R1~YfB<6}pLNrK9 zoMB9uaui9sYg7ICku|-MjcZ`;@fj=_cPQXTt%y5$(r{N=p^2OR@+k3MneCm=6|n}rR)WKvv`^vmO`Vaj z?*|MssTCe+H6`&E&LB>-4vnSCu|B!5+uk5_8!{oqLA7-^x7orS@`X`ObUxlYdVZks z{__o|#Cp(!;;IYx?&$6gRC}dfH{dS1A$?y<>kQFGr1(?PfRM?~wa|sVWbj} zHI7EVdfF!5w$XLZefE=o+fZCnG;uQ9AogOOH1JYWvryEtz#rLzA0~4QKto|Gigafw)|3I=JlfReVf={ZbQ{ z8q~y59UW);Ub5p!THiH?Mr@;j-c8E@IJ4BJ(~oo9_qI3;pSfkU(MA++cWZFJewgTD zklpu4n^%xqMTs`Fbvs>GmMzVVmvpeiCBHO2DXxiEnU!9teib+afqX%ee=#v}YT9Ut zhf-E0$g9X?>y}*^e{M;(Ai&wzS8&?Duv%JF=wP##Z>uNUw_jhFtql8F=sXKz8)`Wr z;@~b9Dw;X3tDYe=! zT%`5R({cE`lmVS;92ev&dw%BoXL0tpJS$s;AU8?V>XvEwBMN3)!z^nt-M5owsHI48 zAy(f_F0iRz-6j;gDG?wB=V`o9EO zRkxJXDk=K}427J}bW3pGU2EAwqDj|lUn?37XH69Qm$LY!`5zVj8&7o&quaxZ281bg z;9ch{A`H7!7$ms2&xLmSQIhL(SKrD(p{nZtpPmyQpR-&)mZ~$g(e3L4iuF(T zV##jzns1Z(IDgY`2GV=^PB%mVsc@obR1%uZl~eQHeQI#X3ifl}&o%1t;>(nT+lBX3 z8sfSXOC>;2!MnAoIceY5J;KY|ngilc&V{OME+E|JD*JZjm93;eLV9ezogn)R2Em?! z9E`s*Pb!2Z9$DKyU$u(!q1-MNl!lDfOi24y`D?rgl1q2#Ac$N@O)wqM)x`x9f3d#O z^py44Wyp5=TEDbj5ZciWn&sH_Xq%sB>PYSPg>o??GPg{qTYjTA!@`daJezjFE}0-D zmn$@{wfc=9glunrDyW_KE~4y6(1*!k=JgT1E$C%3$jI*RF{vzix(2F_`0idXQC@TL z+wwdqVJ9?uaWWAC_ST7e3Ttb;jylY$_3L&n-tm0$1!xX%=UyX=rk%;gQHh;;sp_QA z1ujg`^Ndcp+fnpqUO7K>)>bs}HgF+lP1FVs-r3tM|GuNDW>Z3opy z8#6f;8cZvFb2h#q#jOArgm~>9RlJ}oghRqw=h%WKsQ2O7$)|#g8IHS3AEGb}*b&!! zFuzq!Qf{LbkfmoC{c89H;31jl_HK0&J$0NR9K_uO8@^PU zzr5p};}0QDtISr%ly(5Juf=_E9uOLc>v+rAJPp=%1V)-B+ z1h#njdoL*UDC5Z1O8EQ2Rh@~e7SJd%L9VX{@cjX@aIH6*)#qyM({C>e?4NiCZZt0p zC~SQI^KUF9s`gJecw)oGIdNB70tt8IHk@ZKlQHn}^~3rfqQss@t=I{F2SADQ@dO>S zT?!LbEFYwc+;mm6i7r7~+FaMeHu{*ireKya4F1bX-`j;A$fL(`_oT4)(*$?|u9Pa|B*kn-0<~x7V@NhjT7Y?-&w>h zcpOcVQRZCQno6-$Cw)9p{#!K(bRh8~XAaHyBY}-MOYm_3uV>?-h!x~e2Eg^ZujA>a)_kgWTTtLR}(Kh>w0!ri^h*^We<`on@ldNeCrHkL?i0~ zxLvV9-`PLsMgN7?IQR6z28b^t5+UvoE7BW+Rqs(O5uEh`wOSth+#7$-fxX{@W+*vE zYeoPL)rh}4{#TSuwVpF>H`X$nko|pJ=3%{+*eRPpE&HaWn#ValyN3JF1}HSw?1!1x z{ts`)wFYOjQ}j0WLxO2yN=bUU$_ng_3>7YX@(e&^KWRTzDj|RV&)uwl`I0)1o+6Ao z6+hLG7DGy@y-p9jOSAhEOb2y09k;I6UEDtAJ6H$-oV!6ci`#!zVgKd1@OYh^c9?wc z+cfBD=apiBhNQn!r3rC!A__i1&-e03{74)TFweDkBEkca5r4_+#W8evE$IXR_>ubf zUjF|7>O=qIQS_YyzG&tnIFI1}>SO(5d^o)TGE?V1JF)!z#|iX*y&$Cl7};IMrM2Ju zv26OkUbu7>_{Hc%GBxi1QHJ`TFGLOj7fYmFA`dwxUv0b z?|Jc`z30TK{~Qhee{wWXOFOeR-Jqv(xcFFpuZVqV(vhjO;T_~~Pg`YgQTpb?tDQN) zzc$^g;-c%!o)VDWwH^~qek1a(x*g#mbwQ4myuhjOZr|yb;bvDBFEAXeLk~hz0Z1&= zZ`Z;V0Q$7B{H8fG{JS$)q#JO+E$AxQ|JFVx0xtrRi%zCg zaly#osZ+b@Uw@Yh4+149X1K{?)a1d38_UGEF)uxk9*bZ;6|dLU!S<&~VN!HQhg4|2 zTS&@EU}14!h0EA{39`TPWe6qtYqoE@XnW}FypK2lUzT#*zkk#E^PI|b=q`3hgH=_i z^Jp^`xOnk#=ZSBB z7X$gD^;<`$B-s}0q<*(MzH9ti)2lVGcoTtrVsA})V$b?y6UFVIE;z;^FD+I`6#*^&2GUH7(9#|lgt>Rw+~%2xJ&OUaF-)BdOp zM=udUGuuHcdFr&{0a^2q*-JVGb1&bThcb2SZz;)d^#T9r98bncQb+3(AL1w++oC5? zb|Xue^k}jIW#HphvFm&4-AOfm2*0G*j$1ZRtlN=9J}dTZ8kEW zThOLDx`(&$rTMMdm*j$8;_lc2qJ~BeX0N)Sg^VUF;FG^nIfw znu3<{cTH6rMDi|GK+T#fP^#k@DuD%yL%K}%7E8mS>|7V6g9_rgm1k_`mVJ1adW6EP zRt&<$hyGYRCAlB}5TAR9K)cF>TjrS&m#2%rDy`n8zO~G^gJ!65F^h44)$>Qwa-Qew`deAtU{C3J4Lmi&5s!7llBaD4X1%$YFXvdhx3s& zJAx@?O~LSi9ZHPsDgKRaR@H%*(UQ6>xTEUlmK|c2ACTW(K6B>9Gbzb>w8itvjoLg) zA0ZZp)LkC4yXpBq3$_2JK7+>**2XZc6*$!tiP6_0H zp(X~@&|d;F{&>3rn*mV#%4Ev)3bUV)&bHiL@@tYUwrLG&DJ-|M(p=~M3D-AVd2B`M z2Vhk9wzD!{0xC+aO&yrJJqtNX1uVJREXp$J$_lF+9bWuv(9Xj&V6jZ*ksl+d+_)hc zRe*I_9!S+=kzZt!7Qw@@t)RF=Ba~x$6h9lM_bhQi$K?rKmL)1=izjW!fq#2dg|-b} ze+6Giil!jaKf(ufVn3lMe2}#k?P3Ho3V2Imy%wlXg*c!`k_Fzpl_w(jiu_v5IQ*TC zgo4C`T1H+)D6w>*3_Z(5hN5+g*5pfa?8RAxYAYdmSF2rZ09Oi4u!U7w#)-@TwEYqv zLnV)tm7HR$BrT@yWvutwt)?#e{_ROQf90H?RlmvtMf0lI3NHIfVcLC&qh|SQWy>{4$ z#kDLnuCzj{zdf1J{}WPO$`p7OoD<<9k+-m^Q~t|?G*+cGqG_91SH#|udFD~qwY{y1 zB>;wrs|5r}kcD?@rOU8qu7q#(heDkZ)IeYta;fJD^Rky;UQyom zT(RHzJU=57c6EX{O}Nz!aGI0SZ6gdi_C1Qj5Bf_BBAbD>gg|M2P|-3D4p3`-$ie{%~b&pO%)Cy{w(mj;}vyV-kO>9))LyZx4gs%lX>M z6Dkpa!`#qsx1#*R&Br3^p%Wf62hm#-TO2;9oRYAg?1ndl8>%ZLWXsJ{1rn96t%e5h z<%PJEE4Bl0S>qr0o|SiUGiiAEaL};+i<*1UTZVFl={nu?f#=W0mQjJp)=J&^7ORIL zds0d`L~=x{tnLKDqk|)Bf{3jOC-PM>&f3bd7^X*oM5JEC;hyWBJC%i$GoHD&f4ldW z#M*&$z~q^|?`072_Au*Y zirNoc9Mh}U8y@d^wJZND*MG!~S6g(qZ6epdVv|f37%A^navlf(x};SWbtCQTI|mZx z)s@y(MD8++!mP^?Tas--#85m0cNMg=IU=w05i*-(u@=e`0D=IRh1Ww_%0|m0R&%x* z3UxlXf;fpJ4^wEGs6^*=r#&}2fUG6r+d)pS!r6fvx^fNRrJ~i%CRv!DeOU9yQ2E>! z^9mr41|`jd;m_Mg;PPyb`F{O33xKNM zQtcw!GK4>=`1!?TuVHT68V?2NZIf)$L!sgzYYTbwlr6Y4;=DZQF}SDH*ms%7RFZ1p zey|1)$n)K$O&!pWxgvlw(ju@M?2fRvgKVFvpLP#jARB*FiwN7c?+z7jTf&6lhV8D; zR@oAj1<2Nlgdyq0n9JNTO6YDgHrH3Qq1TkPCLA%slM4Wz*Ilbtp1?hC3xl=OqKJDg z8pWaOXu{9=0LUyo-o5(E)qJ|p_a>`apure^?Zt~(n+*A^l$TqMaHqq6^k zYK+WVXU&^J0A_BkP9I2MEMlq};=J!LpKut~C3xt*+#2IYe{SXSc`t->z|<4LRIVKt zF!#fYcQ;Oiz(eNwDlpQYJ1=*=z60M{5?yLkr0=N|u-RRYY-*j)&>>`Qt(}t-D@Mr7 zrS&qdD&P7&s#6DB*g1`lqOe{7t6!;_#JSdo^t=nXN6&gmWVtwz-pf#t_#tVkF#3sz zjcIq-bB@{fGPEh(wd-`9!nU~}lPQWwiGFyy)p86X9UWX##>+s$_| zErp~EfQ{u!>}SxVW^}8ZHb&jGh(26f>F{-!I2HE=`k1*Ee@Gn!7V3T*I!X*?b-el} zm>R&!)F`yYgZemMqs?~=g58r#*`U}#uuCc_oC@mg!At$g8cUchSM6N!QO}!W(kiK; zb?{L)6o?HjM?I_zobK?}b000&FkztO-r7lKSOii`33uU%s)yH`f=HJs)}H8+mK9~` z)c1WYZph2NGXeR%o9p=9UDifi_HBI}Mvm|kel_BF0@*pLD>3YJ_UK!TW-w(fo4-hZQBJj0YLp1b2yk8FA>`;|N*M$M{+4**@HK2W49L79NaQS0v?kX5K zYvC_zSx50Uzqye0y7?zWfb5KW(Yo&6>He3nv7X#?xn5#knC*QuVa$69qUlq@e0l$) zwaMnmZPS@hs`4f2Wp_#|`#790% zVnC~P*HTQ1om{-sd|LoRLp(3kN(5Ok?4cRs+y-q*RyMQ!0A#B!N;?ylsxDnS+Bv$5WlGhi4 z73SlMODU=<=8itoqp)R8cibuU=>~86j?jEqUdixu^r@Nv-s40G zUn6a9BHiNYR?+SEI!qxhhfXR)3CfV)YNhzC)xqG_hFiHal@^ZpY59XZA9Qh;vggIM z9vAQKb>V%lajvypuvR`}N%R0fm@mT!L-yTU$31__6djIhkw78aSFVgrXD6UM1G*4K z(G5=>?Mjo^n2|Ty`;+2%`Ycq#wk%o4^yYxY-Lv72_Sl4h7vP*tp zay9AW@xEsPpR#F<*j{JmW*aw~KIl{p=m6{^F@bXBRS@95apgt1SQYl2{c%qEhG;`X zR{r!Z0j;r$EOXCbKa2-SOpCsi^M%0|f++!ER0j060WU(CVqkNMOueIHMCI0_$bY2l zkJyC0!usx5j?M<{`m)N7a)y!tmvc25aoeaNx~8%@KLggJO3temKW7-W>+Tx>Lw#(z zM*lCp&;M`5brR4eIL|o#elP|AYX@OM2IywdiSz~Ew%vPu^gEi?MA*Cb^zi+c4lfWd zlY_8@He>j>$HY+5?jb04sPJ2Yj-;riB7c&XRx(?DmYn-!#uAI$w075f(N@<`h-z_vO6SKD=2O}qENJ%)uiDEV_$P^u&( zje5_lo5fDyn~?X?50;Di`TOVVBv56c2o2*!j zHm*0l;T_WVDnrKUmMii@joM4qwvtcTwuS`rk_jpA+io$4!15U51Hsg=NTL_Aw0EWw zPo4=Wp_n7crOFT(*&#nA`J})!_o64X(>Z8R-j3RQLIc5^Ka)<6mA<=pI;eFThCPQ0(gICUS@r94~_O8LdrY|J=6FXzPMHf0!dr*h_L8 z+rFPa9Mr7es)hL2#(1;AZRWlL$b+l#-POEJ*qGDmu!^>T&8)ie>>9OB{+ai1wJW9C z_O1_Z#17+H7R2E37WoGG&gS3~AG5TldD-$|DWL_9|Aom(# zJFP22qJppVww9vND6nEio-eFZJ%_4(*ugx8=;+ybf(T*xZS}}|Ie;HqtI00>I-;oB zatDK&9x@ z;KFy=i^PnJf4oICDGN|Y#xcJnoI4-B19sv(}&;FU+-@L( z*FE8Lb8P`Kf-7p1W5xM{2E4v^DnLiSj=GpcgJ*}oCh)52<%Sw4S%LYXlBEWhi1i(J zLWfRKD%MF)N~u5I3%GH=nSa2PTODvtFJJzwTfk;!rw;c;a3)( z`>>`xyN!e^vexy29FV=aD8VuEa{D(n$VFp~ly}+nTh+|q(Q^J9?3}fzrmu{N9$b(h z#%pZLB;>elCkunABus*uvxABYvYM&}o97OTPjkltm-cDWy|#hvUSRHVdoynQF-X2~+&ZERZCaJdIgVQ6(2moA>kNC;J2#A~;s7a15w!k+;32mgG26Q;Weveq z#Bzdd_m4J&Zur|k3LJ|_BiJ$22A@c0h?nOx^GOt!?m-gUT@to9@cZ3764?%0x)Civshc#swS zw$>9mZu({fzVSip=2$@$*bVipNQzGiLi+WD2-l<=!*3>jR%l;rlqM^^_o1kjsy!;a`5JU-nHCXlpmt$@A6T3UUQrrCHG{3 z-XR2?3VX!chqccR;_rKJ&I2@$Hy7X6(J=s0ZD<5OgtKaL{yIcdD`@gwI>i3apI{!5 zcpVF zuI-eu7b1`Dl!gs+qhxo29PLhZ4fWJ7RY`VQt~Z?Z=t1Yl*@kPb^E`tpKCr^I!a=;# zxDSl4rX;rmzdhmCr>cCUI5FRIldB#b@HQND5jx-!ALsG5khX1MPTdE8DGkisj;7 zfLXq`LJ7W#-hmVKI|SA<^!7g0(f8@>Ekaa*U8t@ATdpmtZXGp>91i|dyDD-Vuu2s# zbArkO=Bzrq46VcwUx6%n z%Rz-Mp%u(h#D0cKY?@tqD+(p=YPQ-SzW#coO~ljpXR|p1EB1G$S3j8k4}0$!*5tZv z4J(SGNKq67q>G412N95>NRy^0H58HFr9)^U3L;4FRcWDj2oM5Fuc5a<0Fe#}N{bN6 zd$aaFd#|(B_I&GnKi(hjwf-p@o+o#mbIdWun9u8JB67lt4KUMM&CMU#S+x(W?rF~ z3disf?qAX^R!iEfKRQ(mT76hHSgUjDjfh}ltTewU{_c|>AGa9lGTB4x=X_|vM!O)T zQ}3aLZMSwLL^Z2#j)+}KSg`l_4v;tU8m5U+^*pfnm^y}%yhHbj?FsiD;djlZ(_Exz z8t_&_A7dFPLocV&3q$KdXc4erG5xqBcu**5`p;fjWNdnj_9lA!Qx|LltUEP0+_ywx z`t@DB|DiX1G;9R!{UK}fS_wqU>*ps=SxC!!jkV8ZQYH*uAb6I zl%vlJwgrFLQ;FFF00kXM>=h5iKx5&f{ii(0x;!`oBB>cabtJvTi>kEv%%$$8IrSR# zD&T{hWQ~Z>4r+q;Z6!~P0`u*5tmI+y&4jzlI&LBeXS?+?7Hi(BW_N)a%+W4xpZpf-=L$a#q;RDPBYi1sUOj&y1b@2E@LB z;~3%bX_(zmGI>XJI!Ht4+2bFx`E@!w=A=eFkczk~Tv|1ROY5>}s0xowygC9$hTH$g zQZ&>Rl0SdBeH}%=%!Ig--x1Z?9t0Yo^kf&BT8w_mb|FdmIFYYAe@k?|Zo^J1NcR1; z)tXAv2kiQ5gMq2xxIp%TraUk#dd~Vdxts^GJ+Py8S@Omp3x+iz}mbSk% z9f?2-`9{10I%{!0PM_60%_-X=WdW5kp^P>M#+N?=CnT1vU{}P+7;MJNR7MK)ISj?Q zA0!y}rv%ZEC@n(m1}Z*`md!Mu%g_tfKGCb3dLv8}V_>DYWx!N>Q#Q-8_LPEJn4mD znmLcBZZrOP3MmpSRI!W;%SgRO?NI+v-ip)~T4eFk1JK!V5{7W2TEjc5fUd88v_ELbfdr`En%tapW7FtyPqzS5C{qjCT zh;BvYb0n^!!hZA-x@w$Co4j+<=59Y|*Mm`GJ(v7s*{P*} zu}rGN>zn{()r*$Vfx3AW+`@Ji%+)XEk%#Mw)5cOC$D}O1Z~>Qur*kkO5wyPO05Go8 zqV-5YsWZ0DT*~=j9ZmF3r!jHk+V*5$wcjLE$=tL5U6aeI$PZnf2}3_VUp^Jc9j<3L zcSyys>e$Gx9oNFWl`bb413hrcV!x|gf1?egT84;ho7IY1lR(Y2?WLMb{bJ$z`uhrQ zQ9Jj31Ym1}X`a0oDRx~S-d>oRB2@-Yhn5fWQKGQ@ z`m}T7^m=VM0O}1|k_?MsEEHr>3FWEy*4?ueE?@Rk6%=GX=;%ux%_=1bn)_%g@S|P7 z5jUzMQxEX8;_n!24c8X;>o2^qJYiL3e8+9-b@+@{#X$%S$tExCe)Sg|MFFy`crKZLax4Tc1%X@Lz@n?(jjKmX_?9)f;=e@1 z4$t%fea#K}J9b+{(mFuIAFIMsF9dxjG;nCy#dlmeP(^EjHg&YlFH=AD6XnzjqKULp z?*)4Jb(#RHmC#Pro8Rj_anaXASp&V+7OPQd%0JFxsB~Q0LesJ)dXROotZdvF_z|bB zH10w3HS7rR#yDO`6XdLv)LWa}QwQT~2p`~cF}Pb{t!V4=xXGyhed-aNWKY^rjz#%H zhO}-$wg`_w55_i6pBrV~P9MRL6ZUqghiaI%)+avR8@>m`mPb$_mxLwr;k+2rzRy6b z;x8aFp?V#_xV}eBGVw0sX{A2EXBb5r1+ur6 zxf=PklMWDGdwNppy6bKj?*@WC!g8e_87#sb;Rnb~ft9o2zunAJ0P=&GM!m)1tiCIr zdYl`}e9DMk#E#nbVplZ9lrQ&6*GoaQ%wA&B6fwGLSZGC73IWGJX;~HSfKHFEs{1Gl zxjY!#q8x;OJ;Kj^=0FZ*zt~)_k_B{=+885Zl-2^9Tgu@_i zvZC2qMR~D*B%mTDyH^sjP&H}p=9@dXeXoDBCEA^r#2@;F@OefaX}5M<^0#oyEq$N3 zitLU)Rrt2VefttNd2+`2oObcyhlLW8y&)L#>%%keFLSa6GNp2?6zt9JkQN^G#&w)! z^14i2ZTYyNY6}+wW#&c)#Cg}~>B5&U3+$FD@y3EqZwjb;n?jr`Yxs-ub55`czqtay z>j^lf!?_%ZftLx_wLUf0s5jOWTf9>Z zX1K0=ozk`UWRKCFP99bj4m*15+wt-~4cAQ$3YuV6RdJA|UNpfio#0_eh3EyF_RRGO}b zO*{*3c?m^@MyU8Z{L9lSu9#M9mTq$OmL!oFP`)*{6(G=YQC1bF{qBzaV$u89$p@X* zuM3O`*H)kO@*_vD>uxOeu4DZFxnQ$5(S$VI`n(B_!%Pa>`wXPy9s$2(9uCj|u3f!R zvv4LI31KNiEz@a~aZ2ofduxo>W6-jtbK;fYKUOB1`@&GM7G!TrRl!uS z0{cH;lbFH15onl31!?oyvlQEAb&d6gY4y4=9aJ}?^?7~c3Q;1rYZi|8fcOj(H2 zfUVWojrR1ys1H{~TlKT1!sJ4)-g=wiOf0@11Tz`P%*EB|(2|s|HyxVWXBzu1eQm27 z$=Q)*R+jO^CgUtsJgnyUI1LYPZwk+CV%%tg4T5!Ni5vHJmVq+ZfCGA9&5Wt&hIL6w z?z7YY?;U5p%rO?^LrC%ko%@#zg-G0%=QWV*cDRuzb~Xd;1Um|gxayeV-1!e>r;HA* zIfu>bbUgln1pUDEnoVyDj!VZQ3&^eGe=eVUI%%Gq5UUVA&}}V=#mS$Ya!HzKDN9&5 zI>udiDQS5r7Yy%2fQ2>ao#Q06G!4J+VWltc8L-!T>VOgWuN#Ji-E&T(R}ZZS zb^rDn9EbqNG+XzrZHSAiNsB)S*-mH|zH04}{mVu!*N+ST9_4Rh71$}W^`$Fa40e0~ z)dzQ{Vgd$}BPX-8HJYem%4~JxSrJW-Rl zv6$>_Hdc4v4qrJs9a(>{QA5!~ChX0`;Z?5MCjkGf)1;SR0}T}&j9{i%FaQVY?h z9jX3{t~5cm6GCx2SY26t=go!n6zZ5MH`uD=a=qp5m*v``+F=*{g18;A2G_Qs90w%^ z=dOZ;s4SD9*@gUO&-=?gOBb5Yzu8^ooAMd=Bg4pnD#Q6Jon7zRm`dG5Ozw^ZgO+2A zxYN95HJkG1Mcx#&@4g63w;IX0;kL6*C7|?}m)s=_9hsO)TB=)Dvslj};D#e|V^TjC zI);x@I4R=v5{eux^7N-!cu!3-=(N?&78c$_F5Z2cZo?9O14gy>ShkMlP3a212^%U- zn>*)cQ)#JgZ68fBx;70{J6;bcVmiE~C`E}owzdz0tLC1~C+1InwK%dM^~lc3QP^A( z{0b;_kwnBB@`-D9U3T0KbyPX`Fy}PS=&Z%^*{_bufC4+M%eL!dE})>NyE*jyQ>;6l z*4sd@H|KtU!>2I^XUudg?uL$94*Zh!vvzxi(h{ zOdg(if=r4)x0JNAHpnmI-*B*lAVB00Wy)1!g-6SWb%!ha;nT7^dux0pq40J6J&AYb zbw%<@>D$?xt+mGxPYXh7wLU&l0XXaxPQdNsjKjEXs7ZGxk)H6OyumSX!xwM2A5d4+ zk9`3R*4c=95{hWjfbHVYr#T_#b&12hw_S+UwW!D&4s{X5jhG|c6L&hRWb zV0@A>3Oq|qs#z3$Tx`I-JVDSrnq`?j!Z)Nu@)}OP!#6N@_q47_Yqycx0^a~6cVME& zmXj|=ty?nFlPq!j`!9*Alp&x(@cdfS$cu*C67zFZrn7IJ7;TQRRcvSbscMBUWHqQJ z-LniiCX(;i;7TxwuU$*GzsukQdW_{Plz6E)B)I5UbG_!T3>4_N|?N&G;(qJPkJCWfT#P!P!B5Da`ii0 zpyK=61oe^`{)=%XGLnayNqZQ{K5wHUQmfHa876P$*)CSBs_Ey?o=EDHiqzH*v=;{o z&5v^(R13H}y)bsm+`t%Mjz_(8b~l~(8C&IkhHpzT24=bRB^s2IU326Sm;^wh*3lm` zFQD%r-od_;P3(H%-^uRiF#^4%x^{OQBrFYYZX>*@n z7S0(>kA3! z7>M~KMM*s*XyC@&4;}O{2E{hX=~+ygi=lE5h`+WFVI1ok zYud5DMz-JMa@hCfNd5veZGE5;cFf(JNpW5M^v*@=b<6@?I_|JbS^zB3=Z=B(?#u)SjvLJk$O)aPdcMztfBX zY(9sW)NrHq1O4V3i|;KwAk;x`wvxVCt{EwHaX@AHI=?t687Qp!xcWiG1w z8t3Ip>%_?chj|8&(Siqny246hp#240?aiM27H1WlMH^~D2c_lVNuHkDuut%|0P+z< z7WOHh3BifQIH}C>N(gVUr?7W~#DpcLXIdai%&N=xhTdr9rpiVCgq=GFO$}n8->FVb zfQT;KVOqki(_=Blt-%k=ovzLD>p~otG5yLtb<{RgHA>#IF0_maq z_LA)+ZOOU>5;}F8jDDz;Be3E@Ce>E8_~ekB(8ov)HAeiQsP%|mG5OltV`_5_wErN~ zMHRP)70ETo@N*+i@gAXdY{Me6loQlAihsVY?-Txwc>y~LAI9=;B$|Y7ddnZ(H&~Ss zbISA%HC>zz(;h8HxKrKFPJGnaAo1i$bZ2}l<{sp;2Zc>jHG`b_gW>uyQ6S&6eC$oF--P+e|6#zeie*0@<(7U)n#9TRva^OYT_}POBykP@u&r>vk5M;;k&ib*hf0fl>$3YXZ{^9|i zoDy4`{Q6Hy^naou|1NKzZFDxXW$55>ReHYT&Jen#J}ec6X$e&wj5`%mR6RsSVl!DW zZcE&WlT=wu5I0Y}%ndCd4~TY4wxdAc>w4&6yi&(L7V>usJC{gB5T`5k$?i_By-`)} zGN~mKt_5LkGVYR6J9>K+$+OeFljdC8dk?-p4rpY#g{Q{vUnQft<}&oev7?3N{h8)S zZeT#3y@kLQg|}2_P?1?35Z3KH2w40BgA>a_wpl&X1F;OQ{V|pd`o~!q0L#Yr5AYjb z1DQOztCzMc^k21j-p}nye9^!+P%=7m7I!DAPL1rcMak#Oh3oHWQhATjWIs7*SBk;j_q-V zJQSj7&d>_GGyWh~(KQ~hO-ScO32P^CY4P;O+HM&bdUQGfbR6@?|ak+2P^mJZsuzLAmV(M^Krr(fX|9B%YG*agjI-rinP&v z+hQamZAbVLCuR2LLoqvsb>7M%geKr{FMXJz0epY$%mbw=180dJD8(Z|*|>h|{nH!; zwbrBdc6gT^kB@_uvXxxPi?2D+D{?>>Q&*A}I@-6I6=yJ4086H?8+es>ux2q*0YFd3 zD4n;2+)t&!JT+)~8cv~kl@NiC1S|L+Y*fx0Hh)usVq2CFXUI)K`f4e!OpJ1YqG$Qe zHlq{ZzSm-!c=Y!Y+>YSuVF3JarVpCrI4HDUaikj>h<#XD*)426^7eFyOKmKOAZnA3 zJk}fJwnh6}&b3%cH(&NX)XaHVblCxwKhIU~n&!0Nk-lls<=m@$jp5Saovzls3JCka z?v`Y}kp@|^Ejkk;(m>-lmFThy?B^wOKq$!-0Ug|({f&6?@4L`LnY7%@2Pwzv>eH0$ zgaQ~~p1#?HOL0R)g@%Op4m)K3zOueSFFSHHe!8pnAR`R5?v4NbjvNxoahmpVU4>TK zsqg+{XDZ_dqXBApAaj|FeH_nY8>4|xMJ3^1?#@N^K6n7HodT6%=OaRoO_SFd(;{vu z1O2R6okBuxZ}ySs$-F0Ok~elYndVg{nDA5>cgoR^hi8WE#8vvIbAITK-`U*wb%4nO zvZ=}I;rtN>Q*DsaL#Z9M%DqdLqPAHprC-&c+yxI4+d>9ugxMH<$H;o)9d=;#CL@~K zQ|{kvJuAfb(OjD{wKqr|5qkqiKo9ojt$U+uBdtT5Epjrpk5y#?bj)ymdH86$PDp6; zq4kq)<*@ApivtEXJz8496^CM_JDw?4S%tdFX%}lexjYTLBZhK~AwbsymjH}VfH)a2 zgHnCLUe#z8_Ykt-rwng&gcWo5^sR*PfQJ0OhXxn+AkqS>8@^WU^L~W0owTa&*woK$ zv>0VdKhCsWsRsFA)W&=h0vd9sLBarXauo!m3h`~JMNM=!hSPbiD}RECRy7>M;Plpa zf>jxqaxEwoPThA6qPeS($=I{E7T0-L5|kh>wN3mffGQnZUX_!h&xYnz!fPB~REl%S zUYHtr{IVxZh05hFTEZ!c>MCxnqHd|dP);}E%*nG-?rz#+8i=TTef$~w2w76I4*s@l zSZ_6F<_JQ8WCM?juC~|m{OIJcnG3VB$R%v5DN|g4h8?n|eBy0#sG0~+BqbdZ=0H6* z762iEr;V`(0!?HqqprpD2dQ8ra4Y=?vkgU|y#RZkbCp_5SX^B}$S>mw16%;R+Ow zTX&(ij1At(?VUXLE$zbUfXF~yL~Eh$b|Fy6L54i*crpsZJ}^ji5L5sOdHLS5WZ1WZ zDY5u8`;`p#cTQ3{An%9XaQuM1NC|3I07NBTOiHF^>tT|OH)Zp-QtCO_bEfdrO!V;Q z8+8GFp)~@eenjgO;%ReH-)U}%~)uw36LX7%G0=Kdd z441D8?l~MQ`I@N7tPp7K2s@{hip2-Iq5||oG$+w52A~^BPtLnEAP&TkwIhElh_mos z&OlxWt-ds^VEbjEMyEH>*~QfC$pk6|t(bxqZmLxm++2dy3lS_jIMVe^ctB-EqJv?i zPZx2Adyj?B^-Gq3Wf%a8JsxA>axbC!lP~4B@;Rsox3A0t_q~Cifw3m-qI055?TV)k>@W zAu<*8q7tHtJ4=6p+Q@qFWs8&GV*6?HG`6<|Tea5fw>?*KIRd#68><=v1sDxJ6R{{0cV$@$Zoj86n2qgtwgL(sDVO*KZ#2wMj+-ZRgV4(xL3+JnX=k3LrtBqq7B0IXhH{>0h`HHtNF8oPxp6PmTa9WiM?b_x z)gG=lOy8oo_fw($V8})bbct7`89=`<6^G^Pa--j8ojJ1>x#W_kPajYF;kVY!YfkrILc)@8_L(3_AXwnu!pEl4xOOG9KI!eD zPZDy3%nrp`8OJbpyBwfXiVxvI-o@B~8YJQDi9_sq7a<6VbuPM3mgkBaXgaW`@^+nE zyr;!>;Fg1w_%)oIP6{mN?VKK~^dG^FYPabp<1+VHtF`-C)th$>aWWJtdv~{pzxRs! zxI(;wMpu-=Cx&@+yGd!VXNofiD_@lHUfm`hu63cG{2b-#7Z2c=%&_T(&#Ex-*kM&I zy@tcR{8gP=fV4x(-FbcYSNn}8<|+y@P9_84m?G%v@gksOzsr2sjV#_GSPCts)Bi#? z)4eqPiQz{Wf&x9;tqU7|+eGeErBPv_+gAMb6)M(G_H4=82Yd`uQ(i|vrw$K6U<)s$`z{6)=f*`3WZLmk-%G^RFk-@4hSQAvi)tq6j9~#fTY5u9 z#aoh)v1Lg|UmEO`wqf1T0e;#}tJyR;_RH*UCZacJibLg~aJr-)X%w3Y=$50>QBKt_zdle5#C)@T>K_6M-Y%=M>kzsZ%31jjFshGxe?DC0 zo+@45I`v~WdodxP3aBA{aqBWJymR}SN;~k!b>Bvwt22LLrU7e{ChYW(= z0KukU^(6q=25Qc@j03pReB3wew2NH{<1g-$8EH_saQ!$+NeBcPjY-L?Gn6BR5Z=WU zEy?WHRqk2((^f%4vIgC66XK(fT?n9-KIUay*JHuvR}nR`-)D&3K)uXEC8^p~voJEg5F8 z&@^+GHZD~f4uN{=&qzuUbl@5_TO;iQ;5pJ}=e~P&f$EyYFAFl1V@%+gJAq;ozwsg7 zaeiMk^zCq|q^rT$C(=$-*d1367G3YdzEyP9wFFB=a>#|o+Sl)*x^DpX2Y|_)Vu7>4 zbK+x_8rgEn%Lk$fpawYl zsIVFrioa4$ef$gjPrKIxH%OxQ zx=Yr>8*=?PR;Ri4i%teNvUy5;n&fB!1q<;S;QETWk?iV*v`WXHrM(TlpFdZcjQqdE z@&8@JK`H&530R^{oNc!u`t9qv`1u|kXw_@)#MJGelgeB%(D4e(@(F#DuMgg4J`8%{ zxY5C(_+dq3GPX&5`uuMXAz?1DCw8yLLhP%4DT{w4ed8Q(Udu!;X#aYu|M+Um5O92U zjSP2v`DH=nPjmM7bHEb&d))qBZ^uW?-|OJ-b?|?A9gK_S#r&5Sz~5*0-*?{MXAlT; ze~W#xD>17H#ioR!23AJQCs8MbFKpy7mxwppcjrSR&$lgx-8H0Sqwz(`wAPjO>udC9 zICe>VP`mJ=vVe{BwCnnzmgL@&u?`?Y7ij;eynV3cR@i7rDO@ieTxsQEcd%5IKI z)+uq({3T%e2di4jH=sbze3|02%d=|R(tYe{uS=Y=n~SlY^eHzN8GN6ymU9UA&bi&` z3g5M!G~HlueOD*`{dH!n`GPlF2{w>v9*1BGr;yaU{=kF8SN3fwZqeF%^dTY}2M?eSaFNBc05!}fcD z?W+g9ae9Gs-&?c90RXN4r9j^YFw50p22tT3l0k-%>)4~=xWdVyl-jh}UhA@I+8Q!m z_F_ISd>8aLxt{eX<^pY7+zgP)5Sw=-{!(83yMJiE{@aLDVWqVLJK3|EgtHn$o#BI7 zbJ)T9h_`76Gb;3B-`#U<-?jnyDLEyH(nUKa?h*L(2@mWxysl7xIw#c`i@xv31kDjq zJ$rb7H#|1{pxqf$u=jd!(URc##8;t7s?u3;3bzi%hwdjnLk)HEPQ%&Uj`5`}d zv3SHJb??Ys?leH5aT8@#;}QKaR_C~!OFWl1Nct#rhE5{5`oP~|4$$thp2p#(ibSlm zwSeq-!8=UodtXynhcm2_@96?6;f8E5&ej_has(`_9*#Bups&oUWwgwgK+dUK@b1_{ z&e68g`Z}-!G#d%;)iU&!IZleialm-6{Vk1VIH=upawti~g~fWYN*(@;N_L(-=eRph z(?z_PMpIU>D`2;OeRulEwbpQTw3xdk_)5%tmsV$6n%6C*ljPpo?n?qdEu2y|_f5?-Yp@Z0zKs=c zRFg6?s_Gc_ZJ!iHN;(bnyiZ(l`?A2XiebFkp&U^J*h06pjz(q80TDXO$X|?QqK`K> zvEk=HKCX0GjHmwR15r?B+$b$?Sg#}0Lulqhx#&mqvls^(WsBPZMcou|4r+6N>(nDv zhfpO*Tom>w+Z|L!6X>aJe|$0$PXXh+20C87}BJ~8_HFQ z_AngUb@Allm&|b`hk^}S9-KOSVR+1id-WD6As)tRH#2jnW_5?`?H_YQNRI_D`NpBX z#dhf~3aWR+2nJ5N9h_62UwdE_b>#Tk1bL${S|piIr$T)rzG-fm++5*P21)Li+<_g_ zO}ftlrv0yV9J~4DlZr1&jf#Iw13EP5AP@u}Q@xhGNBw|#MV$EANv<^S`r9UTyXi(H zfJmi~5wP8TbKPm?l_xOH3v9FbQyjp9W<+cuKBGLc^Vy=ml z6N$0M1sk9thyzAoJqAPcxIqGSu3>Q%9>e(a053I3-S50>kp(Pf2C`iQIbL2Bb@&PF zv6Pr#SMHQc9d0MPqB%Ea4o+n$L?A!a)@~=c-{(8p-#b_rTB?%+9z{bUNA@?4jt%+$Is_L`YQ zz4`S!^@pd4@8@mpv5rYUdC$tKaryLp%FFjDBY2pRcyjsT_3l>8MAv-iT;wGCq`l;$ zs%{+0Cr%$1$sySE;d|Pq*uq~*+&>=yxMtt}8khX{>y(=2KhKDI@5c6{bY%xR;x*rf zEXR|)Imm#X^4#9UYEqa!F(R`_G)(2Dp-%31LFDs|m0=e%(B0Z`+$t}0`ZA*5@P5O6o` z!5a^6Rl)j{+d3NSHoqkE90M!=+8gh5z*)|}%3v(-1WZw`?O7QL209l+4O+l9#SHP3 zu7)4fch}A)&CMi~q<#_0Hy-7Qow~Z=aB!$3@RM-hxV@mCAyEq}i8U2w_>gv?EfrNC(F2Nx$(>?hJPy)H-1|&vUxn7}`$W68Esu6h))viNzy=Ei4csT< zMZ(!b zu75QZ$sp1RNx<5P=DyZ2OPDOmiS9`2jNf)+wmA$K6nKu3-0a(^q#G%Hm>NA&mwGoJ z%HwG@CzpS=RK#jAdenN6Z{_y5qb3wJW;|>tm{WIMX$^F)C7q71kl9J8=XqOpBg(wX zJT_5wFd=_-YxR?ie5OaRX6%<}-nL-I`o5&uNzZ2ucqs7s+it{eG^GTCoQ97Pnak(TKsZ4OytmYerPb-%}M+df(PZ>Fxsl-gyFtErwNdcdLNMYYY zQ&eYdWrNNjhgxc^IUT%YVH$f_C1gJ`mN-g<$6=yW?Oosxj8Kc8{O!vZ_n+Hl1nLb* z*p3I2SE^Z@ilaBBSo-1EqfS_+-fJe)m=wTz*HlXBgEDXe>? z1`4ga(Sk2s!L~Jh6r-?Vu4*NW+t?O&T-#Tvaqr<@ORGuuIvf)Cq<_&#bDx34TFN1? zV8X5AuED8cr_sm5{&D#m9kWdv^XqLP8e#LwEQ3?G&6JBV-cQ85c8e=Jq=hq0jA1P7 zg)z!+sD3(O#XJy7+Mg}@8`rPP1Z;g>aTgnetuyOXdA%)7z)4swY!zQOsCy^lteVCz zFS++q&>A1?o5;01DE=A>4k^a^?|{nrp(Kn;tLRY=nydgjeKbv(K_lSgCqX$<{p8g0 zAR?)z6FO|f$8cV-D>BVDyuxzeYPnQ51Nk$T<#hY)-Z^WtT(!?s~Qt1pI zFp%U6J0p`3juUqcG6ra~7L1EL*L9Jr>D`B`(NB0)%1)Q1`-&Rxp)dsX(rH7@bt9;e zUw22QM@zRlkD*mZ5@+uD{Hq$fO^TmIyEB_0pmyVsH$QF@OrzW7cPcRC1M8~kqvCr` zJIVJj9}_A!6{*@3f4q?W;Ni(!VD=$Tz_FP*Kh?XDac@Ave3`ML`-S0Ro*S=zZ%trD z&9q8XvS=ASqR&W}L3c3g!EV{cMprNWAj)^?)iXHGyRgM9N0nkXXX1J6(oX$?Ds%Vf zg3IbiB#Zx)U=rikO8Mf$vKKA4tUZeKL^Ca;N8*pq zk&MvsQy!N{thEFY&RzmqZ@x!M0lG)GM%6mn;*-ragZ`B-78}L#rfUOiJou=)_q}q} zZ+@uTdZ@`6Gs=GCjeg_Np1^W!7bf9O0q z_!L-VGj#X%k}1U-uGr@Cn;<=Ih8c`r;Nk7K^mhAUh0(O> z@~^{Wia~hQ@BpceXS6?sKj? zuY=Qjo6sA1*Wrcr6ej2_apMd0qzxSR)po1|FH3=-)#?9Kk}6TFP-fD>n&0U7`!M0( z0mC2u^gZf?AD`5h)*U-A1mu;D3V|F>x+>~A%(+sI{>gRDUAk2{@|GR3JYE(pqLfuL z81+a&?@QM7PA`VS&YJ8cMzz{d3(w8=A=O(07+Xni&poihn61@vs|cAkEMXW!bF zb0DdJW+B%mE8F5bQYG?%K2GD(bp=ZHFdS{3#_H&N>xZOBJ|iNJ-K@nd;8jIg;MGDm zQssYUhadXBjC$;b9j2CD?OCBUH^2Wg=zZqXjcZM;BOYbhLiUVz_A`bpXsC8K7Ggm< z(wQnjn9GWr&=p=l?aDbWbQ|>`#D9DQ?IG2a6UE^Wd|8#{Aa#FJSP{X~|C*$iklvL8 ze7aUx(brgh|NoTv|LJFkpq9Ge`%PQ)0a)>vkJE0+ac~%}46RxCQg^r7#mL$~?V6;M zOe$@8hwhzEwio-2ZZ8f%_wV#0Lzib2nF~wg{Lk-3-pKPs0r?CBON$pCzb@tuG_AC7o30Hbk z)OGKrwoEodvHQafWmcoI#s*Br!=FnSI}08;I6uG-4VOG2t$F$7YepcRUc$;EQ$_-Z zM#>wk_sKf*8r9BeNWADtU+pMh>iO)7g-KnCo8*?4DJxNr+IX)aPd+7YCy>>Sq^|QWZzuwFr zZ3!+X$d{W~p>Gq#1x`Zn>AhZ8%ZZ{WQ7$UUBW=*t&#q_Ul##IYvzQ3BGdio?LGeOT z&P(t1%WV<;RN8g!toF_%tHeDvz3H+_rZY1a7Yg<(o`;%r$A3vQ|E+5KujJwnXT`t% zx({?`-AApZj;FyLpF|PxXtfuvgY|qyTxjM@PMW!NMdM6SR3CjPW5||QSb)cz$CbMG zOj4-@AjpCCOtR4wWBT($z|yuk%3U3pYwB6ZR^N>f5}1AaI`Wn!k@a|hcU)FaGj_x) zp)S{CV^#LUE^c})(sZI1vRc2ctG;1MzG}1_X{8lKai^<>3;scDemFdu3f(UgPn>;Y z!AHvQP-KOTz-l>>9W#`tqyP4!Bkf5T=(ErjMoQf=`qW(8h!6QCC&E7qx_xV;sx2%n zyj8`ZVj(!^)leW)2no&kBq5JHWe{y@z&zoo4ZY19BVJ&RaCwY~L(L>wEX7=4UJ6Sq;zD}XvjtsZ z7Z_Q^PPn;uo&T`>e6lQSvx#h6)M4NJ>$$^ecFdD6D# zHwj4C)Rk$~G9y@oi7@V)=G#o&2<#O^XpL_++fKM$MJgrG0}*x8k|>u^W66oq`;&^hF5 zf!2JHZndtFix8p8SWLaQJa7QLDei_Xja}x8tEzVY8o6I-hpg07tD8F1u-w$mf7x}% z4$aCiwRFiY0cTra71Oz4*5*305ic-$Ulg-B{O$%kl4yyp(Jq5)pllC=CbALmdh zf_g}4Fr{+b+SS?t7Z|P-c^8=_-m$#C?&_NkdvDQ&eSUpv=yUDveP#Nd4)_&vBWnX1U29eg4i`-?< z+rQ?B{Qi77M)o$5meOmbjh?<8J>vL~D(9jkCG-#pJq}glhs<7&O@jw)4+zihzE&?b zIg^jp5H^|nyuQ<6FOGsBUoXcDlfq&Sdp5e%E3pb!x(C?vq_sP*vy@pq_sB>+puqHx z?Qg^8lQh~)kCs<=G+HYdZ*25%I6YeS%4IDWB&}kqVU=0L#`%Wne<+cZuWcU4GO)|t z)`nhr{=OuU_>SKothYUReS!8!9DhFB6P^cTXZ^t%trwPUA+pIsC$p|J9I-rYNVv$- z4T1@|V*r8wc9y7Dx;Mp+w03#+hs-v_SI>5V)fEI?&~&GDrumkxBvL^Yy5kJ3ScI)LooGV`w~Gvr zH#U9u6|;Ne+0df~6>o9N`F1I2%@c$525P|S=Bb?T_n_O5Dpox;Ti*g*D>Aj*RS#oH z=dqhypJ9RPLrv~-8mP1eW%5$p^yTsY? zy5=~NTWiBO)%qUQUz74tCvLz!Y7L=f2bfZX9o^FfF`=BJ&}0cu10cJ)0mzNpOUbMf zCpG_4PWnmRi?5ctQ5%>44WLW8RO$o|K{{2w0q_k(_8k^Mb%$LZ|fi{bCZ z@Gn^7@5S){@M75gsT;kv4GY7!;~3@qdf1qJuc`$*J@|dx^grA@?@U3^DOrEwbfedW zy>MKp^q36PNR<13_{8sW2IkmffcqyAh|2hvWNH!i6LUTay&;2t@!_u_A1%Jv-1i3e zqnFn%_)S;0STGEJC4pOwj=F#8;-lOGpS>2xH}xS2z8;83#IJWrY#(`VHz0vg#b`Xz zZ9TOVmzp>#jGIDc95!(1l$(@knbZBH9O$1Z(Px#DP!cDq_f~)Dh5o^Ek^Tq*Rnjf4 zhlD@mRsZ8(MZjRzoRby)Yh(Z0{4)1}&k*ljN%#I=yxprLFldu+(&_$nKKy@UER;*& zGeigH`z8MuZwH2s$jI)&lfOdh_^&A;aR#69^LcB*^uKt!nQVYdihRoXH3j_7-|%!T zh)Sg!9#l~L*Q0;8uz$6AUOs iR00*{`~O{ipdQ(g(TpM?)6$uX+A|e!FT;0Gg=W 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 Date: Wed, 16 Nov 2022 10:23:20 -0600 Subject: [PATCH 08/14] [optimizer] fix limits config path --- packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts b/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts index ac1bcb02a0349..3e9e25e790b47 100644 --- a/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts +++ b/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts @@ -79,7 +79,7 @@ export class BundleMetricsPlugin { id: bundle.id, value: entry.size, limit: bundle.pageLoadAssetSizeLimit, - limitConfigPath: `node_modules/@kbn/optimizer/limits.yml`, + limitConfigPath: `packages/kbn-optimizer/limits.yml`, }, { group: `async chunks size`, From 575cfcba987c974dcc188628a422ca160cc27dfd Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 16 Nov 2022 17:47:23 +0100 Subject: [PATCH 09/14] [APM] Add number of service nodes to per service telemetry (#145206) Adds the number of service nodes and transaction types per service, to get more reliable estimates of how effective service metrics will be. Additionally, add index stats to get a sense of how quickly metric and trace indices will roll over. --- .../__snapshots__/apm_telemetry.test.ts.snap | 72 ++++++++++ .../collect_data_telemetry/tasks.test.ts | 60 ++++---- .../collect_data_telemetry/tasks.ts | 135 ++++++++++++------ .../apm/server/lib/apm_telemetry/schema.ts | 20 +++ .../apm/server/lib/apm_telemetry/types.ts | 32 +++++ .../schema/xpack_plugins.json | 76 +++++++++- 6 files changed, 328 insertions(+), 67 deletions(-) diff --git a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap index 508d8aac06dad..a154ededc2a33 100644 --- a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap @@ -1040,6 +1040,72 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the }, "indices": { "properties": { + "metric": { + "properties": { + "shards": { + "properties": { + "total": { + "type": "long" + } + } + }, + "all": { + "properties": { + "total": { + "properties": { + "docs": { + "properties": { + "count": { + "type": "long" + } + } + }, + "store": { + "properties": { + "size_in_bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, + "traces": { + "properties": { + "shards": { + "properties": { + "total": { + "type": "long" + } + } + }, + "all": { + "properties": { + "total": { + "properties": { + "docs": { + "properties": { + "count": { + "type": "long" + } + } + }, + "store": { + "properties": { + "size_in_bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, "shards": { "properties": { "total": { @@ -1086,6 +1152,12 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "service_id": { "type": "keyword" }, + "num_service_nodes": { + "type": "long" + }, + "num_transaction_types": { + "type": "long" + }, "timed_out": { "type": "boolean" }, diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts index eba75bdfdbd08..babbd57ccc9dc 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.test.ts @@ -383,11 +383,27 @@ describe('data telemetry collection tasks', () => { const task = tasks.find((t) => t.name === 'indices_stats'); it('returns a map of index stats', async () => { - const indicesStats = jest.fn().mockResolvedValueOnce({ + const indicesStats = jest.fn().mockResolvedValue({ _all: { total: { docs: { count: 1 }, store: { size_in_bytes: 1 } } }, _shards: { total: 1 }, }); + const statsResponse = { + shards: { + total: 1, + }, + all: { + total: { + docs: { + count: 1, + }, + store: { + size_in_bytes: 1, + }, + }, + }, + }; + expect( await task?.executor({ indices, @@ -395,26 +411,32 @@ describe('data telemetry collection tasks', () => { } as any) ).toEqual({ indices: { + ...statsResponse, + metric: statsResponse, + traces: statsResponse, + }, + }); + }); + + describe('with no results', () => { + it('returns zero values', async () => { + const indicesStats = jest.fn().mockResolvedValue({}); + + const statsResponse = { shards: { - total: 1, + total: 0, }, all: { total: { docs: { - count: 1, + count: 0, }, store: { - size_in_bytes: 1, + size_in_bytes: 0, }, }, }, - }, - }); - }); - - describe('with no results', () => { - it('returns zero values', async () => { - const indicesStats = jest.fn().mockResolvedValueOnce({}); + }; expect( await task?.executor({ @@ -423,19 +445,9 @@ describe('data telemetry collection tasks', () => { } as any) ).toEqual({ indices: { - shards: { - total: 0, - }, - all: { - total: { - docs: { - count: 0, - }, - store: { - size_in_bytes: 0, - }, - }, - }, + ...statsResponse, + metric: statsResponse, + traces: statsResponse, }, }); }); diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index 34d434df654ad..df68cb4155b24 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -4,20 +4,13 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { fromKueryExpression } from '@kbn/es-query'; -import { flatten, merge, sortBy, sum, pickBy, uniq } from 'lodash'; -import { createHash } from 'crypto'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { fromKueryExpression } from '@kbn/es-query'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; -import { asMutableArray } from '../../../../common/utils/as_mutable_array'; +import { createHash } from 'crypto'; +import { flatten, merge, pickBy, sortBy, sum, uniq } from 'lodash'; import { TelemetryTask } from '.'; import { AGENT_NAMES, RUM_AGENT_NAMES } from '../../../../common/agent_name'; -import { - SavedServiceGroup, - APM_SERVICE_GROUP_SAVED_OBJECT_TYPE, - MAX_NUMBER_OF_SERVICE_GROUPS, -} from '../../../../common/service_groups'; -import { getKueryFields } from '../../../../common/utils/get_kuery_fields'; import { AGENT_NAME, AGENT_VERSION, @@ -30,9 +23,9 @@ import { FAAS_TRIGGER_TYPE, HOST_NAME, HOST_OS_PLATFORM, + KUBERNETES_POD_NAME, OBSERVER_HOSTNAME, PARENT_ID, - KUBERNETES_POD_NAME, PROCESSOR_EVENT, SERVICE_ENVIRONMENT, SERVICE_FRAMEWORK_NAME, @@ -40,6 +33,7 @@ import { SERVICE_LANGUAGE_NAME, SERVICE_LANGUAGE_VERSION, SERVICE_NAME, + SERVICE_NODE_NAME, SERVICE_RUNTIME_NAME, SERVICE_RUNTIME_VERSION, SERVICE_VERSION, @@ -48,11 +42,18 @@ import { TRANSACTION_TYPE, USER_AGENT_ORIGINAL, } from '../../../../common/elasticsearch_fieldnames'; +import { + APM_SERVICE_GROUP_SAVED_OBJECT_TYPE, + MAX_NUMBER_OF_SERVICE_GROUPS, + SavedServiceGroup, +} from '../../../../common/service_groups'; +import { asMutableArray } from '../../../../common/utils/as_mutable_array'; +import { getKueryFields } from '../../../../common/utils/get_kuery_fields'; import { APMError } from '../../../../typings/es_schemas/ui/apm_error'; import { AgentName } from '../../../../typings/es_schemas/ui/fields/agent'; import { Span } from '../../../../typings/es_schemas/ui/span'; import { Transaction } from '../../../../typings/es_schemas/ui/transaction'; -import { APMTelemetry, APMPerService } from '../types'; +import { APMPerService, APMTelemetry } from '../types'; const TIME_RANGES = ['1d', 'all'] as const; type TimeRange = typeof TIME_RANGES[number]; @@ -1027,8 +1028,50 @@ export const tasks: TelemetryTask[] = [ ], }); + const metricIndicesResponse = await telemetryClient.indicesStats({ + index: [indices.metric], + }); + + const tracesIndicesResponse = await telemetryClient.indicesStats({ + index: [indices.span, indices.transaction], + }); + return { indices: { + metric: { + shards: { + total: metricIndicesResponse._shards?.total ?? 0, + }, + all: { + total: { + docs: { + count: metricIndicesResponse._all?.total?.docs?.count ?? 0, + }, + store: { + size_in_bytes: + metricIndicesResponse._all?.total?.store?.size_in_bytes ?? + 0, + }, + }, + }, + }, + traces: { + shards: { + total: tracesIndicesResponse._shards?.total ?? 0, + }, + all: { + total: { + docs: { + count: tracesIndicesResponse._all?.total?.docs?.count ?? 0, + }, + store: { + size_in_bytes: + tracesIndicesResponse._all?.total?.store?.size_in_bytes ?? + 0, + }, + }, + }, + }, shards: { total: response._shards?.total ?? 0, }, @@ -1193,18 +1236,28 @@ export const tasks: TelemetryTask[] = [ }, }, aggs: { - environments: { + service_names: { terms: { - field: SERVICE_ENVIRONMENT, - size: 1000, + field: SERVICE_NAME, + size: 2500, }, aggs: { - service_names: { + environments: { terms: { - field: SERVICE_NAME, - size: 1000, + field: SERVICE_ENVIRONMENT, + size: 5, }, aggs: { + instances: { + cardinality: { + field: SERVICE_NODE_NAME, + }, + }, + transaction_types: { + cardinality: { + field: TRANSACTION_TYPE, + }, + }, top_metrics: { top_metrics: { sort: '_score', @@ -1273,87 +1326,85 @@ export const tasks: TelemetryTask[] = [ }, }, }); - const envBuckets = response.aggregations?.environments.buckets ?? []; - const data: APMPerService[] = envBuckets.flatMap((envBucket) => { + const serviceBuckets = response.aggregations?.service_names.buckets ?? []; + const data: APMPerService[] = serviceBuckets.flatMap((serviceBucket) => { const envHash = createHash('sha256') - .update(envBucket.key as string) + .update(serviceBucket.key as string) .digest('hex'); - const serviceBuckets = envBucket.service_names?.buckets ?? []; - return serviceBuckets.map((serviceBucket) => { + const envBuckets = serviceBucket.environments?.buckets ?? []; + return envBuckets.map((envBucket) => { const nameHash = createHash('sha256') - .update(serviceBucket.key as string) + .update(envBucket.key as string) .digest('hex'); const fullServiceName = `${nameHash}~${envHash}`; return { service_id: fullServiceName, timed_out: response.timed_out, + num_service_nodes: envBucket.instances.value ?? 1, + num_transaction_types: envBucket.transaction_types.value ?? 0, cloud: { availability_zones: - serviceBucket[CLOUD_AVAILABILITY_ZONE]?.buckets.map( + envBucket[CLOUD_AVAILABILITY_ZONE]?.buckets.map( (inner) => inner.key as string ) ?? [], regions: - serviceBucket[CLOUD_REGION]?.buckets.map( + envBucket[CLOUD_REGION]?.buckets.map( (inner) => inner.key as string ) ?? [], providers: - serviceBucket[CLOUD_PROVIDER]?.buckets.map( + envBucket[CLOUD_PROVIDER]?.buckets.map( (inner) => inner.key as string ) ?? [], }, faas: { trigger: { type: - serviceBucket[FAAS_TRIGGER_TYPE]?.buckets.map( + envBucket[FAAS_TRIGGER_TYPE]?.buckets.map( (inner) => inner.key as string ) ?? [], }, }, agent: { - name: serviceBucket.top_metrics?.top[0].metrics[ - AGENT_NAME - ] as string, - version: serviceBucket.top_metrics?.top[0].metrics[ + name: envBucket.top_metrics?.top[0].metrics[AGENT_NAME] as string, + version: envBucket.top_metrics?.top[0].metrics[ AGENT_VERSION ] as string, }, service: { language: { - name: serviceBucket.top_metrics?.top[0].metrics[ + name: envBucket.top_metrics?.top[0].metrics[ SERVICE_LANGUAGE_NAME ] as string, - version: serviceBucket.top_metrics?.top[0].metrics[ + version: envBucket.top_metrics?.top[0].metrics[ SERVICE_LANGUAGE_VERSION ] as string, }, framework: { - name: serviceBucket.top_metrics?.top[0].metrics[ + name: envBucket.top_metrics?.top[0].metrics[ SERVICE_FRAMEWORK_NAME ] as string, - version: serviceBucket.top_metrics?.top[0].metrics[ + version: envBucket.top_metrics?.top[0].metrics[ SERVICE_FRAMEWORK_VERSION ] as string, }, runtime: { - name: serviceBucket.top_metrics?.top[0].metrics[ + name: envBucket.top_metrics?.top[0].metrics[ SERVICE_RUNTIME_NAME ] as string, - version: serviceBucket.top_metrics?.top[0].metrics[ + version: envBucket.top_metrics?.top[0].metrics[ SERVICE_RUNTIME_VERSION ] as string, }, }, kubernetes: { pod: { - name: serviceBucket.top_metrics?.top[0].metrics[ + name: envBucket.top_metrics?.top[0].metrics[ KUBERNETES_POD_NAME ] as string, }, }, container: { - id: serviceBucket.top_metrics?.top[0].metrics[ - CONTAINER_ID - ] as string, + id: envBucket.top_metrics?.top[0].metrics[CONTAINER_ID] as string, }, }; }); diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts index 4430389785e1d..c73eeae128cfe 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts @@ -118,6 +118,8 @@ const apmPerAgentSchema: Pick< export const apmPerServiceSchema: MakeSchemaFrom = { service_id: keyword, + num_service_nodes: long, + num_transaction_types: long, timed_out: { type: 'boolean' }, cloud: { availability_zones: { type: 'array', items: { type: 'keyword' } }, @@ -225,6 +227,24 @@ export const apmSchema: MakeSchemaFrom = { integrations: { ml: { all_jobs_count: long } }, indices: { + metric: { + shards: { total: long }, + all: { + total: { + docs: { count: long }, + store: { size_in_bytes: long }, + }, + }, + }, + traces: { + shards: { total: long }, + all: { + total: { + docs: { count: long }, + store: { size_in_bytes: long }, + }, + }, + }, shards: { total: long }, all: { total: { diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts index ceadcbfc1ded2..518bb969bcb0e 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts @@ -27,6 +27,8 @@ export interface AggregatedTransactionsCounts { export interface APMPerService { service_id: string; timed_out: boolean; + num_service_nodes: number; + num_transaction_types: number; cloud: { availability_zones: string[]; regions: string[]; @@ -157,6 +159,36 @@ export interface APMUsage { } >; indices: { + traces: { + shards: { + total: number; + }; + all: { + total: { + docs: { + count: number; + }; + store: { + size_in_bytes: number; + }; + }; + }; + }; + metric: { + shards: { + total: number; + }; + all: { + total: { + docs: { + count: number; + }; + store: { + size_in_bytes: number; + }; + }; + }; + }; shards: { total: number; }; diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index e0b449a6afa8b..409f29bfc437b 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -4071,6 +4071,72 @@ }, "indices": { "properties": { + "metric": { + "properties": { + "shards": { + "properties": { + "total": { + "type": "long" + } + } + }, + "all": { + "properties": { + "total": { + "properties": { + "docs": { + "properties": { + "count": { + "type": "long" + } + } + }, + "store": { + "properties": { + "size_in_bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, + "traces": { + "properties": { + "shards": { + "properties": { + "total": { + "type": "long" + } + } + }, + "all": { + "properties": { + "total": { + "properties": { + "docs": { + "properties": { + "count": { + "type": "long" + } + } + }, + "store": { + "properties": { + "size_in_bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, "shards": { "properties": { "total": { @@ -4122,6 +4188,12 @@ "service_id": { "type": "keyword" }, + "num_service_nodes": { + "type": "long" + }, + "num_transaction_types": { + "type": "long" + }, "timed_out": { "type": "boolean" }, @@ -13015,7 +13087,9 @@ "properties": { "unique_endpoint_count": { "type": "long", - "_meta": { "description": "Number of active unique endpoints in last 24 hours" } + "_meta": { + "description": "Number of active unique endpoints in last 24 hours" + } } } } From 858b46922dfa709b6cb6a1d438750c5b890eb4ab Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 16 Nov 2022 17:48:32 +0100 Subject: [PATCH 10/14] [Enterprise Search] Split documents count into added and deleted docs (#145366) --- .../search_index/sync_jobs/sync_jobs.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs.tsx index 193df13c3ad98..822add8f8bde3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_jobs.tsx @@ -61,9 +61,17 @@ export const SyncJobs: React.FC = () => { truncateText: true, }, { - field: 'docsCount', - name: i18n.translate('xpack.enterpriseSearch.content.searchIndices.docsCount.columnTitle', { - defaultMessage: 'Docs count', + field: 'indexed_document_count', + name: i18n.translate('xpack.enterpriseSearch.content.searchIndices.addedDocs.columnTitle', { + defaultMessage: 'Docs added', + }), + sortable: true, + truncateText: true, + }, + { + field: 'deleted_document_count', + name: i18n.translate('xpack.enterpriseSearch.content.searchIndices.deletedDocs.columnTitle', { + defaultMessage: 'Docs deleted', }), sortable: true, truncateText: true, From 1192e4f375420ef46cf73008f9e78229af62f86c Mon Sep 17 00:00:00 2001 From: Byron Hulcher Date: Wed, 16 Nov 2022 11:57:51 -0500 Subject: [PATCH 11/14] [Enterprise Search] Add cron scheduling support to Kibana (#145241) --- .../api/crawler/types.ts | 7 + .../api/crawler/utils.ts | 12 + .../automatic_crawl_scheduler.test.tsx | 80 ----- .../automatic_crawl_scheduler.tsx | 322 ++++++++++-------- .../automatic_crawl_scheduler_logic.test.ts | 39 +-- .../automatic_crawl_scheduler_logic.ts | 63 ++-- .../shared/cron_editor/constants.ts | 155 +++++++++ .../shared/cron_editor/cron_daily.tsx | 86 +++++ .../shared/cron_editor/cron_editor.test.tsx | 121 +++++++ .../shared/cron_editor/cron_editor.tsx | 253 ++++++++++++++ .../shared/cron_editor/cron_hourly.tsx | 54 +++ .../shared/cron_editor/cron_monthly.tsx | 113 ++++++ .../shared/cron_editor/cron_weekly.tsx | 113 ++++++ .../shared/cron_editor/cron_yearly.tsx | 156 +++++++++ .../enterprise_search_cron_editor.tsx | 76 +++++ .../applications/shared/cron_editor/index.ts | 8 + .../applications/shared/cron_editor/readme.md | 5 + .../shared/cron_editor/services/cron.ts | 58 ++++ .../cron_editor/services/humanized_numbers.ts | 101 ++++++ .../shared/cron_editor/services/index.ts | 10 + .../applications/shared/cron_editor/types.ts | 12 + .../enterprise_search/crawler/crawler.test.ts | 16 +- .../enterprise_search/crawler/crawler.ts | 1 + .../translations/translations/fr-FR.json | 51 ++- .../translations/translations/ja-JP.json | 51 ++- .../translations/translations/zh-CN.json | 51 ++- 26 files changed, 1713 insertions(+), 301 deletions(-) delete mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/constants.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_daily.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_hourly.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_monthly.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_weekly.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_yearly.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/enterprise_search_cron_editor.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/index.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/readme.md create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/cron.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/humanized_numbers.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/index.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/types.ts diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/types.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/types.ts index f828d34bdde12..ce941613e3587 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/types.ts @@ -161,6 +161,12 @@ export interface DomainConfigFromServer { sitemap_urls: string[]; } +export interface CrawlScheduleFromServer { + frequency: number; + unit: CrawlUnits; + use_connector_schedule: boolean; +} + // Client export interface CrawlerDomain { @@ -252,6 +258,7 @@ export type CrawlEvent = CrawlRequest & { export interface CrawlSchedule { frequency: number; unit: CrawlUnits; + useConnectorSchedule: boolean; } export interface DomainConfig { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/utils.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/utils.ts index ab47d8a575c5b..7886d349044c0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/utils.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/crawler/utils.ts @@ -29,6 +29,8 @@ import { BasicCrawlerAuth, CrawlerAuth, RawCrawlerAuth, + CrawlScheduleFromServer, + CrawlSchedule, } from './types'; export function crawlerDomainServerToClient(payload: CrawlerDomainFromServer): CrawlerDomain { @@ -241,6 +243,16 @@ export const crawlerDomainsWithMetaServerToClient = ({ meta, }); +export const crawlScheduleServerToClient = ({ + frequency, + unit, + use_connector_schedule: useConnectorSchedule, +}: CrawlScheduleFromServer): CrawlSchedule => ({ + frequency, + unit, + useConnectorSchedule, +}); + export function isBasicCrawlerAuth(auth: CrawlerAuth): auth is BasicCrawlerAuth { return auth !== null && (auth as BasicCrawlerAuth).type === 'basic'; } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.test.tsx deleted file mode 100644 index a81ae20408aa0..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.test.tsx +++ /dev/null @@ -1,80 +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 { setMockActions, setMockValues } from '../../../../../__mocks__/kea_logic'; -import '../../../../../__mocks__/shallow_useeffect.mock'; - -import React from 'react'; - -import { shallow, ShallowWrapper } from 'enzyme'; - -import { EuiButton, EuiFieldNumber, EuiForm, EuiSelect, EuiSwitch } from '@elastic/eui'; - -import { CrawlUnits } from '../../../../api/crawler/types'; - -import { AutomaticCrawlScheduler } from './automatic_crawl_scheduler'; - -const MOCK_ACTIONS = { - // AutomaticCrawlSchedulerLogic - setCrawlFrequency: jest.fn(), - setCrawlUnit: jest.fn(), - saveChanges: jest.fn(), - toggleCrawlAutomatically: jest.fn(), -}; - -const MOCK_VALUES = { - crawlAutomatically: false, - crawlFrequency: 7, - crawlUnit: CrawlUnits.days, - isSubmitting: false, -}; - -describe('AutomaticCrawlScheduler', () => { - let wrapper: ShallowWrapper; - - beforeEach(() => { - setMockActions(MOCK_ACTIONS); - setMockValues(MOCK_VALUES); - - wrapper = shallow(); - }); - - it('renders', () => { - expect(wrapper.find(EuiForm)).toHaveLength(1); - expect(wrapper.find(EuiFieldNumber)).toHaveLength(1); - expect(wrapper.find(EuiSelect)).toHaveLength(1); - }); - - it('saves changes on form submit', () => { - const preventDefault = jest.fn(); - wrapper.find(EuiForm).simulate('submit', { preventDefault }); - - expect(preventDefault).toHaveBeenCalled(); - expect(MOCK_ACTIONS.saveChanges).toHaveBeenCalled(); - }); - - it('contains a switch that toggles automatic crawling', () => { - wrapper.find(EuiSwitch).simulate('change'); - - expect(MOCK_ACTIONS.toggleCrawlAutomatically).toHaveBeenCalled(); - }); - - it('contains a number field that updates the crawl frequency', () => { - wrapper.find(EuiFieldNumber).simulate('change', { target: { value: '10' } }); - - expect(MOCK_ACTIONS.setCrawlFrequency).toHaveBeenCalledWith(10); - }); - - it('contains a select field that updates the crawl unit', () => { - wrapper.find(EuiSelect).simulate('change', { target: { value: CrawlUnits.weeks } }); - - expect(MOCK_ACTIONS.setCrawlUnit).toHaveBeenCalledWith(CrawlUnits.weeks); - }); - - it('contains a submit button', () => { - expect(wrapper.find(EuiButton).prop('type')).toEqual('submit'); - }); -}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.tsx index 28c8b8ff10000..960e432762722 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler.tsx @@ -10,175 +10,220 @@ import React from 'react'; import { useActions, useValues } from 'kea'; import { - EuiButton, + EuiCheckableCard, EuiFieldNumber, EuiFlexGroup, EuiFlexItem, - EuiForm, EuiFormRow, + EuiHorizontalRule, EuiLink, EuiSelect, EuiSpacer, + EuiSplitPanel, EuiSwitch, EuiText, - htmlIdGenerator, + EuiTitle, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; - +import { CrawlerIndex } from '../../../../../../../common/types/indices'; import { HOURS_UNIT_LABEL, DAYS_UNIT_LABEL, WEEKS_UNIT_LABEL, MONTHS_UNIT_LABEL, - SAVE_BUTTON_LABEL, } from '../../../../../shared/constants'; -import { DataPanel } from '../../../../../shared/data_panel/data_panel'; - +import { EnterpriseSearchCronEditor } from '../../../../../shared/cron_editor/enterprise_search_cron_editor'; import { docLinks } from '../../../../../shared/doc_links/doc_links'; +import { UpdateConnectorSchedulingApiLogic } from '../../../../api/connector/update_connector_scheduling_api_logic'; import { CrawlUnits } from '../../../../api/crawler/types'; +import { isCrawlerIndex } from '../../../../utils/indices'; +import { IndexViewLogic } from '../../index_view_logic'; import { AutomaticCrawlSchedulerLogic } from './automatic_crawl_scheduler_logic'; export const AutomaticCrawlScheduler: React.FC = () => { - const { setCrawlFrequency, setCrawlUnit, saveChanges, toggleCrawlAutomatically } = useActions( - AutomaticCrawlSchedulerLogic - ); + const { index } = useValues(IndexViewLogic); + const { makeRequest } = useActions(UpdateConnectorSchedulingApiLogic); - const { crawlAutomatically, crawlFrequency, crawlUnit, isSubmitting } = useValues( + const scheduling = (index as CrawlerIndex)?.connector?.scheduling; + + const { setCrawlFrequency, setCrawlUnit, setUseConnectorSchedule, toggleCrawlAutomatically } = + useActions(AutomaticCrawlSchedulerLogic); + + const { crawlAutomatically, crawlFrequency, crawlUnit, useConnectorSchedule } = useValues( AutomaticCrawlSchedulerLogic ); - const formId = htmlIdGenerator('AutomaticCrawlScheduler')(); + if (!isCrawlerIndex(index)) { + return <>; + } return ( <> - - {i18n.translate('xpack.enterpriseSearch.automaticCrawlSchedule.title', { - defaultMessage: 'Automated Crawl Scheduling', - })} - - } - titleSize="s" - subtitle={ - - {i18n.translate( - 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.readMoreLink', - { - defaultMessage: 'Read more.', - } - )} - - ), - }} - /> - } - iconType="calendar" - > - { - event.preventDefault(); - saveChanges(); - }} - component="form" - id={formId} - > + +

+ {i18n.translate('xpack.enterpriseSearch.automaticCrawlSchedule.title', { + defaultMessage: 'Crawl frequency', + })} +

+ + + + - {i18n.translate( - 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlAutomaticallySwitchLabel', - { - defaultMessage: 'Crawl automatically', - } - )} - - } + label={i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlAutomaticallySwitchLabel', + { + defaultMessage: 'Enable recurring crawls with the following schedule', + } + )} onChange={toggleCrawlAutomatically} compressed /> - - - - - {i18n.translate( - 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlUnitsPrefix', - { - defaultMessage: 'Every', - } - )} - - - - setCrawlFrequency(parseInt(e.target.value, 10))} + + + + + + +
+ {i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.cronSchedulingTitle', + { + defaultMessage: 'Specific time scheduling', + } + )} +
+
+ + + {i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.cronSchedulingDescription', + { + defaultMessage: 'Define the frequency and time for scheduled crawls', + } + )} + + + + } + checked={crawlAutomatically && useConnectorSchedule} + disabled={!crawlAutomatically} + onChange={() => setUseConnectorSchedule(true)} + > + + makeRequest({ + connectorId: index.connector.id, + scheduling: { ...newScheduling }, + }) + } /> -
- - setCrawlUnit(e.target.value as CrawlUnits)} - /> - - -
- + + + + + +
+ {i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.intervalSchedulingTitle', + { + defaultMessage: 'Interval scheduling', + } + )} +
+
+ + + {i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.intervalSchedulingDescription', + { + defaultMessage: 'Define the frequency and time for scheduled crawls', + } + )} + + + + } + checked={crawlAutomatically && !useConnectorSchedule} + disabled={!crawlAutomatically} + onChange={() => setUseConnectorSchedule(false)} + > + + + + setCrawlFrequency(parseInt(e.target.value, 10))} + prepend={'Every'} + /> + + + setCrawlUnit(e.target.value as CrawlUnits)} + /> + + + +
+
+ {i18n.translate( @@ -188,21 +233,18 @@ export const AutomaticCrawlScheduler: React.FC = () => { 'The crawl schedule will perform a full crawl on every domain on this index.', } )} + + + {i18n.translate( + 'xpack.enterpriseSearch.crawler.automaticCrawlSchedule.readMoreLink', + { + defaultMessage: 'Learn more about scheduling', + } + )} + - - - - {SAVE_BUTTON_LABEL} - - - - +
+
); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.test.ts index 2327c1c394cee..ac324eac83c37 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.test.ts @@ -21,7 +21,7 @@ import { AutomaticCrawlSchedulerLogic } from './automatic_crawl_scheduler_logic' describe('AutomaticCrawlSchedulerLogic', () => { const { mount } = new LogicMounter(AutomaticCrawlSchedulerLogic); const { http } = mockHttpValues; - const { flashAPIErrors, flashSuccessToast } = mockFlashMessageHelpers; + const { flashAPIErrors } = mockFlashMessageHelpers; beforeEach(() => { jest.clearAllMocks(); @@ -35,6 +35,7 @@ describe('AutomaticCrawlSchedulerLogic', () => { crawlFrequency: 24, crawlUnit: CrawlUnits.hours, isSubmitting: false, + useConnectorSchedule: false, }); }); @@ -102,6 +103,7 @@ describe('AutomaticCrawlSchedulerLogic', () => { AutomaticCrawlSchedulerLogic.actions.setCrawlSchedule({ frequency: 3, unit: CrawlUnits.hours, + useConnectorSchedule: true, }); expect(AutomaticCrawlSchedulerLogic.values).toMatchObject({ @@ -127,22 +129,8 @@ describe('AutomaticCrawlSchedulerLogic', () => { describe('listeners', () => { describe('deleteCrawlSchedule', () => { - it('resets the states of the crawl scheduler and popover, and shows a toast, on success', async () => { - jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'clearCrawlSchedule'); - jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'onDoneSubmitting'); - http.delete.mockReturnValueOnce(Promise.resolve()); - - AutomaticCrawlSchedulerLogic.actions.deleteCrawlSchedule(); - await nextTick(); - - expect(AutomaticCrawlSchedulerLogic.actions.clearCrawlSchedule).toHaveBeenCalled(); - expect(flashSuccessToast).toHaveBeenCalledWith(expect.any(String)); - expect(AutomaticCrawlSchedulerLogic.actions.onDoneSubmitting).toHaveBeenCalled(); - }); - describe('error paths', () => { - it('resets the states of the crawl scheduler and popover on a 404 respose', async () => { - jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'clearCrawlSchedule'); + it('resets the states of the crawl scheduler on a 404 response', async () => { jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'onDoneSubmitting'); http.delete.mockReturnValueOnce( Promise.reject({ @@ -153,11 +141,10 @@ describe('AutomaticCrawlSchedulerLogic', () => { AutomaticCrawlSchedulerLogic.actions.deleteCrawlSchedule(); await nextTick(); - expect(AutomaticCrawlSchedulerLogic.actions.clearCrawlSchedule).toHaveBeenCalled(); expect(AutomaticCrawlSchedulerLogic.actions.onDoneSubmitting).toHaveBeenCalled(); }); - it('flashes an error on a non-404 respose', async () => { + it('flashes an error on a non-404 response', async () => { jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'onDoneSubmitting'); http.delete.mockReturnValueOnce( Promise.reject({ @@ -196,21 +183,7 @@ describe('AutomaticCrawlSchedulerLogic', () => { }); describe('error paths', () => { - it('resets the states of the crawl scheduler on a 404 respose', async () => { - jest.spyOn(AutomaticCrawlSchedulerLogic.actions, 'clearCrawlSchedule'); - http.get.mockReturnValueOnce( - Promise.reject({ - response: { status: 404 }, - }) - ); - - AutomaticCrawlSchedulerLogic.actions.fetchCrawlSchedule(); - await nextTick(); - - expect(AutomaticCrawlSchedulerLogic.actions.clearCrawlSchedule).toHaveBeenCalled(); - }); - - it('flashes an error on a non-404 respose', async () => { + it('flashes an error on a non-404 response', async () => { http.get.mockReturnValueOnce( Promise.reject({ response: { status: 500 }, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.ts index 51452dbbd581a..04a11c6c182e6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/automatic_crawl_scheduler/automatic_crawl_scheduler_logic.ts @@ -7,11 +7,10 @@ import { kea, MakeLogicType } from 'kea'; -import { i18n } from '@kbn/i18n'; - -import { flashAPIErrors, flashSuccessToast } from '../../../../../shared/flash_messages'; +import { flashAPIErrors } from '../../../../../shared/flash_messages'; import { HttpLogic } from '../../../../../shared/http'; -import { CrawlSchedule, CrawlUnits } from '../../../../api/crawler/types'; +import { CrawlSchedule, CrawlScheduleFromServer, CrawlUnits } from '../../../../api/crawler/types'; +import { crawlScheduleServerToClient } from '../../../../api/crawler/utils'; import { IndexNameLogic } from '../../index_name_logic'; export interface AutomaticCrawlSchedulerLogicValues { @@ -19,6 +18,7 @@ export interface AutomaticCrawlSchedulerLogicValues { crawlFrequency: CrawlSchedule['frequency']; crawlUnit: CrawlSchedule['unit']; isSubmitting: boolean; + useConnectorSchedule: CrawlSchedule['useConnectorSchedule']; } const DEFAULT_VALUES: Pick = { @@ -39,6 +39,9 @@ export interface AutomaticCrawlSchedulerLogicActions { }; setCrawlSchedule(crawlSchedule: CrawlSchedule): { crawlSchedule: CrawlSchedule }; setCrawlUnit(crawlUnit: CrawlSchedule['unit']): { crawlUnit: CrawlSchedule['unit'] }; + setUseConnectorSchedule(useConnectorSchedule: CrawlSchedule['useConnectorSchedule']): { + useConnectorSchedule: CrawlSchedule['useConnectorSchedule']; + }; submitCrawlSchedule(): void; toggleCrawlAutomatically(): void; } @@ -59,6 +62,7 @@ export const AutomaticCrawlSchedulerLogic = kea< submitCrawlSchedule: true, setCrawlFrequency: (crawlFrequency: string) => ({ crawlFrequency }), setCrawlUnit: (crawlUnit: CrawlUnits) => ({ crawlUnit }), + setUseConnectorSchedule: (useConnectorSchedule) => ({ useConnectorSchedule }), toggleCrawlAutomatically: true, }), reducers: () => ({ @@ -94,6 +98,14 @@ export const AutomaticCrawlSchedulerLogic = kea< submitCrawlSchedule: () => true, }, ], + useConnectorSchedule: [ + false, + { + setCrawlSchedule: (_, { crawlSchedule: { useConnectorSchedule = false } }) => + useConnectorSchedule, + setUseConnectorSchedule: (_, { useConnectorSchedule }) => useConnectorSchedule, + }, + ], }), listeners: ({ actions, values }) => ({ deleteCrawlSchedule: async () => { @@ -104,22 +116,10 @@ export const AutomaticCrawlSchedulerLogic = kea< await http.delete( `/internal/enterprise_search/indices/${indexName}/crawler/crawl_schedule` ); - actions.clearCrawlSchedule(); - flashSuccessToast( - i18n.translate( - 'xpack.enterpriseSearch.crawler.automaticCrawlScheduler.disableCrawlSchedule.successMessage', - { - defaultMessage: 'Automatic crawling has been disabled.', - } - ) - ); } catch (e) { // A 404 is expected and means the user has no crawl schedule to delete - if (e.response?.status === 404) { - actions.clearCrawlSchedule(); - } else { + if (e.response?.status !== 404) { flashAPIErrors(e); - // Keep the popover open } } finally { actions.onDoneSubmitting(); @@ -130,16 +130,14 @@ export const AutomaticCrawlSchedulerLogic = kea< const { indexName } = IndexNameLogic.values; try { - const crawlSchedule: CrawlSchedule = await http.get( + const crawlSchedule: CrawlScheduleFromServer = await http.get( `/internal/enterprise_search/indices/${indexName}/crawler/crawl_schedule` ); - actions.setCrawlSchedule(crawlSchedule); + actions.setCrawlSchedule(crawlScheduleServerToClient(crawlSchedule)); } catch (e) { // A 404 is expected and means the user does not have crawl schedule // for this index. We continue to use the defaults. - if (e.response?.status === 404) { - actions.clearCrawlSchedule(); - } else { + if (e.response?.status !== 404) { flashAPIErrors(e); } } @@ -151,29 +149,30 @@ export const AutomaticCrawlSchedulerLogic = kea< actions.deleteCrawlSchedule(); } }, + setCrawlUnit: actions.saveChanges, + setCrawlFrequency: actions.saveChanges, + setUseConnectorSchedule: actions.saveChanges, + toggleCrawlAutomatically: actions.saveChanges, submitCrawlSchedule: async () => { const { http } = HttpLogic.values; const { indexName } = IndexNameLogic.values; + if (!values.crawlUnit || !values.crawlFrequency) { + return; + } + try { - const crawlSchedule: CrawlSchedule = await http.put( + const crawlSchedule: CrawlScheduleFromServer = await http.put( `/internal/enterprise_search/indices/${indexName}/crawler/crawl_schedule`, { body: JSON.stringify({ unit: values.crawlUnit, frequency: values.crawlFrequency, + use_connector_schedule: values.useConnectorSchedule, }), } ); - actions.setCrawlSchedule(crawlSchedule); - flashSuccessToast( - i18n.translate( - 'xpack.enterpriseSearch.crawler.automaticCrawlScheduler.submitCrawlSchedule.successMessage', - { - defaultMessage: 'Your automatic crawling schedule has been updated.', - } - ) - ); + actions.setCrawlSchedule(crawlScheduleServerToClient(crawlSchedule)); } catch (e) { flashAPIErrors(e); } finally { diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/constants.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/constants.ts new file mode 100644 index 0000000000000..ad0c2bb45cc39 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/constants.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. + */ + +import { padStart } from 'lodash'; + +import { EuiSelectOption } from '@elastic/eui'; + +import { DayOrdinal, MonthOrdinal, getOrdinalValue, getDayName, getMonthName } from './services'; +import { Frequency, Field, FieldToValueMap } from './types'; + +type FieldFlags = { + [key in Field]?: boolean; +}; + +function makeSequence(min: number, max: number): number[] { + const values = []; + for (let i = min; i <= max; i++) { + values.push(i); + } + return values; +} + +export const MINUTE_OPTIONS = makeSequence(0, 59).map((value) => ({ + value: value.toString(), + text: padStart(value.toString(), 2, '0'), +})); + +export const HOUR_OPTIONS = makeSequence(0, 23).map((value) => ({ + value: value.toString(), + text: padStart(value.toString(), 2, '0'), +})); + +export const DAY_OPTIONS = makeSequence(1, 7).map((value) => ({ + value: value.toString(), + text: getDayName((value - 1) as DayOrdinal), +})); + +export const DATE_OPTIONS = makeSequence(1, 31).map((value) => ({ + value: value.toString(), + text: getOrdinalValue(value), +})); + +export const MONTH_OPTIONS = makeSequence(1, 12).map((value) => ({ + value: value.toString(), + text: getMonthName((value - 1) as MonthOrdinal), +})); + +export const UNITS: EuiSelectOption[] = [ + { + value: 'MINUTE', + text: 'minute', + }, + { + value: 'HOUR', + text: 'hour', + }, + { + value: 'DAY', + text: 'day', + }, + { + value: 'WEEK', + text: 'week', + }, + { + value: 'MONTH', + text: 'month', + }, + { + value: 'YEAR', + text: 'year', + }, +]; + +export const frequencyToFieldsMap: Record = { + MINUTE: {}, + HOUR: { + minute: true, + }, + DAY: { + hour: true, + minute: true, + }, + WEEK: { + day: true, + hour: true, + minute: true, + }, + MONTH: { + date: true, + hour: true, + minute: true, + }, + YEAR: { + month: true, + date: true, + hour: true, + minute: true, + }, +}; + +export const frequencyToBaselineFieldsMap: Record = { + MINUTE: { + second: '0', + minute: '*', + hour: '*', + date: '*', + month: '*', + day: '?', + }, + HOUR: { + second: '0', + minute: '0', + hour: '*', + date: '*', + month: '*', + day: '?', + }, + DAY: { + second: '0', + minute: '0', + hour: '0', + date: '*', + month: '*', + day: '?', + }, + WEEK: { + second: '0', + minute: '0', + hour: '0', + date: '?', + month: '*', + day: '7', + }, + MONTH: { + second: '0', + minute: '0', + hour: '0', + date: '1', + month: '*', + day: '?', + }, + YEAR: { + second: '0', + minute: '0', + hour: '0', + date: '1', + month: '1', + day: '?', + }, +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_daily.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_daily.tsx new file mode 100644 index 0000000000000..5fb736fa26395 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_daily.tsx @@ -0,0 +1,86 @@ +/* + * 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 React, { Fragment } from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSelect, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + disabled?: boolean; + minute?: string; + minuteOptions: EuiSelectOption[]; + hour?: string; + hourOptions: EuiSelectOption[]; + onChange: ({ minute, hour }: { minute?: string; hour?: string }) => void; +} + +export const CronDaily: React.FunctionComponent = ({ + disabled, + minute, + minuteOptions, + hour, + hourOptions, + onChange, +}) => ( + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + + + onChange({ hour: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronDaily.fieldHour.textAtLabel', + { + defaultMessage: 'At', + } + )} + data-test-subj="cronFrequencyDailyHourSelect" + /> + + + + onChange({ minute: e.target.value })} + fullWidth + prepend=":" + data-test-subj="cronFrequencyDailyMinuteSelect" + /> + + + + +); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.test.tsx new file mode 100644 index 0000000000000..5ab99c715453b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.test.tsx @@ -0,0 +1,121 @@ +/* + * 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 React from 'react'; + +import sinon from 'sinon'; + +import { findTestSubject } from '@elastic/eui/lib/test'; +import { Frequency } from '@kbn/es-ui-shared-plugin/public/components/cron_editor/types'; +import { mountWithI18nProvider } from '@kbn/test-jest-helpers'; + +import { CronEditor } from './cron_editor'; + +describe('CronEditor', () => { + ['MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'YEAR'].forEach((unit) => { + test(`is rendered with a ${unit} frequency`, () => { + const component = mountWithI18nProvider( + {}} + /> + ); + + expect(component).toMatchSnapshot(); + }); + }); + + describe('props', () => { + describe('frequencyBlockList', () => { + it('excludes the blocked frequencies from the frequency list', () => { + const component = mountWithI18nProvider( + {}} + /> + ); + + const frequencySelect = findTestSubject(component, 'cronFrequencySelect'); + expect(frequencySelect.text()).toBe('minutedaymonth'); + }); + }); + + describe('cronExpression', () => { + it('sets the values of the fields', () => { + const component = mountWithI18nProvider( + {}} + /> + ); + + const monthSelect = findTestSubject(component, 'cronFrequencyYearlyMonthSelect'); + expect(monthSelect.props().value).toBe('2'); + + const dateSelect = findTestSubject(component, 'cronFrequencyYearlyDateSelect'); + expect(dateSelect.props().value).toBe('5'); + + const hourSelect = findTestSubject(component, 'cronFrequencyYearlyHourSelect'); + expect(hourSelect.props().value).toBe('10'); + + const minuteSelect = findTestSubject(component, 'cronFrequencyYearlyMinuteSelect'); + expect(minuteSelect.props().value).toBe('20'); + }); + }); + + describe('onChange', () => { + it('is called when the frequency changes', () => { + const onChangeSpy = sinon.spy(); + const component = mountWithI18nProvider( + + ); + + const frequencySelect = findTestSubject(component, 'cronFrequencySelect'); + frequencySelect.simulate('change', { target: { value: 'MONTH' } }); + + sinon.assert.calledWith(onChangeSpy, { + cronExpression: '0 0 0 1 * ?', + fieldToPreferredValueMap: {}, + frequency: 'MONTH', + }); + }); + + it("is called when a field's value changes", () => { + const onChangeSpy = sinon.spy(); + const component = mountWithI18nProvider( + + ); + + const minuteSelect = findTestSubject(component, 'cronFrequencyYearlyMinuteSelect'); + minuteSelect.simulate('change', { target: { value: '40' } }); + + sinon.assert.calledWith(onChangeSpy, { + cronExpression: '0 40 * * * ?', + fieldToPreferredValueMap: { minute: '40' }, + frequency: 'YEAR', + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.tsx new file mode 100644 index 0000000000000..06e37aa2366f8 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_editor.tsx @@ -0,0 +1,253 @@ +/* + * 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 React, { Component, Fragment } from 'react'; + +import { EuiSelect, EuiFormRow, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { + MINUTE_OPTIONS, + HOUR_OPTIONS, + DAY_OPTIONS, + DATE_OPTIONS, + MONTH_OPTIONS, + UNITS, + frequencyToFieldsMap, + frequencyToBaselineFieldsMap, +} from './constants'; +import { CronDaily } from './cron_daily'; +import { CronHourly } from './cron_hourly'; +import { CronMonthly } from './cron_monthly'; +import { CronWeekly } from './cron_weekly'; +import { CronYearly } from './cron_yearly'; +import { cronExpressionToParts, cronPartsToExpression } from './services'; +import { Frequency, Field, FieldToValueMap } from './types'; + +const excludeBlockListedFrequencies = ( + units: EuiSelectOption[], + blockListedUnits: string[] = [] +): EuiSelectOption[] => { + if (blockListedUnits.length === 0) { + return units; + } + + return units.filter(({ value }) => !blockListedUnits.includes(value as string)); +}; + +interface Props { + frequencyBlockList?: string[]; + fieldToPreferredValueMap: FieldToValueMap; + frequency: Frequency; + cronExpression: string; + onChange: ({ + cronExpression, + fieldToPreferredValueMap, + frequency, + }: { + cronExpression: string; + fieldToPreferredValueMap: FieldToValueMap; + frequency: Frequency; + }) => void; + autoFocus?: boolean; + disabled?: boolean; +} + +type State = FieldToValueMap; + +export class CronEditor extends Component { + static getDerivedStateFromProps(props: Props) { + const { cronExpression } = props; + return cronExpressionToParts(cronExpression); + } + + constructor(props: Props) { + super(props); + + const { cronExpression } = props; + const parsedCron = cronExpressionToParts(cronExpression); + this.state = { + ...parsedCron, + }; + } + + onChangeFrequency = (frequency: Frequency) => { + const { onChange, fieldToPreferredValueMap } = this.props; + + // Update fields which aren't editable with acceptable baseline values. + const editableFields = Object.keys(frequencyToFieldsMap[frequency]) as Field[]; + const inheritedFields = editableFields.reduce( + (fieldBaselines, field) => { + if (fieldToPreferredValueMap[field] != null) { + fieldBaselines[field] = fieldToPreferredValueMap[field]; + } + return fieldBaselines; + }, + { ...frequencyToBaselineFieldsMap[frequency] } + ); + + const newCronExpression = cronPartsToExpression(inheritedFields); + + onChange({ + frequency, + cronExpression: newCronExpression, + fieldToPreferredValueMap, + }); + }; + + onChangeFields = (fields: FieldToValueMap) => { + const { onChange, frequency, fieldToPreferredValueMap } = this.props; + + const editableFields = Object.keys(frequencyToFieldsMap[frequency]) as Field[]; + const newFieldToPreferredValueMap: FieldToValueMap = {}; + + const editedFields = editableFields.reduce( + (accumFields, field) => { + if (fields[field] !== undefined) { + accumFields[field] = fields[field]; + // If the user changes a field's value, we want to maintain that value in the relevant + // field, even as the frequency field changes. For example, if the user selects "Monthly" + // frequency and changes the "Hour" field to "10", that field should still say "10" if the + // user changes the frequency to "Weekly". We'll support this UX by storing these values + // in the fieldToPreferredValueMap. + newFieldToPreferredValueMap[field] = fields[field]; + } else { + accumFields[field] = this.state[field]; + } + return accumFields; + }, + { ...frequencyToBaselineFieldsMap[frequency] } + ); + + const newCronExpression = cronPartsToExpression(editedFields); + + onChange({ + frequency, + cronExpression: newCronExpression, + fieldToPreferredValueMap: { + ...fieldToPreferredValueMap, + ...newFieldToPreferredValueMap, + }, + }); + }; + + renderForm() { + const { frequency, disabled } = this.props; + + const { minute, hour, day, date, month } = this.state; + + switch (frequency) { + case 'MINUTE': + return; + + case 'HOUR': + return ( + + ); + + case 'DAY': + return ( + + ); + + case 'WEEK': + return ( + + ); + + case 'MONTH': + return ( + + ); + + case 'YEAR': + return ( + + ); + + default: + return; + } + } + + render() { + const { disabled, frequency, frequencyBlockList } = this.props; + + return ( + + + } + fullWidth + > + ) => + this.onChangeFrequency(e.target.value as Frequency) + } + fullWidth + prepend={i18n.translate('xpack.enterpriseSearch.cronEditor.textEveryLabel', { + defaultMessage: 'Every', + })} + data-test-subj="cronFrequencySelect" + /> + + + {this.renderForm()} + + ); + } +} diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_hourly.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_hourly.tsx new file mode 100644 index 0000000000000..84ceab265e624 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_hourly.tsx @@ -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 React, { Fragment } from 'react'; + +import { EuiFormRow, EuiSelect, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + disabled?: boolean; + minute?: string; + minuteOptions: EuiSelectOption[]; + onChange: ({ minute }: { minute?: string }) => void; +} + +export const CronHourly: React.FunctionComponent = ({ + disabled, + minute, + minuteOptions, + onChange, +}) => ( + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + onChange({ minute: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronHourly.fieldMinute.textAtLabel', + { + defaultMessage: 'At', + } + )} + data-test-subj="cronFrequencyHourlyMinuteSelect" + /> + + +); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_monthly.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_monthly.tsx new file mode 100644 index 0000000000000..84867e5bbf893 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_monthly.tsx @@ -0,0 +1,113 @@ +/* + * 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 React, { Fragment } from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSelect, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + disabled?: boolean; + minute?: string; + minuteOptions: EuiSelectOption[]; + hour?: string; + hourOptions: EuiSelectOption[]; + date?: string; + dateOptions: EuiSelectOption[]; + onChange: ({ minute, hour, date }: { minute?: string; hour?: string; date?: string }) => void; +} + +export const CronMonthly: React.FunctionComponent = ({ + disabled, + minute, + minuteOptions, + hour, + hourOptions, + date, + dateOptions, + onChange, +}) => ( + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + onChange({ date: e.target.value })} + fullWidth + prepend={i18n.translate('xpack.enterpriseSearch.cronEditor.cronMonthly.textOnTheLabel', { + defaultMessage: 'On the', + })} + data-test-subj="cronFrequencyMonthlyDateSelect" + /> + + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + + + onChange({ hour: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronMonthly.fieldHour.textAtLabel', + { + defaultMessage: 'At', + } + )} + data-test-subj="cronFrequencyMonthlyHourSelect" + /> + + + + onChange({ minute: e.target.value })} + fullWidth + prepend=":" + data-test-subj="cronFrequencyMonthlyMinuteSelect" + /> + + + + +); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_weekly.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_weekly.tsx new file mode 100644 index 0000000000000..83edd0ed0aaba --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_weekly.tsx @@ -0,0 +1,113 @@ +/* + * 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 React, { Fragment } from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSelect, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + disabled?: boolean; + minute?: string; + minuteOptions: EuiSelectOption[]; + hour?: string; + hourOptions: EuiSelectOption[]; + day?: string; + dayOptions: EuiSelectOption[]; + onChange: ({ minute, hour, day }: { minute?: string; hour?: string; day?: string }) => void; +} + +export const CronWeekly: React.FunctionComponent = ({ + disabled, + minute, + minuteOptions, + hour, + hourOptions, + day, + dayOptions, + onChange, +}) => ( + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + onChange({ day: e.target.value })} + fullWidth + prepend={i18n.translate('xpack.enterpriseSearch.cronEditor.cronWeekly.textOnLabel', { + defaultMessage: 'On', + })} + data-test-subj="cronFrequencyWeeklyDaySelect" + /> + + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + + + onChange({ hour: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronWeekly.fieldHour.textAtLabel', + { + defaultMessage: 'At', + } + )} + data-test-subj="cronFrequencyWeeklyHourSelect" + /> + + + + onChange({ minute: e.target.value })} + aria-label={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronWeekly.minuteSelectLabel', + { + defaultMessage: 'Minute', + } + )} + fullWidth + prepend=":" + data-test-subj="cronFrequencyWeeklyMinuteSelect" + /> + + + + +); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_yearly.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_yearly.tsx new file mode 100644 index 0000000000000..158ab6dcac79d --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/cron_yearly.tsx @@ -0,0 +1,156 @@ +/* + * 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 React, { Fragment } from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiSelect, EuiSelectOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +interface Props { + disabled?: boolean; + minute?: string; + minuteOptions: EuiSelectOption[]; + hour?: string; + hourOptions: EuiSelectOption[]; + date?: string; + dateOptions: EuiSelectOption[]; + month?: string; + monthOptions: EuiSelectOption[]; + onChange: ({ + minute, + hour, + date, + month, + }: { + minute?: string; + hour?: string; + date?: string; + month?: string; + }) => void; +} + +export const CronYearly: React.FunctionComponent = ({ + disabled, + minute, + minuteOptions, + hour, + hourOptions, + date, + dateOptions, + month, + monthOptions, + onChange, +}) => ( + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + onChange({ month: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonth.textInLabel', + { + defaultMessage: 'In', + } + )} + data-test-subj="cronFrequencyYearlyMonthSelect" + /> + + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + onChange({ date: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronYearly.fieldDate.textOnTheLabel', + { + defaultMessage: 'On the', + } + )} + data-test-subj="cronFrequencyYearlyDateSelect" + /> + + + + } + fullWidth + data-test-subj="cronFrequencyConfiguration" + > + + + onChange({ hour: e.target.value })} + fullWidth + prepend={i18n.translate( + 'xpack.enterpriseSearch.cronEditor.cronYearly.fieldHour.textAtLabel', + { + defaultMessage: 'At', + } + )} + data-test-subj="cronFrequencyYearlyHourSelect" + /> + + + + onChange({ minute: e.target.value })} + fullWidth + prepend=":" + data-test-subj="cronFrequencyYearlyMinuteSelect" + /> + + + + +); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/enterprise_search_cron_editor.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/enterprise_search_cron_editor.tsx new file mode 100644 index 0000000000000..f0e2d371dc081 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/enterprise_search_cron_editor.tsx @@ -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 React, { useState } from 'react'; + +import { Frequency } from '@kbn/es-ui-shared-plugin/public/components/cron_editor/types'; + +import { Connector } from '../../../../common/types/connectors'; + +import { CronEditor } from './cron_editor'; + +interface Props { + disabled?: boolean; + onChange(scheduling: Connector['scheduling']): void; + scheduling: Connector['scheduling']; +} + +export const EnterpriseSearchCronEditor: React.FC = ({ disabled, onChange, scheduling }) => { + const [fieldToPreferredValueMap, setFieldToPreferredValueMap] = useState({}); + const [simpleCron, setSimpleCron] = useState<{ + expression: string; + frequency: Frequency; + }>({ + expression: scheduling?.interval ?? '', + frequency: scheduling?.interval ? cronToFrequency(scheduling.interval) : 'HOUR', + }); + + return ( + { + setSimpleCron({ + expression, + frequency, + }); + setFieldToPreferredValueMap(newFieldToPreferredValueMap); + onChange({ ...scheduling, interval: expression }); + }} + frequencyBlockList={['MINUTE']} + /> + ); +}; + +function cronToFrequency(cron: string): Frequency { + const fields = cron.split(' '); + if (fields.length < 4) { + return 'YEAR'; + } + if (fields[1] === '*') { + return 'MINUTE'; + } + if (fields[2] === '*') { + return 'HOUR'; + } + if (fields[3] === '*') { + return 'DAY'; + } + if (fields[4] === '?') { + return 'WEEK'; + } + if (fields[4] === '*') { + return 'MONTH'; + } + return 'YEAR'; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/index.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/index.ts new file mode 100644 index 0000000000000..981521acf886b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/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 { CronEditor } from './cron_editor'; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/readme.md b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/readme.md new file mode 100644 index 0000000000000..1b2f8e39e9e58 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/readme.md @@ -0,0 +1,5 @@ +`CronEditor` found `./cron_editor.tsx` is based on the `Cron Editor` component from `src/plugins/es_ui_shared/public/components/cron_editor` + +Includes a `disabled` prop that can be passed down to the child form components. + +TODO: PR this prop back to the original ES UI component diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/cron.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/cron.ts new file mode 100644 index 0000000000000..542502fbcbe76 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/cron.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 { FieldToValueMap } from '../types'; + +export function cronExpressionToParts(expression: string): FieldToValueMap { + const parsedCron: FieldToValueMap = { + second: undefined, + minute: undefined, + hour: undefined, + day: undefined, + date: undefined, + month: undefined, + }; + + const parts = expression.split(' '); + + if (parts.length >= 1) { + parsedCron.second = parts[0]; + } + + if (parts.length >= 2) { + parsedCron.minute = parts[1]; + } + + if (parts.length >= 3) { + parsedCron.hour = parts[2]; + } + + if (parts.length >= 4) { + parsedCron.date = parts[3]; + } + + if (parts.length >= 5) { + parsedCron.month = parts[4]; + } + + if (parts.length >= 6) { + parsedCron.day = parts[5]; + } + + return parsedCron; +} + +export function cronPartsToExpression({ + second, + minute, + hour, + day, + date, + month, +}: FieldToValueMap): string { + return `${second} ${minute} ${hour} ${date} ${month} ${day}`; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/humanized_numbers.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/humanized_numbers.ts new file mode 100644 index 0000000000000..e169a76ec8b41 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/humanized_numbers.ts @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export type DayOrdinal = 0 | 1 | 2 | 3 | 4 | 5 | 6; +export type MonthOrdinal = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; + +// The international ISO standard dictates Monday as the first day of the week, but cron patterns +// use Sunday as the first day, so we're going with the cron way. +const dayOrdinalToDayNameMap = { + 0: i18n.translate('xpack.enterpriseSearch.cronEditor.day.sunday', { defaultMessage: 'Sunday' }), + 1: i18n.translate('xpack.enterpriseSearch.cronEditor.day.monday', { defaultMessage: 'Monday' }), + 2: i18n.translate('xpack.enterpriseSearch.cronEditor.day.tuesday', { defaultMessage: 'Tuesday' }), + 3: i18n.translate('xpack.enterpriseSearch.cronEditor.day.wednesday', { + defaultMessage: 'Wednesday', + }), + 4: i18n.translate('xpack.enterpriseSearch.cronEditor.day.thursday', { + defaultMessage: 'Thursday', + }), + 5: i18n.translate('xpack.enterpriseSearch.cronEditor.day.friday', { defaultMessage: 'Friday' }), + 6: i18n.translate('xpack.enterpriseSearch.cronEditor.day.saturday', { + defaultMessage: 'Saturday', + }), +}; + +const monthOrdinalToMonthNameMap = { + 0: i18n.translate('xpack.enterpriseSearch.cronEditor.month.january', { + defaultMessage: 'January', + }), + 1: i18n.translate('xpack.enterpriseSearch.cronEditor.month.february', { + defaultMessage: 'February', + }), + 2: i18n.translate('xpack.enterpriseSearch.cronEditor.month.march', { defaultMessage: 'March' }), + 3: i18n.translate('xpack.enterpriseSearch.cronEditor.month.april', { defaultMessage: 'April' }), + 4: i18n.translate('xpack.enterpriseSearch.cronEditor.month.may', { defaultMessage: 'May' }), + 5: i18n.translate('xpack.enterpriseSearch.cronEditor.month.june', { defaultMessage: 'June' }), + 6: i18n.translate('xpack.enterpriseSearch.cronEditor.month.july', { defaultMessage: 'July' }), + 7: i18n.translate('xpack.enterpriseSearch.cronEditor.month.august', { defaultMessage: 'August' }), + 8: i18n.translate('xpack.enterpriseSearch.cronEditor.month.september', { + defaultMessage: 'September', + }), + 9: i18n.translate('xpack.enterpriseSearch.cronEditor.month.october', { + defaultMessage: 'October', + }), + 10: i18n.translate('xpack.enterpriseSearch.cronEditor.month.november', { + defaultMessage: 'November', + }), + 11: i18n.translate('xpack.enterpriseSearch.cronEditor.month.december', { + defaultMessage: 'December', + }), +}; + +export function getOrdinalValue(number: number): string { + // TODO: This is breaking reporting pdf generation. Possibly due to phantom not setting locale, + // which is needed by i18n (formatjs). Need to verify, fix, and restore i18n in place of static stings. + // return i18n.translate('xpack.enterpriseSearch.cronEditor.number.ordinal', { + // defaultMessage: '{number, selectordinal, one{#st} two{#nd} few{#rd} other{#th}}', + // values: { number }, + // }); + // TODO: https://github.com/elastic/kibana/issues/27136 + + // Protects against falsey (including 0) values + const num = number && number.toString(); + const lastDigitString = num && num.substr(-1); + let ordinal; + + if (!lastDigitString) { + return number.toString(); + } + + const lastDigitNumeric = parseFloat(lastDigitString); + + switch (lastDigitNumeric) { + case 1: + ordinal = 'st'; + break; + case 2: + ordinal = 'nd'; + break; + case 3: + ordinal = 'rd'; + break; + default: + ordinal = 'th'; + } + + return `${num}${ordinal}`; +} + +export function getDayName(dayOrdinal: DayOrdinal): string { + return dayOrdinalToDayNameMap[dayOrdinal]; +} + +export function getMonthName(monthOrdinal: MonthOrdinal): string { + return monthOrdinalToMonthNameMap[monthOrdinal]; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/index.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/index.ts new file mode 100644 index 0000000000000..d8fcdd3382274 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/services/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 { cronExpressionToParts, cronPartsToExpression } from './cron'; +export type { DayOrdinal, MonthOrdinal } from './humanized_numbers'; +export { getOrdinalValue, getDayName, getMonthName } from './humanized_numbers'; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/types.ts b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/types.ts new file mode 100644 index 0000000000000..a7b2d7b5b63e7 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/cron_editor/types.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 type Frequency = 'MINUTE' | 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR'; +export type Field = 'second' | 'minute' | 'hour' | 'day' | 'date' | 'month'; +export type FieldToValueMap = { + [key in Field]?: string; +}; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts index 3947e569349c8..89c01bdd8fd7f 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.test.ts @@ -594,7 +594,7 @@ describe('crawler routes', () => { it('validates correctly', () => { const request = { - body: { frequency: 7, unit: 'day' }, + body: { frequency: 7, unit: 'day', use_connector_schedule: true }, params: { indexName: 'index-name' }, }; mockRouter.shouldValidate(request); @@ -602,7 +602,7 @@ describe('crawler routes', () => { it('fails validation without a name param', () => { const request = { - body: { frequency: 7, unit: 'day' }, + body: { frequency: 7, unit: 'day', use_connector_schedule: true }, params: {}, }; mockRouter.shouldThrow(request); @@ -610,7 +610,7 @@ describe('crawler routes', () => { it('fails validation without a unit property in body', () => { const request = { - body: { frequency: 7 }, + body: { frequency: 7, use_connector_schedule: true }, params: { indexName: 'index-name' }, }; mockRouter.shouldThrow(request); @@ -618,7 +618,15 @@ describe('crawler routes', () => { it('fails validation without a frequency property in body', () => { const request = { - body: { unit: 'day' }, + body: { unit: 'day', use_connector_schedule: true }, + params: { indexName: 'index-name' }, + }; + mockRouter.shouldThrow(request); + }); + + it('fails validation without a use_connector_schedule property in body', () => { + const request = { + body: { frequency: 7, unit: 'day' }, params: { indexName: 'index-name' }, }; mockRouter.shouldThrow(request); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts index 0af97578b56a4..c3b034f0b6ce7 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler.ts @@ -363,6 +363,7 @@ export function registerCrawlerRoutes(routeDependencies: RouteDependencies) { body: schema.object({ frequency: schema.number(), unit: schema.string(), + use_connector_schedule: schema.boolean(), }), params: schema.object({ indexName: schema.string(), diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index eb40a7ab003c0..2a006ccb2cc8b 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10348,13 +10348,59 @@ "xpack.enterpriseSearch.content.shared.result.header.metadata.icon.ariaLabel": "Métadonnées pour le document : {id}", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "Voulez-vous vraiment supprimer le domaine \"{domainUrl}\" et tous ses paramètres ?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "Le point d'entrée du robot d'indexation a été défini sur {entryPointValue}", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.formDescription": "Configurer l'indexation automatisée. {readMoreMessage}.", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlCountOnDomains": "{crawlType} indexation sur {domainCount, plural, one {# domaine} other {# domaines}}", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.includeSitemapsCheckboxLabel": "Inclure les plans de site découverts dans {robotsDotTxt}", "xpack.enterpriseSearch.crawler.crawlRulesTable.description": "Créez une règle d'indexation pour inclure ou exclure les pages dont l'URL correspond à la règle. Les règles sont exécutées dans l'ordre séquentiel, et chaque URL est évaluée en fonction de la première correspondance. {link}", "xpack.enterpriseSearch.crawler.deduplicationPanel.description": "Le robot d'indexation n'indexe que les pages uniques. Choisissez les champs que le robot d'indexation doit utiliser lorsqu'il recherche les pages en double. Désélectionnez tous les champs de schéma pour autoriser les documents en double dans ce domaine. {documentationLink}.", "xpack.enterpriseSearch.crawler.deleteDomainModal.description": "Supprimer le domaine {domainUrl} de votre robot d'indexation. Cela supprimera également tous les points d'entrée et toutes les règles d'indexation que vous avez configurés. Tous les documents associés à ce domaine seront supprimés lors de la prochaine indexation. {thisCannotBeUndoneMessage}", "xpack.enterpriseSearch.crawler.entryPointsTable.emptyMessageDescription": "{link} pour spécifier un point d'entrée pour le robot d'indexation", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldHour.textAtLabel": "À", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldTimeLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronDaily.hourSelectLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronDaily.minuteSelectLabel": "Minute", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldMinute.textAtLabel": "À", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldTimeLabel": "Minute", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldDateLabel": "Date", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldHour.textAtLabel": "À", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldTimeLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronMonthly.hourSelectLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronMonthly.minuteSelectLabel": "Minute", + "xpack.enterpriseSearch.cronEditor.cronMonthly.textOnTheLabel": "Le", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldDateLabel": "Jour", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldHour.textAtLabel": "À", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldTimeLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronWeekly.hourSelectLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronWeekly.minuteSelectLabel": "Minute", + "xpack.enterpriseSearch.cronEditor.cronWeekly.textOnLabel": "Le", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDate.textOnTheLabel": "Le", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDateLabel": "Date", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldHour.textAtLabel": "À", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonth.textInLabel": "En", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonthLabel": "Mois", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldTimeLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronYearly.hourSelectLabel": "Heure", + "xpack.enterpriseSearch.cronEditor.cronYearly.minuteSelectLabel": "Minute", + "xpack.enterpriseSearch.cronEditor.day.friday": "vendredi", + "xpack.enterpriseSearch.cronEditor.day.monday": "lundi", + "xpack.enterpriseSearch.cronEditor.day.saturday": "samedi", + "xpack.enterpriseSearch.cronEditor.day.sunday": "dimanche", + "xpack.enterpriseSearch.cronEditor.day.thursday": "jeudi", + "xpack.enterpriseSearch.cronEditor.day.tuesday": "mardi", + "xpack.enterpriseSearch.cronEditor.day.wednesday": "mercredi", + "xpack.enterpriseSearch.cronEditor.fieldFrequencyLabel": "Fréquence", + "xpack.enterpriseSearch.cronEditor.month.april": "avril", + "xpack.enterpriseSearch.cronEditor.month.august": "août", + "xpack.enterpriseSearch.cronEditor.month.december": "décembre", + "xpack.enterpriseSearch.cronEditor.month.february": "février", + "xpack.enterpriseSearch.cronEditor.month.january": "janvier", + "xpack.enterpriseSearch.cronEditor.month.july": "juillet", + "xpack.enterpriseSearch.cronEditor.month.june": "juin", + "xpack.enterpriseSearch.cronEditor.month.march": "mars", + "xpack.enterpriseSearch.cronEditor.month.may": "mai", + "xpack.enterpriseSearch.cronEditor.month.november": "novembre", + "xpack.enterpriseSearch.cronEditor.month.october": "octobre", + "xpack.enterpriseSearch.cronEditor.month.september": "septembre", + "xpack.enterpriseSearch.cronEditor.textEveryLabel": "Chaque", "xpack.enterpriseSearch.errorConnectingState.cloudErrorMessage": "Les nœuds Enterprise Search fonctionnent-ils dans votre déploiement cloud ? {deploymentSettingsLink}", "xpack.enterpriseSearch.errorConnectingState.description1": "Impossible d'établir une connexion à Enterprise Search avec l'URL hôte {enterpriseSearchUrl} en raison de l'erreur suivante :", "xpack.enterpriseSearch.errorConnectingState.description2": "Vérifiez que l'URL hôte est correctement configurée dans {configFile}.", @@ -11490,13 +11536,10 @@ "xpack.enterpriseSearch.crawler.addDomainForm.urlLabel": "URL de domaine", "xpack.enterpriseSearch.crawler.addDomainForm.validateButtonLabel": "Valider le domaine", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlAutomaticallySwitchLabel": "Indexer automatiquement", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlUnitsPrefix": "Chaque", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.readMoreLink": "En lire plus.", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleDescription": "Le calendrier d’indexation effectuera une indexation complète de chaque domaine de cet index.", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleFrequencyLabel": "Planifier la fréquence", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleUnitsLabel": "Planifier des unités de temps", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.disableCrawlSchedule.successMessage": "L'indexation automatique a été désactivée.", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.submitCrawlSchedule.successMessage": "Votre planification d'indexation automatique a été mise à jour.", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlDepthLabel": "Profondeur maximale de l'indexation", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlTypeLabel": "Type d'indexation", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.customEntryPointUrlsTextboxLabel": "URL de points d'entrée personnalisés", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ea41ab1f3e6e7..a105bd0aa0d8f 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10334,13 +10334,59 @@ "xpack.enterpriseSearch.content.shared.result.header.metadata.icon.ariaLabel": "ドキュメント{id}のメタデータ", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "ドメイン\"{domainUrl}\"とすべての設定を削除しますか?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "Webクローラーエントリポイントが{entryPointValue}として設定されました", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.formDescription": "自動クロールを設定します。{readMoreMessage}。", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlCountOnDomains": "{domainCount, plural, other {# 件のドメイン}}で{crawlType}クロール", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.includeSitemapsCheckboxLabel": "{robotsDotTxt}で検出されたサイトマップを含める", "xpack.enterpriseSearch.crawler.crawlRulesTable.description": "URLがルールと一致するページを含めるか除外するためのクロールルールを作成します。ルールは連続で実行されます。各URLは最初の一致に従って評価されます。{link}", "xpack.enterpriseSearch.crawler.deduplicationPanel.description": "Webクローラーは一意のページにのみインデックスします。重複するページを検討するときにクローラーが使用するフィールドを選択します。すべてのスキーマフィールドを選択解除して、このドメインで重複するドキュメントを許可します。{documentationLink}。", "xpack.enterpriseSearch.crawler.deleteDomainModal.description": "ドメイン{domainUrl}をクローラーから削除します。これにより、設定したすべてのエントリポイントとクロールルールも削除されます。このドメインに関連するすべてのドキュメントは、次回のクロールで削除されます。{thisCannotBeUndoneMessage}", "xpack.enterpriseSearch.crawler.entryPointsTable.emptyMessageDescription": "クローラーのエントリポイントを指定するには、{link}してください", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldHour.textAtLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldTimeLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronDaily.hourSelectLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronDaily.minuteSelectLabel": "分", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldMinute.textAtLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldTimeLabel": "分", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldDateLabel": "日付", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldHour.textAtLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldTimeLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronMonthly.hourSelectLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronMonthly.minuteSelectLabel": "分", + "xpack.enterpriseSearch.cronEditor.cronMonthly.textOnTheLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldDateLabel": "日", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldHour.textAtLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldTimeLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronWeekly.hourSelectLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronWeekly.minuteSelectLabel": "分", + "xpack.enterpriseSearch.cronEditor.cronWeekly.textOnLabel": "オン", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDate.textOnTheLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDateLabel": "日付", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldHour.textAtLabel": "に", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonth.textInLabel": "入", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonthLabel": "月", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldTimeLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronYearly.hourSelectLabel": "時間", + "xpack.enterpriseSearch.cronEditor.cronYearly.minuteSelectLabel": "分", + "xpack.enterpriseSearch.cronEditor.day.friday": "金曜日", + "xpack.enterpriseSearch.cronEditor.day.monday": "月曜日", + "xpack.enterpriseSearch.cronEditor.day.saturday": "土曜日", + "xpack.enterpriseSearch.cronEditor.day.sunday": "日曜日", + "xpack.enterpriseSearch.cronEditor.day.thursday": "木曜日", + "xpack.enterpriseSearch.cronEditor.day.tuesday": "火曜日", + "xpack.enterpriseSearch.cronEditor.day.wednesday": "水曜日", + "xpack.enterpriseSearch.cronEditor.fieldFrequencyLabel": "頻度", + "xpack.enterpriseSearch.cronEditor.month.april": "4 月", + "xpack.enterpriseSearch.cronEditor.month.august": "8 月", + "xpack.enterpriseSearch.cronEditor.month.december": "12 月", + "xpack.enterpriseSearch.cronEditor.month.february": "2 月", + "xpack.enterpriseSearch.cronEditor.month.january": "1 月", + "xpack.enterpriseSearch.cronEditor.month.july": "7 月", + "xpack.enterpriseSearch.cronEditor.month.june": "6 月", + "xpack.enterpriseSearch.cronEditor.month.march": "3 月", + "xpack.enterpriseSearch.cronEditor.month.may": "5月", + "xpack.enterpriseSearch.cronEditor.month.november": "11 月", + "xpack.enterpriseSearch.cronEditor.month.october": "10 月", + "xpack.enterpriseSearch.cronEditor.month.september": "9 月", + "xpack.enterpriseSearch.cronEditor.textEveryLabel": "毎", "xpack.enterpriseSearch.errorConnectingState.cloudErrorMessage": "クラウドデプロイのエンタープライズ サーチノードが実行中ですか?{deploymentSettingsLink}", "xpack.enterpriseSearch.errorConnectingState.description1": "次のエラーのため、ホストURL {enterpriseSearchUrl}では、エンタープライズ サーチへの接続を確立できません。", "xpack.enterpriseSearch.errorConnectingState.description2": "ホストURLが{configFile}で正しく構成されていることを確認してください。", @@ -11476,13 +11522,10 @@ "xpack.enterpriseSearch.crawler.addDomainForm.urlLabel": "ドメインURL", "xpack.enterpriseSearch.crawler.addDomainForm.validateButtonLabel": "ドメインを検証", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlAutomaticallySwitchLabel": "自動的にクロール", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlUnitsPrefix": "毎", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.readMoreLink": "詳細をお読みください。", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleDescription": "クローリングスケジュールは、このインデックスのすべてのドメインに対してフルクローリングを実行します。", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleFrequencyLabel": "スケジュール頻度", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleUnitsLabel": "スケジュール時間単位", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.disableCrawlSchedule.successMessage": "自動クローリングが無効にされました。", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.submitCrawlSchedule.successMessage": "自動クローリングスケジュールが更新されました。", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlDepthLabel": "最大クロール深度", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlTypeLabel": "クロールタイプ", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.customEntryPointUrlsTextboxLabel": "カスタム入力ポイントURL", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 72ec3c7ea73fc..de988524c860b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10353,13 +10353,59 @@ "xpack.enterpriseSearch.content.shared.result.header.metadata.icon.ariaLabel": "以下文档的元数据:{id}", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "确定要移除域“{domainUrl}”和其所有设置?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "网络爬虫入口点已设置为 {entryPointValue}", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.formDescription": "设置自动爬网。{readMoreMessage}。", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlCountOnDomains": "在 {domainCount, plural, other {# 个域}}上进行 {crawlType} 爬网", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.includeSitemapsCheckboxLabel": "包括在 {robotsDotTxt} 中发现的站点地图", "xpack.enterpriseSearch.crawler.crawlRulesTable.description": "创建爬网规则以包括或排除 URL 匹配规则的页面。规则按顺序运行,每个 URL 根据第一个匹配进行评估。{link}", "xpack.enterpriseSearch.crawler.deduplicationPanel.description": "网络爬虫仅索引唯一的页面。选择网络爬虫在考虑哪些网页重复时应使用的字段。取消选择所有架构字段以在此域上允许重复的文档。{documentationLink}。", "xpack.enterpriseSearch.crawler.deleteDomainModal.description": "从网络爬虫中移除域 {domainUrl}。这还会删除您已设置的所有入口点和爬网规则。将在下次爬网时移除与此域相关的任何文档。{thisCannotBeUndoneMessage}", "xpack.enterpriseSearch.crawler.entryPointsTable.emptyMessageDescription": "{link}以指定网络爬虫的入口点", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldHour.textAtLabel": "于", + "xpack.enterpriseSearch.cronEditor.cronDaily.fieldTimeLabel": "时间", + "xpack.enterpriseSearch.cronEditor.cronDaily.hourSelectLabel": "小时", + "xpack.enterpriseSearch.cronEditor.cronDaily.minuteSelectLabel": "分钟", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldMinute.textAtLabel": "@ 符号", + "xpack.enterpriseSearch.cronEditor.cronHourly.fieldTimeLabel": "分钟", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldDateLabel": "日期", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldHour.textAtLabel": "@ 符号", + "xpack.enterpriseSearch.cronEditor.cronMonthly.fieldTimeLabel": "时间", + "xpack.enterpriseSearch.cronEditor.cronMonthly.hourSelectLabel": "小时", + "xpack.enterpriseSearch.cronEditor.cronMonthly.minuteSelectLabel": "分钟", + "xpack.enterpriseSearch.cronEditor.cronMonthly.textOnTheLabel": "在", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldDateLabel": "天", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldHour.textAtLabel": "@ 符号", + "xpack.enterpriseSearch.cronEditor.cronWeekly.fieldTimeLabel": "时间", + "xpack.enterpriseSearch.cronEditor.cronWeekly.hourSelectLabel": "小时", + "xpack.enterpriseSearch.cronEditor.cronWeekly.minuteSelectLabel": "分钟", + "xpack.enterpriseSearch.cronEditor.cronWeekly.textOnLabel": "开启", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDate.textOnTheLabel": "在", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldDateLabel": "日期", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldHour.textAtLabel": "@ 符号", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonth.textInLabel": "传入", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldMonthLabel": "月", + "xpack.enterpriseSearch.cronEditor.cronYearly.fieldTimeLabel": "时间", + "xpack.enterpriseSearch.cronEditor.cronYearly.hourSelectLabel": "小时", + "xpack.enterpriseSearch.cronEditor.cronYearly.minuteSelectLabel": "分钟", + "xpack.enterpriseSearch.cronEditor.day.friday": "星期五", + "xpack.enterpriseSearch.cronEditor.day.monday": "星期一", + "xpack.enterpriseSearch.cronEditor.day.saturday": "星期六", + "xpack.enterpriseSearch.cronEditor.day.sunday": "星期日", + "xpack.enterpriseSearch.cronEditor.day.thursday": "星期四", + "xpack.enterpriseSearch.cronEditor.day.tuesday": "星期二", + "xpack.enterpriseSearch.cronEditor.day.wednesday": "星期三", + "xpack.enterpriseSearch.cronEditor.fieldFrequencyLabel": "频率", + "xpack.enterpriseSearch.cronEditor.month.april": "四月", + "xpack.enterpriseSearch.cronEditor.month.august": "八月", + "xpack.enterpriseSearch.cronEditor.month.december": "十二月", + "xpack.enterpriseSearch.cronEditor.month.february": "二月", + "xpack.enterpriseSearch.cronEditor.month.january": "一月", + "xpack.enterpriseSearch.cronEditor.month.july": "七月", + "xpack.enterpriseSearch.cronEditor.month.june": "六月", + "xpack.enterpriseSearch.cronEditor.month.march": "三月", + "xpack.enterpriseSearch.cronEditor.month.may": "五月", + "xpack.enterpriseSearch.cronEditor.month.november": "十一月", + "xpack.enterpriseSearch.cronEditor.month.october": "十月", + "xpack.enterpriseSearch.cronEditor.month.september": "九月", + "xpack.enterpriseSearch.cronEditor.textEveryLabel": "每", "xpack.enterpriseSearch.errorConnectingState.cloudErrorMessage": "您的云部署是否正在运行 Enterprise Search 节点?{deploymentSettingsLink}", "xpack.enterpriseSearch.errorConnectingState.description1": "由于以下错误,我们无法与主机 URL {enterpriseSearchUrl} 的 Enterprise Search 建立连接:", "xpack.enterpriseSearch.errorConnectingState.description2": "确保在 {configFile} 中已正确配置主机 URL。", @@ -11495,13 +11541,10 @@ "xpack.enterpriseSearch.crawler.addDomainForm.urlLabel": "域 URL", "xpack.enterpriseSearch.crawler.addDomainForm.validateButtonLabel": "验证域", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlAutomaticallySwitchLabel": "自动爬网", - "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.crawlUnitsPrefix": "每", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.readMoreLink": "阅读更多内容。", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleDescription": "爬网计划将对此索引上的每个域执行全面爬网。", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleFrequencyLabel": "计划频率", "xpack.enterpriseSearch.crawler.automaticCrawlSchedule.scheduleUnitsLabel": "计划时间单位", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.disableCrawlSchedule.successMessage": "自动爬网已禁用。", - "xpack.enterpriseSearch.crawler.automaticCrawlScheduler.submitCrawlSchedule.successMessage": "您的自动爬网计划已更新。", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlDepthLabel": "最大爬网深度", "xpack.enterpriseSearch.crawler.components.crawlDetailsSummary.crawlTypeLabel": "爬网类型", "xpack.enterpriseSearch.crawler.crawlCustomSettingsFlyout.customEntryPointUrlsTextboxLabel": "定制入口点 URL", From 44d46f5b20bc1f2bf410ba1c328bd1f01152a81a Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Wed, 16 Nov 2022 09:04:21 -0800 Subject: [PATCH 12/14] [Cloud Posture]Findings table now fetches 500 findings and paginates them all at once (#144771) ## Summary Updated the pagination method for all 3 Findings table Previously whenever users go through the page the table always fetches findings furthermore every 1 minute the table also automatically re fetches findings. With this change the table will only fetch findings when users put a query or sort the table ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Karl Godard Co-authored-by: Karl Godard Co-authored-by: Or Ouziel --- .../common/constants.ts | 9 -- .../public/common/constants.ts | 6 + .../public/common/hooks/use_page_size.ts | 26 ++++ .../public/common/hooks/use_page_slice.ts | 21 +++ .../public/pages/benchmarks/benchmarks.tsx | 11 +- .../es_pit/findings_es_pit_context.ts | 20 --- .../findings/es_pit/use_findings_es_pit.ts | 44 ------ .../public/pages/findings/findings.test.tsx | 10 -- .../public/pages/findings/findings.tsx | 81 ++++------ .../latest_findings_container.test.tsx | 19 +-- .../latest_findings_container.tsx | 41 +++-- .../latest_findings/use_latest_findings.ts | 39 +---- .../findings_by_resource_container.tsx | 27 ++-- .../resource_findings_container.tsx | 28 ++-- .../use_resource_findings.ts | 32 +--- .../use_findings_by_resource.ts | 34 +--- .../public/pages/rules/rules_container.tsx | 6 +- .../server/routes/es_pit/es_pit.test.ts | 147 ------------------ .../server/routes/es_pit/es_pit.ts | 53 ------- .../server/routes/setup_routes.ts | 2 - 20 files changed, 156 insertions(+), 500 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_size.ts create mode 100644 x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_slice.ts delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/findings_es_pit_context.ts delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/use_findings_es_pit.ts delete mode 100644 x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.test.ts delete mode 100644 x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.ts diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 052f3cb743d37..a78266a51f279 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -8,7 +8,6 @@ export const STATUS_ROUTE_PATH = '/internal/cloud_security_posture/status'; export const STATS_ROUTE_PATH = '/internal/cloud_security_posture/stats'; export const BENCHMARKS_ROUTE_PATH = '/internal/cloud_security_posture/benchmarks'; -export const ES_PIT_ROUTE_PATH = '/internal/cloud_security_posture/es_pit'; export const CLOUD_SECURITY_POSTURE_PACKAGE_NAME = 'cloud_security_posture'; @@ -47,11 +46,3 @@ export const CSP_RULE_TEMPLATE_SAVED_OBJECT_TYPE = 'csp-rule-template'; export const CLOUDBEAT_VANILLA = 'cloudbeat/cis_k8s'; // Integration input export const CLOUDBEAT_EKS = 'cloudbeat/cis_eks'; // Integration input - -export const LOCAL_STORAGE_PAGE_SIZE_LATEST_FINDINGS_KEY = 'cloudPosture:latestFindings:pageSize'; -export const LOCAL_STORAGE_PAGE_SIZE_RESOURCE_FINDINGS_KEY = - 'cloudPosture:resourceFindings:pageSize'; -export const LOCAL_STORAGE_PAGE_SIZE_FINDINGS_BY_RESOURCE_KEY = - 'cloudPosture:findingsByResource:pageSize'; -export const LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY = 'cloudPosture:benchmark:pageSize'; -export const LOCAL_STORAGE_PAGE_SIZE_RULES_KEY = 'cloudPosture:rules:pageSize'; diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index 6356f00b5ec9f..15f1e890cd672 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -15,6 +15,12 @@ export const statusColors = { }; export const CSP_MOMENT_FORMAT = 'MMMM D, YYYY @ HH:mm:ss.SSS'; +export const MAX_FINDINGS_TO_LOAD = 500; +export const DEFAULT_VISIBLE_ROWS_PER_PAGE = 25; + +export const LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY = 'cloudPosture:findings:pageSize'; +export const LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY = 'cloudPosture:benchmark:pageSize'; +export const LOCAL_STORAGE_PAGE_SIZE_RULES_KEY = 'cloudPosture:rules:pageSize'; export type CloudPostureIntegrations = typeof cloudPostureIntegrations; diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_size.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_size.ts new file mode 100644 index 0000000000000..314dfbe661d93 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_size.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 useLocalStorage from 'react-use/lib/useLocalStorage'; +import { DEFAULT_VISIBLE_ROWS_PER_PAGE } from '../constants'; + +/** + * @description handles persisting the users table row size selection + */ +export const usePageSize = (localStorageKey: string) => { + const [persistedPageSize, setPersistedPageSize] = useLocalStorage( + localStorageKey, + DEFAULT_VISIBLE_ROWS_PER_PAGE + ); + + let pageSize: number = DEFAULT_VISIBLE_ROWS_PER_PAGE; + + if (persistedPageSize) { + pageSize = persistedPageSize; + } + + return { pageSize, setPageSize: setPersistedPageSize }; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_slice.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_slice.ts new file mode 100644 index 0000000000000..e089724b25909 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_page_slice.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 { useMemo } from 'react'; + +/** + * @description given an array index and page size, returns a slice of said array. + */ +export const usePageSlice = (data: any[] | undefined, pageIndex: number, pageSize: number) => { + return useMemo(() => { + if (!data) { + return []; + } + + const cursor = pageIndex * pageSize; + return data.slice(cursor, cursor + pageSize); + }, [data, pageIndex, pageSize]); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx index ce615733e4b98..29bc94dd739ec 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx @@ -6,7 +6,6 @@ */ import React, { useState } from 'react'; -import useLocalStorage from 'react-use/lib/useLocalStorage'; import { EuiFieldSearch, EuiFieldSearchProps, @@ -31,7 +30,8 @@ import { } from './use_csp_benchmark_integrations'; import { extractErrorMessage } from '../../../common/utils/helpers'; import * as TEST_SUBJ from './test_subjects'; -import { LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY } from '../../../common/constants'; +import { LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY } from '../../common/constants'; +import { usePageSize } from '../../common/hooks/use_page_size'; const SEARCH_DEBOUNCE_MS = 300; @@ -128,14 +128,11 @@ const BenchmarkSearchField = ({ }; export const Benchmarks = () => { - const [pageSize, setPageSize] = useLocalStorage( - LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY, - 10 - ); + const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_BENCHMARK_KEY); const [query, setQuery] = useState({ name: '', page: 1, - perPage: pageSize || 10, + perPage: pageSize, sortField: 'package_policy.name', sortOrder: 'asc', }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/findings_es_pit_context.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/findings_es_pit_context.ts deleted file mode 100644 index aa1d660229d75..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/findings_es_pit_context.ts +++ /dev/null @@ -1,20 +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 { createContext, type MutableRefObject } from 'react'; -import type { UseQueryResult } from '@tanstack/react-query'; - -interface FindingsEsPitContextValue { - setPitId(newPitId: string): void; - pitIdRef: MutableRefObject; - pitQuery: UseQueryResult; -} - -// Default value should never be used, it can not be instantiated statically. Always wrap in a provider with a value -export const FindingsEsPitContext = createContext( - {} as FindingsEsPitContextValue -); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/use_findings_es_pit.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/use_findings_es_pit.ts deleted file mode 100644 index d8f2b22f501d4..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/es_pit/use_findings_es_pit.ts +++ /dev/null @@ -1,44 +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 { useCallback, useRef, useState } from 'react'; -import { useQuery } from '@tanstack/react-query'; -import { CSP_LATEST_FINDINGS_DATA_VIEW, ES_PIT_ROUTE_PATH } from '../../../../common/constants'; -import { useKibana } from '../../../common/hooks/use_kibana'; -import { FINDINGS_PIT_KEEP_ALIVE } from '../constants'; - -export const useFindingsEsPit = (queryKey: string) => { - // Using a reference for the PIT ID to avoid re-rendering when it changes - const pitIdRef = useRef(); - // Using this state as an internal control to ensure we run the query to open the PIT once and only once - const [isPitIdSet, setPitIdSet] = useState(false); - const setPitId = useCallback( - (newPitId: string) => { - pitIdRef.current = newPitId; - setPitIdSet(true); - }, - [pitIdRef, setPitIdSet] - ); - - const { http } = useKibana().services; - const pitQuery = useQuery( - ['findingsPitQuery', queryKey], - () => - http.post(ES_PIT_ROUTE_PATH, { - query: { index_name: CSP_LATEST_FINDINGS_DATA_VIEW, keep_alive: FINDINGS_PIT_KEEP_ALIVE }, - }), - { - enabled: !isPitIdSet, - onSuccess: (pitId) => { - setPitId(pitId); - }, - cacheTime: 0, - } - ); - - return { pitIdRef, setPitId, pitQuery }; -}; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx index 8e330abc93539..d0744239a975b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.test.tsx @@ -26,7 +26,6 @@ import { useCISIntegrationPoliciesLink } from '../../common/navigation/use_navig import { useCISIntegrationLink } from '../../common/navigation/use_navigate_to_cis_integration'; import { NO_FINDINGS_STATUS_TEST_SUBJ } from '../../components/test_subjects'; import { render } from '@testing-library/react'; -import { useFindingsEsPit } from './es_pit/use_findings_es_pit'; import { expectIdsInDoc } from '../../test/utils'; import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; @@ -36,19 +35,10 @@ jest.mock('../../common/api/use_setup_status_api'); jest.mock('../../common/hooks/use_subscription_status'); jest.mock('../../common/navigation/use_navigate_to_cis_integration_policies'); jest.mock('../../common/navigation/use_navigate_to_cis_integration'); -jest.mock('./es_pit/use_findings_es_pit'); const chance = new Chance(); beforeEach(() => { jest.restoreAllMocks(); - (useFindingsEsPit as jest.Mock).mockImplementation(() => ({ - pitQuery: createReactQueryResponse({ - status: 'success', - data: [], - }), - setPitId: () => {}, - pitIdRef: chance.guid(), - })); (useSubscriptionStatus as jest.Mock).mockImplementation(() => createReactQueryResponse({ diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx index e7aeed2e3e837..8830724193e1c 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings.tsx @@ -5,14 +5,11 @@ * 2.0. */ import React from 'react'; -import type { UseQueryResult } from '@tanstack/react-query'; import { Redirect, Switch, Route, useLocation } from 'react-router-dom'; import { TrackApplicationView } from '@kbn/usage-collection-plugin/public'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; import { NoFindingsStates } from '../../components/no_findings_states'; import { CloudPosturePage } from '../../components/cloud_posture_page'; -import { useFindingsEsPit } from './es_pit/use_findings_es_pit'; -import { FindingsEsPitContext } from './es_pit/findings_es_pit_context'; import { useLatestFindingsDataView } from '../../common/api/use_latest_findings_data_view'; import { cloudPosturePages, findingsNavigation } from '../../common/navigation/constants'; import { FindingsByResourceContainer } from './latest_findings_by_resource/findings_by_resource_container'; @@ -21,59 +18,43 @@ import { LatestFindingsContainer } from './latest_findings/latest_findings_conta export const Findings = () => { const location = useLocation(); const dataViewQuery = useLatestFindingsDataView(); - // TODO: Consider splitting the PIT window so that each "group by" view has its own PIT - const { pitQuery, pitIdRef, setPitId } = useFindingsEsPit('findings'); const getSetupStatus = useCspSetupStatusApi(); const hasFindings = getSetupStatus.data?.status === 'indexed'; if (!hasFindings) return ; - let queryForCloudPosturePage: UseQueryResult = dataViewQuery; - if (pitQuery.isError || pitQuery.isLoading) { - queryForCloudPosturePage = pitQuery; - } - return ( - - , - setPitId, - }} - > - - ( - - )} - /> - ( - - - - )} - /> - } - /> - } - /> - - + + + ( + + )} + /> + ( + + + + )} + /> + } + /> + } + /> + ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx index 5f5ee2e5a7ecf..2d709433e7fc5 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.test.tsx @@ -4,13 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { UseQueryResult } from '@tanstack/react-query'; -import { createReactQueryResponse } from '../../../test/fixtures/react_query'; import React from 'react'; import { render } from '@testing-library/react'; import { LatestFindingsContainer, getDefaultQuery } from './latest_findings_container'; import { createStubDataView } from '@kbn/data-views-plugin/common/mocks'; import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants'; +import { DEFAULT_VISIBLE_ROWS_PER_PAGE } from '../../../common/constants'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { TestProvider } from '../../../test/test_provider'; @@ -20,7 +19,6 @@ import { useLocation } from 'react-router-dom'; import { RisonObject } from 'rison-node'; import { buildEsQuery } from '@kbn/es-query'; import { getPaginationQuery } from '../utils/utils'; -import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks'; import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; @@ -45,6 +43,7 @@ describe('', () => { filters: [], query: { language: 'kuery', query: '' }, }); + const pageSize = DEFAULT_VISIBLE_ROWS_PER_PAGE; const dataMock = dataPluginMock.createStartContract(); const dataView = createStubDataView({ spec: { @@ -56,13 +55,6 @@ describe('', () => { search: encodeQuery(query as unknown as RisonObject), }); - const setPitId = jest.fn(); - const pitIdRef = { current: '' }; - const pitQuery = createReactQueryResponse({ - status: 'success', - data: '', - }) as UseQueryResult; - render( ', () => { licensing: licensingMock.createStart(), }} > - - - + ); const baseQuery = { query: buildEsQuery(dataView, query.query, query.filters), - pitId: pitIdRef.current, }; expect(dataMock.search.search).toHaveBeenNthCalledWith(1, { params: getFindingsQuery({ ...baseQuery, - ...getPaginationQuery(query), + ...getPaginationQuery({ ...query, pageSize }), sort: query.sort, enabled: true, }), diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx index 92b6ca6dcc68e..2aa13f19444ae 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_container.tsx @@ -8,7 +8,6 @@ import React, { useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiBottomBar, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import useLocalStorage from 'react-use/lib/useLocalStorage'; import type { Evaluation } from '../../../../common/types'; import { CloudPosturePageTitle } from '../../../components/cloud_posture_page_title'; import type { FindingsBaseProps } from '../types'; @@ -22,7 +21,6 @@ import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; import { getFindingsPageSizeInfo, getFilters, - getPaginationQuery, getPaginationTableParams, useBaseEsQuery, usePersistedQuery, @@ -30,9 +28,14 @@ import { import { PageTitle, PageTitleText } from '../layout/findings_layout'; import { FindingsGroupBySelector } from '../layout/findings_group_by_selector'; import { useUrlQuery } from '../../../common/hooks/use_url_query'; +import { usePageSlice } from '../../../common/hooks/use_page_slice'; +import { usePageSize } from '../../../common/hooks/use_page_size'; import { ErrorCallout } from '../layout/error_callout'; import { getLimitProperties } from '../utils/get_limit_properties'; -import { LOCAL_STORAGE_PAGE_SIZE_LATEST_FINDINGS_KEY } from '../../../../common/constants'; +import { + MAX_FINDINGS_TO_LOAD, + LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY, +} from '../../../common/constants'; export const getDefaultQuery = ({ query, @@ -42,18 +45,13 @@ export const getDefaultQuery = ({ filters, sort: { field: '@timestamp', direction: 'desc' }, pageIndex: 0, - pageSize: 10, }); -const MAX_ITEMS = 500; - export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); - const [pageSize, setPageSize] = useLocalStorage( - LOCAL_STORAGE_PAGE_SIZE_LATEST_FINDINGS_KEY, - urlQuery.pageSize - ); + const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY); + /** * Page URL query to ES query */ @@ -67,26 +65,24 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { * Page ES query result */ const findingsGroupByNone = useLatestFindings({ - ...getPaginationQuery({ - pageIndex: urlQuery.pageIndex, - pageSize: pageSize || urlQuery.pageSize, - }), query: baseEsQuery.query, sort: urlQuery.sort, enabled: !baseEsQuery.error, }); + const slicedPage = usePageSlice(findingsGroupByNone.data?.page, urlQuery.pageIndex, pageSize); + const error = findingsGroupByNone.error || baseEsQuery.error; const { isLastLimitedPage, limitedTotalItemCount } = useMemo( () => getLimitProperties( findingsGroupByNone.data?.total || 0, - MAX_ITEMS, - urlQuery.pageSize, + MAX_FINDINGS_TO_LOAD, + pageSize, urlQuery.pageIndex ), - [findingsGroupByNone.data?.total, urlQuery.pageIndex, urlQuery.pageSize] + [findingsGroupByNone.data?.total, urlQuery.pageIndex, pageSize] ); const handleDistributionClick = (evaluation: Evaluation) => { @@ -134,8 +130,8 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { failed: findingsGroupByNone.data.count.failed, ...getFindingsPageSizeInfo({ pageIndex: urlQuery.pageIndex, - pageSize: urlQuery.pageSize, - currentPageSize: findingsGroupByNone.data.page.length, + pageSize, + currentPageSize: slicedPage.length, }), }} /> @@ -143,9 +139,9 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { { setUrlQuery({ sort, pageIndex: page.index, - pageSize: page.size, }); }} onAddFilter={(field, value, negate) => @@ -182,7 +177,7 @@ export const LatestFindingsContainer = ({ dataView }: FindingsBaseProps) => { id="xpack.csp.findings.latestFindings.bottomBarLabel" defaultMessage="These are the first {maxItems} findings matching your search, refine your search to see others." values={{ - maxItems: MAX_ITEMS, + maxItems: MAX_FINDINGS_TO_LOAD, }} /> diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts index 24028102536a6..b938c202014d8 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/use_latest_findings.ts @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useContext } from 'react'; import { useQuery } from '@tanstack/react-query'; import { number } from 'io-ts'; import { lastValueFrom } from 'rxjs'; @@ -14,24 +13,21 @@ import type { Pagination } from '@elastic/eui'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { i18n } from '@kbn/i18n'; import { CspFinding } from '../../../../common/schemas/csp_finding'; -import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context'; import { extractErrorMessage } from '../../../../common/utils/helpers'; import type { Sort } from '../types'; import { useKibana } from '../../../common/hooks/use_kibana'; import type { FindingsBaseEsQuery } from '../types'; -import { FINDINGS_REFETCH_INTERVAL_MS } from '../constants'; import { getAggregationCount, getFindingsCountAggQuery } from '../utils/utils'; +import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants'; +import { MAX_FINDINGS_TO_LOAD } from '../../../common/constants'; interface UseFindingsOptions extends FindingsBaseEsQuery { - from: NonNullable['from']>; - size: NonNullable['size']>; sort: Sort; enabled: boolean; } export interface FindingsGroupByNoneQuery { pageIndex: Pagination['pageIndex']; - pageSize: Pagination['pageSize']; sort: Sort; } @@ -57,21 +53,14 @@ export const showErrorToast = ( else toasts.addDanger(extractErrorMessage(error, SEARCH_FAILED_TEXT)); }; -export const getFindingsQuery = ({ - query, - size, - from, - sort, - pitId, -}: UseFindingsOptions & { pitId: string }) => ({ +export const getFindingsQuery = ({ query, sort }: UseFindingsOptions) => ({ + index: CSP_LATEST_FINDINGS_DATA_VIEW, body: { query, sort: [{ [sort.field]: sort.direction }], - size, - from, + size: MAX_FINDINGS_TO_LOAD, aggs: getFindingsCountAggQuery(), }, - pit: { id: pitId }, ignore_unavailable: false, }); @@ -80,22 +69,17 @@ export const useLatestFindings = (options: UseFindingsOptions) => { data, notifications: { toasts }, } = useKibana().services; - const { pitIdRef, setPitId } = useContext(FindingsEsPitContext); - const params = { ...options, pitId: pitIdRef.current }; - return useQuery( - ['csp_findings', { params }], + ['csp_findings', { params: options }], async () => { const { - rawResponse: { hits, aggregations, pit_id: newPitId }, + rawResponse: { hits, aggregations }, } = await lastValueFrom( data.search.search({ - params: getFindingsQuery(params), + params: getFindingsQuery(options), }) ); - if (!aggregations) throw new Error('expected aggregations to be an defined'); - if (!Array.isArray(aggregations.count.buckets)) throw new Error('expected buckets to be an array'); @@ -103,19 +87,12 @@ export const useLatestFindings = (options: UseFindingsOptions) => { page: hits.hits.map((hit) => hit._source!), total: number.is(hits.total) ? hits.total : 0, count: getAggregationCount(aggregations.count.buckets), - newPitId: newPitId!, }; }, { enabled: options.enabled, keepPreviousData: true, onError: (err: Error) => showErrorToast(toasts, err), - onSuccess: ({ newPitId }) => { - setPitId(newPitId); - }, - // Refetching on an interval to ensure the PIT window stays open - refetchInterval: FINDINGS_REFETCH_INTERVAL_MS, - refetchIntervalInBackground: true, } ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx index 74bddc75109c4..1a373fc4174e0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_container.tsx @@ -8,20 +8,20 @@ import React from 'react'; import { Route, Switch } from 'react-router-dom'; import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import useLocalStorage from 'react-use/lib/useLocalStorage'; import { TrackApplicationView } from '@kbn/usage-collection-plugin/public'; import type { Evaluation } from '../../../../common/types'; import { CloudPosturePageTitle } from '../../../components/cloud_posture_page_title'; import { FindingsSearchBar } from '../layout/findings_search_bar'; import * as TEST_SUBJECTS from '../test_subjects'; import { useUrlQuery } from '../../../common/hooks/use_url_query'; +import { usePageSlice } from '../../../common/hooks/use_page_slice'; +import { usePageSize } from '../../../common/hooks/use_page_size'; import type { FindingsBaseProps, FindingsBaseURLQuery } from '../types'; import { FindingsByResourceQuery, useFindingsByResource } from './use_findings_by_resource'; import { FindingsByResourceTable } from './findings_by_resource_table'; import { getFindingsPageSizeInfo, getFilters, - getPaginationQuery, getPaginationTableParams, useBaseEsQuery, usePersistedQuery, @@ -32,7 +32,7 @@ import { findingsNavigation } from '../../../common/navigation/constants'; import { ResourceFindings } from './resource_findings/resource_findings_container'; import { ErrorCallout } from '../layout/error_callout'; import { FindingsDistributionBar } from '../layout/findings_distribution_bar'; -import { LOCAL_STORAGE_PAGE_SIZE_FINDINGS_BY_RESOURCE_KEY } from '../../../../common/constants'; +import { LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY } from '../../../common/constants'; const getDefaultQuery = ({ query, @@ -41,7 +41,6 @@ const getDefaultQuery = ({ query, filters, pageIndex: 0, - pageSize: 10, sortDirection: 'desc', }); @@ -70,10 +69,7 @@ export const FindingsByResourceContainer = ({ dataView }: FindingsBaseProps) => const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); - const [pageSize, setPageSize] = useLocalStorage( - LOCAL_STORAGE_PAGE_SIZE_FINDINGS_BY_RESOURCE_KEY, - urlQuery.pageSize - ); + const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY); /** * Page URL query to ES query @@ -88,10 +84,6 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { * Page ES query result */ const findingsGroupByResource = useFindingsByResource({ - ...getPaginationQuery({ - pageIndex: urlQuery.pageIndex, - pageSize: pageSize || urlQuery.pageSize, - }), sortDirection: urlQuery.sortDirection, query: baseEsQuery.query, enabled: !baseEsQuery.error, @@ -99,6 +91,8 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { const error = findingsGroupByResource.error || baseEsQuery.error; + const slicedPage = usePageSlice(findingsGroupByResource.data?.page, urlQuery.pageIndex, pageSize); + const handleDistributionClick = (evaluation: Evaluation) => { setUrlQuery({ pageIndex: 0, @@ -155,8 +149,8 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { failed: findingsGroupByResource.data.count.failed, ...getFindingsPageSizeInfo({ pageIndex: urlQuery.pageIndex, - pageSize: urlQuery.pageSize, - currentPageSize: findingsGroupByResource.data.page.length, + pageSize, + currentPageSize: slicedPage.length, }), }} /> @@ -164,9 +158,9 @@ const LatestFindingsByResource = ({ dataView }: FindingsBaseProps) => { { setUrlQuery({ sortDirection: sort?.direction, pageIndex: page.index, - pageSize: page.size, }); }} sorting={{ diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx index e61415b7d0af1..f18738a0736fa 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_container.tsx @@ -15,7 +15,6 @@ import { Link, useParams } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; import { generatePath } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; -import useLocalStorage from 'react-use/lib/useLocalStorage'; import { CspInlineDescriptionList } from '../../../../components/csp_inline_description_list'; import type { Evaluation } from '../../../../../common/types'; import { CspFinding } from '../../../../../common/schemas/csp_finding'; @@ -25,11 +24,12 @@ import { PageTitle, PageTitleText } from '../../layout/findings_layout'; import { findingsNavigation } from '../../../../common/navigation/constants'; import { ResourceFindingsQuery, useResourceFindings } from './use_resource_findings'; import { useUrlQuery } from '../../../../common/hooks/use_url_query'; +import { usePageSlice } from '../../../../common/hooks/use_page_slice'; +import { usePageSize } from '../../../../common/hooks/use_page_size'; import type { FindingsBaseURLQuery, FindingsBaseProps } from '../../types'; import { getFindingsPageSizeInfo, getFilters, - getPaginationQuery, getPaginationTableParams, useBaseEsQuery, usePersistedQuery, @@ -38,7 +38,7 @@ import { ResourceFindingsTable } from './resource_findings_table'; import { FindingsSearchBar } from '../../layout/findings_search_bar'; import { ErrorCallout } from '../../layout/error_callout'; import { FindingsDistributionBar } from '../../layout/findings_distribution_bar'; -import { LOCAL_STORAGE_PAGE_SIZE_RESOURCE_FINDINGS_KEY } from '../../../../../common/constants'; +import { LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY } from '../../../../common/constants'; const getDefaultQuery = ({ query, @@ -48,7 +48,6 @@ const getDefaultQuery = ({ filters, sort: { field: 'result.evaluation' as keyof CspFinding, direction: 'asc' }, pageIndex: 0, - pageSize: 10, }); const BackToResourcesButton = () => ( @@ -92,10 +91,7 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { const params = useParams<{ resourceId: string }>(); const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); - const [pageSize, setPageSize] = useLocalStorage( - LOCAL_STORAGE_PAGE_SIZE_RESOURCE_FINDINGS_KEY, - urlQuery.pageSize - ); + const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_FINDINGS_KEY); /** * Page URL query to ES query @@ -110,10 +106,6 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { * Page ES query result */ const resourceFindings = useResourceFindings({ - ...getPaginationQuery({ - pageSize: pageSize || urlQuery.pageSize, - pageIndex: urlQuery.pageIndex, - }), sort: urlQuery.sort, query: baseEsQuery.query, resourceId: params.resourceId, @@ -122,6 +114,8 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { const error = resourceFindings.error || baseEsQuery.error; + const slicedPage = usePageSlice(resourceFindings.data?.page, urlQuery.pageIndex, pageSize); + const handleDistributionClick = (evaluation: Evaluation) => { setUrlQuery({ pageIndex: 0, @@ -190,8 +184,8 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { failed: resourceFindings.data.count.failed, ...getFindingsPageSizeInfo({ pageIndex: urlQuery.pageIndex, - pageSize: urlQuery.pageSize, - currentPageSize: resourceFindings.data.page.length, + pageSize, + currentPageSize: slicedPage.length, }), }} /> @@ -199,9 +193,9 @@ export const ResourceFindings = ({ dataView }: FindingsBaseProps) => { { }} setTableOptions={({ page, sort }) => { setPageSize(page.size); - setUrlQuery({ pageIndex: page.index, pageSize: page.size, sort }); + setUrlQuery({ pageIndex: page.index, sort }); }} onAddFilter={(field, value, negate) => setUrlQuery({ diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts index e65f2ea4bfd23..95645d20b16a0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/use_resource_findings.ts @@ -9,27 +9,23 @@ import { lastValueFrom } from 'rxjs'; import { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/data-plugin/common'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Pagination } from '@elastic/eui'; -import { useContext } from 'react'; import { number } from 'io-ts'; import { CspFinding } from '../../../../../common/schemas/csp_finding'; import { getAggregationCount, getFindingsCountAggQuery } from '../../utils/utils'; -import { FindingsEsPitContext } from '../../es_pit/findings_es_pit_context'; -import { FINDINGS_REFETCH_INTERVAL_MS } from '../../constants'; import { useKibana } from '../../../../common/hooks/use_kibana'; import { showErrorToast } from '../../latest_findings/use_latest_findings'; import type { FindingsBaseEsQuery, Sort } from '../../types'; +import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../../common/constants'; +import { MAX_FINDINGS_TO_LOAD } from '../../../../common/constants'; interface UseResourceFindingsOptions extends FindingsBaseEsQuery { resourceId: string; - from: NonNullable['from']>; - size: NonNullable['size']>; sort: Sort; enabled: boolean; } export interface ResourceFindingsQuery { pageIndex: Pagination['pageIndex']; - pageSize: Pagination['pageSize']; sort: Sort; } @@ -46,14 +42,11 @@ export type ResourceFindingsResponseAggs = Record< const getResourceFindingsQuery = ({ query, resourceId, - from, - size, - pitId, sort, -}: UseResourceFindingsOptions & { pitId: string }): estypes.SearchRequest => ({ +}: UseResourceFindingsOptions): estypes.SearchRequest => ({ + index: CSP_LATEST_FINDINGS_DATA_VIEW, body: { - from, - size, + size: MAX_FINDINGS_TO_LOAD, query: { ...query, bool: { @@ -62,7 +55,6 @@ const getResourceFindingsQuery = ({ }, }, sort: [{ [sort.field]: sort.direction }], - pit: { id: pitId }, aggs: { ...getFindingsCountAggQuery(), clusterId: { @@ -85,8 +77,7 @@ export const useResourceFindings = (options: UseResourceFindingsOptions) => { notifications: { toasts }, } = useKibana().services; - const { pitIdRef, setPitId } = useContext(FindingsEsPitContext); - const params = { ...options, pitId: pitIdRef.current }; + const params = { ...options }; return useQuery( ['csp_resource_findings', { params }], @@ -99,9 +90,7 @@ export const useResourceFindings = (options: UseResourceFindingsOptions) => { { enabled: options.enabled, keepPreviousData: true, - select: ({ - rawResponse: { hits, pit_id: newPitId, aggregations }, - }: ResourceFindingsResponse) => { + select: ({ rawResponse: { hits, aggregations } }: ResourceFindingsResponse) => { if (!aggregations) throw new Error('expected aggregations to exists'); assertNonEmptyArray(aggregations.count.buckets); @@ -116,16 +105,9 @@ export const useResourceFindings = (options: UseResourceFindingsOptions) => { clusterId: getFirstBucketKey(aggregations.clusterId.buckets), resourceSubType: getFirstBucketKey(aggregations.resourceSubType.buckets), resourceName: getFirstBucketKey(aggregations.resourceName.buckets), - newPitId: newPitId!, }; }, onError: (err: Error) => showErrorToast(toasts, err), - onSuccess: ({ newPitId }) => { - setPitId(newPitId); - }, - // Refetching on an interval to ensure the PIT window stays open - refetchInterval: FINDINGS_REFETCH_INTERVAL_MS, - refetchIntervalInBackground: true, } ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts index 000100a889139..139013d88cec4 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts @@ -4,22 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useContext } from 'react'; import { useQuery } from '@tanstack/react-query'; import { lastValueFrom } from 'rxjs'; import { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/data-plugin/common'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Pagination } from '@elastic/eui'; -import { FindingsEsPitContext } from '../es_pit/findings_es_pit_context'; -import { FINDINGS_REFETCH_INTERVAL_MS } from '../constants'; import { useKibana } from '../../../common/hooks/use_kibana'; import { showErrorToast } from '../latest_findings/use_latest_findings'; import type { FindingsBaseEsQuery, Sort } from '../types'; import { getAggregationCount, getFindingsCountAggQuery } from '../utils/utils'; +import { CSP_LATEST_FINDINGS_DATA_VIEW } from '../../../../common/constants'; +import { MAX_FINDINGS_TO_LOAD } from '../../../common/constants'; interface UseFindingsByResourceOptions extends FindingsBaseEsQuery { - from: NonNullable['from']>; - size: NonNullable['size']>; enabled: boolean; sortDirection: Sort['direction']; } @@ -27,13 +24,8 @@ interface UseFindingsByResourceOptions extends FindingsBaseEsQuery { // Maximum number of grouped findings, default limit in elasticsearch is set to 65,536 (ref: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-settings.html#search-settings-max-buckets) const MAX_BUCKETS = 60 * 1000; -interface UseResourceFindingsQueryOptions extends Omit { - pitId: string; -} - export interface FindingsByResourceQuery { pageIndex: Pagination['pageIndex']; - pageSize: Pagination['pageSize']; sortDirection: Sort['direction']; } @@ -73,11 +65,9 @@ interface FindingsAggBucket extends estypes.AggregationsStringRareTermsBucketKey export const getFindingsByResourceAggQuery = ({ query, - from, - size, - pitId, sortDirection, -}: UseResourceFindingsQueryOptions): estypes.SearchRequest => ({ +}: UseFindingsByResourceOptions): estypes.SearchRequest => ({ + index: CSP_LATEST_FINDINGS_DATA_VIEW, body: { query, size: 0, @@ -107,8 +97,7 @@ export const getFindingsByResourceAggQuery = ({ }, sort_failed_findings: { bucket_sort: { - from, - size, + size: MAX_FINDINGS_TO_LOAD, sort: [ { 'failed_findings>_count': { order: sortDirection }, @@ -121,7 +110,6 @@ export const getFindingsByResourceAggQuery = ({ }, }, }, - pit: { id: pitId }, }, ignore_unavailable: false, }); @@ -132,14 +120,13 @@ export const useFindingsByResource = (options: UseFindingsByResourceOptions) => notifications: { toasts }, } = useKibana().services; - const { pitIdRef, setPitId } = useContext(FindingsEsPitContext); - const params = { ...options, pitId: pitIdRef.current }; + const params = { ...options }; return useQuery( ['csp_findings_resource', { params }], async () => { const { - rawResponse: { aggregations, pit_id: newPitId }, + rawResponse: { aggregations }, } = await lastValueFrom( data.search.search({ params: getFindingsByResourceAggQuery(params), @@ -158,19 +145,12 @@ export const useFindingsByResource = (options: UseFindingsByResourceOptions) => page: aggregations.resources.buckets.map(createFindingsByResource), total: aggregations.resource_total.value, count: getAggregationCount(aggregations.count.buckets), - newPitId: newPitId!, }; }, { enabled: options.enabled, keepPreviousData: true, onError: (err: Error) => showErrorToast(toasts, err), - onSuccess: ({ newPitId }) => { - setPitId(newPitId); - }, - // Refetching on an interval to ensure the PIT window stays open - refetchInterval: FINDINGS_REFETCH_INTERVAL_MS, - refetchIntervalInBackground: true, } ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx index 98b1655c7195d..534d3d2f34237 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx @@ -7,7 +7,6 @@ import React, { useState, useMemo } from 'react'; import { EuiPanel, EuiSpacer } from '@elastic/eui'; import { useParams } from 'react-router-dom'; -import useLocalStorage from 'react-use/lib/useLocalStorage'; import { extractErrorMessage, createCspRuleSearchFilterByPackagePolicy, @@ -23,7 +22,8 @@ import { } from './use_csp_rules'; import * as TEST_SUBJECTS from './test_subjects'; import { RuleFlyout } from './rules_flyout'; -import { LOCAL_STORAGE_PAGE_SIZE_RULES_KEY } from '../../../common/constants'; +import { LOCAL_STORAGE_PAGE_SIZE_RULES_KEY } from '../../common/constants'; +import { usePageSize } from '../../common/hooks/use_page_size'; interface RulesPageData { rules_page: RuleSavedObject[]; @@ -70,7 +70,7 @@ export type PageUrlParams = Record<'policyId' | 'packagePolicyId', string>; export const RulesContainer = () => { const params = useParams(); const [selectedRuleId, setSelectedRuleId] = useState(null); - const [pageSize, setPageSize] = useLocalStorage(LOCAL_STORAGE_PAGE_SIZE_RULES_KEY, 10); + const { pageSize, setPageSize } = usePageSize(LOCAL_STORAGE_PAGE_SIZE_RULES_KEY); const [rulesQuery, setRulesQuery] = useState({ filter: createCspRuleSearchFilterByPackagePolicy({ packagePolicyId: params.packagePolicyId, diff --git a/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.test.ts b/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.test.ts deleted file mode 100644 index 8447e393f2f51..0000000000000 --- a/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.test.ts +++ /dev/null @@ -1,147 +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 { Chance } from 'chance'; -import { - elasticsearchClientMock, - ElasticsearchClientMock, -} from '@kbn/core-elasticsearch-client-server-mocks'; -import type { ElasticsearchClient } from '@kbn/core/server'; -import { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; -import { DEFAULT_PIT_KEEP_ALIVE, defineEsPitRoute, esPitInputSchema } from './es_pit'; -import { createCspRequestHandlerContextMock } from '../../mocks'; - -describe('ES Point in time API endpoint', () => { - const chance = new Chance(); - let mockEsClient: jest.Mocked; - - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('validate the API route path', () => { - const router = httpServiceMock.createRouter(); - - defineEsPitRoute(router); - - const [config] = router.post.mock.calls[0]; - expect(config.path).toEqual('/internal/cloud_security_posture/es_pit'); - }); - - it('should accept to a user with fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineEsPitRoute(router); - - const mockContext = createCspRequestHandlerContextMock(); - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - const [_, handler] = router.post.mock.calls[0]; - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(0); - }); - - it('should reject to a user without fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineEsPitRoute(router); - - const mockContext = createCspRequestHandlerContextMock(); - mockContext.fleet.authz.fleet.all = false; - - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - const [_, handler] = router.post.mock.calls[0]; - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(1); - }); - - it('should return the newly created PIT ID from ES', async () => { - const router = httpServiceMock.createRouter(); - - defineEsPitRoute(router); - - const pitId = chance.string(); - mockEsClient = elasticsearchClientMock.createClusterClient().asScoped().asInternalUser; - mockEsClient.openPointInTime.mockImplementation(() => Promise.resolve({ id: pitId })); - - const mockContext = createCspRequestHandlerContextMock(); - mockContext.core.elasticsearch.client.asCurrentUser = mockEsClient as ElasticsearchClientMock; - - const indexName = chance.string(); - const keepAlive = chance.string(); - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest({ - query: { index_name: indexName, keep_alive: keepAlive }, - }); - - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - const [_, handler] = router.post.mock.calls[0]; - await handler(context, req, res); - - expect(mockEsClient.openPointInTime).toHaveBeenCalledTimes(1); - expect(mockEsClient.openPointInTime).toHaveBeenLastCalledWith({ - index: indexName, - keep_alive: keepAlive, - }); - - expect(res.ok).toHaveBeenCalledTimes(1); - expect(res.ok).toHaveBeenLastCalledWith({ body: pitId }); - }); - - describe('test input schema', () => { - it('passes keep alive and index name parameters', () => { - const indexName = chance.string(); - const keepAlive = chance.string(); - const validatedQuery = esPitInputSchema.validate({ - index_name: indexName, - keep_alive: keepAlive, - }); - - expect(validatedQuery).toMatchObject({ - index_name: indexName, - keep_alive: keepAlive, - }); - }); - - it('populates default keep alive parameter value', () => { - const indexName = chance.string(); - const validatedQuery = esPitInputSchema.validate({ index_name: indexName }); - - expect(validatedQuery).toMatchObject({ - index_name: indexName, - keep_alive: DEFAULT_PIT_KEEP_ALIVE, - }); - }); - - it('throws when index name parameter is not passed', () => { - expect(() => { - esPitInputSchema.validate({}); - }).toThrow(); - }); - - it('throws when index name parameter is not a string', () => { - const indexName = chance.integer(); - expect(() => { - esPitInputSchema.validate({ index_name: indexName }); - }).toThrow(); - }); - - it('throws when keep alive parameter is not a string', () => { - const indexName = chance.string(); - const keepAlive = chance.integer(); - expect(() => { - esPitInputSchema.validate({ index_name: indexName, keep_alive: keepAlive }); - }).toThrow(); - }); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.ts b/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.ts deleted file mode 100644 index beba811429aa5..0000000000000 --- a/x-pack/plugins/cloud_security_posture/server/routes/es_pit/es_pit.ts +++ /dev/null @@ -1,53 +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 { schema } from '@kbn/config-schema'; -import { transformError } from '@kbn/securitysolution-es-utils'; -import { ES_PIT_ROUTE_PATH } from '../../../common/constants'; -import type { CspRouter } from '../../types'; - -export const DEFAULT_PIT_KEEP_ALIVE = '1m'; - -export const esPitInputSchema = schema.object({ - index_name: schema.string(), - keep_alive: schema.string({ defaultValue: DEFAULT_PIT_KEEP_ALIVE }), -}); - -export const defineEsPitRoute = (router: CspRouter): void => - router.post( - { - path: ES_PIT_ROUTE_PATH, - validate: { query: esPitInputSchema }, - options: { - tags: ['access:cloud-security-posture-read'], - }, - }, - async (context, request, response) => { - const cspContext = await context.csp; - - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } - - try { - const esClient = cspContext.esClient.asCurrentUser; - const { id } = await esClient.openPointInTime({ - index: request.query.index_name, - keep_alive: request.query.keep_alive, - }); - - return response.ok({ body: id }); - } catch (err) { - const error = transformError(err); - cspContext.logger.error(`Failed to open Elasticsearch point in time: ${error}`); - return response.customError({ - body: { message: error.message }, - statusCode: error.statusCode, - }); - } - } - ); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts b/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts index 4c2901edde56b..ed31e5fd6bf7a 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/setup_routes.ts @@ -16,7 +16,6 @@ import { PLUGIN_ID } from '../../common'; import { defineGetComplianceDashboardRoute } from './compliance_dashboard/compliance_dashboard'; import { defineGetBenchmarksRoute } from './benchmarks/benchmarks'; import { defineGetCspStatusRoute } from './status/status'; -import { defineEsPitRoute } from './es_pit/es_pit'; /** * 1. Registers routes @@ -33,7 +32,6 @@ export function setupRoutes({ defineGetComplianceDashboardRoute(router); defineGetBenchmarksRoute(router); defineGetCspStatusRoute(router); - defineEsPitRoute(router); core.http.registerRouteHandlerContext( PLUGIN_ID, From dd410fc8106b48bd7da93422f2ffa33d592a30ce Mon Sep 17 00:00:00 2001 From: Or Ouziel Date: Wed, 16 Nov 2022 19:12:01 +0200 Subject: [PATCH 13/14] [Cloud Posture] update findings indexing state text (#145343) --- .../public/components/no_findings_states.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx index 12b26d38ac7c0..89fc1c14a93e8 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx @@ -77,7 +77,7 @@ const Indexing = () => (

} From 6cd5d3dd91566a6bf1f97b2edeb8e7a6e2d8d852 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Wed, 16 Nov 2022 18:18:34 +0100 Subject: [PATCH 14/14] [Fleet] Fix import causing linter errors (#145394) ## Summary Fixing an import in the wrong order that was causing multiple PRs to have linter error and pinging Fleet. Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../page_steps/install_agent/install_agent_managed.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx index aa3b0830aa200..68f78017c962c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/page_steps/install_agent/install_agent_managed.tsx @@ -19,9 +19,10 @@ import { } from '../../../../../../../../../components/agent_enrollment_flyout/steps'; import { ManualInstructions } from '../../../../../../../../../components/enrollment_instructions'; -import type { InstallAgentPageProps } from './types'; import { KubernetesManifestApplyStep } from '../../../../../../../../../components/agent_enrollment_flyout/steps/run_k8s_apply_command_step'; +import type { InstallAgentPageProps } from './types'; + export const InstallElasticAgentManagedPageStep: React.FC = (props) => { const { cancelUrl,