Merge pull request #107 from dec0dOS/dev

v2 release
This commit is contained in:
dec0dOS 2022-08-26 02:31:54 +03:00 committed by GitHub
commit 1e84548dd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 2220 additions and 2597 deletions

File diff suppressed because one or more lines are too long

783
.yarn/releases/yarn-3.2.3.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View file

@ -1,11 +1,11 @@
logFilters:
- code: YN0013
level: discard
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.2.1.cjs
logFilters:
- code: YN0013
level: discard
yarnPath: .yarn/releases/yarn-3.2.3.cjs

View file

@ -4,9 +4,11 @@ const logger = require("morgan");
const compression = require("compression");
const bearerToken = require("express-bearer-token");
const helmet = require("helmet");
const cron = require("node-cron");
const db = require("./utils/db");
const initAdmin = require("./utils/init-admin");
const pingAll = require("./utils/ping");
const authRoutes = require("./routes/auth");
const networkRoutes = require("./routes/network");
@ -21,11 +23,15 @@ app.use(express.urlencoded({ extended: false }));
if (process.env.ZU_DISABLE_AUTH !== "true") {
app.use(
bearerToken({
headerKey: "Bearer",
headerKey: "token",
})
);
}
if (process.env.NODE_ENV === "production") {
console.debug = function () {};
}
if (
process.env.NODE_ENV === "production" &&
process.env.ZU_SECURE_HEADERS !== "false"
@ -54,6 +60,18 @@ initAdmin().then(function (admin) {
db.defaults({ users: [admin], networks: [] }).write();
});
if (process.env.ZU_LAST_SEEN_FETCH !== "false") {
let schedule = process.env.ZU_LAST_SEEN_SCHEDULE || "*/5 * * * *";
cron.schedule(schedule, () => {
console.debug("Running scheduled job");
const networks = db.get("networks").value();
networks.forEach((network) => {
console.debug("Processing " + network.id);
pingAll(network);
});
});
}
const routerAPI = express.Router();
const routerController = express.Router();

View file

@ -15,6 +15,7 @@
"lodash": "^4.17.21",
"lowdb": "^1.0.0",
"morgan": "~1.10.0",
"node-cron": "^3.0.2",
"pbkdf2-wrapper": "^1.3.4"
}
}

View file

@ -25,13 +25,14 @@ async function getMemberAdditionalData(data) {
network.defaults({ members: [] }).get("members").write();
// END MIGRATION SECTION
const additionalData = db
const member = db
.get("networks")
.find({ id: data.nwid })
.get("members")
.find({ id: data.id })
.get("additionalConfig")
.value();
.find({ id: data.id });
const additionalData = member.get("additionalConfig").value();
const lastOnline = member.get("lastOnline").value() || 0;
const peer = await getPeer(data.id);
let peerData = {};
@ -57,11 +58,11 @@ async function getMemberAdditionalData(data) {
return {
id: data.nwid + "-" + data.id,
type: "Member",
clock: Math.floor(new Date().getTime() / 1000),
clock: new Date().getTime(),
networkId: data.nwid,
nodeId: data.id,
controllerId: ZT_ADDRESS,
lastOnline: lastOnline,
...additionalData,
...peerData,
config: data,

View file

@ -23,8 +23,7 @@ async function getNetworkAdditionalData(data) {
return {
id: data.id,
type: "Network",
clock: Math.floor(new Date().getTime() / 1000),
clock: new Date().getTime(),
...additionalData.value(),
config: data,
};

29
backend/utils/ping.js Normal file
View file

@ -0,0 +1,29 @@
const api = require("./controller-api");
const db = require("./db");
async function pingAll(network) {
await Promise.all(
network.members.map(async (member) => {
console.debug("Processing " + member.id);
api
.get("peer/" + member.id)
.then(async function () {
// write lastOneline field in db
db.get("networks")
.filter({ id: network.id })
.map("members")
.first()
.filter({ id: member.id })
.first()
.set("lastOnline", new Date().getTime())
.write();
})
.catch(function (err) {
console.debug("Couldn't fetch", member.id);
return;
});
})
);
}
module.exports = pingAll;

View file

@ -5,6 +5,8 @@ module.exports = async function () {
const res = await api.get("status");
return res.data.address;
} catch (err) {
console.error(err);
console.error(
"Couldn't connect to the controller on " + err.config.baseURL
);
}
};

View file

@ -9,6 +9,7 @@
"@uiw/react-codemirror": "^3.1.0",
"axios": "^0.27.2",
"codemirror": "^5.62.3",
"date-fns": "^2.29.2",
"history": "^5.3.0",
"ipaddr.js": "^2.0.1",
"lodash": "^4.17.21",

View file

@ -14,6 +14,7 @@ import DataTable from "react-data-table-component";
import { useParams } from "react-router-dom";
import API from "utils/API";
import { parseValue, replaceValue, setValue } from "utils/ChangeHelper";
import { formatDistance } from "date-fns";
import AddMember from "./components/AddMember";
import DeleteMember from "./components/DeleteMember";
import ManagedIP from "./components/ManagedIP";
@ -98,40 +99,40 @@ function NetworkMembers({ network }) {
},
{
id: "status",
name: "Peer status",
name: "Last Seen",
minWidth: "100px",
cell: (row) =>
row.online === 0 ? (
<Typography color="error">OFFLINE</Typography>
) : row.online === 1 ? (
<Typography style={{ color: "#008000" }}>
{"ONLINE (v" +
row.config.vMajor +
"." +
row.config.vMinor +
"." +
row.config.vRev +
")"}
row.online === 1 ? (
<Typography style={{ color: "#008000" }}>{"ONLINE"}</Typography>
) : row.controllerId === row.config.address ? (
<Typography style={{ color: "#c5e31e" }}>{"CONTROLLER"}</Typography>
) : row.online === 0 ? (
<Typography color="error">
{row.lastOnline !== 0
? formatDistance(row.lastOnline, row.clock, {
includeSeconds: false,
addSuffix: true,
})
: "OFFLINE"}
</Typography>
) : (
<Typography style={{ color: "#f1c232" }}>
{"RELAYED (v" +
row.config.vMajor +
"." +
row.config.vMinor +
"." +
row.config.vRev +
")"}
</Typography>
<Typography style={{ color: "#f1c232" }}>{"RELAYED"}</Typography>
),
},
{
id: "physicalip",
name: "Physical IP / Latency",
name: "Version / Physical IP / Latency",
minWidth: "220px",
cell: (row) =>
row.online === 1 ? (
<p>
{"v" +
row.config.vMajor +
"." +
row.config.vMinor +
"." +
row.config.vRev}
<br />
{row.physicalAddress + "/" + row.physicalPort}
<br />
{"(" + row.latency + " ms)"}
@ -181,7 +182,7 @@ function NetworkMembers({ network }) {
spacing={0}
direction="column"
alignItems="center"
justify="center"
justifyContent="center"
style={{
minHeight: "50vh",
}}

View file

@ -69,8 +69,8 @@ function NetworkSettings({ network, setNetwork }) {
value={network["description"]}
onChange={handleChange("description")}
multiline
rows={2}
rowsMax={Infinity}
minRows={2}
maxRows={Infinity}
label="Description"
variant="filled"
InputLabelProps={{

View file

@ -10,6 +10,6 @@ export default axios.create({
localStorage.getItem("disableAuth") === "true"
? {}
: {
Authorization: `Bearer ${JSON.parse(localStorage.getItem("token"))}`,
Authorization: `token ${JSON.parse(localStorage.getItem("token"))}`,
},
});

View file

@ -8,6 +8,7 @@
"scripts": {
"postinstall": "husky install",
"upgradeDeps": "yarn upgrade-interactive",
"upgradeYarn": "yarn set version latest",
"cleanDeps": "cd frontend && rimraf node_modules && cd ../backend && rimraf node_modules && cd .. && rimraf node_modules",
"lint": "yarn prettier --write .",
"dev": "concurrently \"cd frontend && cross-env FAST_REFRESH=true yarn start\" \"cd backend && cross-env NODE_ENV=development ZU_DEFAULT_USERNAME=admin ZU_DEFAULT_PASSWORD=zero-ui nodemon ./bin/www --ignore data/db.json\"",
@ -17,15 +18,15 @@
"commit": "yarn git-cz"
},
"devDependencies": {
"@commitlint/cli": "^17.0.2",
"@commitlint/config-conventional": "^17.0.2",
"commitizen": "^4.2.4",
"concurrently": "^7.2.2",
"@commitlint/cli": "^17.0.3",
"@commitlint/config-conventional": "^17.0.3",
"commitizen": "^4.2.5",
"concurrently": "^7.3.0",
"cross-env": "^7.0.3",
"cz-conventional-changelog": "^3.3.0",
"husky": "^8.0.1",
"lint-staged": "^13.0.2",
"nodemon": "^2.0.16",
"lint-staged": "^13.0.3",
"nodemon": "^2.0.19",
"prettier": "^2.7.1",
"rimraf": "^3.0.2",
"standard-version": "^9.5.0"
@ -51,5 +52,5 @@
"yarn prettier --write"
]
},
"packageManager": "yarn@3.2.1"
"packageManager": "yarn@3.2.3"
}

3099
yarn.lock

File diff suppressed because it is too large Load diff