diff --git a/x-pack/plugins/monitoring/public/components/apm/instance/status.js b/x-pack/plugins/monitoring/public/components/apm/instance/status.js index f68bf6a72d2f8..386ddeaa5bc10 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instance/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instance/status.js @@ -10,8 +10,10 @@ import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; import { formatMetric } from '../../../lib/format_number'; import { formatTimestampToDuration } from '../../../../common'; +import { CALCULATE_DURATION_SINCE } from '../../../../common/constants'; +import { FormattedMessage, injectI18n } from '@kbn/i18n/react'; -export function Status({ stats }) { +function StatusUI({ stats, intl }) { const { name, output, @@ -22,35 +24,62 @@ export function Status({ stats }) { const metrics = [ { - label: 'Name', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.nameLabel', + defaultMessage: 'Name', + }), value: name, dataTestSubj: 'name' }, { - label: 'Output', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.outputLabel', + defaultMessage: 'Output', + }), value: output, dataTestSubj: 'output' }, { - label: 'Version', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.versionLabel', + defaultMessage: 'Version', + }), value: version, dataTestSubj: 'version' }, { - label: 'Uptime', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.uptimeLabel', + defaultMessage: 'Uptime', + }), value: formatMetric(uptime, 'time_since'), dataTestSubj: 'uptime' }, { - label: 'Last Event', - value: formatTimestampToDuration(+moment(timeOfLastEvent), 'since') + ' ago', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.lastEventLabel', + defaultMessage: 'Last Event', + }), + value: intl.formatMessage({ + id: 'xpack.monitoring.apm.instance.status.lastEventDescription', + defaultMessage: '{timeOfLastEvent} ago' }, { + timeOfLastEvent: formatTimestampToDuration(+moment(timeOfLastEvent), CALCULATE_DURATION_SINCE) + }), dataTestSubj: 'timeOfLastEvent', } ]; const IconComponent = ({ status }) => ( - Status: + + ) + }} + /> ); @@ -62,3 +91,5 @@ export function Status({ stats }) { /> ); } + +export const Status = injectI18n(StatusUI); diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js index 66b67cedbf065..14c2fcb762e11 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/instances.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/instances.js @@ -16,18 +16,62 @@ import { Status } from './status'; import { SORT_ASCENDING, SORT_DESCENDING, TABLE_ACTION_UPDATE_FILTER } from '../../../../common/constants'; import { formatMetric } from '../../../lib/format_number'; import { formatTimestampToDuration } from '../../../../common'; +import { i18n } from '@kbn/i18n'; +import { injectI18n } from '@kbn/i18n/react'; const filterFields = [ 'name', 'type', 'version', 'output' ]; const columns = [ - { title: 'Name', sortKey: 'name', sortOrder: SORT_ASCENDING }, - { title: 'Output Enabled', sortKey: 'output' }, - { title: 'Total Events Rate', sortKey: 'total_events_rate', secondarySortOrder: SORT_DESCENDING }, - { title: 'Bytes Sent Rate', sortKey: 'bytes_sent_rate' }, - { title: 'Output Errors', sortKey: 'errors' }, - { title: 'Last Event', sortKey: 'time_of_last_event' }, - { title: 'Allocated Memory', sortKey: 'memory' }, - { title: 'Version', sortKey: 'version' }, + { + title: i18n.translate('xpack.monitoring.apm.instances.nameTitle', { + defaultMessage: 'Name' + }), + sortKey: 'name', + sortOrder: SORT_ASCENDING + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.outputEnabledTitle', { + defaultMessage: 'Output Enabled' + }), + sortKey: 'output' + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.totalEventsRateTitle', { + defaultMessage: 'Total Events Rate' + }), + sortKey: 'total_events_rate', + secondarySortOrder: SORT_DESCENDING + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.bytesSentRateTitle', { + defaultMessage: 'Bytes Sent Rate' + }), + sortKey: 'bytes_sent_rate' + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.outputErrorsTitle', { + defaultMessage: 'Output Errors' + }), + sortKey: 'errors' + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.lastEventTitle', { + defaultMessage: 'Last Event' + }), + sortKey: 'time_of_last_event' + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.allocatedMemoryTitle', { + defaultMessage: 'Allocated Memory' + }), + sortKey: 'memory' + }, + { + title: i18n.translate('xpack.monitoring.apm.instances.versionTitle', { + defaultMessage: 'Version' + }), + sortKey: 'version' + }, ]; const instanceRowFactory = () => { return function KibanaRow(props) { @@ -77,7 +121,7 @@ const instanceRowFactory = () => { }; }; -export function ApmServerInstances({ apms }) { +function ApmServerInstancesUI({ apms, intl }) { const { pageIndex, filterText, @@ -97,7 +141,10 @@ export function ApmServerInstances({ apms }) { sortKey={sortKey} sortOrder={sortOrder} onNewState={onNewState} - placeholder="Filter Instances..." + placeholder={intl.formatMessage({ + id: 'xpack.monitoring.apm.instances.filterInstancesPlaceholder', + defaultMessage: 'Filter Instances…' + })} filterFields={filterFields} columns={columns} rowComponent={instanceRowFactory()} @@ -105,3 +152,5 @@ export function ApmServerInstances({ apms }) { ); } + +export const ApmServerInstances = injectI18n(ApmServerInstancesUI); diff --git a/x-pack/plugins/monitoring/public/components/apm/instances/status.js b/x-pack/plugins/monitoring/public/components/apm/instances/status.js index e51063f02979b..fd32ce26bb294 100644 --- a/x-pack/plugins/monitoring/public/components/apm/instances/status.js +++ b/x-pack/plugins/monitoring/public/components/apm/instances/status.js @@ -10,8 +10,10 @@ import { SummaryStatus } from '../../summary_status'; import { ApmStatusIcon } from '../status_icon'; import { formatMetric } from '../../../lib/format_number'; import { formatTimestampToDuration } from '../../../../common'; +import { CALCULATE_DURATION_SINCE } from '../../../../common/constants'; +import { FormattedMessage, injectI18n } from '@kbn/i18n/react'; -export function Status({ stats }) { +function StatusUI({ stats, intl }) { const { apms: { total @@ -22,25 +24,46 @@ export function Status({ stats }) { const metrics = [ { - label: 'Servers', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instances.status.serversLabel', + defaultMessage: 'Servers', + }), value: total, dataTestSubj: 'total' }, { - label: 'Total Events', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instances.status.totalEventsLabel', + defaultMessage: 'Total Events', + }), value: formatMetric(totalEvents, '0.[0]a'), dataTestSubj: 'totalEvents' }, { - label: 'Last Event', - value: formatTimestampToDuration(+moment(timeOfLastEvent), 'since') + ' ago', + label: intl.formatMessage({ + id: 'xpack.monitoring.apm.instances.status.lastEventLabel', + defaultMessage: 'Last Event', + }), + value: intl.formatMessage({ + id: 'xpack.monitoring.apm.instances.status.lastEventDescription', + defaultMessage: '{timeOfLastEvent} ago' }, { + timeOfLastEvent: formatTimestampToDuration(+moment(timeOfLastEvent), CALCULATE_DURATION_SINCE) + }), dataTestSubj: 'timeOfLastEvent', } ]; const IconComponent = ({ status }) => ( - Status: + + ) + }} + /> ); @@ -52,3 +75,5 @@ export function Status({ stats }) { /> ); } + +export const Status = injectI18n(StatusUI); diff --git a/x-pack/plugins/monitoring/public/components/apm/status_icon.js b/x-pack/plugins/monitoring/public/components/apm/status_icon.js index 49fe0faed1ad1..8d193daa9b062 100644 --- a/x-pack/plugins/monitoring/public/components/apm/status_icon.js +++ b/x-pack/plugins/monitoring/public/components/apm/status_icon.js @@ -6,8 +6,9 @@ import React from 'react'; import { StatusIcon } from 'plugins/monitoring/components/status_icon'; +import { injectI18n } from '@kbn/i18n/react'; -export function ApmStatusIcon({ status, availability = true }) { +function ApmStatusIconUI({ status, availability = true, intl }) { const type = (() => { if (!availability) { return StatusIcon.TYPES.GRAY; @@ -18,6 +19,15 @@ export function ApmStatusIcon({ status, availability = true }) { })(); return ( - + ); } + +export const ApmStatusIcon = injectI18n(ApmStatusIconUI); diff --git a/x-pack/plugins/monitoring/public/components/beats/overview/__snapshots__/overview.test.js.snap b/x-pack/plugins/monitoring/public/components/beats/overview/__snapshots__/overview.test.js.snap index 924fcebd5c823..8e3491a8689f1 100644 --- a/x-pack/plugins/monitoring/public/components/beats/overview/__snapshots__/overview.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/beats/overview/__snapshots__/overview.test.js.snap @@ -191,7 +191,7 @@ exports[`Overview that overview page renders normally 1`] = ` hasShadow={false} paddingSize="m" > - @@ -211,7 +211,7 @@ exports[`Overview that overview page renders normally 1`] = ` hasShadow={false} paddingSize="m" > - @@ -231,7 +231,7 @@ exports[`Overview that overview page renders normally 1`] = ` hasShadow={false} paddingSize="m" > - @@ -251,7 +251,7 @@ exports[`Overview that overview page renders normally 1`] = ` hasShadow={false} paddingSize="m" > - @@ -313,7 +313,7 @@ exports[`Overview that overview page shows a message if there is no beats data 1 hasShadow={false} paddingSize="m" > - @@ -333,7 +333,7 @@ exports[`Overview that overview page shows a message if there is no beats data 1 hasShadow={false} paddingSize="m" > - @@ -353,7 +353,7 @@ exports[`Overview that overview page shows a message if there is no beats data 1 hasShadow={false} paddingSize="m" > - @@ -373,7 +373,7 @@ exports[`Overview that overview page shows a message if there is no beats data 1 hasShadow={false} paddingSize="m" > - diff --git a/x-pack/plugins/monitoring/public/components/chart/horizontal_legend.js b/x-pack/plugins/monitoring/public/components/chart/horizontal_legend.js index 169aabf693421..057658a9fa10e 100644 --- a/x-pack/plugins/monitoring/public/components/chart/horizontal_legend.js +++ b/x-pack/plugins/monitoring/public/components/chart/horizontal_legend.js @@ -9,8 +9,9 @@ import { includes, isFunction } from 'lodash'; import { EuiKeyboardAccessible, } from '@elastic/eui'; +import { FormattedMessage, injectI18n } from '@kbn/i18n/react'; -export class HorizontalLegend extends React.Component { +class HorizontalLegendUI extends React.Component { constructor() { super(); this.formatter = this.formatter.bind(this); @@ -24,7 +25,10 @@ export class HorizontalLegend extends React.Component { */ formatter(value) { if (value === null) { - return 'N/A'; + return (); } if (isFunction(this.props.tickFormatter)) { return this.props.tickFormatter(value); @@ -33,6 +37,7 @@ export class HorizontalLegend extends React.Component { } createSeries(row, rowIdx) { + const { intl } = this.props; const formatter = row.tickFormatter || this.formatter; const value = formatter(this.props.seriesValues[row.id]); const classes = ['col-md-4 col-xs-6 monRhythmChart__legendItem']; @@ -59,7 +64,10 @@ export class HorizontalLegend extends React.Component { { ' ' + row.label } @@ -83,3 +91,5 @@ export class HorizontalLegend extends React.Component { ); } } + +export const HorizontalLegend = injectI18n(HorizontalLegendUI); diff --git a/x-pack/plugins/monitoring/public/components/chart/info_tooltip.js b/x-pack/plugins/monitoring/public/components/chart/info_tooltip.js index a6a47153fda28..505eaec102d4e 100644 --- a/x-pack/plugins/monitoring/public/components/chart/info_tooltip.js +++ b/x-pack/plugins/monitoring/public/components/chart/info_tooltip.js @@ -5,6 +5,7 @@ */ import React from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; export function InfoTooltip({ series, bucketSize }) { const tableRows = series.map((item, index) => { @@ -28,7 +29,12 @@ export function InfoTooltip({ series, bucketSize }) { - + { tableRows } diff --git a/x-pack/plugins/monitoring/public/components/chart/monitoring_timeseries_container.js b/x-pack/plugins/monitoring/public/components/chart/monitoring_timeseries_container.js index abf8598230a67..4a48424f9ed08 100644 --- a/x-pack/plugins/monitoring/public/components/chart/monitoring_timeseries_container.js +++ b/x-pack/plugins/monitoring/public/components/chart/monitoring_timeseries_container.js @@ -14,8 +14,9 @@ import { InfoTooltip } from './info_tooltip'; import { EuiIconTip, EuiFlexGroup, EuiFlexItem, EuiTitle, EuiScreenReaderOnly } from '@elastic/eui'; +import { FormattedMessage, injectI18n } from '@kbn/i18n/react'; -export function MonitoringTimeseriesContainer({ series, onBrush }) { +function MonitoringTimeseriesContainerUI({ series, onBrush, intl }) { if (series === undefined) { return null; // still loading } @@ -25,7 +26,13 @@ export function MonitoringTimeseriesContainer({ series, onBrush }) { const units = getUnits(series); const bucketSize = get(first(series), 'bucket_size'); // bucket size will be the same for all metrics in all series - const seriesScreenReaderTextList = [`Interval: ${bucketSize}`] + const seriesScreenReaderTextList = [ + intl.formatMessage({ + id: 'xpack.monitoring.chart.seriesScreenReaderListDescription', + defaultMessage: 'Interval: {bucketSize}' }, { + bucketSize + }) + ] .concat(series.map(item => `${item.metric.label}: ${item.metric.description}`)); return ( @@ -35,7 +42,14 @@ export function MonitoringTimeseriesContainer({ series, onBrush }) { - This chart is not screen reader accessible + + + + +

{ getTitle(series) }{ units ? ` (${units})` : '' }

@@ -69,3 +83,5 @@ export function MonitoringTimeseriesContainer({ series, onBrush }) { ); } +export const MonitoringTimeseriesContainer = injectI18n(MonitoringTimeseriesContainerUI); + diff --git a/x-pack/plugins/monitoring/public/components/elasticsearch/ccr_shard/__snapshots__/ccr_shard.test.js.snap b/x-pack/plugins/monitoring/public/components/elasticsearch/ccr_shard/__snapshots__/ccr_shard.test.js.snap index aa5059ed84e16..9285aa7226e57 100644 --- a/x-pack/plugins/monitoring/public/components/elasticsearch/ccr_shard/__snapshots__/ccr_shard.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/elasticsearch/ccr_shard/__snapshots__/ccr_shard.test.js.snap @@ -131,7 +131,7 @@ exports[`CcrShard that it renders normally 1`] = ` hasShadow={false} paddingSize="m" > - +
- + diff --git a/x-pack/plugins/monitoring/public/directives/chart/index.js b/x-pack/plugins/monitoring/public/directives/chart/index.js index 7237a97f48887..48912e7ecba75 100644 --- a/x-pack/plugins/monitoring/public/directives/chart/index.js +++ b/x-pack/plugins/monitoring/public/directives/chart/index.js @@ -11,6 +11,7 @@ import { uiModules } from 'ui/modules'; import { timefilter } from 'ui/timefilter'; import { MonitoringTimeseriesContainer } from '../../components/chart/monitoring_timeseries_container'; import { EuiSpacer } from '@elastic/eui'; +import { I18nProvider } from '@kbn/i18n/react'; const uiModule = uiModules.get('plugins/monitoring/directives', []); uiModule.directive('monitoringChart', () => { @@ -30,13 +31,15 @@ uiModule.directive('monitoringChart', () => { scope.$watch('series', series => { render( - - - - , + + + + + + , $elem[0] ); }); diff --git a/x-pack/plugins/monitoring/public/views/apm/instance/index.js b/x-pack/plugins/monitoring/public/views/apm/instance/index.js index d815e2f537b4b..a9afb883ae725 100644 --- a/x-pack/plugins/monitoring/public/views/apm/instance/index.js +++ b/x-pack/plugins/monitoring/public/views/apm/instance/index.js @@ -19,6 +19,7 @@ import template from './index.html'; import { MonitoringViewBaseController } from '../../base_controller'; import { ApmServerInstance } from '../../../components/apm/instance'; import { timefilter } from 'ui/timefilter'; +import { I18nProvider } from '@kbn/i18n/react'; uiRoutes.when('/apm/instances/:uuid', { template, @@ -30,7 +31,7 @@ uiRoutes.when('/apm/instances/:uuid', { }, controller: class extends MonitoringViewBaseController { - constructor($injector, $scope) { + constructor($injector, $scope, i18n) { const $route = $injector.get('$route'); const title = $injector.get('title'); const globalState = $injector.get('globalState'); @@ -39,7 +40,12 @@ uiRoutes.when('/apm/instances/:uuid', { }); super({ - title: `APM - Instance`, + title: i18n('xpack.monitoring.apm.instance.routeTitle', { + defaultMessage: '{apm} - Instance', + values: { + apm: 'APM' + } + }), api: `../api/monitoring/v1/clusters/${globalState.cluster_uuid}/apm/${$route.current.params.uuid}`, defaultData: {}, reactNodeId: 'apmInstanceReact', @@ -63,11 +69,13 @@ uiRoutes.when('/apm/instances/:uuid', { renderReact(data, onBrush) { const component = ( - + + + ); super.renderReact(component); } diff --git a/x-pack/plugins/monitoring/public/views/apm/instances/index.js b/x-pack/plugins/monitoring/public/views/apm/instances/index.js index 9d91d64d2fbec..a49aad8ca912b 100644 --- a/x-pack/plugins/monitoring/public/views/apm/instances/index.js +++ b/x-pack/plugins/monitoring/public/views/apm/instances/index.js @@ -22,7 +22,7 @@ uiRoutes.when('/apm/instances', { }, }, controller: class extends MonitoringViewBaseTableController { - constructor($injector, $scope) { + constructor($injector, $scope, i18n) { const $route = $injector.get('$route'); const globalState = $injector.get('globalState'); $scope.cluster = find($route.current.locals.clusters, { @@ -30,7 +30,12 @@ uiRoutes.when('/apm/instances', { }); super({ - title: 'APM - Instances', + title: i18n('xpack.monitoring.apm.instances.routeTitle', { + defaultMessage: '{apm} - Instances', + values: { + apm: 'APM' + } + }), storageKey: 'apm.instances', api: `../api/monitoring/v1/clusters/${globalState.cluster_uuid}/apm/instances`, defaultData: {}, diff --git a/x-pack/plugins/monitoring/public/views/apm/overview/index.js b/x-pack/plugins/monitoring/public/views/apm/overview/index.js index 23a4581be7614..f06a60d43c1df 100644 --- a/x-pack/plugins/monitoring/public/views/apm/overview/index.js +++ b/x-pack/plugins/monitoring/public/views/apm/overview/index.js @@ -13,6 +13,7 @@ import template from './index.html'; import { MonitoringViewBaseController } from '../../base_controller'; import { ApmOverview } from '../../../components/apm/overview'; import { timefilter } from 'ui/timefilter'; +import { I18nProvider } from '@kbn/i18n/react'; uiRoutes.when('/apm', { template, @@ -54,10 +55,12 @@ uiRoutes.when('/apm', { renderReact(data, onBrush) { const component = ( - + + + ); super.renderReact(component); }
Interval + + {bucketSize}