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 }) { - + + ); }