mirror of
https://github.com/wassname/ray.git
synced 2026-07-03 15:44:37 +08:00
825737adc5
Co-authored-by: Max Fitton <max@semprehealth.com>
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
export const formatByteAmount = (
|
|
amount: number,
|
|
unit: "mebibyte" | "gibibyte",
|
|
) =>
|
|
`${(
|
|
amount / (unit === "mebibyte" ? Math.pow(1024, 2) : Math.pow(1024, 3))
|
|
).toFixed(1)} ${unit === "mebibyte" ? "MiB" : "GiB"}`;
|
|
|
|
export const formatUsage = (
|
|
used_b: number,
|
|
total_b: number,
|
|
unit: "mebibyte" | "gibibyte",
|
|
includePercentage: boolean,
|
|
) => {
|
|
const usedFormatted = formatByteAmount(used_b, unit);
|
|
const totalFormatted = formatByteAmount(total_b, unit);
|
|
const percent = (100 * used_b) / total_b;
|
|
const ratioStr = `${usedFormatted} / ${totalFormatted}`;
|
|
if (includePercentage) {
|
|
return `${ratioStr} (${percent.toFixed(0)}%)`;
|
|
}
|
|
return ratioStr;
|
|
};
|
|
|
|
// Formats, e.g. 400 and 6000 as "400 MiB / 6000 MiB (6.7%)"
|
|
export const MiBRatio = (used: number, total: number) =>
|
|
`${used} MiB / ${total} MiB (${(100 * (used / total)).toFixed(1)}%)`;
|
|
|
|
export const MiBRatioNoPercent = (used: number, total: number) =>
|
|
`${used} MiB / ${total} MiB`;
|
|
|
|
export const formatDuration = (durationInSeconds: number) => {
|
|
const durationSeconds = Math.floor(durationInSeconds) % 60;
|
|
const durationMinutes = Math.floor(durationInSeconds / 60) % 60;
|
|
const durationHours = Math.floor(durationInSeconds / 60 / 60) % 24;
|
|
const durationDays = Math.floor(durationInSeconds / 60 / 60 / 24);
|
|
const pad = (value: number) => value.toString().padStart(2, "0");
|
|
return [
|
|
durationDays ? `${durationDays}d` : "",
|
|
`${pad(durationHours)}h`,
|
|
`${pad(durationMinutes)}m`,
|
|
`${pad(durationSeconds)}s`,
|
|
].join(" ");
|
|
};
|
|
|
|
export const formatValue = (rawFloat: number) => {
|
|
try {
|
|
const decimals = rawFloat.toString().split(".")[1].length || 0;
|
|
if (decimals <= 3) {
|
|
return rawFloat.toString();
|
|
} // Few decimals
|
|
if (Math.abs(rawFloat.valueOf()) >= 1.0) {
|
|
return rawFloat.toPrecision(5);
|
|
} // Values >= 1
|
|
return rawFloat.toExponential(); // Values in (-1; 1)
|
|
} catch (e) {
|
|
return rawFloat.toString();
|
|
}
|
|
};
|