| Linux hosting5.siteguarding.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64 Path : /usr/share/lve/dbgovernor/ |
| Current File : //usr/share/lve/dbgovernor/creates_individual_limits_vector_list.py |
#!/opt/cloudlinux/venv/bin/python3
# coding:utf-8
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
import time
import subprocess
from collections import namedtuple
from governor_package_limitting import fill_gpl_json
from utilities import wait_for_governormysql_service_status
Userlimits = namedtuple("Userlimits", "cpu read write")
def getting_individual_limits_vector(individual_limits):
"""
Gets a dictionary with real limits of users.
Returns a vector of 'true/false' values
instead of real values
where 'true' is an individual limit
and 'false' is a package limit.
Args: limits dictionary with users and their real limits values
Returns: limits dictionary with users and their true/false meaning
"""
final_dict = dict()
def get_vector(limit_values, username):
limits_dict = dict()
final_dict.update({username: limits_dict})
for limits_list, _key in ((limit_values.cpu, 'cpu'),
(limit_values.read, 'read'),
(limit_values.write, 'write')):
limit_list = list()
limits_dict.update({_key: limit_list})
_ = [limit_list.append(int(_value) > 0) for _value in limits_list]
_ = [get_vector(limit, user) for user, limit in individual_limits.items()]
return final_dict
def getting_whole_dbctl_list():
"""
Returns all the individual user limits from the 'dbctl list'
(except default limits of course)
Dictionary -> { Username: namedtuple(cpu, read, write)}
"""
dbctllimits = dict()
dbctlorig_listraw = get_dbctlorig_listraw()
if dbctlorig_listraw:
for limit_line in dbctlorig_listraw:
if (limit_line and limit_line.split()[0] != 'default'
and limit_line.split()[0] != 'user'):
limit_line = limit_line.split()
dbctllimits.update(
{limit_line[0]: Userlimits(
limit_line[1].split('/'),
limit_line[2].split('/'),
limit_line[3].split('/')
)
}
)
return dbctllimits
def get_dbctlorig_listraw(attempts=3):
"""
Waiting for results from the utility
"""
command_ = '/usr/share/lve/dbgovernor/utils/dbctl_orig list-raw --bb'
while attempts > 0:
attempts -= 1
dbctllist = subprocess.run(
command_, shell=True, text=True, capture_output=True
)
if dbctllist.returncode == 0:
return dbctllist.stdout.split('\n')
time.sleep(5)
print('Individual limits vector list will not be added!')
print(dbctllist.stdout)
def fill_the_individual_limits():
"""
Writes the individual limits vector to the governor_package_limit.json
"""
msg = "The db_governor service is inactive, individual limits vector list will not be added!"
governormysql_status = wait_for_governormysql_service_status()
if not governormysql_status:
print(msg)
return
_vector = getting_individual_limits_vector(getting_whole_dbctl_list())
for user, limitsdict in _vector.items():
fill_gpl_json(
entity_name=user, cpu=limitsdict['cpu'],
io_read=limitsdict['read'], io_write=limitsdict['write'],
serialize=False, set_vector=True
)
if "__main__" == __name__:
fill_the_individual_limits()