From 951ab5bb5301fb56edad3352310c8a00a8ff40e8 Mon Sep 17 00:00:00 2001 From: Josh Dover Date: Tue, 19 Feb 2019 09:56:10 -0600 Subject: [PATCH] [upgrade] Localize reindexing flyout in Upgrade Assistant (#30432) --- .../checkup/deprecations/reindex/button.tsx | 43 +++- .../checklist_step.test.tsx.snap | 40 +++- .../__snapshots__/warning_step.test.tsx.snap | 223 +++++++++--------- .../reindex/flyout/checklist_step.tsx | 77 +++++- .../deprecations/reindex/flyout/container.tsx | 9 +- .../reindex/flyout/progress.test.tsx | 60 ++++- .../deprecations/reindex/flyout/progress.tsx | 89 ++++++- .../reindex/flyout/step_progress.tsx | 5 +- .../reindex/flyout/warning_step.test.tsx | 7 +- .../reindex/flyout/warnings_step.tsx | 209 +++++++++------- .../public/components/tabs/overview/index.tsx | 4 +- 11 files changed, 515 insertions(+), 251 deletions(-) diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/button.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/button.tsx index c1117b64c008b..6addd3dae642a 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/button.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/button.tsx @@ -9,6 +9,7 @@ import React, { Fragment, ReactNode } from 'react'; import { Subscription } from 'rxjs'; import { EuiButton, EuiLoadingSpinner } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; import { kfetch } from 'ui/kfetch'; import { ReindexStatus, UIReindexOption } from '../../../../../../common/types'; import { LoadingState } from '../../../../types'; @@ -63,11 +64,21 @@ export class ReindexButton extends React.Component + ); if (reindexState.loadingState === LoadingState.Loading) { buttonProps.disabled = true; - buttonContent = 'Loading…'; + buttonContent = ( + + ); } else { switch (reindexState.status) { case ReindexStatus.inProgress: @@ -81,24 +92,44 @@ export class ReindexButton extends React.Component + ); break; case ReindexStatus.failed: buttonProps.color = 'danger'; buttonProps.iconSide = 'left'; buttonProps.iconType = 'cross'; - buttonContent = 'Failed'; + buttonContent = ( + + ); break; case ReindexStatus.paused: buttonProps.color = 'warning'; buttonProps.iconSide = 'left'; buttonProps.iconType = 'pause'; - buttonContent = 'Paused'; + buttonContent = ( + + ); case ReindexStatus.cancelled: buttonProps.color = 'danger'; buttonProps.iconSide = 'left'; buttonProps.iconType = 'cross'; - buttonContent = 'Cancelled'; + buttonContent = ( + + ); break; } } diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap index b1372cc9d985c..6f87d85dead85 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/checklist_step.test.tsx.snap @@ -7,13 +7,29 @@ exports[`ChecklistFlyout renders 1`] = ` color="warning" iconType="alert" size="m" - title="Index is unable to ingest, update, or delete documents while reindexing" + title={ + + } >

- If you can’t stop document updates or need to reindex into a new cluster, consider using a different upgrade strategy. +

- Reindexing will continue in the background, but if Kibana shuts down or restarts you will need to return to this page to resume reindexing. +

- Reindexing process +

- Close + - Run reindex + diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/warning_step.test.tsx.snap b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/warning_step.test.tsx.snap index c1e7e58813425..c0e020e0f1e4f 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/warning_step.test.tsx.snap +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/__snapshots__/warning_step.test.tsx.snap @@ -7,129 +7,114 @@ exports[`WarningsFlyoutStep renders 1`] = ` color="danger" iconType="alert" size="m" - title="This index requires destructive changes that can't be undone" + title={ + + } >

- Back up your index, then proceed with the reindex by accepting each breaking change. +

- - - - _all - - field will be removed - + -

- The - - _all - - meta field is no longer supported in 7.0. Reindexing removes the - - _all - - field in the new index. Ensure that no application code or scripts reply on this field. -
- - Documentation - -

-
- + _all + , + } + } + /> + } + documentationUrl="https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_mappings_changes.html#_the_literal__all_literal_meta_field_is_now_disabled_by_default" + label={ + + _all + , + } + } + /> + } + onChange={[Function]} + warning={0} /> - - - Boolean data in - - _source - - might change - + -

- If a documents contain a boolean field that is neither - - true - - or - - - false - - (for example, - - "yes" - - , - - - "on" - - , - - 1 - - ), reindexing converts these fields to - - true - - or - - false - - . Ensure that no application code or scripts rely on boolean fields in the deprecated format. -
- - Documentation - -

-
- + false + , + "on": + "on" + , + "one": + 1 + , + "true": + true + , + "yes": + "yes" + , + } + } + /> + } + documentationUrl="https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_mappings_changes.html#_coercion_of_boolean_field" + label={ + + _source + , + } + } + /> + } + onChange={[Function]} + warning={1} /> @@ -154,7 +139,11 @@ exports[`WarningsFlyoutStep renders 1`] = ` onClick={[MockFunction]} type="button" > - Cancel + - Continue with reindex + diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/checklist_step.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/checklist_step.tsx index 7d4ce595f03a7..3cd3a32a0dfb2 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/checklist_step.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/checklist_step.tsx @@ -17,6 +17,8 @@ import { EuiSpacer, EuiTitle, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; + import { ReindexStatus } from '../../../../../../../common/types'; import { LoadingState } from '../../../../../types'; import { ReindexState } from '../polling_service'; @@ -25,15 +27,40 @@ import { ReindexProgress } from './progress'; const buttonLabel = (status?: ReindexStatus) => { switch (status) { case ReindexStatus.failed: - return 'Try again'; + return ( + + ); case ReindexStatus.inProgress: - return 'Reindexing…'; + return ( + + ); case ReindexStatus.completed: - return 'Done!'; + return ( + + ); case ReindexStatus.paused: - return 'Resume'; + return ( + + ); default: - return 'Run reindex'; + return ( + + ); } }; @@ -53,24 +80,40 @@ export const ChecklistFlyoutStep: React.StatelessComponent<{ + } color="warning" iconType="alert" >

- If you can’t stop document updates or need to reindex into a new cluster, consider using - a different upgrade strategy. +

- Reindexing will continue in the background, but if Kibana shuts down or restarts you - will need to return to this page to resume reindexing. +

{!hasRequiredPrivileges && ( + } color="danger" iconType="alert" /> @@ -78,7 +121,12 @@ export const ChecklistFlyoutStep: React.StatelessComponent<{ )} -

Reindexing process

+

+ +

@@ -86,7 +134,10 @@ export const ChecklistFlyoutStep: React.StatelessComponent<{ - Close + diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/container.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/container.tsx index 97c3eb778d458..fa619140bcd16 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/container.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/container.tsx @@ -7,6 +7,7 @@ import React from 'react'; import { EuiFlyout, EuiFlyoutHeader, EuiPortal, EuiTitle } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; import { ReindexState } from '../polling_service'; import { ChecklistFlyoutStep } from './checklist_step'; @@ -80,7 +81,13 @@ export class ReindexFlyout extends React.Component -

Reindex {indexName}

+

+ +

{flyoutContents} diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.test.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.test.tsx index a51e6e42da4a0..a279ffa098123 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.test.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.test.tsx @@ -33,19 +33,35 @@ describe('ReindexProgress', () => { Array [ Object { "status": "incomplete", - "title": "Setting old index to read-only", + "title": , }, Object { "status": "incomplete", - "title": "Creating new index", + "title": , }, Object { "status": "incomplete", - "title": "Reindexing documents", + "title": , }, Object { "status": "incomplete", - "title": "Swapping original index with alias", + "title": , }, ] } @@ -116,27 +132,51 @@ describe('ReindexProgress', () => { Array [ Object { "status": "inProgress", - "title": "Pausing Machine Learning jobs", + "title": , }, Object { "status": "incomplete", - "title": "Setting old index to read-only", + "title": , }, Object { "status": "incomplete", - "title": "Creating new index", + "title": , }, Object { "status": "incomplete", - "title": "Reindexing documents", + "title": , }, Object { "status": "incomplete", - "title": "Swapping original index with alias", + "title": , }, Object { "status": "incomplete", - "title": "Resuming Machine Learning jobs", + "title": , }, ] } diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.tsx index c5b43bf04d8ca..0510752b04e9a 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/progress.tsx @@ -14,6 +14,7 @@ import { EuiProgress, EuiText, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; import { IndexGroup, ReindexStatus, ReindexStep } from '../../../../../../../common/types'; import { LoadingState } from '../../../../../types'; @@ -50,19 +51,40 @@ const ReindexProgressBar: React.StatelessComponent<{ ); - let cancelText: string; + let cancelText: React.ReactNode; switch (cancelLoadingState) { case LoadingState.Loading: - cancelText = 'Cancelling…'; + cancelText = ( + + ); break; case LoadingState.Success: - cancelText = 'Cancelled'; + cancelText = ( + + ); break; case LoadingState.Error: cancelText = 'Could not cancel'; + cancelText = ( + + ); break; default: - cancelText = 'Cancel'; + cancelText = ( + + ); } return ( @@ -130,7 +152,15 @@ export const ReindexProgress: React.StatelessComponent<{ // The reindexing step is special because it combines the starting and complete statuses into a single UI // with a progress bar. - const reindexingDocsStep = { title: 'Reindexing documents' } as StepProgressStep; + const reindexingDocsStep = { + title: ( + + ), + } as StepProgressStep; + if ( status === ReindexStatus.failed && (lastCompletedStep === ReindexStep.newIndexCreated || @@ -165,16 +195,31 @@ export const ReindexProgress: React.StatelessComponent<{ const steps = [ { - title: 'Setting old index to read-only', + title: ( + + ), ...stepDetails(ReindexStep.readonly), }, { - title: 'Creating new index', + title: ( + + ), ...stepDetails(ReindexStep.newIndexCreated), }, reindexingDocsStep, { - title: 'Swapping original index with alias', + title: ( + + ), ...stepDetails(ReindexStep.aliasCreated), }, ]; @@ -182,20 +227,40 @@ export const ReindexProgress: React.StatelessComponent<{ // If this index is part of an index group, add the approriate group services steps. if (indexGroup === IndexGroup.ml) { steps.unshift({ - title: 'Pausing Machine Learning jobs', + title: ( + + ), ...stepDetails(ReindexStep.indexGroupServicesStopped), }); steps.push({ - title: 'Resuming Machine Learning jobs', + title: ( + + ), ...stepDetails(ReindexStep.indexGroupServicesStarted), }); } else if (indexGroup === IndexGroup.watcher) { steps.unshift({ - title: 'Stopping Watcher', + title: ( + + ), ...stepDetails(ReindexStep.indexGroupServicesStopped), }); steps.push({ - title: 'Resuming Watcher', + title: ( + + ), ...stepDetails(ReindexStep.indexGroupServicesStarted), }); } diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/step_progress.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/step_progress.tsx index 5e44b5f58e351..78537b16cc9c6 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/step_progress.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/step_progress.tsx @@ -71,7 +71,7 @@ const Step: React.StatelessComponent = ({ }; export interface StepProgressStep { - title: string; + title: React.ReactNode; status: STATUS; children?: ReactNode; } @@ -84,8 +84,9 @@ export const StepProgress: React.StatelessComponent<{ }> = ({ steps }) => { return (
+ {/* Use the index as the key only works here because these values do not change order after mounting. */} {steps.map((step, idx) => ( - + ))}
); diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warning_step.test.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warning_step.test.tsx index 230878a2fd31b..0ba13fc630c6e 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warning_step.test.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warning_step.test.tsx @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { I18nProvider } from '@kbn/i18n/react'; import { mount, shallow } from 'enzyme'; import React from 'react'; @@ -22,7 +23,11 @@ describe('WarningsFlyoutStep', () => { }); it('does not allow proceeding until all are checked', () => { - const wrapper = mount(); + const wrapper = mount( + + + + ); const button = wrapper.find('EuiButton'); button.simulate('click'); diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warnings_step.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warnings_step.tsx index d14248b90064b..d4602b99c94b2 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warnings_step.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/checkup/deprecations/reindex/flyout/warnings_step.tsx @@ -20,10 +20,47 @@ import { EuiSpacer, EuiText, } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; import { ReindexWarning } from '../../../../../../../common/types'; +interface CheckedIds { + [id: string]: boolean; +} + export const idForWarning = (warning: ReindexWarning) => `reindexWarning-${warning}`; +const WarningCheckbox: React.StatelessComponent<{ + checkedIds: CheckedIds; + warning: ReindexWarning; + label: React.ReactNode; + description: React.ReactNode; + documentationUrl: string; + onChange: (event: React.ChangeEvent) => void; +}> = ({ checkedIds, warning, label, onChange, description, documentationUrl }) => ( + + + {label}} + checked={checkedIds[idForWarning(warning)]} + onChange={onChange} + /> +

+ {description} +
+ + + +

+
+ + +
+); + interface WarningsConfirmationFlyoutProps { closeFlyout: () => void; warnings: ReindexWarning[]; @@ -31,7 +68,7 @@ interface WarningsConfirmationFlyoutProps { } interface WarningsConfirmationFlyoutState { - checkedIds: { [id: string]: boolean }; + checkedIds: CheckedIds; } /** @@ -67,117 +104,123 @@ export class WarningsFlyoutStep extends React.Component< + } color="danger" iconType="alert" >

- Back up your index, then proceed with the reindex by accepting each breaking change. +

{warnings.includes(ReindexWarning.allField) && ( - - - - _all field will be removed - - } - checked={checkedIds[idForWarning(ReindexWarning.allField)]} - onChange={this.onChange} + _all, + }} + /> + } + description={ + _all, + }} /> -

- The _all meta field is no longer supported in 7.0. Reindexing - removes the _all field in the new index. Ensure that no - application code or scripts reply on this field. -
- - Documentation - -

-
- - -
+ } + documentationUrl="https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_mappings_changes.html#_the_literal__all_literal_meta_field_is_now_disabled_by_default" + /> )} {warnings.includes(ReindexWarning.apmReindex) && ( - - - This index will be converted to ECS format} - checked={checkedIds[idForWarning(ReindexWarning.apmReindex)]} - onChange={this.onChange} + -

- Starting in version 7.0.0, APM data will be represented in the Elastic Common - Schema. Historical APM data will not visible until it's reindexed. -
- - Documentation - -

-
- - -
+ } + description={ + + } + documentationUrl="https://www.elastic.co/guide/en/apm/get-started/master/apm-release-notes.html" + /> )} {warnings.includes(ReindexWarning.booleanFields) && ( - - - - Boolean data in _source might change - - } - checked={checkedIds[idForWarning(ReindexWarning.booleanFields)]} - onChange={this.onChange} + _source }} + /> + } + description={ + true, + false: false, + yes: "yes", + on: "on", + one: 1, + }} /> -

- If a documents contain a boolean field that is neither true or{' '} - false (for example, "yes",{' '} - "on", 1), reindexing converts these fields - to true or false. Ensure that no application - code or scripts rely on boolean fields in the deprecated format. -
- - Documentation - -

-
- - -
+ } + documentationUrl="https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_mappings_changes.html#_coercion_of_boolean_field" + /> )}
- Cancel + - Continue with reindex + diff --git a/x-pack/plugins/upgrade_assistant/public/components/tabs/overview/index.tsx b/x-pack/plugins/upgrade_assistant/public/components/tabs/overview/index.tsx index 6d7ffc98e7939..834f5f4afe5f6 100644 --- a/x-pack/plugins/upgrade_assistant/public/components/tabs/overview/index.tsx +++ b/x-pack/plugins/upgrade_assistant/public/components/tabs/overview/index.tsx @@ -32,8 +32,8 @@ export const OverviewTab: StatelessComponent = props =