1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/components/chart/useRealTimeMetrics.ts
Jari Kolehmainen 1d0815abd2
Lens app source code (#119)
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
2020-03-15 09:52:02 +02:00

43 lines
1.1 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;
}