Skip to content

Commit c2dac03

Browse files
committed
[Metrics UI] Setup commonly used time ranges in timepicker
1 parent ebb2989 commit c2dac03

File tree

2 files changed

+94
-37
lines changed

2 files changed

+94
-37
lines changed

x-pack/legacy/plugins/infra/public/components/metrics_explorer/toolbar.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { EuiFlexGroup, EuiFlexItem, EuiSuperDatePicker, EuiText } from '@elastic/eui';
7+
import {
8+
EuiFlexGroup,
9+
EuiFlexItem,
10+
EuiSuperDatePicker,
11+
EuiText,
12+
EuiSuperDatePickerCommonRange,
13+
} from '@elastic/eui';
814
import { FormattedMessage } from '@kbn/i18n/react';
915
import React from 'react';
1016
import { IIndexPattern } from 'src/plugins/data/public';
@@ -26,6 +32,7 @@ import { MetricsExplorerChartOptions as MetricsExplorerChartOptionsComponent } f
2632
import { SavedViewsToolbarControls } from '../saved_views/toolbar_control';
2733
import { MetricExplorerViewState } from '../../pages/infrastructure/metrics_explorer/use_metric_explorer_state';
2834
import { metricsExplorerViewSavedObjectType } from '../../../common/saved_objects/metrics_explorer_view';
35+
import { useKibanaUiSetting } from '../../utils/use_kibana_ui_setting';
2936

3037
interface Props {
3138
derivedIndexPattern: IIndexPattern;
@@ -43,6 +50,12 @@ interface Props {
4350
onViewStateChange: (vs: MetricExplorerViewState) => void;
4451
}
4552

53+
interface QueryRange {
54+
from: string;
55+
to: string;
56+
display: string;
57+
}
58+
4659
export const MetricsExplorerToolbar = ({
4760
timeRange,
4861
derivedIndexPattern,
@@ -59,6 +72,14 @@ export const MetricsExplorerToolbar = ({
5972
onViewStateChange,
6073
}: Props) => {
6174
const isDefaultOptions = options.aggregation === 'avg' && options.metrics.length === 0;
75+
const [timepickerQuickRanges] = useKibanaUiSetting('timepicker:quickRanges');
76+
const commonlyUsedRanges: EuiSuperDatePickerCommonRange[] = timepickerQuickRanges
77+
? timepickerQuickRanges.map((r: QueryRange) => ({
78+
start: r.from,
79+
end: r.to,
80+
label: r.display,
81+
}))
82+
: [];
6283
return (
6384
<Toolbar>
6485
<EuiFlexGroup alignItems="center">
@@ -134,6 +155,7 @@ export const MetricsExplorerToolbar = ({
134155
end={timeRange.to}
135156
onTimeChange={({ start, end }) => onTimeChange(start, end)}
136157
onRefresh={onRefresh}
158+
commonlyUsedRanges={commonlyUsedRanges}
137159
/>
138160
</EuiFlexItem>
139161
</EuiFlexGroup>

x-pack/legacy/plugins/infra/public/pages/metrics/components/time_controls.tsx

Lines changed: 71 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { EuiSuperDatePicker, OnRefreshChangeProps, OnTimeChangeProps } from '@elastic/eui';
8-
import React from 'react';
7+
import {
8+
EuiSuperDatePicker,
9+
OnRefreshChangeProps,
10+
OnTimeChangeProps,
11+
EuiSuperDatePickerCommonRange,
12+
} from '@elastic/eui';
13+
import React, { useCallback } from 'react';
914
import euiStyled from '../../../../../../common/eui_styled_components';
1015
import { MetricsTimeInput } from '../containers/with_metrics_time';
16+
import { useKibanaUiSetting } from '../../../utils/use_kibana_ui_setting';
1117

1218
interface MetricsTimeControlsProps {
1319
currentTimeRange: MetricsTimeInput;
@@ -19,42 +25,71 @@ interface MetricsTimeControlsProps {
1925
onRefresh: () => void;
2026
}
2127

22-
export class MetricsTimeControls extends React.Component<MetricsTimeControlsProps> {
23-
public render() {
24-
const { currentTimeRange, isLiveStreaming, refreshInterval } = this.props;
25-
return (
26-
<MetricsTimeControlsContainer>
27-
<EuiSuperDatePicker
28-
start={currentTimeRange.from}
29-
end={currentTimeRange.to}
30-
isPaused={!isLiveStreaming}
31-
refreshInterval={refreshInterval ? refreshInterval : 0}
32-
onTimeChange={this.handleTimeChange}
33-
onRefreshChange={this.handleRefreshChange}
34-
onRefresh={this.props.onRefresh}
35-
/>
36-
</MetricsTimeControlsContainer>
37-
);
38-
}
39-
40-
private handleTimeChange = ({ start, end }: OnTimeChangeProps) => {
41-
this.props.onChangeTimeRange({
42-
from: start,
43-
to: end,
44-
interval: '>=1m',
45-
});
46-
};
47-
48-
private handleRefreshChange = ({ isPaused, refreshInterval }: OnRefreshChangeProps) => {
49-
if (isPaused) {
50-
this.props.setAutoReload(false);
51-
} else {
52-
this.props.setRefreshInterval(refreshInterval);
53-
this.props.setAutoReload(true);
54-
}
55-
};
28+
interface QueryRange {
29+
from: string;
30+
to: string;
31+
display: string;
5632
}
5733

34+
export const MetricsTimeControls = (props: MetricsTimeControlsProps) => {
35+
const [timepickerQuickRanges] = useKibanaUiSetting('timepicker:quickRanges');
36+
const {
37+
onChangeTimeRange,
38+
onRefresh,
39+
currentTimeRange,
40+
isLiveStreaming,
41+
refreshInterval,
42+
setAutoReload,
43+
setRefreshInterval,
44+
} = props;
45+
46+
const commonlyUsedRanges: EuiSuperDatePickerCommonRange[] = timepickerQuickRanges
47+
? timepickerQuickRanges.map((r: QueryRange) => ({
48+
start: r.from,
49+
end: r.to,
50+
label: r.display,
51+
}))
52+
: [];
53+
54+
const handleTimeChange = useCallback(
55+
({ start, end }: OnTimeChangeProps) => {
56+
onChangeTimeRange({
57+
from: start,
58+
to: end,
59+
interval: '>=1m',
60+
});
61+
},
62+
[onChangeTimeRange]
63+
);
64+
65+
const handleRefreshChange = useCallback(
66+
({ isPaused, refreshInterval: _refreshInterval }: OnRefreshChangeProps) => {
67+
if (isPaused) {
68+
setAutoReload(false);
69+
} else {
70+
setRefreshInterval(_refreshInterval);
71+
setAutoReload(true);
72+
}
73+
},
74+
[setAutoReload, setRefreshInterval]
75+
);
76+
77+
return (
78+
<MetricsTimeControlsContainer>
79+
<EuiSuperDatePicker
80+
start={currentTimeRange.from}
81+
end={currentTimeRange.to}
82+
isPaused={!isLiveStreaming}
83+
refreshInterval={refreshInterval ? refreshInterval : 0}
84+
onTimeChange={handleTimeChange}
85+
onRefreshChange={handleRefreshChange}
86+
onRefresh={onRefresh}
87+
commonlyUsedRanges={commonlyUsedRanges}
88+
/>
89+
</MetricsTimeControlsContainer>
90+
);
91+
};
92+
5893
const MetricsTimeControlsContainer = euiStyled.div`
5994
max-width: 750px;
6095
`;

0 commit comments

Comments
 (0)