1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-10 04:06:47 +00:00

feat(computes): the Computes page shows what each host has given its VMs

Each host is a row of what it has committed, read live from the host (in
parallel, by a 10 s deadline):

- Host: a status dot, the name, its address and details; when it cannot
  be reached, why.
- vCPUs: the overcommit ratio, large (warning above 2:1, red above
  4:1), over "N vCPUs on M CPUs" and the running VMs' share.
- Memory: memory given to all VMs against the host's memory, as one bar:
  running VMs dark, shut-off VMs light (they take their memory again
  when they start), and a line where the host's memory ends; red when
  the VMs were given more than the host has.
- Storage: the default pool (or the first) with its used share and free
  space; the others, a host may have dozens, open on a click.

A host that cannot be reached, or does not answer in time, says so in
one line instead. vCPUs and Memory sort by ratio and share. A host whose
read hangs is not read again until that read ends, so a stuck host keeps
at most one thread. The table's hidden status texts stay inside it, so
the page does not widen on a phone.
This commit is contained in:
catborise 2026-10-25 10:36:18 +03:00
parent 6b51c30dd6
commit 1436ed13af
6 changed files with 371 additions and 25 deletions

View file

@ -222,4 +222,65 @@ a {
font-size: 12px;
line-height: 1.5; /* If Placeholder of the input is moved up, rem/modify this. */
border-radius: 2px;
}
}
/* the Computes list: what each host has given its VMs */
.compute-list td {
padding-top: 1rem;
padding-bottom: 1rem;
}
.compute-dot {
display: inline-block;
width: 0.6rem;
height: 0.6rem;
border-radius: 50%;
flex-shrink: 0;
}
.compute-ratio {
font-size: 1.5rem;
line-height: 1.2;
font-variant-numeric: tabular-nums;
}
.compute-memory {
min-width: 11rem;
}
.compute-storage {
min-width: 9rem;
}
/* a bar of given capacity: running VMs solid, shut-off VMs faint, and a
mark where the host's own capacity ends */
.cap-bar {
position: relative;
display: flex;
height: 0.6rem;
border-radius: 0.3rem;
background: var(--bs-secondary-bg);
}
.cap-bar.cap-thin {
height: 0.3rem;
}
.cap-running {
background: var(--bs-primary);
border-radius: 0.3rem 0 0 0.3rem;
}
.cap-stopped {
background: var(--bs-primary);
opacity: 0.35;
}
.cap-host {
position: absolute;
top: -0.2rem;
bottom: -0.2rem;
width: 2px;
margin-left: -1px;
background: var(--bs-body-color);
}