1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/chart/useRealTimeMetrics.ts
Sebastian Malton 2e2283bcc9
enfore unix line endings and always ending files with line endings (#1997)
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2021-01-21 08:09:41 -05:00

46 lines
1.2 KiB
TypeScript

import moment from "moment";
import { useState, useEffect } from "react";
import { useInterval } from "../../hooks";
type IMetricValues = [number, string][];
type IChartData = { x: number; y: string }[];
const defaultParams = {
fetchInterval: 15,
updateInterval: 5
};
export function useRealTimeMetrics(metrics: IMetricValues, chartData: IChartData, params = defaultParams) {
const [index, setIndex] = useState(0);
const { fetchInterval, updateInterval } = params;
const rangeMetrics = metrics.slice(-updateInterval);
const steps = fetchInterval / updateInterval;
const data = [...chartData];
useEffect(() => {
setIndex(0);
}, [metrics]);
useInterval(() => {
if (index < steps + 1) {
setIndex(index + steps - 1);
}
}, updateInterval * 1000);
if (data.length && metrics.length) {
const lastTime = data[data.length - 1].x;
const values = [];
for (let i = 0; i < 3; i++) {
values[i] = moment.unix(lastTime).add(i + 1, "m").unix();
}
data.push(
{ x: values[0], y: "0" },
{ x: values[1], y: parseFloat(rangeMetrics[index][1]).toFixed(3) },
{ x: values[2], y: "0" }
);
}
return data;
}