27 lines
1016 B
TypeScript
27 lines
1016 B
TypeScript
export function randomWalk(value: number, step: number, minimum = 0, maximum = 100): number {
|
|
const next = value + (Math.random() * 2 - 1) * step;
|
|
return Math.min(maximum, Math.max(minimum, next));
|
|
}
|
|
|
|
export function usageTone(percent: number): string {
|
|
if (percent >= 80) return 'red';
|
|
if (percent >= 50) return 'yellow';
|
|
return 'green';
|
|
}
|
|
|
|
export function relativeTime(isoDate: string): string {
|
|
const elapsedMinutes = Math.floor((Date.now() - new Date(isoDate).getTime()) / 60000);
|
|
if (elapsedMinutes < 60) return `${elapsedMinutes}m`;
|
|
const elapsedHours = Math.floor(elapsedMinutes / 60);
|
|
if (elapsedHours < 24) return `${elapsedHours}h`;
|
|
const elapsedDays = Math.floor(elapsedHours / 24);
|
|
if (elapsedDays < 60) return `${elapsedDays}d`;
|
|
return `${Math.floor(elapsedDays / 30)}mo`;
|
|
}
|
|
|
|
export function formatSize(sizeKb: number): string {
|
|
if (sizeKb >= 1024 * 1024) return `${(sizeKb / 1024 / 1024).toFixed(1)}G`;
|
|
if (sizeKb >= 1024) return `${(sizeKb / 1024).toFixed(1)}M`;
|
|
return `${sizeKb}K`;
|
|
}
|