diff --git a/web/src/components/Overview/Detail/Metrics/MetricLine.js b/web/src/components/Overview/Detail/Metrics/MetricLine.js index 85b1a388..1a0385aa 100644 --- a/web/src/components/Overview/Detail/Metrics/MetricLine.js +++ b/web/src/components/Overview/Detail/Metrics/MetricLine.js @@ -48,11 +48,8 @@ export default (props) => { }, }; return ( -
-
{props.title}
-
- -
+
+
); }; diff --git a/web/src/components/Overview/Detail/Metrics/MetricLineList.jsx b/web/src/components/Overview/Detail/Metrics/MetricLineList.jsx index d4a0d501..936bdd5f 100644 --- a/web/src/components/Overview/Detail/Metrics/MetricLineList.jsx +++ b/web/src/components/Overview/Detail/Metrics/MetricLineList.jsx @@ -3,53 +3,66 @@ import { Line } from "@ant-design/plots"; import styles from "./index.scss"; import MetricLine from "./MetricLine"; import { formatMessage } from "umi/locale"; +import { useState } from "react"; +import request from "@/utils/request"; +import MetricChart from "@/pages/Platform/Overview/components/MetricChart"; -export default ({ metrics = {}, renderExtraMetric }) => { - let newMetrics = Object.values(metrics).map((item) => { - let key = item.key; - let units = ""; - let newData = []; - item.lines.map((line) => { - let category = line.metric.label; - if (!units) { - if (line.metric.formatType.toLowerCase() == "bytes") { - units = line.metric.formatType; - } else { - units = line.metric.units; - } - } - - return line.data.map((ld) => { - newData.push({ - category: category, - x: formatter.dateUserDefined(parseInt(ld[0])), - y: ld[1], - }); - }); - }); - return { key: key, data: newData, units: units, order: item.order }; - }); - newMetrics = newMetrics.sort((a, b) => a.order - b.order); +export default (props) => { + const { action, timeRange, timezone, timeout, overview, renderExtraMetric, metrics = [], queryParams } = props return (
- {newMetrics.map((item) => { - if(["node_health", "parent_breaker", "index_health"].includes(item.key)){ - return null; - } - let config = { - data: item.data, - xField: "x", - yField: "y", - seriesField: "category", - title: `${formatMessage({ - id: "cluster.metrics.axis." + item.key + ".title", - })} ${item.units ? "(" + item.units + ")" : ""}`, - yUnits: item.units, - }; - return ; + {metrics.map((metricKey) => { + return ( + { + if (!metric) return metric; + let units = ""; + const newData = []; + (metric.lines || []).map((line) => { + let category = line.metric.label; + if (!units) { + if (line.metric.formatType.toLowerCase() == "bytes") { + units = line.metric.formatType; + } else { + units = line.metric.units; + } + } + + return line.data.map((ld) => { + newData.push({ + category: category, + x: formatter.dateUserDefined(parseInt(ld[0])), + y: ld[1], + }); + }); + }); + return { ...metric, data: newData, units }; + }} + customRenderChart={(metric) => { + if (!metric) return null + const config = { + data: metric.data, + xField: "x", + yField: "y", + seriesField: "category", + yUnits: metric.units, + }; + return + }} + /> + ) })} {renderExtraMetric ? renderExtraMetric() : null}
); -}; +}; \ No newline at end of file diff --git a/web/src/components/Overview/Detail/Metrics/MetricSeries.jsx b/web/src/components/Overview/Detail/Metrics/MetricSeries.jsx index a005abbe..8339b58e 100644 --- a/web/src/components/Overview/Detail/Metrics/MetricSeries.jsx +++ b/web/src/components/Overview/Detail/Metrics/MetricSeries.jsx @@ -1,38 +1,21 @@ import React, { useMemo, useEffect } from "react"; -import { ESPrefix } from "@/services/common"; -import useFetch from "@/lib/hooks/use_fetch"; -import { calculateBounds } from "@/components/vendor/data/common/query/timefilter"; import MetricLineList from "./MetricLineList"; +import { formatTimeRange } from "@/lib/elasticsearch/util"; -export default ({ action, timeRange, overview, setSpinning, renderExtraMetric }) => { +export default (props) => { - const queryParams = useMemo(() => { - const bounds = calculateBounds({ - from: timeRange.min, - to: timeRange.max, - }); - let params = { - min: bounds.min.valueOf(), - max: bounds.max.valueOf(), - }; - params.overview = overview; - return params; - }, [timeRange]); - - const { loading, error, value } = useFetch( - action, - { queryParams }, - [action, queryParams] - ); - - useEffect(() => { - setSpinning(loading); - }, [loading]); + const { action, bucketSize, timeRange, overview, setSpinning, renderExtraMetric, metrics = [] } = props - const metrics = useMemo(() => { - const { metrics = {} } = value || {}; - return metrics; - }, [value]); + const queryParams = useMemo(() => { + const newParams = formatTimeRange(timeRange); + if (overview) { + newParams.overview = overview; + } + if (bucketSize) { + newParams.bucket_size = bucketSize + } + return newParams; + }, [timeRange, bucketSize]); - return ; + return ; }; diff --git a/web/src/components/Overview/Detail/Metrics/index.js b/web/src/components/Overview/Detail/Metrics/index.js index 43255953..64877c0a 100644 --- a/web/src/components/Overview/Detail/Metrics/index.js +++ b/web/src/components/Overview/Detail/Metrics/index.js @@ -15,6 +15,7 @@ import { formatMessage } from "umi/locale"; import DatePicker from "@/common/src/DatePicker"; import { getLocale } from "umi/locale"; import { getTimezone } from "@/utils/utils"; +import { TIMEOUT_CACHE_KEY } from "../../Monitor"; const { TabPane } = Tabs; @@ -26,6 +27,7 @@ export default (props) => { linkMore, overviews, extra, + metrics = [], } = props; const [spinning, setSpinning] = useState(false); @@ -35,12 +37,14 @@ export default (props) => { max: "now", timeFormatter: formatter.dates(1), }, + timeInterval: '', + timeout: localStorage.getItem(TIMEOUT_CACHE_KEY) || '120s', }); const [refresh, setRefresh] = useState({ isRefreshPaused: false }); const [timeZone, setTimeZone] = useState(() => getTimezone()); - const handleTimeChange = ({ start, end }) => { + const handleTimeChange = ({ start, end, timeInterval, timeout }) => { const bounds = calculateBounds({ from: start, to: end, @@ -55,6 +59,8 @@ export default (props) => { max: end, timeFormatter: formatter.dates(intDay), }, + timeInterval: timeInterval || state.timeInterval, + timeout: timeout || state.timeout }); setSpinning(true); }; @@ -90,23 +96,35 @@ export default (props) => { {...refresh} onRefreshChange={setRefresh} onRefresh={handleTimeChange} + showTimeSetting={true} + showTimeInterval={true} + showTimeout={true} + timeout={state.timeout} + onTimeSettingChange={(timeSetting) => { + localStorage.setItem(TIMEOUT_CACHE_KEY, timeSetting.timeout) + setState({ + ...state, + timeInterval: timeSetting.timeInterval, + timeout: timeSetting.timeout + }); + }} timeZone={timeZone} onTimeZoneChange={setTimeZone} recentlyUsedRangesKey={'overview-detail'} />
-