Skip to content

Commit 4ab3c3a

Browse files
committed
Support stubdomains
1 parent 9d49f76 commit 4ab3c3a

1 file changed

Lines changed: 23 additions & 9 deletions

File tree

qubesadmin/tools/qvm_top.py

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ class Stats:
6767
Storage qube statistics.
6868
"""
6969

70-
def __init__(self, vm, state=None) -> None:
70+
def __init__(self, vm, state=None, stubdom=False) -> None:
7171
super().__init__()
7272
self.state: str = state
7373
self.vm = vm
7474
self.name: str = self.vm.name
75-
self.klass: str = self.vm.klass
75+
self.klass: str = self.vm.klass if not stubdom else ""
7676
self.memory: int = 0
7777
self.memory_max: int = 0
7878
self.memory_usage: float = 0.0
@@ -86,7 +86,10 @@ def update_stats(self, **kwargs) -> None:
8686
"""
8787
self.memory = int(kwargs["memory_used_kb"]) // 1024
8888
self.memory_max = int(kwargs["maxmem_kb"]) // 1024
89-
self.memory_usage = round(float(kwargs["memory_usage"]), 1)
89+
try:
90+
self.memory_usage = round(float(kwargs["memory_usage"]), 1)
91+
except ValueError:
92+
self.memory_usage = "NA"
9093
self.cpu_time = int(kwargs["cpu_time"]) // 10**9
9194
if self.klass == "AdminVM":
9295
self.cpu_usage = round(float(kwargs["cpu_usage_raw"]), 1)
@@ -179,6 +182,8 @@ def update_stats(self, vm, _event, **kwargs) -> None:
179182
Rpead vm-stats and update qube statistics.
180183
"""
181184
# pylint: disable=missing-function-docstring
185+
if vm.name.endswith("-dm") and vm not in self.entries:
186+
self.add_domain_item(submitter=None, vm=vm, event=None)
182187
if vm not in self.entries:
183188
return
184189
self.entries[vm].update_stats(**kwargs)
@@ -204,16 +209,21 @@ def add_domain_item(self, submitter, event, vm, **_kwargs) -> None:
204209
Add qube to the statistics holder.
205210
"""
206211
# pylint: disable= unused-argument
212+
stubdom = False
207213
try:
208214
vm = self.app.domains[str(vm)]
209215
except KeyError:
210-
# Qube not present anymore means it was removed in the meantime.
211-
return
216+
if not vm.name.endswith("-dm"):
217+
# Qube not present anymore means it was removed in the meantime.
218+
return
219+
stubdom = True
212220
if vm in self.entries:
213221
return
214222

215-
state = self.get_state_from_event(event=event, vm=vm, default="Halted")
216-
entry = Stats(vm, state=state)
223+
state = self.get_state_from_event(
224+
event=event, vm=vm, default="Halted", stubdom=stubdom
225+
)
226+
entry = Stats(vm, state=state, stubdom=stubdom)
217227
self.entries[vm] = entry
218228
self.domains.append(vm)
219229

@@ -253,7 +263,9 @@ def update_domain_item(self, vm, event, **kwargs) -> None:
253263
return
254264
item.update_state(state)
255265

256-
def get_state_from_event(self, event, vm, default) -> str | None:
266+
def get_state_from_event(
267+
self, event, vm, default, stubdom=False
268+
) -> str | None:
257269
"""
258270
Return power state with cheaply, when necessary, check the API.
259271
"""
@@ -262,7 +274,9 @@ def get_state_from_event(self, event, vm, default) -> str | None:
262274
try:
263275
state = vm.get_power_state()
264276
except QubesException:
265-
if vm not in self.app.domains:
277+
if stubdom:
278+
state = "Running"
279+
elif vm not in self.app.domains:
266280
state = None
267281
return state
268282

0 commit comments

Comments
 (0)