2023-01-22 11:51:04 +01:00
|
|
|
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 }) {
|
|
|
|
const { t } = useTranslation();
|
|
|
|
const { widget } = service;
|
2023-01-29 17:04:36 -08:00
|
|
|
const { data: infoData, error: infoError } = useWidgetAPI(widget, "system_info");
|
|
|
|
const { data: storageData, error: storageError } = useWidgetAPI(widget, "system_storage");
|
|
|
|
const { data: utilizationData, error: utilizationError } = useWidgetAPI(widget, "utilization");
|
2023-01-22 11:51:04 +01:00
|
|
|
|
2023-01-29 17:04:36 -08:00
|
|
|
if (storageError || infoError || utilizationError) {
|
|
|
|
return <Container error={ storageError ?? infoError ?? utilizationError } />;
|
2023-01-22 11:51:04 +01:00
|
|
|
}
|
|
|
|
|
2023-01-29 17:04:36 -08:00
|
|
|
if (!storageData || !infoData || !utilizationData) {
|
2023-01-22 11:51:04 +01:00
|
|
|
return (
|
|
|
|
<Container service={service}>
|
|
|
|
<Block label="diskstation.uptime" />
|
2023-01-29 17:04:36 -08:00
|
|
|
<Block label="diskstation.volumeAvailable" />
|
|
|
|
<Block label="resources.cpu" />
|
|
|
|
<Block label="resources.mem" />
|
2023-01-22 11:51:04 +01:00
|
|
|
</Container>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-01-29 17:04:36 -08:00
|
|
|
// uptime info
|
|
|
|
// eslint-disable-next-line no-unused-vars
|
|
|
|
const [hour, minutes, seconds] = infoData.data.up_time.split(":");
|
|
|
|
const days = Math.floor(hour / 24);
|
|
|
|
const uptime = `${ t("common.number", { value: days }) } ${ t("diskstation.days") }`;
|
|
|
|
|
|
|
|
// storage info
|
2023-04-03 14:23:12 -07:00
|
|
|
const volume = widget.volume ? storageData.data.vol_info?.find(vol => vol.name === widget.volume) : storageData.data.vol_info?.[0];
|
2023-02-06 13:43:40 -08:00
|
|
|
const usedBytes = parseFloat(volume?.used_size);
|
|
|
|
const totalBytes = parseFloat(volume?.total_size);
|
|
|
|
const freeBytes = totalBytes - usedBytes;
|
2023-01-29 17:04:36 -08:00
|
|
|
|
|
|
|
// utilization info
|
|
|
|
const { cpu, memory } = utilizationData.data;
|
|
|
|
const cpuLoad = parseFloat(cpu.user_load) + parseFloat(cpu.system_load);
|
|
|
|
const memoryUsage = 100 - ((100 * (parseFloat(memory.avail_real) + parseFloat(memory.cached))) / parseFloat(memory.total_real));
|
2023-01-22 11:51:04 +01:00
|
|
|
|
|
|
|
return (
|
|
|
|
<Container service={service}>
|
2023-01-29 17:04:36 -08:00
|
|
|
<Block label="diskstation.uptime" value={ uptime } />
|
2023-02-06 13:43:40 -08:00
|
|
|
<Block label="diskstation.volumeAvailable" value={ t("common.bbytes", { value: freeBytes, maximumFractionDigits: 1 }) } />
|
2023-01-29 17:04:36 -08:00
|
|
|
<Block label="resources.cpu" value={ t("common.percent", { value: cpuLoad }) } />
|
|
|
|
<Block label="resources.mem" value={ t("common.percent", { value: memoryUsage }) } />
|
2023-01-22 11:51:04 +01:00
|
|
|
</Container>
|
|
|
|
);
|
|
|
|
}
|