mirror of
https://github.com/openziti/zrok.git
synced 2025-03-01 08:31:46 +01:00
improved sparkdata state (#823)
This commit is contained in:
parent
56277a4712
commit
a558131c93
@ -8,7 +8,7 @@ import AccountPanel from "./AccountPanel.tsx";
|
|||||||
import EnvironmentPanel from "./EnvironmentPanel.tsx";
|
import EnvironmentPanel from "./EnvironmentPanel.tsx";
|
||||||
import SharePanel from "./SharePanel.tsx";
|
import SharePanel from "./SharePanel.tsx";
|
||||||
import AccessPanel from "./AccessPanel.tsx";
|
import AccessPanel from "./AccessPanel.tsx";
|
||||||
import useStore from "./model/store.ts";
|
import useStore, {Sparkdata} from "./model/store.ts";
|
||||||
import TabularView from "./TabularView.tsx";
|
import TabularView from "./TabularView.tsx";
|
||||||
import {Node} from "@xyflow/react";
|
import {Node} from "@xyflow/react";
|
||||||
|
|
||||||
@ -21,6 +21,10 @@ const ApiConsole = ({ logout }: ApiConsoleProps) => {
|
|||||||
const graph = useStore((state) => state.graph);
|
const graph = useStore((state) => state.graph);
|
||||||
const updateGraph = useStore((state) => state.updateGraph);
|
const updateGraph = useStore((state) => state.updateGraph);
|
||||||
const oldGraph = useRef<Graph>(graph);
|
const oldGraph = useRef<Graph>(graph);
|
||||||
|
const sparkdata = useStore((state) => state.sparkdata);
|
||||||
|
const sparkdataRef = useRef<Map<string, Sparkdata>>();
|
||||||
|
sparkdataRef.current = sparkdata;
|
||||||
|
const updateSparkdata = useStore((state) => state.updateSparkdata);
|
||||||
const nodes = useStore((state) => state.nodes);
|
const nodes = useStore((state) => state.nodes);
|
||||||
const nodesRef = useRef<Node[]>();
|
const nodesRef = useRef<Node[]>();
|
||||||
nodesRef.current = nodes;
|
nodesRef.current = nodes;
|
||||||
@ -97,30 +101,25 @@ const ApiConsole = ({ logout }: ApiConsoleProps) => {
|
|||||||
"X-TOKEN": user.token
|
"X-TOKEN": user.token
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let api = new MetadataApi(cfg);
|
let api = new MetadataApi(cfg);
|
||||||
api.getSparklines({body: {environments: environments, shares: shares}})
|
api.getSparklines({body: {environments: environments, shares: shares}})
|
||||||
.then(d => {
|
.then(d => {
|
||||||
if(d.sparklines) {
|
if(d.sparklines) {
|
||||||
let updatedNodes = nodesRef.current;
|
let sparkdataIn = new Map<string, Number[]>();
|
||||||
updatedNodes.map((n) => {
|
d.sparklines!.forEach(s => {
|
||||||
let spark = d.sparklines!.find(s => s.scope === n.type && s.id === n.id);
|
let activity = new Array<Number>(31);
|
||||||
if(spark) {
|
if(s.samples) {
|
||||||
let activity = new Array<Number>(31);
|
s.samples?.forEach((sample, i) => {
|
||||||
if(spark.samples) {
|
let v = 0;
|
||||||
spark.samples?.forEach((sample, i) => {
|
v += sample.rx! ? sample.rx! : 0;
|
||||||
let v = 0;
|
v += sample.tx! ? sample.tx! : 0;
|
||||||
v += sample.rx! ? sample.rx! : 0;
|
activity[i] = v;
|
||||||
v += sample.tx! ? sample.tx! : 0;
|
});
|
||||||
activity[i] = v;
|
sparkdataIn.set(s.id!, activity);
|
||||||
});
|
|
||||||
n.data.activity = activity;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(updatedNodes) {
|
updateSparkdata(sparkdataIn);
|
||||||
updateNodes(updatedNodes);
|
|
||||||
console.log("updatedNodes", updatedNodes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
|
@ -2,12 +2,15 @@ import {Handle, Position} from "@xyflow/react";
|
|||||||
import {Grid2} from "@mui/material";
|
import {Grid2} from "@mui/material";
|
||||||
import EnvironmentIcon from "@mui/icons-material/Computer";
|
import EnvironmentIcon from "@mui/icons-material/Computer";
|
||||||
import {SparkLineChart} from "@mui/x-charts";
|
import {SparkLineChart} from "@mui/x-charts";
|
||||||
|
import useStore from "./model/store.ts";
|
||||||
|
|
||||||
const EnvironmentNode = ({ data }) => {
|
const EnvironmentNode = ({ data }) => {
|
||||||
|
const sparkdata = useStore((state) => state.sparkdata);
|
||||||
|
|
||||||
const hiddenSparkline = <></>;
|
const hiddenSparkline = <></>;
|
||||||
const visibleSparkline = (
|
const visibleSparkline = (
|
||||||
<Grid2 container sx={{ flexGrow: 1, p: 0.5 }}>
|
<Grid2 container sx={{ flexGrow: 1, p: 0.5 }}>
|
||||||
<SparkLineChart data={data.activity ? data.activity : []} height={30} width={100} colors={['#04adef']} />
|
<SparkLineChart data={sparkdata.get(data.envZId) ? sparkdata.get(data.envZId)! : []} height={30} width={100} colors={['#04adef']} />
|
||||||
</Grid2>
|
</Grid2>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -19,7 +22,7 @@ const EnvironmentNode = ({ data }) => {
|
|||||||
<Grid2 display="flex"><EnvironmentIcon sx={{ fontSize: 15, mr: 0.5 }}/></Grid2>
|
<Grid2 display="flex"><EnvironmentIcon sx={{ fontSize: 15, mr: 0.5 }}/></Grid2>
|
||||||
<Grid2 display="flex">{data.label}</Grid2>
|
<Grid2 display="flex">{data.label}</Grid2>
|
||||||
</Grid2>
|
</Grid2>
|
||||||
{data.activity?.find(x => x > 0) ? visibleSparkline : hiddenSparkline}
|
{sparkdata.get(data.envZId)?.find(x => x > 0) ? visibleSparkline : hiddenSparkline}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,24 @@
|
|||||||
import {Handle, Position} from "@xyflow/react";
|
import {Handle, Position} from "@xyflow/react";
|
||||||
import {Grid2} from "@mui/material";
|
import {Grid2} from "@mui/material";
|
||||||
import ShareIcon from "@mui/icons-material/Share";
|
import ShareIcon from "@mui/icons-material/Share";
|
||||||
|
import useStore from "./model/store.ts";
|
||||||
|
import {SparkLineChart} from "@mui/x-charts";
|
||||||
|
|
||||||
const ShareNode = ({ data }) => {
|
const ShareNode = ({ data }) => {
|
||||||
|
const sparkdata = useStore((state) => state.sparkdata);
|
||||||
|
|
||||||
let shareHandle = <></>;
|
let shareHandle = <></>;
|
||||||
if(data.accessed) {
|
if(data.accessed) {
|
||||||
shareHandle = <Handle type="target" position={Position.Bottom} id="access"/>;
|
shareHandle = <Handle type="target" position={Position.Bottom} id="access"/>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const hiddenSparkline = <></>;
|
||||||
|
const visibleSparkline = (
|
||||||
|
<Grid2 container sx={{ flexGrow: 1, p: 0.5 }}>
|
||||||
|
<SparkLineChart data={sparkdata.get(data.shrToken) ? sparkdata.get(data.shrToken)! : []} height={30} width={100} colors={['#04adef']} />
|
||||||
|
</Grid2>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Handle type="target" position={Position.Top} />
|
<Handle type="target" position={Position.Top} />
|
||||||
@ -15,6 +27,7 @@ const ShareNode = ({ data }) => {
|
|||||||
<Grid2 display="flex"><ShareIcon sx={{ fontSize: 15, mr: 0.5 }}/></Grid2>
|
<Grid2 display="flex"><ShareIcon sx={{ fontSize: 15, mr: 0.5 }}/></Grid2>
|
||||||
<Grid2 display="flex">{data.label}</Grid2>
|
<Grid2 display="flex">{data.label}</Grid2>
|
||||||
</Grid2>
|
</Grid2>
|
||||||
|
{sparkdata.get(data.shrToken)?.find(x => x > 0) ? visibleSparkline : hiddenSparkline}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ type StoreState = {
|
|||||||
user: User;
|
user: User;
|
||||||
graph: Graph;
|
graph: Graph;
|
||||||
environments: Array<Environment>;
|
environments: Array<Environment>;
|
||||||
|
sparkdata: Map<string, Number[]>;
|
||||||
nodes: Node[];
|
nodes: Node[];
|
||||||
edges: Edge[];
|
edges: Edge[];
|
||||||
selectedNode: Node;
|
selectedNode: Node;
|
||||||
@ -18,9 +19,10 @@ type StoreAction = {
|
|||||||
updateUser: (user: StoreState['user']) => void,
|
updateUser: (user: StoreState['user']) => void,
|
||||||
updateGraph: (vov: StoreState['graph']) => void,
|
updateGraph: (vov: StoreState['graph']) => void,
|
||||||
updateEnvironments: (environments: StoreState['environments']) => void,
|
updateEnvironments: (environments: StoreState['environments']) => void,
|
||||||
updateSelectedNode: (selectedNode: StoreState['selectedNode']) => void,
|
updateSparkdata: (sparkdata: StoreState['sparkdata']) => void,
|
||||||
updateNodes: (nodes: StoreState['nodes']) => void,
|
updateNodes: (nodes: StoreState['nodes']) => void,
|
||||||
updateEdges: (edges: StoreState['edges']) => void,
|
updateEdges: (edges: StoreState['edges']) => void,
|
||||||
|
updateSelectedNode: (selectedNode: StoreState['selectedNode']) => void,
|
||||||
updateViewport: (viewport: StoreState['viewport']) => void,
|
updateViewport: (viewport: StoreState['viewport']) => void,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ const useStore = create<StoreState & StoreAction>((set) => ({
|
|||||||
user: null,
|
user: null,
|
||||||
graph: new Graph(),
|
graph: new Graph(),
|
||||||
environments: new Array<Environment>(),
|
environments: new Array<Environment>(),
|
||||||
|
sparkdata: new Map<string, Sparkdata>(),
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
selectedNode: null,
|
selectedNode: null,
|
||||||
@ -35,6 +38,7 @@ const useStore = create<StoreState & StoreAction>((set) => ({
|
|||||||
updateUser: (user) => set({user: user}),
|
updateUser: (user) => set({user: user}),
|
||||||
updateGraph: (vov) => set({overview: vov}),
|
updateGraph: (vov) => set({overview: vov}),
|
||||||
updateEnvironments: (environments) => set({environments: environments}),
|
updateEnvironments: (environments) => set({environments: environments}),
|
||||||
|
updateSparkdata: (sparkdata) => set({sparkdata: sparkdata}),
|
||||||
updateNodes: (nodes) => set({nodes: nodes}),
|
updateNodes: (nodes) => set({nodes: nodes}),
|
||||||
updateEdges: (edges) => set({edges: edges}),
|
updateEdges: (edges) => set({edges: edges}),
|
||||||
updateSelectedNode: (selectedNode) => set({selectedNode: selectedNode}),
|
updateSelectedNode: (selectedNode) => set({selectedNode: selectedNode}),
|
||||||
|
Loading…
Reference in New Issue
Block a user