@@ -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