+ def _nodes_booting(self, size):
+ s = sum(1
+ for c in self.booting.iterkeys()
+ if size is None or self.sizes_booting_shutdown[c].id == size.id)
+ s += sum(1
+ for c in self.booted.itervalues()
+ if size is None or c.cloud_node.size.id == size.id)
+ return s
+
+ def _nodes_unpaired(self, size):
+ return sum(1
+ for c in self.cloud_nodes.unpaired()
+ if size is None or c.cloud_node.size.id == size.id)
+
+ def _nodes_booted(self, size):
+ return sum(1
+ for c in self.cloud_nodes.nodes.itervalues()
+ if size is None or c.cloud_node.size.id == size.id)
+
+ def _nodes_down(self, size):
+ # Make sure to iterate over self.cloud_nodes because what we're
+ # counting here are compute nodes that are reported by the cloud
+ # provider but are considered "down" by Arvados.
+ return sum(1 for down in
+ pykka.get_all(rec.actor.in_state('down') for rec in
+ self.cloud_nodes.nodes.itervalues()
+ if size is None or rec.cloud_node.size.id == size.id)
+ if down)
+