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 }) {
- | Interval |
+
+
+ |
{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);
}