mirror of
https://github.com/ansible/awx.git
synced 2026-01-09 23:12:08 -03:30
Use ansible-runner imports for cpu and memory calculation (#10954)
* Use ansible-runner imports for cpu and memory calculation * Fix bug with capacity and memory adjustment
This commit is contained in:
parent
db34423af8
commit
424dbe8208
@ -22,9 +22,12 @@ from awx.main.managers import InstanceManager, InstanceGroupManager
|
|||||||
from awx.main.fields import JSONField
|
from awx.main.fields import JSONField
|
||||||
from awx.main.models.base import BaseModel, HasEditsMixin, prevent_search
|
from awx.main.models.base import BaseModel, HasEditsMixin, prevent_search
|
||||||
from awx.main.models.unified_jobs import UnifiedJob
|
from awx.main.models.unified_jobs import UnifiedJob
|
||||||
from awx.main.utils.common import measure_cpu, get_corrected_cpu, get_cpu_effective_capacity, measure_memory, get_corrected_memory, get_mem_effective_capacity
|
from awx.main.utils.common import get_corrected_cpu, get_cpu_effective_capacity, get_corrected_memory, get_mem_effective_capacity
|
||||||
from awx.main.models.mixins import RelatedJobsMixin
|
from awx.main.models.mixins import RelatedJobsMixin
|
||||||
|
|
||||||
|
# ansible-runner
|
||||||
|
from ansible_runner.utils.capacity import get_cpu_count, get_mem_in_bytes
|
||||||
|
|
||||||
__all__ = ('Instance', 'InstanceGroup', 'TowerScheduleState')
|
__all__ = ('Instance', 'InstanceGroup', 'TowerScheduleState')
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.ha')
|
logger = logging.getLogger('awx.main.models.ha')
|
||||||
@ -222,7 +225,7 @@ class Instance(HasPolicyEditsMixin, BaseModel):
|
|||||||
except redis.ConnectionError:
|
except redis.ConnectionError:
|
||||||
has_error = True
|
has_error = True
|
||||||
|
|
||||||
self.save_health_data(awx_application_version, measure_cpu(), measure_memory(), last_seen=now(), has_error=has_error)
|
self.save_health_data(awx_application_version, get_cpu_count(), get_mem_in_bytes(), last_seen=now(), has_error=has_error)
|
||||||
|
|
||||||
|
|
||||||
class InstanceGroup(HasPolicyEditsMixin, BaseModel, RelatedJobsMixin):
|
class InstanceGroup(HasPolicyEditsMixin, BaseModel, RelatedJobsMixin):
|
||||||
|
|||||||
@ -15,7 +15,6 @@ import urllib.parse
|
|||||||
import threading
|
import threading
|
||||||
import contextlib
|
import contextlib
|
||||||
import tempfile
|
import tempfile
|
||||||
import psutil
|
|
||||||
from functools import reduce, wraps
|
from functools import reduce, wraps
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
@ -711,6 +710,14 @@ def parse_yaml_or_json(vars_str, silent_failure=True):
|
|||||||
def get_cpu_effective_capacity(cpu_count):
|
def get_cpu_effective_capacity(cpu_count):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
settings_abscpu = getattr(settings, 'SYSTEM_TASK_ABS_CPU', None)
|
||||||
|
env_abscpu = os.getenv('SYSTEM_TASK_ABS_CPU', None)
|
||||||
|
|
||||||
|
if env_abscpu is not None:
|
||||||
|
return int(env_abscpu)
|
||||||
|
elif settings_abscpu is not None:
|
||||||
|
return int(settings_abscpu)
|
||||||
|
|
||||||
settings_forkcpu = getattr(settings, 'SYSTEM_TASK_FORKS_CPU', None)
|
settings_forkcpu = getattr(settings, 'SYSTEM_TASK_FORKS_CPU', None)
|
||||||
env_forkcpu = os.getenv('SYSTEM_TASK_FORKS_CPU', None)
|
env_forkcpu = os.getenv('SYSTEM_TASK_FORKS_CPU', None)
|
||||||
|
|
||||||
@ -724,10 +731,6 @@ def get_cpu_effective_capacity(cpu_count):
|
|||||||
return cpu_count * forkcpu
|
return cpu_count * forkcpu
|
||||||
|
|
||||||
|
|
||||||
def measure_cpu(): # TODO: replace with import from ansible-runner
|
|
||||||
return psutil.cpu_count()
|
|
||||||
|
|
||||||
|
|
||||||
def get_corrected_cpu(cpu_count): # formerlly get_cpu_capacity
|
def get_corrected_cpu(cpu_count): # formerlly get_cpu_capacity
|
||||||
"""Some environments will do a correction to the reported CPU number
|
"""Some environments will do a correction to the reported CPU number
|
||||||
because the given OpenShift value is a lie
|
because the given OpenShift value is a lie
|
||||||
@ -737,10 +740,8 @@ def get_corrected_cpu(cpu_count): # formerlly get_cpu_capacity
|
|||||||
settings_abscpu = getattr(settings, 'SYSTEM_TASK_ABS_CPU', None)
|
settings_abscpu = getattr(settings, 'SYSTEM_TASK_ABS_CPU', None)
|
||||||
env_abscpu = os.getenv('SYSTEM_TASK_ABS_CPU', None)
|
env_abscpu = os.getenv('SYSTEM_TASK_ABS_CPU', None)
|
||||||
|
|
||||||
if env_abscpu is not None:
|
if env_abscpu is not None or settings_abscpu is not None:
|
||||||
return 0, int(env_abscpu)
|
return 0
|
||||||
elif settings_abscpu is not None:
|
|
||||||
return 0, int(settings_abscpu)
|
|
||||||
|
|
||||||
return cpu_count # no correction
|
return cpu_count # no correction
|
||||||
|
|
||||||
@ -748,6 +749,14 @@ def get_corrected_cpu(cpu_count): # formerlly get_cpu_capacity
|
|||||||
def get_mem_effective_capacity(mem_mb):
|
def get_mem_effective_capacity(mem_mb):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
settings_absmem = getattr(settings, 'SYSTEM_TASK_ABS_MEM', None)
|
||||||
|
env_absmem = os.getenv('SYSTEM_TASK_ABS_MEM', None)
|
||||||
|
|
||||||
|
if env_absmem is not None:
|
||||||
|
return int(env_absmem)
|
||||||
|
elif settings_absmem is not None:
|
||||||
|
return int(settings_absmem)
|
||||||
|
|
||||||
settings_forkmem = getattr(settings, 'SYSTEM_TASK_FORKS_MEM', None)
|
settings_forkmem = getattr(settings, 'SYSTEM_TASK_FORKS_MEM', None)
|
||||||
env_forkmem = os.getenv('SYSTEM_TASK_FORKS_MEM', None)
|
env_forkmem = os.getenv('SYSTEM_TASK_FORKS_MEM', None)
|
||||||
|
|
||||||
@ -761,20 +770,14 @@ def get_mem_effective_capacity(mem_mb):
|
|||||||
return max(1, ((mem_mb // 1024 // 1024) - 2048) // forkmem)
|
return max(1, ((mem_mb // 1024 // 1024) - 2048) // forkmem)
|
||||||
|
|
||||||
|
|
||||||
def measure_memory(): # TODO: replace with import from ansible-runner
|
|
||||||
return psutil.virtual_memory().total
|
|
||||||
|
|
||||||
|
|
||||||
def get_corrected_memory(memory):
|
def get_corrected_memory(memory):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
settings_absmem = getattr(settings, 'SYSTEM_TASK_ABS_MEM', None)
|
settings_absmem = getattr(settings, 'SYSTEM_TASK_ABS_MEM', None)
|
||||||
env_absmem = os.getenv('SYSTEM_TASK_ABS_MEM', None)
|
env_absmem = os.getenv('SYSTEM_TASK_ABS_MEM', None)
|
||||||
|
|
||||||
if env_absmem is not None:
|
if env_absmem is not None or settings_absmem is not None:
|
||||||
return 0, int(env_absmem)
|
return 0
|
||||||
elif settings_absmem is not None:
|
|
||||||
return 0, int(settings_absmem)
|
|
||||||
|
|
||||||
return memory
|
return memory
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user