Download src/hooks/useMemoryUsage.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 1.29 kB
-
https://huggingface.co/chenbhao/codev/resolve/714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/hooks/useMemoryUsage.ts
- Command line
-
hf download hf://chenbhao/codev@714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/hooks/useMemoryUsage.ts
-
curl -L -o useMemoryUsage.ts https://huggingface.co/chenbhao/codev/resolve/714ab7d15ffd78992a4c3d4e2bf153c2f62f4841/src/hooks/useMemoryUsage.ts
1.29 kB
| import { useState } from 'react' | |
| import { useInterval } from 'usehooks-ts' | |
| export type MemoryUsageStatus = 'normal' | 'high' | 'critical' | |
| export type MemoryUsageInfo = { | |
| heapUsed: number | |
| status: MemoryUsageStatus | |
| } | |
| const HIGH_MEMORY_THRESHOLD = 1.5 * 1024 * 1024 * 1024 // 1.5GB in bytes | |
| const CRITICAL_MEMORY_THRESHOLD = 2.5 * 1024 * 1024 * 1024 // 2.5GB in bytes | |
| /** | |
| * Hook to monitor Node.js process memory usage. | |
| * Polls every 10 seconds; returns null while status is 'normal'. | |
| */ | |
| export function useMemoryUsage(): MemoryUsageInfo | null { | |
| const [memoryUsage, setMemoryUsage] = useState<MemoryUsageInfo | null>(null) | |
| useInterval(() => { | |
| const heapUsed = process.memoryUsage().heapUsed | |
| const status: MemoryUsageStatus = | |
| heapUsed >= CRITICAL_MEMORY_THRESHOLD | |
| ? 'critical' | |
| : heapUsed >= HIGH_MEMORY_THRESHOLD | |
| ? 'high' | |
| : 'normal' | |
| setMemoryUsage(prev => { | |
| // Bail when status is 'normal' — nothing is shown, so heapUsed is | |
| // irrelevant and we avoid re-rendering the whole Notifications subtree | |
| // every 10 seconds for the 99%+ of users who never reach 1.5GB. | |
| if (status === 'normal') return prev === null ? prev : null | |
| return { heapUsed, status } | |
| }) | |
| }, 10_000) | |
| return memoryUsage | |
| } | |