import { useTranslation } from "next-i18next"; import Container from "components/services/widget/container"; 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 wid = `${widget.service_name}.${widget.service_group}`; const dataStorage = `${wid}datas`; const { data: activityData, error: activityError } = useWidgetAPI(widget, "activity"); const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface"); if (activityError || interfaceError) { const finalError = activityError ?? interfaceError; return ; } if (!activityData || !interfaceData) { return ( ); } const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1]; const cpu = 100 - parseFloat(cpuIdle); const memory = sumMemory(activityData.headers[3]); 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 ( ); }