diff --git a/awx/main/analytics/collectors.py b/awx/main/analytics/collectors.py index e6ee155a83b8..27108e66b3e3 100644 --- a/awx/main/analytics/collectors.py +++ b/awx/main/analytics/collectors.py @@ -239,8 +239,8 @@ def instance_info(since, include_hostnames=False, **kwargs): # Use same method that the TaskManager does to compute consumed capacity without querying all running jobs for each Instance active_tasks = models.UnifiedJob.objects.filter(status__in=['running', 'waiting']).only('task_impact', 'controller_node', 'execution_node') tm_instances = TaskManagerInstances(active_tasks, instance_fields=['uuid', 'version', 'capacity', 'cpu', 'memory', 'managed_by_policy', 'enabled']) - for instance in tm_instances.instance_objects: - consumed_capacity = tm_instances[instance.hostname].consumed_capacity + for tm_instance in tm_instances.instances_by_hostname.values(): + instance = tm_instance.obj instance_info = { 'uuid': instance.uuid, 'version': instance.version, @@ -249,8 +249,8 @@ def instance_info(since, include_hostnames=False, **kwargs): 'memory': instance.memory, 'managed_by_policy': instance.managed_by_policy, 'enabled': instance.enabled, - 'consumed_capacity': consumed_capacity, - 'remaining_capacity': instance.capacity - consumed_capacity, + 'consumed_capacity': tm_instance.consumed_capacity, + 'remaining_capacity': instance.capacity - tm_instance.consumed_capacity, } if include_hostnames is True: instance_info['hostname'] = instance.hostname diff --git a/awx/main/scheduler/task_manager_models.py b/awx/main/scheduler/task_manager_models.py index b5071266ec8d..b84cdfcf8212 100644 --- a/awx/main/scheduler/task_manager_models.py +++ b/awx/main/scheduler/task_manager_models.py @@ -34,14 +34,12 @@ def remaining_capacity(self): class TaskManagerInstances: - def __init__(self, active_tasks, instances=None, instance_fields=['node_type', 'capacity', 'hostname', 'enabled']): + def __init__(self, active_tasks, instances=None, instance_fields=('node_type', 'capacity', 'hostname', 'enabled')): self.instances_by_hostname = dict() - self.instance_objects = [] if instances is None: instances = Instance.objects.filter(hostname__isnull=False, enabled=True).exclude(node_type='hop').only(*instance_fields) for instance in instances: self.instances_by_hostname[instance.hostname] = TaskManagerInstance(instance) - self.instance_objects.append(instance) # initialize remaining capacity based on currently waiting and running tasks for task in active_tasks: