mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
* update monitor list columns * update columns * update snaps * fix type * removed unused ii8n
This commit is contained in:
parent
81cbde5ed1
commit
42dadf3cd8
17 changed files with 291 additions and 291 deletions
|
@ -5,6 +5,7 @@ exports[`MonitorBarSeries component renders a series when there are down items 1
|
|||
style={
|
||||
Object {
|
||||
"height": 50,
|
||||
"maxWidth": "1200px",
|
||||
"width": "100%",
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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}>
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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={
|
||||
|
|
|
@ -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>
|
||||
`;
|
||||
|
|
|
@ -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>
|
||||
`;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" />
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
|
|
|
@ -57,7 +57,7 @@ export const MonitorStatusRow = ({ locationNames, status }: MonitorStatusRowProp
|
|||
/>
|
||||
)}
|
||||
</EuiHealth>
|
||||
<EuiSpacer size="s" />
|
||||
<EuiSpacer size="xs" />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.',
|
||||
});
|
|
@ -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": "ダウン",
|
||||
|
|
|
@ -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": "关闭",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue