OwlCyberSecurity - MANAGER
Edit File: mysql_governor_lib.cpython-311.pyc
� �������h����������������������������d�dl�Z�d�dlmc�mZ�d�dlZd�dlZd�dlmZ�d�dl m Z mZmZ�d�dl mZ�d�dlmZ�d�dlmZmZ��G�d��d������������Z�G�d ��d e������������Z�G�d��de������������Z�G�d ��de������������Zd��Z�G�d��d������������ZdS�)�����N)� ExpatError)�Tuple�Optional�Dict)�Version)�FormattedException)�run_command�ExternalProgramFailedc�������������������������e�Zd�ZdZdZdZdS�)�GovernorStatus�enabled�error�disabledN)�__name__� __module__�__qualname__�ENABLED�ERROR�DISABLED��������/builddir/build/BUILD/imunify360-venv-2.5.2/opt/imunify360/venv/lib/python3.11/site-packages/clcommon/lib/mysql_governor_lib.pyr���r������s���������������G��E��H�H�Hr���r���c�������������������������e�Zd�ZdS�)�MySQLGovExceptionN)r���r���r���r���r���r���r���r������s���������������Dr���r���c��������������������"�������e�Zd�ZdZ��fd�Z��xZS�)�MySQLGovernorDisabledz< Exception raised when dbgovernor daemon is offline c������������������V������t���������������������������������������������dddd�d��������������d�S�)NzR%(util)s is disabled in the system. Please, run "%(command)s" to start the servicezMySQL governorzservice db_governor restart)�util�command��message�context��super�__init__��self� __class__s��� �r���r%���zMySQLGovernorDisabled.__init__%���sK������� �����C��)�8���� �� �� �� �� �� �� r����r���r���r����__doc__r%���� __classcell__�r(���s���@r���r���r���!���sB������������������ �� �� �� �� �� �� �� �� r���r���c��������������������"�������e�Zd�ZdZ��fd�Z��xZS�)�MySQLGovernorAbsentz: Exception raised when dbgovernor isn't installed c������������������T������t���������������������������������������������dddid��������������d�S�)Nz%(util)s not present in systemr����Governorr ���r#���r&���s��� �r���r%���zMySQLGovernorAbsent.__init__5���s>������� �����7�� �+� �� �� �� �� �� �� r���r)���r,���s���@r���r.���r.���1���sB����������������������������������r���r.���c�����������������������dd|�id�S�)NzInvalid %(param)s parameter�paramr ���r���)r2���s��� r����_get_exc_messager3���<���s������0��U�#�����r���c������������ ��������V����e�Zd�ZdZdZdZdZdZdZdZ dZ d Zd ��Zd��Z d��Zd<d�Zd��Zd��Zd��Zed����������������Zd��Zd��Zd��Zed����������������Zed����������������Zd��Zd��Zd<dedeeef���������fd�Zd��Z d��Z!d��Z"d ��Z#d=d"�Z$d#e%e&���������de'fd$�Z(d%e)d&e)d'e)deeef���������fd(�Z*d>d#e%e&���������de%e+���������fd)�Z,d*e&d+e)fd,�Z-d#e&d-e%e���������d.e%e���������fd/�Z.d#e&d-e%e���������d.e%e���������fd0�Z/ � �d=d#e&d-e%e���������d.e%e���������fd1�Z0d2��Z1d3��Z2d4��Z3ed5e&d6e&fd7���������������Z4d<d8�Z5d9ed:e'de'fd;�Z6d!S�)?� MySQLGovernorz MysqlGovernor library )g��(\��?gR���Q�?g�z�G��?)gffffff�?gףp= ��?g�������?z/usr/sbin/dbctlz7/usr/share/lve/dbgovernor/governor_package_limitting.pyz/usr/sbin/db_governorz!/etc/container/mysql-governor.xmlz"/var/run/mysql-governor-config.xml�DEFAULTc������������������������d�|�_���������d�|�_��������d|�_��������t����������j�����������������������������|�j��������������������|�_��������|������������������������������������|�_ ��������|�� ����������������������������������|�_��������d�S��NF)�_governor_ignored_users�_governor_limits�_is_governor_error�os�path�isfile� _UTILITY_PATH�_is_governor_present�_detect_governor_mode�_governor_mode�get_governor_version�_governor_version�r'���s��� r���r%���zMySQLGovernor.__init__W���sc������'+��$��!%���"'���$&�G�N�N�4�3E�$F�$F��!�"�8�8�:�:���!%�!:�!:�!<�!<����r���c�����������������������|�j���������S��N)rB���rE���s��� r����get_governor_modezMySQLGovernor.get_governor_modei���s�������"�"r���c������������������������|�j���������r[ �|������������������������������������}|���������������������d������������d������������������������������d������������S�#�t����������t ����������f$�r�Y�d�S�w�xY�wd�S�)N�lver����use)r@����_get_xml_config�getElementsByTagName�getAttributer���� IndexError)r'����governor_cfgs��� r���rA���z#MySQLGovernor._detect_governor_model���sy�������$�� � �#�3�3�5�5��#�8�8��?�?��B�O�O�PU�V�V�V��%�z�2�� �� �� ��t�t� ������4s����AA��A �A Fc������������������������t����������|�j��������gt����������|������������z���d�������������\��}}}d|v�r#d|�_��������d|�_��������d|�_��������t �������������������������|r|s|rt����������dd|id��������������|||fS�)a�� Run dbctl utility with given arguments and handle common errors: - governor is down: MySQLGovernorDisabled :param check_exit_code: whether we should raise exception when dbctl returs code != 0 T��return_full_outputzcan't connect to socketNzdbctl error: %(output)s�outputr ���)r ���r?����listr;���r:���r9���r���r���)r'����args�check_exit_code�ret_code�std_out�std_errs��� r����_run_dbctl_with_argsz"MySQLGovernor._run_dbctl_with_argsv���s��������&1� � � �4��:�:�-�#�&%��&%��&%�"��'�7��%��/�/�&*�D�#�$(�D�!�+/�D�(�'�)�)�)� �� F�(�� F�g�� F�#�0I�19�7�0C�%E��%E��F��F�� F���'�)�)r���c������������������*�����|�������������������������������������S�rG���)�_detect_governor_statusrE���s��� r����get_governor_statusz!MySQLGovernor.get_governor_status����s�������+�+�-�-�-r���c������������������N����|�������������������������������������r� �|�������������������������������������t����������j��������d�fS�#�t����������$�r}t����������j��������|fcY�d�}~S�d�}~wt����������$�r4}t����������j��������t ����������dt����������|������������i������������fcY�d�}~S�d�}~ww�xY�wt����������j��������d�fS�)Nr!���) �is_governor_present� _load_infor���r���r���r���r ����strr���)r'����es��� r���r]���z%MySQLGovernor._detect_governor_status����s��������#�#�%�%�� 4� 4����!�!�!��&�-�t�3�3���%�� /�� /�� /�%�+�Q�.�.�.�.�.�.�.�����(�� �� �� �%�+�->��s�1�v�v�@��.��.������������������� ������&��,�,s-����8�� B� A�B� B�")B�B�Bc�����������������������|�������������������������������������} �t����������|dd�������������5�}t����������j��������|�����������������������������������������������cd�d�d��������������S�#�1�swxY�w�Y���d�S�#�t ����������t����������f$�r/}d|�_��������t����������d|t����������|������������d�d�������������|�d�}~wt����������$�r/}d|�_��������t����������d|t����������|������������d�d�������������|�d�}~ww�xY�w) N�rzutf-8)�encodingTzNAn error occured while loading governor config from %(path)s. Error: %(error)s)r=���r���r ���zNAn error occured while parsing governor config from %(path)s. Error: %(error)s)�_get_config_path�open�xml�parseString�read�IOError�OSErrorr;���r���rb���r���)r'����config_path�frc���s��� r���rL���zMySQLGovernor._get_xml_config����sc������+�+�-�-�� ��k�3��9�9�9�� 1�Q���q�v�v�x�x�0�0� 1�� 1�� 1�� 1�� 1�� 1�� 1�� 1�� 1�� 1�� 1�� 1����� 1�� 1�� 1�� 1�� 1�� 1����!�� �� �� �&*�D�#�#�E�%0�3�q�6�6�B�B�D��D������ ����� ��� �� �� �&*�D�#�#�E�%0�3�q�6�6�B�B�D��D������ ����� ���sF����A(��&A�A(��A�A(��"A�#A(��(C�9*B#�# C�0*C�Cc������������������v����g�} �|�����������������������d������������d���������}n'#�t����������$�r}t����������dddid�������������|�d}~ww�xY�w|����������������������d������������}|D�]Z}|���������������������d������������}|d k����r=|���������������������d ������������r(|���������������������|���������������������d ��������������������������[|S�)z� Loads information about igrored users :type governor_cfg: xml.Document :return: list of ignore users �governorr���zFMalformed mysql-governor config. Unable to find element '%(element)s'.�elementr ���N�user�mode�ignore�name)rM���rO���r���rN����append)rP����ignore_users_list�gov_datarc����users_data_list� user_data� user_modes��� r����_load_ignore_users_from_xmlz)MySQLGovernor._load_ignore_users_from_xml����s���������� �#�8�8��D�D�Q�G�H�H���� �� �� �#�E�%�z�2�%��%������� ����� �����#�7�7��?�?��(�� M�� M�I�!�.�.�v�6�6�I��H�$�$���)�)�&�1�1��M�%�,�,�Y�-C�-C�F�-K�-K�L�L�L�� � s���� �� A�?�Ac����������������������|�����������������������d������������r|dz��}d}n|}|dk����rd}d}||����������������������t����������|dz��������������|�j��������������������z��}||����������������������t����������|dz��������������|�j��������������������z��}||fS�)z� Calculate db R/W IO limits based on governor version :param io: requested limits in MB/s :return: string values suitable to pass to "dbctl set ..." z1.2-17i���z%sb,%sb,%sb,%sb��������z%s,%s,%s,%s)�_is_governor_newer_then�_percentage�int�IO_PERCENTS)r'����io� io_limits�limits_tmplrk����writes��� r����_calc_rw_io_limitsz MySQLGovernor._calc_rw_io_limits����s���������'�'��1�1�� (��W��I�+�K�K��I��A�~�~��� �'�K��T�-�-�c�)�q�.�.A�.A�.2�.>�@��@��@���d�.�.�s�9��>�/B�/B�/3�/?�A��A��A���U�{�r���c����������������������|�������������������������������������sd�S� �t����������j��������|�j��������dgd�������������}|��������������������������������������������������������d������������d���������}|S�#�t����������j��������t����������f$�r�Y�d�S�w�xY�w)Nz --versionT)�text� r����)r`���� subprocess�check_output�_GOVERNOR_BINARY_PATH�strip�split�CalledProcessErrorrm���)r'����res�versions��� r���rC���z"MySQLGovernor.get_governor_version����s��������'�'�)�)�� ��4� ��)�4�+E�{�*S�Z^�_�_�_�C���i�i�k�k�'�'��,�,�Q�/�G��N���-�w�7�� �� �� ��4�4� ���s����AA$��$A>�=A>c������������������X�����|�j���������}|sdS�t����������|������������t����������|������������k�����S�r8���)rD���r���)r'���r�����currents��� r���r����z%MySQLGovernor._is_governor_newer_then����s2�������(���� ��5��w���'�'�"2�"2�2�2r���c������������������>�����d��|�������������������������������������D���������������S�)a��� Convert data line from dbctl to list :param line: Data line could be like: "default 400/380/350/300 953/791/724/562 953/791/724/562" or: "default 400/380/350/300 1000/830/760/590 1000/830/760/590" depending on --kb/mb/bb option passed to dbctl :return: list: ['default', '400/380/350/300', '953/791/724/562', '953/791/724/562'] c�����������������������g�|�]}|�|��S�r���r���)�.0�parts��� r���� <listcomp>z-MySQLGovernor._parse_line.<locals>.<listcomp>��s������6�6�6���6��6�6�6r����r����)�lines��� r����_parse_linezMySQLGovernor._parse_line����s �������7�6������6�6�6�6r���c������������������z�����|�g}|D�]'}|����������������������t����������|�|z����������������������������(t����������|������������S�)zX Calculate full list of governor limits by one value and percents koeff )rw���r�����tuple)�value�percentsr�����ks��� r���r����zMySQLGovernor._percentage��sE������ ��g���� %�� %�A��J�J�s�5��7�|�|�$�$�$�$��S�z�z�r���c�����������������������|�j���������S�)z= Get governor presence flag :return: )r@���rE���s��� r���r`���z!MySQLGovernor.is_governor_present��s ������ ��(�(r���c������������������D�����|��������������������������������������||�j��������v�rdS�dS�)z� Get MySQL governor status for supplied user :param username: Username for get status :return: Governor status: "watched"/"ignored" or None if error �ignored�watched)ra���r9����r'����usernames��� r����get_governor_status_by_usernamez-MySQLGovernor.get_governor_status_by_username��s,������� �������t�3�3�3��9��yr����with_package_mark�returnc�����������������������|��������������������������������������||�j��������v�r|�j��������|���������\��}}}}n|�j��������d���������\��}}}}|r||f}n||f}|S�)a�� Get MySQL governor limits for supplied user :param username: Username for read limits :param with_package_mark: False - without package limits difference mark (for compatibility with non-package governor, used in cloudlinux-top/cloudlinux-statistics), True - with package limits difference mark :return: Tuple (CPU limit, IO limit). Examples: (150, 3072) - with_package_mark == False ('*150', '3072') - with_package_mark == True ('*150', '*4096') - with_package_mark == True * - user has individual limits, differ from package limit MySQLGovException will be thrown if governor not present or error �default)ra���r:���)r'���r����r�����user_cpu_limit�user_io_limit_kb�user_cpu_limit_marked�user_io_limit_marked�limits_for_returns��� r����get_limits_by_userz MySQLGovernor.get_limits_by_user$��s������� � �������t�,�,�,��%�h�/�� Z�N�,�.C�EY�EY���%�i�0�� Z�N�,�.C�EY��� C�!6�8L� M���!/�1A� B�� � r���c�����������������������|��������������������������������������|rdnd}|����������������������||g������������\��}}}|s|rd||p|d�d�}t����������|�������������dS�)z� Set MySQLGovernor status for single user :param: `str` username: Username for set status :param: `bool` status: True for "monitor", False for "ignore" :return: `bool`: operation status result �monitorru���z.Set governor status error(%(ret)s): %(output)s��retrT���r ���r����ra���r[���r����r'���r�����status� status_cmdr����rY���rZ����exc_messages��� r����set_governor_status_for_userz*MySQLGovernor.set_governor_status_for_userA��s�������� ������"(�6�Y�Y�h� � $� 9� 9�:�x�:P� Q� Q���W�g��� 1�c�� 1�&V�.1�W�=O��&P�&P�R��R�K�#�K�0�0�0��qr���c�����������������������|��������������������������������������|rdnd}|dv�rd}|����������������������||g������������\��}}}|s|rd||p|d�d�}t����������|�������������dS�) z� Set user restricted with dbctl utility :param: `str` username: Username for set restricted status :param: `bool` status: True for "restricted", False for "unrestricted" :return: `bool`: operation status result �restrict� unrestrict��root�adminr����z,Set user restrict error(%(ret)s): %(output)sr����r ���r���r����r����s��� r����set_restricted_status_for_userz,MySQLGovernor.set_restricted_status_for_userQ��s�������� ������#)�;�Z�Z�|� ��(�(�(� �H� $� 9� 9�:�x�:P� Q� Q���W�g��� 1�c�� 1�&T�.1�W�=O��&P�&P�R��R�K�#�K�0�0�0��qr���c�����������������������|��������������������������������������|����������������������dg������������\��}}}|s|rd||p|d�d�}t����������|�������������dS�)zi Set user restricted with dbctl utility :return: `bool`: operation status result zunrestrict-all�:Set all users unrestrict status error(%(ret)s): %(output)sr����r ���r���r����)r'���r����rY���rZ���r����s��� r����%set_unrestricted_status_for_all_usersz3MySQLGovernor.set_unrestricted_status_for_all_usersc��su������ � ������ $� 9� 9�;K�:L� M� M���W�g��� 1�c�� 1�&b�.1�W�=O��&P�&P�R��R�K�#�K�0�0�0��qr���c������������������P�����|��������������������������������������|dv�rd}||�j��������v�rdS�dS�)z� Get MySQL governor status for supplied user :param username: Username for get status :return: Governor restricted status: "restricted"/"unrestricted" r����r����� restricted�unrestricted)ra����_governor_restricted_usersr����s��� r����get_restrict_status_by_usernamez-MySQLGovernor.get_restrict_status_by_usernamep��s=������� �������(�(�(� �H��t�6�6�6��<��~r���Nc����������� �������0����|�|�dS�|��������������������������������������d|g}|��t����������|t����������������������rBd���������������������t ����������t ����������|����������������������||�j��������������������������������������������}nt����������t����������d�������������������������|� ��������������������d|����������������|�zt����������|t����������������������r|����������������������|������������\��}}nt����������t����������d�������������������������|� ��������������������d|����������������|� ��������������������d |���������������� �|����������������������|������������\��}}} n/#�t����������$�r"} t����������t����������| ������������������������| �d} ~ ww�xY�w| s|rd || p|d�d�}t����������|�������������d|�_��������dS�) a��� Set MySQLGovernor limits for user :param: username `str`: username for set limits :param: `int`|`list` cpu: governor cpu limit. when it param int - calculate by percentage other params :param: `int`|`list` io: io value means that read and write limits similar :param: `int`|`list` read: read limit :param: `int`|`list` write: write limit :return: 0 Nr����set�,�cpu�--cpu=r�����--read=�--write=r����r����r ���)ra���� isinstancer�����join�maprb���r�����CPU_PERCENTSr���r3���rw���r����r[���r ���r:���)r'���r����r����r�����cmdrk���r����r����rY���rZ���rc���r����s��� r����set_limits_for_userz!MySQLGovernor.set_limits_for_user~��s��������;�2�:��1��������h����?��#�s�#�#�� A��h�h�s�3��(8�(8��d�>O�(P�(P�Q�Q�R�R���'�(8��(?�(?�@�@�@�� �J�J�~��~�~�&�&�&� �>���"�c�"�"�� @�"�5�5�b�9�9���e�e�'�(8��(>�(>�?�?�?� � �J�J�'��'�'�(�(�(��J�J�)�%�)�)�*�*�*� 3�$(�$=�$=�c�$B�$B�!�C��'�'��$�� 3�� 3�� 3�#�C��F�F�+�+��2����� 3������ 1�c�� 1�&b�.1�W�=O��&P�&P�R��R�K�#�K�0�0�0� $����qs����)E�� E/� E*�*E/�package_namec����������������������|r4|�j���������dd|��������������������������������������������������������d���������������dg}n|�j���������dddg}t����������|d�������������\��}}}|dk����s|r(t ����������d d ���������������������|������������|d�d�������������� �t ����������j��������|������������}n@#�t����������j��������f$�r-}t ����������d |�j���������t����������|������������d�d�������������|�d}~ww�xY�w|S�)�� Retrieve MySQL Governor package limits :param package_name: Package name. If None, get all packages name :return: Dict with limits. Example: {'pack1': {'cpu': 100, 'io': 900}, 'pack2': {'cpu': 100, 'io': 900}} �getz --package=zunicode-escapez--format=kbz--allTrR���r���z''%(cmd)s' failed, stderr is: %(stderr)sr�����r�����stderrr ���z,%(util)s output invalid, error is: %(error)s)r���r���N) �_PACKAGE_UTILITY_PATH�encode�decoder ���r���r�����json�loads�JSONDecodeErrorrb���)r'���r�����cmd_listrX���rY���rZ����package_data_from_utilrc���s��� r����$_get_package_raw_limits_from_utilityz2MySQLGovernor._get_package_raw_limits_from_utility���s3�������� S��2�E�U�\�%8�%8�%:�%:�%A�%A�BR�%S�%S�U�U�%�'�H�H���2�E�7�M�R�H�%0��d�%S�%S�%S�"��'�7��q�=�=�G�=�#�D�#&�8�8�H�#5�#5��I�I�%��%������ � �%)�Z��%8�%8�"�"���$�'�� �� �� �#�I�$(�$>��Q���P�P�%��%������� ����� ���� �&�%s����B��C�-(C�C�cpu_limits_list�read_limits_list�write_limits_listc�����������������������t����������|d���������������������|����������������������t����������|d���������������������t����������|d���������������������������������fS�)a�� Calculate package limits from raw governor limits :param cpu_limits_list: CPU limits list :param read_limits_list: Read limits list :param write_limits_list: Write limits list :return: Tuple: (cpu_limit, io_limit) r���)r�����_get_user_io_limitrb���)r'���r����r����r����s��� r����_calc_package_limits_from_rawz+MySQLGovernor._calc_package_limits_from_raw���sK��������?�1�%�&�&��(?�(?��DT�UV�DW�@X�@X�Z]�^o�pq�^r�Zs�Zs�(t�(t�t�tr���c������������������������ �|�����������������������|������������}n#�t����������$�r���w�xY�wi�}|�����������������������������������D�]9\��}}|����������������������|d���������|d���������|d���������������������\��}}||d�||<����:|S�)r����r����rk���r����)r����r����)r����r����itemsr����)r'���r����r����� packages_data� pack_name�pack_limits� cpu_limit�io_limits��� r����get_package_limitsz MySQLGovernor.get_package_limits���s������� �%)�%N�%N�|�%\�%\�"�"�� �� �� �� �� ������ �&<�&B�&B�&D�&D�� J�� J�"�I�{�"&�"D�"D�[�QV�EW�Yd�ek�Yl�EP�QX�EY�#[��#[��I�x�/8��'I�'I�M�)�$�$��s������$r�����limit_namesc������������������������d����������������������|������������}|�j��������dd|���d|���g}t����������|d�������������\��}}}|dk����s|r(t����������dd ����������������������|������������|d �d��������������dS�) z� Reset users limits to default :param username: User name ro reset limits :param limit_names: Limit names list to reset r�����reset_individualz--user=z --limits=TrR���r���z*'%(cmd)s' is failed, stderr is: %(stderr)sr����r����r ���N)r����r����r ���r���)r'���r����r����� limits_stringr����rX����_rZ���s��� r����reset_user_limits_to_defaultsz+MySQLGovernor.reset_user_limits_to_defaults���s������������-�-� ��.�0B�DX�h�DX�DX�/� �/�/�1��*�8��M�M�M���!�W��q�=�=�G�=�#�G�#&�8�8�H�#5�#5��I�I�%��%������ ���=r���r����r����c����������������������ddl�m}m}�d|���} ��||������������}n#�t����������t����������f$�r�Y�dS�w�xY�wt����������|������������dk����rdS�g�}d} |D��]�} | ���������������������d������������r�|��| ��������������������������������������������������������d������������}t����������|������������dk����r�U|dk����r|�j ��������}nt����������|������������}|d ��������������������������������������������} | |k����r|���������������������d |��d��������������d} ��|���������������������| ��d����������������| ���������������������d ������������r�|��|dk����r|�j ��������}nt����������|������������}| ��������������������������������������������������������d������������}t����������|������������dk����r��7|d ��������������������������������������������}||k����r|���������������������d|��d��������������d} ��t|���������������������| ��d�����������������|���������������������| ����������������| r�|||d�������������dS�dS�)z� Set MySQL Governor to cPanel package file. If limits not changed, package file will not be written :param package_name: Package name :param cpu_limit: MySQL CPU limit to set :param io_limit: MySQL IO limit to set r���)�get_file_lines�write_file_linesz/var/cpanel/packages/NF� lve_mysql_cpu�=r����r���zlve_mysql_cpu=� T�lve_mysql_ioz lve_mysql_io=�w)�clcommon.utilsr����r���rm���rl����len� startswithr����r����� _S_DEFAULTrb���rw���)r'���r����r����r����r����r����package_path�cpanel_package_lines�lines_to_write�is_change_mader�����parts�s_cpu_limit�s_old_cpu_limit� s_io_limitr����s��� r����&_set_governor_limits_to_cpanel_packagez4MySQLGovernor._set_governor_limits_to_cpanel_package��sr������ D�C�C�C�C�C�C�C�=�|�=�=�� �#1�>�,�#?�#?� � ����#�� �� �� ��F�F� �����#�$�$��)�)��F������)�� ,�� ,�D�����/�/�� ,�I�4I�� � ���*�*�3�/�/���u�:�:��?�?����>�>�"&�/�K�K�"%�i�.�.�K�"'��(�.�.�"2�"2��"�k�1�1�"�)�)�*J�;�*J�*J�*J�K�K�K�%)�N�N��#�)�)�T�+�+�+�6�6�6�6�����0�0�� ,�X�5I��q�=�=�!%��J�J�!$�X���J�� � ���*�*�3�/�/���u�:�:��?�?���a����(�(���J�&�&�"�)�)�*H�*�*H�*H�*H�I�I�I�%)�N�N��#�)�)�T�+�+�+�6�6�6�6��%�%�d�+�+�+�+��� @���\�>�3�?�?�?�?�?� @�� @s������0�0c������������������`�����ddl�m}��|��������������dk����rdS�|����������������������|||�������������dS�)a&�� Apply all MySQL Governor packages limits to cpanel package file. In not cPanel, do nothing :param package_name: Package name to update :param cpu_limit: MySQL CPU limit to set, None - not change :param io_limit: MySQL IO limit to set, None - not change r���)� getCPName�cPanelN)�clcommon.cpapir��r��)r'���r����r����r����r��s��� r����_apply_package_limits_to_cpanelz-MySQLGovernor._apply_package_limits_to_cpanelL��sJ������� -�,�,�,�,�,��9�;�;�(�"�"��F��3�3�L�)�X�V�V�V�V�Vr���c����������� �������&����|�|�|�t����������d|��d|��d|��d��������������|�j��������dd|g}|��t����������|t����������������������rBd���������������������t����������t����������|����������������������||�j��������������������������������������������}nt����������t����������d �������������������������|� ��������������������d |����������������|�zt����������|t����������������������r|����������������������|������������\��}}nt����������t����������d�������������������������|� ��������������������d|����������������|� ��������������������d |����������������t����������|d�������������\��}} } |dk����s| r)t����������dd���������������������|������������| | d�d��������������|�� ��������������������|||�������������dS�)z� Set limits for Governor package :param package_name: Package name for set :param cpu_limit: MySQL CPU limit to set :param io_limit: MySQL CPU limit to set Nz�MySQLGovernor.set_package_limits arguments error: Package name and at least one limit should be provided. Current arguments: package name: z; cpu limit is z; IO limit is �;r����z --packager����r����r����r����r����r����TrR���r���zI'%(command)s' is failed, stdout is: '%(stdout)s', stderr is: '%(stderr)s'r����)r����stdoutr����r ���)r���r����r����r����r����r����rb���r����r����r3���rw���r����r ���r��)r'���r����r����r����r����r����rk���r����rX���rY���rZ���s��� r����set_package_limitsz MySQLGovernor.set_package_limitsX��s���������9�#4��9I�#��%Y�\h�%Y��%Y��5>�%Y��%Y��NV�%Y��%Y��%Y��Z��Z�� Z� ��.��{�L�Q��� ��)�S�)�)�� G��h�h�s�3��(8�(8��D�DU�(V�(V�W�W�X�X���'�(8��(E�(E�F�F�F��O�O�N�S�N�N�+�+�+����(�C�(�(�� F�"�5�5�h�?�?���e�e�'�(8��(D�(D�E�E�E��O�O�,�d�,�,�-�-�-��O�O�.�u�.�.�/�/�/�%0��d�%S�%S�%S�"��'�7��q�=�=�G�=�#�f�'*�x�x��'9�'9�W�X_�`�`�%��%������ � � �,�,�\�9�h�O�O�O�O�Or���c������������������f�����t�����������j�����������������������������|�j��������������������r|�j��������S�|�j��������S�)zN Get config path for mysql-governor; :rtype: str|None )r<���r=���r>����_CONTAINER_PATH_V2�_CONTAINER_PATHrE���s��� r���rg���zMySQLGovernor._get_config_path���s/������ ��7�>�>�$�1�2�2�� +��*�*��#�#r���c����������������������� �|�������������������������������������}|����������������������|������������|�_��������dS�#�t����������$�r�d|�_��������d|�_����������w�xY�w)z*Load ignore users list from container fileN)rL���r}���r9���r���r:���)r'����governor_xmls��� r����_read_ignore_usersz MySQLGovernor._read_ignore_users���se������ ��/�/�1�1�L��0�0��>�>�� �(�(�(�� �� �� �� �$(�D�!�+/�D�(�� ���s ����.2��Ac������������������\����|�j���������� |�j���������dS�|�j��������sd|�_��������t �������������������������dd|�j��������id�}|�������������������������������������|������������������������������������\��}}|����������������������dgd�������������\��}}}d��|� ����������������������������������� ��������������������d ������������d d����������D���������������|�_��������|� ��������������������d ������������}|����������������������|||������������|�_��������d|�j��������vr4d|�_��������d|�_��������d|�_���������dd |�j����������d�d�d�}t����������|�������������dS�)zL Loads users info from MySQL governor :return: None NTz%(utility)s output is invalid�utilityr ���zlist-restricted�rW���c������������������B�����g�|�]}|������������������������������������d������������S�)r���r����)r����r����s��� r���r����z,MySQLGovernor._load_info.<locals>.<listcomp>���s1�������+ ��+ ��+ � $�D�J�J�L�L��O�+ ��+ ��+ r���r��r���r����z'There is no %(what)s found in %(where)szdefault settingsz output)�what�where)r9���r:���r@���r;���r.���r?���r!���_run_dbctl_listr[���r����r����r�����_parse_dbctl_data_linesr���)r'����utility_exc_message�is_kb_limits_ok�gov_data_strr�����gov_restricted_str�gov_data_linesr����s��� r���ra���zMySQLGovernor._load_info���s��������'�3��8M�8Y��F���(�� (�&*�D�#�%�'�'�'�*I�+4�d�6H�*I�K��K��� ���!�!�!��)-�(<�(<�(>�(>�%����%�%�'8�&9�4�%�P�P�� !���q�+ ��+ �(:�(@�(@�(B�(B�(H�(H��(N�(N�q�r�r�(R�+ ��+ ��+ ��'��&�+�+�D�1�1�� $� <� <�^�_�^q� r� r����D�1�1�1�&*�D�#�$(�D�!�+/�D�(�D�$6�D�DV�A_�A_�A_�`�`����K��$�K�0�0�0��2�1r���� read_limit�write_limitc������������������������ �t����������|�������������t����������|������������z���}nH#�t����������$�r;�|�|cxk����rdk����rn�nd}n%|dk����rt����������|�������������}nt����������|������������}Y�nw�xY�w|S�)z� Calculates the io limit. Handles the situation when user's write or read io limit is less than 1mb/s (PTCLLIB-85). :type write_limit: str :type read_limit: str :rtype: int z<1r���)r����� ValueError)r/��r0��� user_io_limits��� r���r����z MySQLGovernor._get_user_io_limit���s������� 1�� �O�O�c�+�.>�.>�>�M�M���� 1�� 1�� 1��[�0�0�0�0�D�0�0�0�0�0� !� � ���$�$� #�J��� � � #�K� 0� 0� ��� 1������s����"��AA'�&A'c�����������������������|�����������������������ddgd�������������\��}}}d}|sd|v�r|�����������������������dgd�������������\��}}}d}||fS�)aW�� Executes dbctl list-marked --kb or dbctl list-marked :param _is_incorrect_syntax: True is emulate dbctl error. Only for testing! :return: Cortege (is_kb_limits_ok, stdout_str), where is_kb_limits_ok == True, if dbctl returned limits in KB, else - False stdout_str - dbctl stdout string zlist-markedz--kbTr$��zIncorrect syntaxrU���F)r[���)r'����_is_incorrect_syntaxrX���r,��r����r+��s��� r���r(��zMySQLGovernor._run_dbctl_list���s��������%)�$=�$=� �F�#�T��%>��%;��%;�!��,������� $�#5��#E�#E�!%�!:�!:���$��";��"0��"0��A�|�Q�#�O���,�,r���r+��r*��c����������������������i�}|D��]�}|������������������������������������}|rd|v�r�t�������������������������������|������������}t����������|������������dk����st����������|d���������������������dk����r$d|�_��������d|�_��������d|�_��������t����������|�������������|d������������������������������d������������}|d������������������������������d������������}|d ������������������������������d������������} t����������|������������dk����s&t����������|������������dk����st����������| ������������dk����r$d|�_��������d|�_��������d|�_��������t����������|�������������|d ���������} t����������|d ���������������������}|�� ��������������������|d ���������| d ���������������������}|r|n|dz��} |d���������}|d ���������dk����rd |d ������������}n|d ���������}|d���������dk����rd | ���}nt����������| ������������}|| ||f|| <������|S�)a��� Converts data lines from dbctl stdout to dictionary :param data_lines_list: List of lines from dbctl stdout :param is_kb_limits_ok: Is limits already in KB/s :param utility_exc_message: Message dict for exception :return: Tuple(dict, dict) dbctl data dictionary. Example: {'default': (400, 1953124, '400', '1953124'), 'cltest1': (350, 2025138, '*350', '2025138') } zcpu(%)��������r����TNr����/����r���i����+�*)r����r5���r����r��r;���r:���r9���r���r����r����r����rb���)r'����data_lines_listr+��r*���governor_limitsr�����user_limits_listr����r����r����� user_namer����r3��r�����marksr����r����s��� r���r)��z%MySQLGovernor._parse_dbctl_data_lines���s(��������#��, y��, y�D��:�:�<�<�D��� �8�t�+�+��,�8�8��>�>���#�$�$��)�)�S�1A�!�1D�-E�-E��-J�-J�*.��'�(,��%�/3��,�'�(;�<�<�<�.�q�1�7�7��<�<�O�/��2�8�8��=�=�� 0�� 3� 9� 9�#� >� >���?�#�#�q�(�(�C�0@�,A�,A�Q�,F�,F�#�N_�J`�J`�de�Je�Je�*.��'�(,��%�/3��,�'�(;�<�<�<�(��+�I� ���!3�4�4�N� �3�3�4D�Q�4G�IZ�[\�I]�^�^�M�0?�W�}�}�]�SW�EW���%�Q�'�E��Q�x�3���(@�O�A�,>�(@�(@�%�%�(7��(:�%��Q�x�3���'=�+;�'=�'=�$�$�'*�+;�'<�'<�$�*8�:J�La�cw�)x�O�I�&�&��r���)F)NNrG���)7r���r���r���r*���r����r����r?���r����r����r��r��r ��r%���rH���rA���r[���r^���r]���rL����staticmethodr}���r����rC���r����r����r����r`���r�����boolr���r����r����r����r����r����r����r����r���rb����dictr����rU���r����r���r����r����r��r��r��rg���r!��ra���r����r(��r)��r���r���r���r5���r5���C���s������������������%�K�%�L�%�M�U��3��9�O�=���J�=��=��=�$#��#��#������*��*��*��*�,.��.��.� -�� -�� -������*��!��!���\�!�2�����2 �� �� �3��3��3���7��7���\�7��������\��)��)��)� �� �� �!��!�d��!�u�UX�Z]�U]���!��!��!��!�:����� �����$����������B��B��B��B�H&��#���&�SW��&��&��&��&�8 u�T�� u�UY�� u�9=� u�BG��S��/� u�� u�� u�� u����x��}����QU����������&�c������������&;@��;@���C�=�;@���3�-� ;@��;@��;@��;@�z W�C�� W�H�UX�M�� W�em�nq�er�� W�� W�� W�� W��PT�59�(P��(P�s��(P�x��}��(P�%-�c�]�(P��(P��(P��(P�T$��$��$� �� �� �'1��'1��'1�R���s������������\��&-��-��-��-�&9���9�cg��9�lp��9��9��9��9��9��9r���r5���)r<����xml.dom.minidom�dom�minidomri���r����r�����xml.parsers.expatr����typingr���r���r����packaging.versionr����clcommon.clexceptionr����clcommon.utils_cmdr ���r ���r���r���r���r.���r3���r5���r���r���r����<module>rM�����s������ � � � ���������������������������������(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��%��%��%��%��%��%��3��3��3��3��3��3��A��A��A��A��A��A��A��A���������������� �� �� �� �� �*�� �� �� � �� �� �� �� �-�� �� �� � ���������+������������\��\��\��\��\��\��\��\��\��\r���