-
Notifications
You must be signed in to change notification settings - Fork 585
/
Copy pathuse-memory.ts
107 lines (94 loc) · 2.77 KB
/
use-memory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import BigNumber from 'bignumber.js'
import {sort} from 'remeda'
import {LOADING_DASH} from '@/constants'
import {trpcReact} from '@/trpc/trpc'
import {t} from '@/utils/i18n'
import {maybePrettyBytes} from '@/utils/pretty-bytes'
import {isMemoryLow, trpcMemoryToLocal} from '@/utils/system'
export function useSystemMemory(options: {poll?: boolean} = {}) {
const memoryQ = trpcReact.system.systemMemoryUsage.useQuery(undefined, {
// Sometimes we won't be able to get disk usage, so prevent retry
retry: false,
// We do want refetching to happen on a schedule though
refetchInterval: options.poll ? 1000 : undefined,
})
const transformed = trpcMemoryToLocal(memoryQ.data)
return {
data: memoryQ.data,
isLoading: memoryQ.isLoading,
//
...transformed,
isMemoryLow: isMemoryLow({size: transformed?.size, used: transformed?.used}),
}
}
export function useMemory(options: {poll?: boolean} = {}) {
const memoryQ = trpcReact.system.memoryUsage.useQuery(undefined, {
// Sometimes we won't be able to get disk usage, so prevent retry
retry: false,
// We do want refetching to happen on a schedule though
refetchInterval: options.poll ? 1000 : undefined,
})
const transformed = trpcMemoryToLocal(memoryQ.data)
return {
data: memoryQ.data,
isLoading: memoryQ.isLoading,
//
...transformed,
apps: sort(
[
...(memoryQ.data?.apps ?? []),
{
id: 'umbreld-system',
used: memoryQ.data?.system ?? 0,
},
],
(a, b) => b.used - a.used,
),
isMemoryLow: isMemoryLow({size: transformed?.size, used: transformed?.used}),
}
}
export function useSystemMemoryForUi(options: {poll?: boolean} = {}) {
const {isLoading, used, size, available, isMemoryLow} = useSystemMemory({poll: options.poll})
if (isLoading) {
return {
isLoading: true,
value: LOADING_DASH,
valueSub: '/ ' + LOADING_DASH,
secondaryValue: LOADING_DASH,
progress: 0,
} as const
}
return {
isLoading: false,
value: maybePrettyBytes(used),
valueSub: `/ ${maybePrettyBytes(size)}`,
secondaryValue: t('something-left', {left: maybePrettyBytes(available)}),
progress: BigNumber(used ?? 0)
.dividedBy(size ?? 0)
.toNumber(),
isMemoryLow,
} as const
}
export function useMemoryForUi(options: {poll?: boolean} = {}) {
const {isLoading, used, size, available, isMemoryLow, apps} = useMemory({poll: options.poll})
if (isLoading) {
return {
isLoading: true,
value: LOADING_DASH,
valueSub: '/ ' + LOADING_DASH,
secondaryValue: LOADING_DASH,
progress: 0,
} as const
}
return {
isLoading: false,
value: maybePrettyBytes(used),
valueSub: `/ ${maybePrettyBytes(size)}`,
secondaryValue: t('something-left', {left: maybePrettyBytes(available)}),
progress: BigNumber(used ?? 0)
.dividedBy(size ?? 0)
.toNumber(),
isMemoryLow,
apps,
} as const
}