fix: rebase stats panel onto a better chart library

This commit is contained in:
garethgeorge
2024-05-19 18:44:13 -07:00
parent d023957028
commit 580fff5aed
4 changed files with 279 additions and 863 deletions
+164 -757
View File
File diff suppressed because it is too large Load Diff
+3 -6
View File
@@ -17,9 +17,6 @@
"@bufbuild/protobuf": "^1.6.0",
"@connectrpc/connect": "^1.2.0",
"@connectrpc/connect-web": "^1.2.0",
"@emotion/styled": "^11.11.0",
"@mui/material": "^5.15.11",
"@mui/x-charts": "^6.19.5",
"@types/lodash": "^4.14.202",
"@types/node": "^20.9.0",
"@types/react": "^18.2.37",
@@ -32,13 +29,13 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-js-cron": "^5.0.1",
"typescript": "^5.2.2"
"typescript": "^5.2.2",
"recharts": "^2.12.7"
},
"devDependencies": {
"@parcel/transformer-sass": "^2.10.3",
"cross-env": "^7.0.3",
"events": "^3.3.0",
"rimraf": "^5.0.5",
"stream-browserify": "^3.0.0"
"rimraf": "^5.0.5"
}
}
+108 -81
View File
@@ -1,5 +1,14 @@
import React, { useEffect, useState } from "react";
import { LineChart } from "@mui/x-charts/LineChart";
import {
LineChart,
Line,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
Legend,
ResponsiveContainer,
} from "recharts";
import { formatBytes, formatDate } from "../lib/formatting";
import { Col, Empty, Row } from "antd";
import {
@@ -55,13 +64,13 @@ const StatsPanel = ({ repoId }: { repoId: string }) => {
if (operations.length === 0) {
return (
<Empty description="No stats available. Have you run a prune operation yet?" />
<Empty description="No stats available. Have you run a stats operation yet?" />
);
}
const dataset: {
time: number;
totalSizeMb: number;
totalSizeBytes: number;
compressionRatio: number;
snapshotCount: number;
totalBlobCount: number;
@@ -69,7 +78,7 @@ const StatsPanel = ({ repoId }: { repoId: string }) => {
const stats = (op.op.value! as OperationStats).stats!;
return {
time: Number(op.unixTimeEndMs!),
totalSizeMb: Number(stats.totalSize) / 1000000,
totalSizeBytes: Number(stats.totalSize),
compressionRatio: Number(stats.compressionRatio),
snapshotCount: Number(stats.snapshotCount),
totalBlobCount: Number(stats.totalBlobCount),
@@ -83,85 +92,103 @@ const StatsPanel = ({ repoId }: { repoId: string }) => {
<>
<Row>
<Col span={12}>
<LineChart
xAxis={[
{
dataKey: "time",
valueFormatter: (v) => formatDate(v as number),
min: minTime,
max: maxTime,
},
]}
series={[
{
dataKey: "totalSizeMb",
label: "Total Size",
valueFormatter: (v: any) =>
formatBytes((v * 1000000) as number),
},
]}
height={300}
width={600}
dataset={dataset}
/>
<LineChart
xAxis={[
{
dataKey: "time",
valueFormatter: (v) => formatDate(v as number),
min: minTime,
max: maxTime,
},
]}
series={[
{
dataKey: "compressionRatio",
label: "Compression Ratio",
},
]}
height={300}
dataset={dataset}
/>
<ResponsiveContainer width="100%" height={300}>
<LineChart width={600} height={300} data={dataset}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis
dataKey="time"
type="number"
domain={["dataMin", "dataMax"]}
tickFormatter={(v) => formatDate(v as number)}
/>
<YAxis
yAxisId="left"
type="number"
dataKey="totalSizeBytes"
tickFormatter={(v) => formatBytes(v)}
/>
<Tooltip labelFormatter={(v) => formatDate(v as number)} />
<Legend />
<Line
yAxisId="left"
type="monotone"
dataKey="totalSizeBytes"
stroke="#8884d8"
name="Total Size"
></Line>
</LineChart>
</ResponsiveContainer>
</Col>
<Col span={12}>
<LineChart
xAxis={[
{
dataKey: "time",
valueFormatter: (v) => formatDate(v as number),
min: minTime,
max: maxTime,
},
]}
series={[
{
dataKey: "snapshotCount",
label: "Snapshot Count",
},
]}
height={300}
dataset={dataset}
/>
<LineChart
xAxis={[
{
dataKey: "time",
valueFormatter: (v) => formatDate(v as number),
min: minTime,
max: maxTime,
},
]}
series={[
{
dataKey: "totalBlobCount",
label: "Blob Count",
},
]}
height={300}
dataset={dataset}
/>
<ResponsiveContainer width="100%" height={300}>
<LineChart width={600} height={300} data={dataset}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis
dataKey="time"
type="number"
domain={["dataMin", "dataMax"]}
tickFormatter={(v) => formatDate(v as number)}
/>
<YAxis yAxisId="left" type="number" dataKey="compressionRatio" />
<Tooltip labelFormatter={(v) => formatDate(v as number)} />
<Legend />
<Line
yAxisId="left"
type="monotone"
dataKey="compressionRatio"
stroke="#82ca9d"
name="Compression Ratio"
></Line>
</LineChart>
</ResponsiveContainer>
</Col>
</Row>
<Row>
<Col span={12}>
<ResponsiveContainer width="100%" height={300}>
<LineChart width={600} height={300} data={dataset}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis
dataKey="time"
type="number"
domain={["dataMin", "dataMax"]}
tickFormatter={(v) => formatDate(v as number)}
/>
<YAxis yAxisId="left" type="number" dataKey="snapshotCount" />
<Tooltip labelFormatter={(v) => formatDate(v as number)} />
<Legend />
<Line
yAxisId="left"
type="monotone"
dataKey="snapshotCount"
stroke="#ff7300"
name="Snapshot Count"
></Line>
</LineChart>
</ResponsiveContainer>
</Col>
<Col span={12}>
<ResponsiveContainer width="100%" height={300}>
<LineChart width={600} height={300} data={dataset}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis
dataKey="time"
type="number"
domain={["dataMin", "dataMax"]}
tickFormatter={(v) => formatDate(v as number)}
/>
<YAxis yAxisId="left" type="number" dataKey="totalBlobCount" />
<Tooltip labelFormatter={(v) => formatDate(v as number)} />
<Legend />
<Line
yAxisId="left"
type="monotone"
dataKey="totalBlobCount"
stroke="#00BBBB"
name="Total Blob Count"
></Line>
</LineChart>
</ResponsiveContainer>
</Col>
</Row>
</>
+4 -19
View File
@@ -8,11 +8,6 @@ import "react-js-cron/dist/styles.css";
import { ConfigProvider as AntdConfigProvider, theme } from "antd";
import { ConfigContextProvider } from "./components/ConfigProvider";
import { MainContentProvider } from "./views/MainContentArea";
import {
StyledEngineProvider,
ThemeProvider,
createTheme,
} from "@mui/material";
const Root = ({ children }: { children: React.ReactNode }) => {
return (
@@ -39,18 +34,8 @@ el &&
],
}}
>
<StyledEngineProvider injectFirst>
<ThemeProvider
theme={createTheme({
palette: {
mode: darkTheme ? "dark" : "light",
},
})}
>
<Root>
<App />
</Root>
</ThemeProvider>
</StyledEngineProvider>
</AntdConfigProvider>,
<Root>
<App />
</Root>
</AntdConfigProvider>
);