Synology widget : adding volume size
This commit is contained in:
parent
6759aec51e
commit
172ade4454
@ -418,7 +418,8 @@
|
||||
"volumeUsage": "Volume Usage",
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsage": "Memory Usage",
|
||||
"status": "Status"
|
||||
"status": "Status",
|
||||
"volumeTotal": "Total space"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
|
||||
@ -5,54 +5,10 @@ import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
function toKb(value, unit) {
|
||||
switch (unit) {
|
||||
case "K":
|
||||
return parseInt(value, 10);
|
||||
case "M":
|
||||
return parseInt(value, 10) * 1024;
|
||||
case "G":
|
||||
return parseInt(value, 10) * 1024 * 1024;
|
||||
default:
|
||||
return parseInt(value, 10);
|
||||
}
|
||||
}
|
||||
|
||||
function sumMemory(meminfos) {
|
||||
let result;
|
||||
let sumused=0;
|
||||
let sumfree=0;
|
||||
|
||||
const idused = ["Active", "Wired", "Laundry", "Buf"];
|
||||
const idfree = ["Inact", "Free"];
|
||||
const size = "([0-9]+)([KMG])";
|
||||
|
||||
for (let id = 0; id < idused.length;id+=1 ) {
|
||||
const re = new RegExp(`${size } ${ idused[id] }`);
|
||||
result = re.exec(meminfos);
|
||||
|
||||
if (result) {
|
||||
sumused += toKb(result[1], result[2]);
|
||||
}
|
||||
}
|
||||
|
||||
for (let id = 0; id < idfree.length; id+=1 ) {
|
||||
const re = new RegExp(`${size } ${ idfree[id] }`);
|
||||
result = re.exec(meminfos);
|
||||
|
||||
if (result) {
|
||||
sumfree += toKb(result[1], result[2]);
|
||||
}
|
||||
}
|
||||
|
||||
return 100*(sumused / (sumused + sumfree));
|
||||
|
||||
}
|
||||
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
const dataStorage = `${widget.service_name}.${widget.service_group}datas`;
|
||||
|
||||
const { data: activityData, error: activityError } = useWidgetAPI(widget, "activity");
|
||||
const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface");
|
||||
|
||||
@ -68,8 +24,6 @@ export default function Component({ service }) {
|
||||
<Block label="opnsense.memory" />
|
||||
<Block label="opnsense.wanUpload" />
|
||||
<Block label="opnsense.wanDownload" />
|
||||
<Block label="opnsense.wanUploadRate" />
|
||||
<Block label="opnsense.wanDownloadRate" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@ -77,44 +31,18 @@ export default function Component({ service }) {
|
||||
|
||||
const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1];
|
||||
const cpu = 100 - parseFloat(cpuIdle);
|
||||
const memory = sumMemory(activityData.headers[3]);
|
||||
const memory = activityData.headers[3].match(/Mem: (.+) Active,/)[1];
|
||||
|
||||
const wanUpload = parseFloat(interfaceData.interfaces.wan['bytes transmitted']);
|
||||
const wanDownload = parseFloat(interfaceData.interfaces.wan['bytes received']);
|
||||
const dataStored = localStorage.getItem(dataStorage);
|
||||
let datas;
|
||||
const wanUpload = interfaceData.interfaces.wan['bytes transmitted'];
|
||||
const wanDownload = interfaceData.interfaces.wan['bytes received'];
|
||||
|
||||
if (dataStored === null) {
|
||||
datas = {
|
||||
wanUpload : 0,
|
||||
wanDownload : 0,
|
||||
updateTime : 0,
|
||||
wanUploadRate : 0,
|
||||
wanDownloadRate : 0
|
||||
}
|
||||
} else {
|
||||
datas = JSON.parse(dataStored);
|
||||
}
|
||||
const wanUploadDiff = wanUpload - datas.wanUpload;
|
||||
const wanDownloadDiff = wanDownload - datas.wanDownload;
|
||||
if (wanUploadDiff > 0 || wanDownloadDiff > 0) {
|
||||
const specialTimeValue = new Date().getTime();
|
||||
const timeDif = specialTimeValue - datas.updateTime;
|
||||
datas.wanUploadRate = 8 * wanUploadDiff / (timeDif / 1000);
|
||||
datas.wanDownloadRate = 8 * wanDownloadDiff / (timeDif / 1000);
|
||||
datas.updateTime = specialTimeValue;
|
||||
}
|
||||
datas.wanUpload = wanUpload;
|
||||
datas.wanDownload = wanDownload;
|
||||
localStorage.setItem(dataStorage, JSON.stringify(datas));
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="opnsense.cpu" value={t("common.percent", { value: cpu.toFixed(2)})} />
|
||||
<Block label="opnsense.memory" value={t("common.percent", { value: memory})} />
|
||||
<Block label="opnsense.wanUpload" value={t("common.bytes", { value: datas.wanUpload})} />
|
||||
<Block label="opnsense.wanDownload" value={t("common.bytes", { value: datas.wanDownload })} />
|
||||
<Block label="opnsense.wanUploadRate" value={t("common.bitrate", { value: datas.wanUploadRate})} />
|
||||
<Block label="opnsense.wanDownloadRate" value={t("common.bitrate", { value: datas.wanDownloadRate})} />
|
||||
<Block label="opnsense.cpu" value={t("common.percent", { value: cpu.toFixed(2) })} />
|
||||
<Block label="opnsense.memory" value={memory} />
|
||||
<Block label="opnsense.wanUpload" value={t("common.bytes", { value: wanUpload })} />
|
||||
<Block label="opnsense.wanDownload" value={t("common.bytes", { value: wanDownload })} />
|
||||
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@ export default function Component({ service }) {
|
||||
<Container service={service}>
|
||||
<Block label="synology.uptime" />
|
||||
<Block label="synology.volumeUsage" />
|
||||
<Block label="synology.volumeTotal" />
|
||||
<Block label="synology.cpuLoad" />
|
||||
<Block label="synology.memoryUsage" />
|
||||
</Container>
|
||||
@ -31,6 +32,7 @@ export default function Component({ service }) {
|
||||
<Container service={service}>
|
||||
<Block label="synology.uptime" value={ dsData.uptime } />
|
||||
<Block label="synology.volumeUsage" value={t("common.percent", { value: dsData.usedVolume })} />
|
||||
<Block label="synology.volumeTotal" value={t("common.bytes", { value: dsData.totalSize })} />
|
||||
<Block label="synology.cpuLoad" value={t("common.percent", { value: dsData.cpuLoad })} />
|
||||
<Block label="synology.memoryUsage" value={t("common.percent", { value: dsData.memoryUsage })} />
|
||||
</Container>
|
||||
|
||||
@ -76,8 +76,6 @@ export default async function synologyProxyHandler(req, res) {
|
||||
|
||||
[status, contentType, data] = await httpProxy(storageUrl );
|
||||
|
||||
|
||||
let usedVolume = 0;
|
||||
if (status !== 200) {
|
||||
return res.status(status).set("Content-Type", contentType).send(data);
|
||||
}
|
||||
@ -85,7 +83,8 @@ export default async function synologyProxyHandler(req, res) {
|
||||
if (json?.success !== true) {
|
||||
return res.status(401).json({ error: "Error getting volume stats" });
|
||||
}
|
||||
usedVolume = 100 * parseFloat(json.data.vol_info[0].used_size) / parseFloat(json.data.vol_info[0].total_size);
|
||||
const totalSize = parseFloat(json.data.vol_info[0].total_size);
|
||||
const usedVolume = 100 * parseFloat(json.data.vol_info[0].used_size) / parseFloat(json.data.vol_info[0].total_size);
|
||||
|
||||
const healthUrl = `${widget.url}/webapi/${path}?api=${api}&version=${maxVersion}&method=info&_sid=${sid}`;
|
||||
[status, contentType, data] = await httpProxy(healthUrl);
|
||||
@ -110,6 +109,7 @@ export default async function synologyProxyHandler(req, res) {
|
||||
const resdata = {
|
||||
uptime,
|
||||
usedVolume,
|
||||
totalSize,
|
||||
memoryUsage,
|
||||
cpuLoad,
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user