/ frontend / src / lib / utils.ts
utils.ts
 1  import { clsx, type ClassValue } from 'clsx'
 2  import { twMerge } from 'tailwind-merge'
 3  
 4  export function cn(...inputs: ClassValue[]) {
 5    return twMerge(clsx(inputs))
 6  }
 7  
 8  export function formatTimeAgo(dateString: string | null | undefined): string {
 9    if (!dateString) return '-'
10    const date = new Date(dateString)
11    const now = new Date()
12    const seconds = Math.floor((now.getTime() - date.getTime()) / 1000)
13  
14    if (seconds < 60) return 'just now'
15    if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`
16    if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`
17    if (seconds < 604800) return `${Math.floor(seconds / 86400)}d ago`
18  
19    return date.toLocaleDateString('en-US', {
20      month: 'short',
21      day: 'numeric',
22      hour: '2-digit',
23      minute: '2-digit',
24    })
25  }
26  
27  export function formatDuration(seconds: number | null | undefined): string {
28    if (!seconds || seconds <= 0) return '-'
29    if (seconds < 60) return `${seconds}s`
30    if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${seconds % 60}s`
31    const hours = Math.floor(seconds / 3600)
32    const mins = Math.floor((seconds % 3600) / 60)
33    return `${hours}h ${mins}m`
34  }
35  
36  export function getStatClass(percent: number): string {
37    if (percent >= 90) return 'stat-critical'
38    if (percent >= 75) return 'stat-warning'
39    return 'stat-normal'
40  }
41  
42  export function getSwapClass(percent: number): string {
43    if (percent >= 50) return 'stat-critical'
44    if (percent >= 10) return 'stat-warning'
45    return 'stat-normal'
46  }
47  
48  export function getPressureClass(pressure: number): string {
49    if (pressure >= 20) return 'stat-critical'
50    if (pressure >= 5) return 'stat-warning'
51    return 'stat-normal'
52  }