mirror of
https://github.com/openziti/zrok.git
synced 2025-06-20 09:48:07 +02:00
centralized data retrieval (#221)
This commit is contained in:
parent
c02b9c2b23
commit
6eb60fcd3d
@ -6,6 +6,8 @@ import {AgentApi, ApiClient} from "./api/src/index.js";
|
|||||||
|
|
||||||
const AgentUi = (props) => {
|
const AgentUi = (props) => {
|
||||||
const [version, setVersion] = useState("");
|
const [version, setVersion] = useState("");
|
||||||
|
const [shares, setShares] = useState([]);
|
||||||
|
const [accesses, setAccesses] = useState([]);
|
||||||
|
|
||||||
let api = new AgentApi(new ApiClient(window.location.protocol+'//'+window.location.host));
|
let api = new AgentApi(new ApiClient(window.location.protocol+'//'+window.location.host));
|
||||||
|
|
||||||
@ -18,14 +20,30 @@ const AgentUi = (props) => {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let mounted = true;
|
||||||
|
let interval = setInterval(() => {
|
||||||
|
api.agentStatus((err, data) => {
|
||||||
|
if(mounted) {
|
||||||
|
setShares(data.shares);
|
||||||
|
setAccesses(data.accesses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
return () => {
|
||||||
|
mounted = false;
|
||||||
|
clearInterval(interval);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const router = createBrowserRouter([
|
const router = createBrowserRouter([
|
||||||
{
|
{
|
||||||
path: "/",
|
path: "/",
|
||||||
element: <Overview version={version} />
|
element: <Overview version={version} shares={shares} accesses={accesses} />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/share/:token",
|
path: "/share/:token",
|
||||||
element: <ShareDetail version={version} />
|
element: <ShareDetail version={version} shares={shares} />
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
import "bootstrap/dist/css/bootstrap.min.css";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
import {useEffect, useState} from "react";
|
|
||||||
import {AgentApi, ApiClient} from "./api/src/index.js";
|
|
||||||
import DataTable from "react-data-table-component";
|
import DataTable from "react-data-table-component";
|
||||||
import NavBar from "./NavBar.jsx";
|
import NavBar from "./NavBar.jsx";
|
||||||
|
|
||||||
const Overview = (props) => {
|
const Overview = (props) => {
|
||||||
const [shares, setShares] = useState([]);
|
|
||||||
const [accesses, setAccesses] = useState([]);
|
|
||||||
|
|
||||||
const shareColumns = [
|
const shareColumns = [
|
||||||
{
|
{
|
||||||
name: 'Token',
|
name: 'Token',
|
||||||
selector: row => row.reserved ? row.token+' (reserved)' : row.token
|
selector: row => <a href={"/share/"+row.token}>{row.token}</a>
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Share Mode',
|
name: 'Share Mode',
|
||||||
@ -47,42 +42,24 @@ const Overview = (props) => {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
let api = new AgentApi(new ApiClient(window.location.protocol+'//'+window.location.host));
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
let mounted = true;
|
|
||||||
let interval = setInterval(() => {
|
|
||||||
api.agentStatus((err, data) => {
|
|
||||||
if(mounted) {
|
|
||||||
setShares(data.shares);
|
|
||||||
setAccesses(data.accesses);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
return () => {
|
|
||||||
mounted = false;
|
|
||||||
clearInterval(interval);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<NavBar version={props.version} />
|
<NavBar version={props.version} />
|
||||||
|
|
||||||
<div class={"info"}>
|
<div className={"info"}>
|
||||||
<h2>Shares</h2>
|
<h2>Shares</h2>
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={shareColumns}
|
columns={shareColumns}
|
||||||
data={shares}
|
data={props.shares}
|
||||||
noDataComponent={<div/>}
|
noDataComponent={<div/>}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class={"info"}>
|
<div className={"info"}>
|
||||||
<h2>Accesses</h2>
|
<h2>Accesses</h2>
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={accessColumns}
|
columns={accessColumns}
|
||||||
data={accesses}
|
data={props.accesses}
|
||||||
noDataComponent={<div/>}
|
noDataComponent={<div/>}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user