parent
ea0310548a
commit
639c608744
@ -0,0 +1,31 @@
|
||||
import classNames from "classnames";
|
||||
import prettyBytes from "pretty-bytes";
|
||||
|
||||
export default function Pool({ name, free, allocated, healthy }) {
|
||||
const total = free + allocated;
|
||||
const usedPercent = Math.round((allocated / total) * 100);
|
||||
const statusColor = healthy ? "bg-green-500" : "bg-yellow-500";
|
||||
|
||||
return (
|
||||
<div className="flex flex-row text-theme-700 dark:text-theme-200 items-center text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
|
||||
<div
|
||||
className="absolute h-5 rounded-md bg-theme-200 dark:bg-theme-900/40 z-0"
|
||||
style={{
|
||||
width: `${usedPercent}%`,
|
||||
}}
|
||||
/>
|
||||
<span className="ml-2 h-2 w-2 z-10">
|
||||
<span className={classNames("block w-2 h-2 rounded", statusColor)} />
|
||||
</span>
|
||||
<div className="text-xs z-10 self-center ml-2 relative h-4 grow mr-2">
|
||||
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{name}</div>
|
||||
</div>
|
||||
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
|
||||
<span>
|
||||
{prettyBytes(allocated)} / {prettyBytes(total)}
|
||||
</span>
|
||||
<span className="pl-2 w-12 text-center">({usedPercent}%)</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
import getServiceWidget from "utils/config/service-helpers";
|
||||
import createLogger from "utils/logger";
|
||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||
|
||||
const logger = createLogger("truenasProxyHandler");
|
||||
|
||||
export default async function truenasProxyHandler(req, res, map) {
|
||||
const { group, service } = req.query;
|
||||
|
||||
if (group && service) {
|
||||
const widgetOpts = await getServiceWidget(group, service);
|
||||
let handler;
|
||||
if (widgetOpts.username && widgetOpts.password) {
|
||||
handler = genericProxyHandler;
|
||||
} else if (widgetOpts.key) {
|
||||
handler = credentialedProxyHandler;
|
||||
}
|
||||
|
||||
if (handler) {
|
||||
return handler(req, res, map);
|
||||
}
|
||||
|
||||
logger.error("Error getting data from Truenas: Username / password or API key required");
|
||||
return res.status(500).json({ error: "Username / password or API key required" });
|
||||
}
|
||||
|
||||
return res.status(500).json({ error: "Error parsing widget request" });
|
||||
}
|
Loading…
Reference in new issue