Add VM info from bin/vm-info to status page

This commit is contained in:
Josh Holtrop 2026-04-19 15:08:11 -04:00
parent ad23419b99
commit 69a5baeb8d

View File

@ -127,9 +127,10 @@ if cgi.params.key?("content")
<span class="badge #{hdr_cls}">#{running} / #{total} Running</span> <span class="badge #{hdr_cls}">#{running} / #{total} Running</span>
</div> </div>
<div class="subitems"> <div class="subitems">
<div style="display:grid;grid-template-columns:1fr 110px 1.2fr 100px;gap:0.5rem;padding:0 0.6rem;font-size:0.68rem;color:#334155;text-transform:uppercase;letter-spacing:0.06em;font-weight:600;"> <div style="display:grid;grid-template-columns:1fr 1fr 20ex 2fr 10ex;gap:0.5rem;padding:0 0.6rem;font-size:0.68rem;color:#334155;text-transform:uppercase;letter-spacing:0.06em;font-weight:600;">
<span>VM</span> <span>VM</span>
<span style="text-align:right;">Resources</span> <span>OS</span>
<span style="text-align:right;padding-right:1rem;">Resources</span>
<span>Disk</span> <span>Disk</span>
<span style="text-align:right;">State</span> <span style="text-align:right;">State</span>
</div> </div>
@ -137,7 +138,7 @@ if cgi.params.key?("content")
vms.each do |vm| vms.each do |vm|
name = CGI.escapeHTML(vm["name"].to_s) name = CGI.escapeHTML(vm["name"].to_s)
os = vm["os"] ? CGI.escapeHTML(vm["os"]) : nil os_name = vm["os_name"] ? CGI.escapeHTML(vm["os_name"]) : nil
state = vm["state"].to_s state = vm["state"].to_s
state_cls = case state state_cls = case state
when "running" then "ok" when "running" then "ok"
@ -151,8 +152,9 @@ if cgi.params.key?("content")
mem_b = vm["memory"].to_i mem_b = vm["memory"].to_i
res = vcpus > 0 || mem_b > 0 ? "#{vcpus} CPU#{vcpus > 1 ? "s" : ""} · #{human_capacity(mem_b)}" : "" res = vcpus > 0 || mem_b > 0 ? "#{vcpus} CPU#{vcpus > 1 ? "s" : ""} · #{human_capacity(mem_b)}" : ""
cap = vm["disk_total"].to_i df = vm["df"] || []
used = vm["disk_used"].to_i cap = df[0].to_i * 1024
used = df[1].to_i * 1024
dpct_f = cap > 0 ? (used * 100.0 / cap) : 0.0 dpct_f = cap > 0 ? (used * 100.0 / cap) : 0.0
dpct = dpct_f.round dpct = dpct_f.round
disk_cls = dpct_f >= 90 ? "bad" : dpct_f >= 75 ? "warn" : "ok" disk_cls = dpct_f >= 90 ? "bad" : dpct_f >= 75 ? "warn" : "ok"
@ -166,22 +168,35 @@ if cgi.params.key?("content")
%(<div><span style="font-size:0.72rem;color:#475569;">—</span></div>) %(<div><span style="font-size:0.72rem;color:#475569;">—</span></div>)
end end
os_html = os ? %(<div style="font-size:0.67rem;color:#475569;">#{os}</div>) : "" os_html = os_name ? os_name : ""
vm_stats = []
if updates = vm["updates"]
cls = updates == 0 ? "ok" : "warn"
vm_stats << [cls, "#{updates} update#{updates == 1 ? "" : "s"}"]
end
if reboot = vm["reboot_pending"]
vm_stats << ["warn", "Reboot pending"]
end
vm_stats_html = vm_stats.map { |c, txt|
%(<span class="stat #{c}">#{CGI.escapeHTML(txt)}</span>)
}.join
vm_stats_block = vm_stats.empty? ? "" :
%(<div class="drive-stats" style="margin-top:0.4rem;padding:0 0.6rem;">#{vm_stats_html}</div>)
html << <<~HTML html << <<~HTML
<div class="subitem" style="flex-direction:column;align-items:stretch;gap:0.35rem;"> <div class="subitem" style="flex-direction:column;align-items:stretch;gap:0.35rem;">
<div style="display:grid;grid-template-columns:1fr 110px 1.2fr 100px;gap:0.5rem;align-items:center;"> <div style="display:grid;grid-template-columns:1fr 1fr 20ex 2fr 10ex;gap:0.5rem;align-items:center;">
<div class="subitem-left"> <div class="subitem-left">
<div class="dot #{state_cls}"></div> <div class="dot #{state_cls}"></div>
<div>
<div class="subitem-name">#{name}</div> <div class="subitem-name">#{name}</div>
#{os_html}
</div> </div>
</div> <div class="subitem-name">#{os_html}</div>
<div style="text-align:right;"><span class="subitem-value ok">#{CGI.escapeHTML(res)}</span></div> <div style="text-align:right;padding-right:1rem;"><span class="subitem-value ok">#{CGI.escapeHTML(res)}</span></div>
#{disk_html} #{disk_html}
<div style="text-align:right;"><span class="subitem-value #{state_cls}">#{state_label}</span></div> <div style="text-align:right;"><span class="subitem-value #{state_cls}">#{state_label}</span></div>
</div> </div>
#{vm_stats_block}
</div> </div>
HTML HTML
end end