@pick_context_manager_reader
def compute_node_statistics(context):
"""Compute statistics over all compute nodes."""
# TODO(sbauza): Remove the service_id filter in a later release
# once we are sure that all compute nodes report the host field
_filter = or_(models.Service.host == models.ComputeNode.host, models.Service.id == models.ComputeNode.service_id)
# Build a dict of the info--making no assumptions about result
fields = ('count', 'vcpus', 'memory_mb', 'local_gb', 'vcpus_used', 'memory_mb_used', 'local_gb_used', 'free_ram_mb', 'free_disk_gb', 'current_workload', 'running_vms', 'disk_available_least')
return {field: int(result[idx] or 0)
for idx, field in enumerate(fields)}
Including the stats call:
@pick_context_ manager_ reader node_statistics (context) :
def compute_
"""Compute statistics over all compute nodes."""
# TODO(sbauza): Remove the service_id filter in a later release Service. host == models. ComputeNode. host,
models. Service. id == models. ComputeNode. service_ id)
# once we are sure that all compute nodes report the host field
_filter = or_(models.
result = model_query( context,
models. ComputeNode, (
func.count( models. ComputeNode. id),
func.sum( models. ComputeNode. vcpus),
func.sum( models. ComputeNode. memory_ mb),
func.sum( models. ComputeNode. local_gb) ,
func.sum( models. ComputeNode. vcpus_used) ,
func.sum( models. ComputeNode. memory_ mb_used) ,
func.sum( models. ComputeNode. local_gb_ used),
func.sum( models. ComputeNode. free_ram_ mb),
func.sum( models. ComputeNode. free_disk_ gb),
func.sum( models. ComputeNode. current_ workload) ,
func.sum( models. ComputeNode. running_ vms),
func.sum( models. ComputeNode. disk_available_ least),
), read_deleted= "no").\
filter( models. Service. disabled == false()).\
filter( models. Service. binary == "nova-compute").\
filter( _filter) .\
first( )
# Build a dict of the info--making no assumptions about result
'memory_ mb_used' , 'local_gb_used', 'free_ram_mb', 'free_disk_gb',
'current_ workload' , 'running_vms', 'disk_available _least' )
fields = ('count', 'vcpus', 'memory_mb', 'local_gb', 'vcpus_used',
return {field: int(result[idx] or 0)
for idx, field in enumerate(fields)}