Feature/monitor list externel linking (#53098) (#53518)

* update monitor list columns

* update columns

* update snaps

* fix type

* removed unused ii8n
This commit is contained in:
Shahzad 2019-12-18 21:04:50 +01:00 committed by GitHub
parent 81cbde5ed1
commit 42dadf3cd8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 291 additions and 291 deletions

View file

@ -5,6 +5,7 @@ exports[`MonitorBarSeries component renders a series when there are down items 1
style={
Object {
"height": 50,
"maxWidth": "1200px",
"width": "100%",
}
}

View file

@ -17,6 +17,8 @@ import {
} from '@elastic/charts';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n/react';
import { EuiText, EuiToolTip } from '@elastic/eui';
import { SummaryHistogramPoint } from '../../../../common/graphql/types';
import { getColorsMap } from './get_colors_map';
import { getChartDateLabel, seriesHasDownValues } from '../../../lib/helper';
@ -54,7 +56,7 @@ export const MonitorBarSeries = ({
const id = getSpecId('downSeries');
return seriesHasDownValues(histogramSeries) ? (
<div style={{ height: 50, width: '100%' }}>
<div style={{ height: 50, width: '100%', maxWidth: '1200px' }}>
<Chart>
<Settings xDomain={{ min: absoluteStartDate, max: absoluteEndDate }} />
<Axis
@ -78,5 +80,18 @@ export const MonitorBarSeries = ({
/>
</Chart>
</div>
) : null;
) : (
<EuiToolTip
position="top"
content={
<FormattedMessage
id="xpack.uptime.monitorList.noDownHistory"
defaultMessage="This monitor has never been {emphasizedText} during the selected time range."
values={{ emphasizedText: <strong>down</strong> }}
/>
}
>
<EuiText color="secondary">--</EuiText>
</EuiToolTip>
);
};

View file

@ -26,6 +26,7 @@ exports[`MonitorList component renders a no items message when no data is provid
"field": "state.monitor.status",
"name": "Status",
"render": [Function],
"width": "20%",
},
Object {
"align": "left",
@ -33,15 +34,10 @@ exports[`MonitorList component renders a no items message when no data is provid
"name": "Name",
"render": [Function],
"sortable": true,
"width": "30%",
},
Object {
"align": "left",
"field": "state.url.full",
"name": "URL",
"render": [Function],
"sortable": true,
},
Object {
"align": "center",
"field": "histogram.points",
"mobileOptions": Object {
"show": false,
@ -51,23 +47,11 @@ exports[`MonitorList component renders a no items message when no data is provid
},
Object {
"align": "right",
"field": "state",
"hasActions": true,
"id": "actions",
"mobileOptions": Object {
"header": false,
},
"name": "Integrations",
"render": [Function],
},
Object {
"align": "left",
"field": "monitor_id",
"isExpander": true,
"name": "",
"render": [Function],
"sortable": true,
"width": "24px",
},
]
}
@ -133,6 +117,7 @@ exports[`MonitorList component renders the monitor list 1`] = `
"field": "state.monitor.status",
"name": "Status",
"render": [Function],
"width": "20%",
},
Object {
"align": "left",
@ -140,15 +125,10 @@ exports[`MonitorList component renders the monitor list 1`] = `
"name": "Name",
"render": [Function],
"sortable": true,
"width": "30%",
},
Object {
"align": "left",
"field": "state.url.full",
"name": "URL",
"render": [Function],
"sortable": true,
},
Object {
"align": "center",
"field": "histogram.points",
"mobileOptions": Object {
"show": false,
@ -158,23 +138,11 @@ exports[`MonitorList component renders the monitor list 1`] = `
},
Object {
"align": "right",
"field": "state",
"hasActions": true,
"id": "actions",
"mobileOptions": Object {
"header": false,
},
"name": "Integrations",
"render": [Function],
},
Object {
"align": "left",
"field": "monitor_id",
"isExpander": true,
"name": "",
"render": [Function],
"sortable": true,
"width": "24px",
},
]
}

View file

@ -26,6 +26,7 @@ exports[`MonitorList component renders a no items message when no data is provid
"field": "state.monitor.status",
"name": "Status",
"render": [Function],
"width": "20%",
},
Object {
"align": "left",
@ -33,15 +34,10 @@ exports[`MonitorList component renders a no items message when no data is provid
"name": "Name",
"render": [Function],
"sortable": true,
"width": "30%",
},
Object {
"align": "left",
"field": "state.url.full",
"name": "URL",
"render": [Function],
"sortable": true,
},
Object {
"align": "center",
"field": "histogram.points",
"mobileOptions": Object {
"show": false,
@ -51,23 +47,11 @@ exports[`MonitorList component renders a no items message when no data is provid
},
Object {
"align": "right",
"field": "state",
"hasActions": true,
"id": "actions",
"mobileOptions": Object {
"header": false,
},
"name": "Integrations",
"render": [Function],
},
Object {
"align": "left",
"field": "monitor_id",
"isExpander": true,
"name": "",
"render": [Function],
"sortable": true,
"width": "24px",
},
]
}
@ -133,6 +117,7 @@ exports[`MonitorList component renders the monitor list 1`] = `
"field": "state.monitor.status",
"name": "Status",
"render": [Function],
"width": "20%",
},
Object {
"align": "left",
@ -140,15 +125,10 @@ exports[`MonitorList component renders the monitor list 1`] = `
"name": "Name",
"render": [Function],
"sortable": true,
"width": "30%",
},
Object {
"align": "left",
"field": "state.url.full",
"name": "URL",
"render": [Function],
"sortable": true,
},
Object {
"align": "center",
"field": "histogram.points",
"mobileOptions": Object {
"show": false,
@ -158,23 +138,11 @@ exports[`MonitorList component renders the monitor list 1`] = `
},
Object {
"align": "right",
"field": "state",
"hasActions": true,
"id": "actions",
"mobileOptions": Object {
"header": false,
},
"name": "Integrations",
"render": [Function],
},
Object {
"align": "left",
"field": "monitor_id",
"isExpander": true,
"name": "",
"render": [Function],
"sortable": true,
"width": "24px",
},
]
}

View file

@ -10,13 +10,10 @@ import {
EuiPanel,
EuiTitle,
EuiButtonIcon,
EuiIcon,
EuiLink,
EuiFlexItem,
EuiSpacer,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import { i18n } from '@kbn/i18n';
import { get } from 'lodash';
import React, { useState, Fragment } from 'react';
import { withUptimeGraphQL, UptimeGraphQLQueryProps } from '../../higher_order';
@ -32,8 +29,8 @@ import { ExpandedRowMap } from './types';
import { MonitorListDrawer } from './monitor_list_drawer';
import { MonitorBarSeries } from '../charts';
import { MonitorPageLink } from './monitor_page_link';
import { MonitorListActionsPopover } from './monitor_list_actions_popover';
import { OverviewPageLink } from './overview_page_link';
import * as labels from './translations';
interface MonitorListQueryResult {
monitorStates?: MonitorSummaryResult;
@ -80,6 +77,68 @@ export const MonitorListComponent = (props: Props) => {
}, {});
};
const columns = [
{
align: 'left',
width: '20%',
field: 'state.monitor.status',
name: labels.STATUS_COLUMN_LABEL,
render: (status: string, { state: { timestamp } }: MonitorSummary) => {
return <MonitorListStatusColumn status={status} timestamp={timestamp} />;
},
},
{
align: 'left',
width: '30%',
field: 'state.monitor.name',
name: labels.NAME_COLUMN_LABEL,
render: (name: string, summary: MonitorSummary) => (
<MonitorPageLink monitorId={summary.monitor_id} linkParameters={linkParameters}>
{name ? name : `Unnamed - ${summary.monitor_id}`}
</MonitorPageLink>
),
sortable: true,
},
{
align: 'center',
field: 'histogram.points',
name: labels.HISTORY_COLUMN_LABEL,
mobileOptions: {
show: false,
},
render: (histogramSeries: SummaryHistogramPoint[] | null) => (
<MonitorBarSeries
absoluteStartDate={absoluteStartDate}
absoluteEndDate={absoluteEndDate}
dangerColor={dangerColor}
histogramSeries={histogramSeries}
/>
),
},
{
align: 'right',
field: 'monitor_id',
name: '',
sortable: true,
isExpander: true,
render: (id: string) => {
return (
<EuiButtonIcon
aria-label={labels.getExpandDrawerLabel(id)}
iconType={drawerIds.includes(id) ? 'arrowUp' : 'arrowDown'}
onClick={() => {
if (drawerIds.includes(id)) {
updateDrawerIds(drawerIds.filter(p => p !== id));
} else {
updateDrawerIds([...drawerIds, id]);
}
}}
/>
);
},
},
];
return (
<Fragment>
<EuiPanel>
@ -93,11 +152,7 @@ export const MonitorListComponent = (props: Props) => {
</EuiTitle>
<EuiSpacer size="s" />
<EuiBasicTable
aria-label={i18n.translate('xpack.uptime.monitorList.table.description', {
defaultMessage:
'Monitor Status table with columns for Status, Name, URL, IP, Downtime History and Integrations. The table is currently displaying {length} items.',
values: { length: items.length },
})}
aria-label={labels.getDescriptionLabel(items.length)}
error={errors ? formatUptimeGraphQLErrorList(errors) : errors}
// Only set loading to true when there are no items present to prevent the bug outlined in
// in https://github.com/elastic/eui/issues/2393 . Once that is fixed we can simply set the value here to
@ -111,132 +166,13 @@ export const MonitorListComponent = (props: Props) => {
// TODO: not needed without sorting and pagination
// onChange={onChange}
noItemsMessage={
hasActiveFilters
? i18n.translate('xpack.uptime.monitorList.noItemForSelectedFiltersMessage', {
defaultMessage: 'No monitors found for selected filter criteria',
description:
'This message is show if there are no monitors in the table and some filter or search criteria exists',
})
: i18n.translate('xpack.uptime.monitorList.noItemMessage', {
defaultMessage: 'No uptime monitors found',
description:
'This message is shown if the monitors table is rendered but has no items.',
})
hasActiveFilters ? labels.NO_MONITOR_ITEM_SELECTED : labels.NO_DATA_MESSAGE
}
// TODO: reintegrate pagination in future release
// pagination={pagination}
// TODO: reintegrate sorting in future release
// sorting={sorting}
columns={[
{
align: 'left',
field: 'state.monitor.status',
name: i18n.translate('xpack.uptime.monitorList.statusColumnLabel', {
defaultMessage: 'Status',
}),
render: (status: string, { state: { timestamp } }: MonitorSummary) => {
return <MonitorListStatusColumn status={status} timestamp={timestamp} />;
},
},
{
align: 'left',
field: 'state.monitor.name',
name: i18n.translate('xpack.uptime.monitorList.nameColumnLabel', {
defaultMessage: 'Name',
}),
render: (name: string, summary: MonitorSummary) => (
<MonitorPageLink monitorId={summary.monitor_id} linkParameters={linkParameters}>
{name ? name : `Unnamed - ${summary.monitor_id}`}
</MonitorPageLink>
),
sortable: true,
},
{
align: 'left',
field: 'state.url.full',
name: i18n.translate('xpack.uptime.monitorList.urlColumnLabel', {
defaultMessage: 'URL',
}),
render: (url: string, summary: MonitorSummary) => (
<Fragment>
<EuiLink href={url} target="_blank" color="text">
{url} <EuiIcon size="s" type="popout" color="subbdued" />
</EuiLink>
</Fragment>
),
sortable: true,
},
{
field: 'histogram.points',
name: i18n.translate('xpack.uptime.monitorList.monitorHistoryColumnLabel', {
defaultMessage: 'Downtime history',
}),
mobileOptions: {
show: false,
},
render: (histogramSeries: SummaryHistogramPoint[] | null) => (
<MonitorBarSeries
absoluteStartDate={absoluteStartDate}
absoluteEndDate={absoluteEndDate}
dangerColor={dangerColor}
histogramSeries={histogramSeries}
/>
),
},
{
id: 'actions',
align: 'right',
field: 'state',
hasActions: true,
mobileOptions: {
header: false,
},
name: i18n.translate(
'xpack.uptime.monitorList.observabilityIntegrationsColumnLabel',
{
defaultMessage: 'Integrations',
description:
'The heading column of some action buttons that will take users to other Observability apps',
}
),
render: (state: any, summary: MonitorSummary) => (
<MonitorListActionsPopover summary={summary} />
),
},
{
align: 'left',
field: 'monitor_id',
name: '',
sortable: true,
width: '24px',
isExpander: true,
render: (id: string) => {
return (
<EuiButtonIcon
aria-label={i18n.translate(
'xpack.uptime.monitorList.expandDrawerButton.ariaLabel',
{
defaultMessage: 'Expand row for monitor with ID {id}',
description:
'The user can click a button on this table and expand further details.',
values: {
id,
},
}
)}
iconType={drawerIds.includes(id) ? 'arrowUp' : 'arrowDown'}
onClick={() => {
if (drawerIds.includes(id)) {
updateDrawerIds(drawerIds.filter(p => p !== id));
} else {
updateDrawerIds([...drawerIds, id]);
}
}}
/>
);
},
},
]}
columns={columns}
/>
<EuiSpacer size="m" />
<EuiFlexGroup responsive={false}>

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import { EuiButtonIcon, EuiPopover } from '@elastic/eui';
import { EuiPopover, EuiButton } from '@elastic/eui';
import React, { useContext } from 'react';
import { i18n } from '@kbn/i18n';
import { get } from 'lodash';
@ -43,7 +43,7 @@ const MonitorListActionsPopoverComponent = ({
return (
<EuiPopover
button={
<EuiButtonIcon
<EuiButton
aria-label={i18n.translate(
'xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel',
{
@ -53,10 +53,12 @@ const MonitorListActionsPopoverComponent = ({
values: { monitorUrl },
}
)}
color="subdued"
iconType="boxesHorizontal"
onClick={() => togglePopoverIsVisible({ id: popoverId, open: true })}
/>
iconType="arrowDown"
iconSide="right"
>
Integrations
</EuiButton>
}
closePopover={() => togglePopoverIsVisible({ id: popoverId, open: false })}
id={popoverId}

View file

@ -6,21 +6,68 @@ exports[`MonitorListDrawer component renders a MonitorListDrawer when there are
<EuiFlexItem
grow={true}
>
<EuiLink
href="https://expired.badssl.com"
target="_blank"
>
https://expired.badssl.com
<EuiIcon
color="subbdued"
size="s"
type="popout"
/>
</EuiLink>
<EuiText>
<EuiLink
href="https://expired.badssl.com"
target="_blank"
>
https://expired.badssl.com
<EuiIcon
color="subbdued"
size="s"
type="popout"
/>
</EuiLink>
</EuiText>
</EuiFlexItem>
<EuiFlexItem
grow={false}
>
<Connect(MonitorListActionsPopoverComponent)
summary={
Object {
"monitor_id": "foo",
"state": Object {
"checks": Array [
Object {
"monitor": Object {
"ip": "127.0.0.1",
"status": "up",
},
"timestamp": "121",
},
Object {
"monitor": Object {
"ip": "127.0.0.2",
"status": "down",
},
"timestamp": "123",
},
Object {
"monitor": Object {
"ip": "127.0.0.3",
"status": "up",
},
"timestamp": "125",
},
],
"summary": Object {
"down": 0,
"up": 1,
},
"timestamp": "123",
"url": Object {
"domain": "expired.badssl.com",
"full": "https://expired.badssl.com",
},
},
}
}
/>
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer
size="s"
size="m"
/>
<MonitorStatusList
checks={
@ -67,21 +114,54 @@ exports[`MonitorListDrawer component renders a MonitorListDrawer when there is o
<EuiFlexItem
grow={true}
>
<EuiLink
href="https://expired.badssl.com"
target="_blank"
>
https://expired.badssl.com
<EuiIcon
color="subbdued"
size="s"
type="popout"
/>
</EuiLink>
<EuiText>
<EuiLink
href="https://expired.badssl.com"
target="_blank"
>
https://expired.badssl.com
<EuiIcon
color="subbdued"
size="s"
type="popout"
/>
</EuiLink>
</EuiText>
</EuiFlexItem>
<EuiFlexItem
grow={false}
>
<Connect(MonitorListActionsPopoverComponent)
summary={
Object {
"monitor_id": "foo",
"state": Object {
"checks": Array [
Object {
"monitor": Object {
"ip": "127.0.0.1",
"status": "up",
},
"timestamp": "121",
},
],
"summary": Object {
"down": 0,
"up": 1,
},
"timestamp": "123",
"url": Object {
"domain": "expired.badssl.com",
"full": "https://expired.badssl.com",
},
},
}
}
/>
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer
size="s"
size="m"
/>
<MonitorStatusList
checks={

View file

@ -5,7 +5,7 @@ exports[`MonitorStatusList component renders checks 1`] = `
<MonitorStatusRow
locationNames={
Set {
"unnamed-location",
"Unnamed-location",
}
}
status="down"
@ -14,23 +14,6 @@ exports[`MonitorStatusList component renders checks 1`] = `
locationNames={Set {}}
status="up"
/>
<EuiSpacer
size="s"
/>
<EuiCallOut
color="warning"
>
<FormattedMessage
defaultMessage="Some heartbeat instances do not have a location defined. {link} to your heartbeat configuration."
id="xpack.uptime.monitorList.drawer.missingLocation"
values={
Object {
"link": <LocationLink />,
}
}
/>
</EuiCallOut>
<EuiSpacer />
</Fragment>
`;
@ -39,7 +22,7 @@ exports[`MonitorStatusList component renders null in place of child status with
<MonitorStatusRow
locationNames={
Set {
"unnamed-location",
"Unnamed-location",
}
}
status="down"
@ -48,22 +31,5 @@ exports[`MonitorStatusList component renders null in place of child status with
locationNames={Set {}}
status="up"
/>
<EuiSpacer
size="s"
/>
<EuiCallOut
color="warning"
>
<FormattedMessage
defaultMessage="Some heartbeat instances do not have a location defined. {link} to your heartbeat configuration."
id="xpack.uptime.monitorList.drawer.missingLocation"
values={
Object {
"link": <LocationLink />,
}
}
/>
</EuiCallOut>
<EuiSpacer />
</Fragment>
`;

View file

@ -16,7 +16,7 @@ exports[`MonitorStatusRow component renders status row when status is down 1`] =
/>
</EuiHealth>
<EuiSpacer
size="s"
size="xs"
/>
</Fragment>
`;
@ -37,7 +37,7 @@ exports[`MonitorStatusRow component renders status row when status is up 1`] = `
/>
</EuiHealth>
<EuiSpacer
size="s"
size="xs"
/>
</Fragment>
`;

View file

@ -2,6 +2,9 @@
exports[`MostRecentError component renders properly with mock data 1`] = `
Array [
<div
class="euiSpacer euiSpacer--l"
/>,
<div
class="euiText euiText--extraSmall"
>
@ -9,6 +12,9 @@ Array [
Most recent error (5 days ago)
</h3>
</div>,
<div
class="euiSpacer euiSpacer--s"
/>,
<button
class="euiLink euiLink--primary"
type="button"

View file

@ -5,7 +5,7 @@
*/
import React, { useEffect } from 'react';
import { EuiLink, EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui';
import { EuiLink, EuiSpacer, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui';
import { get } from 'lodash';
import styled from 'styled-components';
import { connect } from 'react-redux';
@ -16,6 +16,7 @@ import { MostRecentError } from './most_recent_error';
import { getMonitorDetails } from '../../../../state/selectors';
import { MonitorStatusList } from './monitor_status_list';
import { MonitorDetails } from '../../../../../common/runtime_types';
import { MonitorListActionsPopover } from '../monitor_list_actions_popover';
const ContainerDiv = styled.div`
padding: 10px;
@ -61,13 +62,18 @@ export function MonitorListDrawerComponent({
<ContainerDiv>
<EuiFlexGroup>
<EuiFlexItem grow={true}>
<EuiLink href={monitorUrl} target="_blank">
{monitorUrl}
<EuiIcon size="s" type="popout" color="subbdued" />
</EuiLink>
<EuiText>
<EuiLink href={monitorUrl} target="_blank">
{monitorUrl}
<EuiIcon size="s" type="popout" color="subbdued" />
</EuiLink>
</EuiText>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<MonitorListActionsPopover summary={summary} />
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer size="s" />
<EuiSpacer size="m" />
<MonitorStatusList checks={summary.state.checks} />
{monitorDetails && monitorDetails.error && (
<MostRecentError

View file

@ -5,7 +5,7 @@
*/
import React from 'react';
import { get } from 'lodash';
import { get, capitalize } from 'lodash';
import { EuiCallOut, EuiSpacer } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import { Check } from '../../../../../common/graphql/types';
@ -32,9 +32,9 @@ export const MonitorStatusList = ({ checks }: MonitorStatusListProps) => {
const location = get<string | null>(check, 'observer.geo.name', null) || UNNAMED_LOCATION;
if (check.monitor.status === UP) {
upChecks.add(location);
upChecks.add(capitalize(location));
} else if (check.monitor.status === DOWN) {
downChecks.add(location);
downChecks.add(capitalize(location));
}
});
@ -55,7 +55,7 @@ export const MonitorStatusList = ({ checks }: MonitorStatusListProps) => {
values={{ link: <LocationLink /> }}
/>
</EuiCallOut>
<EuiSpacer />
<EuiSpacer size="s" />
</>
)}
</>

View file

@ -57,7 +57,7 @@ export const MonitorStatusRow = ({ locationNames, status }: MonitorStatusRowProp
/>
)}
</EuiHealth>
<EuiSpacer size="s" />
<EuiSpacer size="xs" />
</>
);
};

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import React from 'react';
import { EuiText } from '@elastic/eui';
import { EuiText, EuiSpacer } from '@elastic/eui';
import moment from 'moment';
import { i18n } from '@kbn/i18n';
import { MonitorPageLink } from '../monitor_page_link';
@ -39,6 +39,7 @@ export const MostRecentError = ({ error, monitorId, timestamp }: MostRecentError
return (
<>
<EuiSpacer />
<EuiText size="xs">
<h3>
{i18n.translate('xpack.uptime.monitorList.mostRecentError.title', {
@ -48,6 +49,7 @@ export const MostRecentError = ({ error, monitorId, timestamp }: MostRecentError
})}
</h3>
</EuiText>
<EuiSpacer size="s" />
<MonitorPageLink monitorId={monitorId} linkParameters={linkParameters}>
{error?.message}
</MonitorPageLink>

View file

@ -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;
* you may not use this file except in compliance with the Elastic License.
*/
import { i18n } from '@kbn/i18n';
export const STATUS_COLUMN_LABEL = i18n.translate('xpack.uptime.monitorList.statusColumnLabel', {
defaultMessage: 'Status',
});
export const NAME_COLUMN_LABEL = i18n.translate('xpack.uptime.monitorList.nameColumnLabel', {
defaultMessage: 'Name',
});
export const HISTORY_COLUMN_LABEL = i18n.translate(
'xpack.uptime.monitorList.monitorHistoryColumnLabel',
{
defaultMessage: 'Downtime history',
}
);
export const getExpandDrawerLabel = (id: string) => {
return i18n.translate('xpack.uptime.monitorList.expandDrawerButton.ariaLabel', {
defaultMessage: 'Expand row for monitor with ID {id}',
description: 'The user can click a button on this table and expand further details.',
values: {
id,
},
});
};
export const getDescriptionLabel = (itemsLength: number) => {
return i18n.translate('xpack.uptime.monitorList.table.description', {
defaultMessage:
'Monitor Status table with columns for Status, Name, URL, IP, Downtime History and Integrations. The table is currently displaying {length} items.',
values: { length: itemsLength },
});
};
export const NO_MONITOR_ITEM_SELECTED = i18n.translate(
'xpack.uptime.monitorList.noItemForSelectedFiltersMessage',
{
defaultMessage: 'No monitors found for selected filter criteria',
description:
'This message is show if there are no monitors in the table and some filter or search criteria exists',
}
);
export const NO_DATA_MESSAGE = i18n.translate('xpack.uptime.monitorList.noItemMessage', {
defaultMessage: 'No uptime monitors found',
description: 'This message is shown if the monitors table is rendered but has no items.',
});

View file

@ -11790,11 +11790,9 @@
"xpack.uptime.monitorList.monitoringStatusTitle": "監視ステータス",
"xpack.uptime.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "ここをクリックしてAPM でドメイン「{domain}」を確認します。",
"xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "URL {monitorUrl}で監査のための移行ポップオーバーを開く",
"xpack.uptime.monitorList.observabilityIntegrationsColumnLabel": "統合",
"xpack.uptime.monitorList.statusColumn.downLabel": "ダウン",
"xpack.uptime.monitorList.statusColumn.upLabel": "アップ",
"xpack.uptime.monitorList.statusColumnLabel": "ステータス",
"xpack.uptime.monitorList.urlColumnLabel": "URL",
"xpack.uptime.monitorStatusBar.durationTextAriaLabel": "ミリ秒単位の監視時間",
"xpack.uptime.monitorStatusBar.healthStatus.durationInMillisecondsMessage": "{duration}ms",
"xpack.uptime.monitorStatusBar.healthStatusMessage.downLabel": "ダウン",

View file

@ -11818,11 +11818,9 @@
"xpack.uptime.monitorList.monitoringStatusTitle": "检测状态",
"xpack.uptime.monitorList.observabilityIntegrationsColumn.apmIntegrationLink.tooltip": "点击此处以在 APM 中查找“{domain}”。",
"xpack.uptime.monitorList.observabilityIntegrationsColumn.popoverIconButton.ariaLabel": "打开 url {monitorUrl} 的监测的集成弹出式窗口",
"xpack.uptime.monitorList.observabilityIntegrationsColumnLabel": "集成",
"xpack.uptime.monitorList.statusColumn.downLabel": "关闭",
"xpack.uptime.monitorList.statusColumn.upLabel": "运行",
"xpack.uptime.monitorList.statusColumnLabel": "状态",
"xpack.uptime.monitorList.urlColumnLabel": "URL",
"xpack.uptime.monitorStatusBar.durationTextAriaLabel": "监测持续时间(毫秒)",
"xpack.uptime.monitorStatusBar.healthStatus.durationInMillisecondsMessage": "{duration}ms",
"xpack.uptime.monitorStatusBar.healthStatusMessage.downLabel": "关闭",