Skip to content

Commit c502e13

Browse files
committed
better format the memory numbers - fixes jupyter-server#1
1 parent fb853b5 commit c502e13

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

src/format.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Taken from https://github.com/jupyter-server/jupyter-resource-usage/blob/e6ec53fa69fdb6de8e878974bcff006310658408/packages/labextension/src/memoryUsage.tsx#L272
2+
3+
type MemoryUnit = 'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'PB';
4+
5+
const MEMORY_UNIT_LIMITS: {
6+
readonly [U in MemoryUnit]: number;
7+
} = {
8+
B: 1,
9+
KB: 1024,
10+
MB: 1048576,
11+
GB: 1073741824,
12+
TB: 1099511627776,
13+
PB: 1125899906842624
14+
};
15+
16+
/**
17+
* Given a number of bytes, convert to the most human-readable
18+
* format, (GB, TB, etc).
19+
* Taken from https://github.com/jupyter-server/jupyter-resource-usage/blob/e6ec53fa69fdb6de8e878974bcff006310658408/packages/labextension/src/memoryUsage.tsx#L272
20+
*/
21+
export function convertToLargestUnit(
22+
numBytes: number | undefined
23+
): [number, MemoryUnit] {
24+
if (!numBytes) {
25+
return [0, 'B'];
26+
}
27+
if (numBytes < MEMORY_UNIT_LIMITS.KB) {
28+
return [numBytes, 'B'];
29+
} else if (
30+
MEMORY_UNIT_LIMITS.KB === numBytes ||
31+
numBytes < MEMORY_UNIT_LIMITS.MB
32+
) {
33+
return [numBytes / MEMORY_UNIT_LIMITS.KB, 'KB'];
34+
} else if (
35+
MEMORY_UNIT_LIMITS.MB === numBytes ||
36+
numBytes < MEMORY_UNIT_LIMITS.GB
37+
// eslint-disable-next-line prettier/prettier
38+
) {
39+
return [numBytes / MEMORY_UNIT_LIMITS.MB, 'MB'];
40+
} else if (
41+
MEMORY_UNIT_LIMITS.GB === numBytes ||
42+
numBytes < MEMORY_UNIT_LIMITS.TB
43+
) {
44+
return [numBytes / MEMORY_UNIT_LIMITS.GB, 'GB'];
45+
} else if (
46+
MEMORY_UNIT_LIMITS.TB === numBytes ||
47+
numBytes < MEMORY_UNIT_LIMITS.PB
48+
) {
49+
return [numBytes / MEMORY_UNIT_LIMITS.TB, 'TB'];
50+
} else {
51+
return [numBytes / MEMORY_UNIT_LIMITS.PB, 'PB'];
52+
}
53+
}

src/widget.tsx

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Kernel } from '@jupyterlab/services';
77
import { INotebookTracker, NotebookPanel } from '@jupyterlab/notebook';
88
import { requestAPI } from './handler';
99
import useInterval from './useInterval';
10+
import { convertToLargestUnit } from './format';
1011

1112
type Usage = {
1213
timestamp: Date | null;
@@ -149,7 +150,7 @@ const KernelUsage = (props: {
149150
CPU: {kernelPoll.usage?.kernel_cpu.toFixed(1)}
150151
</div>
151152
<div className="jp-kernelusage-separator">
152-
Memory: {kernelPoll.usage?.kernel_memory}
153+
Memory: {convertToLargestUnit(kernelPoll.usage?.kernel_memory)}
153154
</div>
154155
<hr></hr>
155156
<h4 className="jp-kernelusage-separator">Host CPU</h4>
@@ -158,28 +159,39 @@ const KernelUsage = (props: {
158159
</div>
159160
<h4 className="jp-kernelusage-separator">Host Virtual Memory</h4>
160161
<div className="jp-kernelusage-separator">
161-
Active: {kernelPoll.usage?.host_virtual_memory.active}
162+
Active:{' '}
163+
{convertToLargestUnit(kernelPoll.usage?.host_virtual_memory.active)}
162164
</div>
163165
<div className="jp-kernelusage-separator">
164-
Available: {kernelPoll.usage?.host_virtual_memory.available}
166+
Available:{' '}
167+
{convertToLargestUnit(
168+
kernelPoll.usage?.host_virtual_memory.available
169+
)}
165170
</div>
166171
<div className="jp-kernelusage-separator">
167-
Free: {kernelPoll.usage?.host_virtual_memory.free}
172+
Free:{' '}
173+
{convertToLargestUnit(kernelPoll.usage?.host_virtual_memory.free)}
168174
</div>
169175
<div className="jp-kernelusage-separator">
170-
Inactive: {kernelPoll.usage?.host_virtual_memory.inactive}
176+
Inactive:{' '}
177+
{convertToLargestUnit(
178+
kernelPoll.usage?.host_virtual_memory.inactive
179+
)}
171180
</div>
172181
<div className="jp-kernelusage-separator">
173-
Percent: {kernelPoll.usage?.host_virtual_memory.percent}
182+
Percent: {kernelPoll.usage?.host_virtual_memory.percent.toFixed(1)}
174183
</div>
175184
<div className="jp-kernelusage-separator">
176-
Total: {kernelPoll.usage?.host_virtual_memory.total}
185+
Total:{' '}
186+
{convertToLargestUnit(kernelPoll.usage?.host_virtual_memory.total)}
177187
</div>
178188
<div className="jp-kernelusage-separator">
179-
Used: {kernelPoll.usage?.host_virtual_memory.used}
189+
Used:{' '}
190+
{convertToLargestUnit(kernelPoll.usage?.host_virtual_memory.used)}
180191
</div>
181192
<div className="jp-kernelusage-separator">
182-
Wired: {kernelPoll.usage?.host_virtual_memory.wired}
193+
Wired:{' '}
194+
{convertToLargestUnit(kernelPoll.usage?.host_virtual_memory.wired)}
183195
</div>
184196
</>
185197
);

0 commit comments

Comments
 (0)