diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 63ecdd7d..b1481caa 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -415,6 +415,19 @@
},
"synology": {
"uptime": "Uptime",
- "volumeUsage": "Volume Usage"
+ "volumeUsage": "Volume Usage",
+ "cpuLoad": "CPU Load",
+ "memoryUsage": "Memory Usage",
+ "status": "Status"
+ },
+ "opnsense": {
+ "cpu": "CPU Load",
+ "memory": "Memory Used",
+ "uptime": "Uptime",
+ "wanUpload": "WAN Upload",
+ "wanDownload": "WAN Download",
+ "wanUploadRate": "WAN Upload Rate",
+ "wanDownloadRate": "WAN Download Rate"
+
}
}
diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx
index 53396b31..698d2d30 100644
--- a/src/widgets/opnsense/component.jsx
+++ b/src/widgets/opnsense/component.jsx
@@ -5,10 +5,54 @@ 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");
@@ -24,6 +68,8 @@ export default function Component({ service }) {
+
+
);
}
@@ -31,18 +77,44 @@ export default function Component({ service }) {
const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1];
const cpu = 100 - parseFloat(cpuIdle);
- const memory = activityData.headers[3].match(/Mem: (.+) Active,/)[1];
+ const memory = sumMemory(activityData.headers[3]);
- const wanUpload = interfaceData.interfaces.wan['bytes transmitted'];
- const wanDownload = interfaceData.interfaces.wan['bytes received'];
+ const wanUpload = parseFloat(interfaceData.interfaces.wan['bytes transmitted']);
+ const wanDownload = parseFloat(interfaceData.interfaces.wan['bytes received']);
+ const dataStored = localStorage.getItem(dataStorage);
+ let datas;
+ 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 (
-
-
-
-
-
+
+
+
+
+
+
);
}
diff --git a/src/widgets/synology/component.jsx b/src/widgets/synology/component.jsx
index f2d662a1..fd832c8e 100644
--- a/src/widgets/synology/component.jsx
+++ b/src/widgets/synology/component.jsx
@@ -20,7 +20,8 @@ export default function Component({ service }) {
-
+
+
);
}
@@ -30,7 +31,8 @@ export default function Component({ service }) {
-
+
+
);
}