Skip to content

Commit 8e66497

Browse files
Update
1 parent 5ebc20c commit 8e66497

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/TerminalSystemMonitor.jl

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ module TerminalSystemMonitor
33
using Dates: Dates, Day, DateTime, Second
44
using UnicodePlots
55
import Term # this is required by UnicodePlots.panel
6-
using MLDataDevices: MLDataDevices, CUDADevice
6+
using MLDataDevices: MLDataDevices, CUDADevice, CPUDevice, MetalDevice
77

88
export monitor # entrypoint from REPL
99

1010
# These function will be defined in Package extensions
11+
function plot_cpu_utilization_rates end
1112
function plot_gpu_utilization_rates end
1213
function plot_gpu_memory_utilization end
1314

@@ -77,7 +78,7 @@ function extract_number_and_unit(str::AbstractString)
7778
end
7879
end
7980

80-
function plot_cpu_utilization_rates()
81+
function plot_cpu_utilization_rates(::Type{CPUDevice})
8182
ys = get_cpu_percent()
8283
npad = 1 + floor(Int, log10(length(ys)))
8384
xs = ["id: $(lpad(i-1, npad))" for (i, _) in enumerate(ys)]
@@ -94,7 +95,7 @@ function plot_cpu_utilization_rates()
9495
return plts
9596
end
9697

97-
function plot_cpu_memory_utilization()
98+
function plot_cpu_memory_utilization(::Type{CPUDevice})
9899
memorytotal, memorytotal_unit =
99100
Sys.total_memory() |> Base.format_bytes |> extract_number_and_unit
100101
memoryfree, _ = Sys.free_memory() |> Base.format_bytes |> extract_number_and_unit
@@ -141,27 +142,42 @@ function main(dummyargs...)
141142
while true
142143
try
143144
plts = []
144-
append!(plts, plot_cpu_utilization_rates())
145+
append!(plts, plot_cpu_utilization_rates(CPUDevice))
145146
_, cols = displaysize(stdout)
146147
n = max(1, cols ÷ 25)
147148
chunks = collect(Iterators.partition(plts, n))
148149
f = foldl(/, map(c -> prod(UnicodePlots.panel.(c)), chunks))
149150

150-
f /= prod(UnicodePlots.panel.(plot_cpu_memory_utilization()))
151+
f /= prod(UnicodePlots.panel.(plot_cpu_memory_utilization(CPUDevice)))
151152

152153
if isdefined(Main, :CUDA) &&
153154
getproperty(getproperty(Main, :CUDA), :functional)()
154155
cudaplts = []
155156
n = max(1, cols ÷ 50)
156-
plts1 = plot_gpu_utilization_rates(MLDataDevices.CUDADevice)::Vector{Any}
157-
plts2 = plot_gpu_memory_utilization(MLDataDevices.CUDADevice)::Vector{Any}
157+
plts1 = plot_gpu_utilization_rates(CUDADevice)::Vector{Any}
158+
plts2 = plot_gpu_memory_utilization(CUDADevice)::Vector{Any}
158159
for i in eachindex(plts1, plts2)
159160
push!(cudaplts, plts1[i])
160161
push!(cudaplts, plts2[i])
161162
end
162163
gpuchunks = collect(Iterators.partition(cudaplts, n))
163164
f /= foldl(/, map(c -> prod(UnicodePlots.panel.(c)), gpuchunks))
164165
end
166+
167+
if isdefined(Main, :Metal)
168+
metalplts = []
169+
n = max(1, cols ÷ 50)
170+
plts1 = plot_cpu_utilization_rates(MetalDevice)::Vector{Any}
171+
plts2 = plot_gpu_utilization_rates(MetalDevice)::Vector{Any}
172+
for i in eachindex(plts1)
173+
push!(metalplts, plts1[i])
174+
end
175+
for i in eachindex(plts2)
176+
push!(metalplts, plts2[i])
177+
end
178+
metalchunks = collect(Iterators.partition(metalplts, n))
179+
f /= foldl(/, map(c -> prod(UnicodePlots.panel.(c)), metalchunks))
180+
end
165181
clearlinesall()
166182
display(f)
167183
catch e

0 commit comments

Comments
 (0)