HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/cllimits/__pycache__/lvectl_lib.cpython-37.pyc
B

�i&�V�h7�@s�ddlmZddlmZddlZddlZddlZddlmZddl	m
Z
ddlmZddl
mZGdd	�d	e
�ZGd
d�de�ZdS)�)�absolute_import)�unicodeN)�exec_utility)�FormattedException)�cpapi)�(_convert_memory_value_to_adaptive_formatc@seZdZdS)�LvectlExceptionN)�__name__�
__module__�__qualname__�rr�py/cllimits/lvectl_lib.pyrsrc@s�eZdZdZdZdZdZdZdZdZ	dZ
dd�Zedd	��Z
d/dd�Zd0d
d�Zd1dd�Zdd�Zdd�Zd2dd�Zdd�Zd3dd�Zdd�Zdd�Zd4dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd5d-d.�ZdS)6�LveCtlz*
    Library for work with LVE limits
    i@Biʚ;Nz/usr/sbin/lvectlcCs,t|jdg�\}}t|�|_d|_d|_dS)z5
        Object constructor. Get LVE version
        zlve-versionN)r�
_UTILITY_PATH�int�lve_version�
_package_data�_resellers_data)�self�_Z
s_lve_versionrrr
�__init__&s
zLveCtl.__init__cCs"t��}t|���}|�d�|S)zH
        Get panel users uid list
        :return: List of uids
        r)rZ
list_users�list�keys�append)Z
user_packagesZuid_listrrr
�get_panel_users_uid_list/s
zLveCtl.get_panel_users_uid_listFcCsL|j||d�||jkr2t�|j|�}|d=|St�|jd�}|d=|S)z�
        Reads limits by user id
        :param user_id: user/lve id
        :param human_readable_numbers: if True PMEM and VMEM limits in KBytes, MBytes or GBytes
            False - in bytes
        :return: dictionary
        )�userid�PACKAGEr)�
_load_infor�copy�deepcopy)r�user_id�human_readable_numbersZuser_limitsrrr
�get_limits_by_user_id:s	
zLveCtl.get_limits_by_user_idcCs"|�||�t�|j�|��}|S)a
        Reads limits by reseller name
        :param reseller_name:
        :param: id - user/lve id
        :param human_readable_numbers: if True PMEM and VMEM limits in KBytes, MBytes or GBytes
            False - in bytes
        :rtype: dict
        )�_load_resellers_inforrr�get)r�
reseller_namer!Zreseller_limitsrrr
�get_limits_by_reseller_nameOs
z"LveCtl.get_limits_by_reseller_namec	Cs�tj��sdSd|ddg}|s(|�d�t|j|�\}}t�|�}|dkrVt|d��|�	dg�}|r�t
d	t
|dd
d�|ddt
|dd
d�|dd|ddt|dd|�t|dd|�d�}|SdS)a
        Reads limits by reseller name
        :param reseller_name: reseller's name
        :param human_readable_numbers: if True PMEM and VMEM limits in KBytes, MBytes or GBytes
            False - in bytes
        :rtype: dict[str, str | dict]
        Nz
list-resellerz--jsonz--with-namez--bytesr�msg�data�DEFAULT�SPEED)�all�EP�IO�IOPS�NPROC�PMEM�VMEM)r�cpu�ep�io�iops�nproc�pmem�vmem)�	lvectllib�lve�reseller_limit_supportedrrr�json�loadsrr$�dictr)	rr%r!�lvectl_args�ret_code�std_out�loaded_jsonZdefault_infoZdefault_limitsrrr
�#get_default_limits_by_reseller_name]s.






z*LveCtl.get_default_limits_by_reseller_namecCsz|jdkrFddlm}yt||�d�}Wqvtk
rBd}YqvXn0||jkrdt|j|d�}nt|jdd�}|S)z�
        Get package name by user id.
        None package returns as str(None) for user checker compatibility:
          'not str(None)' is True
        :param: id - user/lve id
        :return: Package name
        Nr)�reseller_package_by_uid��r)rZclcommon.cpapirD�str�
IndexError)rr rDZpackage_namerrr
�get_package_name_by_user_id�s

z"LveCtl.get_package_name_by_user_idcCsd|||rd|ndd�d�S)Nz+%(what)s set error for uid=%(uid)s%(error)sz [%s]rF)ZwhatZuid�error)�message�contextr)rZparam�lve_id�errrrr
Z__set_error�szLveCtl.__set_errorcCs |t|�g}d|ksd|kr2|�d|�d��|d<x�dD]x}|�|�}|dkrPq8t|���}|dkrr|jdkrrq8n|dkr�|jd	kr�q8|d
kr�|��r�d|}|�d||f�q8Wt|�d
kr�dS|�d�r�|�d�|r�|�d|�t|j|dd�\}}	}
|dk�rt	|�
d||
���dS)a-
        Set limits for given container id
        :param: str command: 'set' | 'set-reseller', based on container type
        :param: int | str container_id: LVE | LVP id for set limits
        :param: dict limits: new LVE limits. Available keys: speed, vmem, pmem, mep, io, nproc, iops
                    and 'save-all-parameters'.
                    All other keys are ignoring. If some parameter absent on current LVE version
                    (for example pmem on LVE4), it will be ignored too.
        :param reseller_name: Reseller name
        Zmepr3�
maxEntryProcs)�speedr8r7rOr4r6r5N)r7r6r5�)r5�rPz%s%%z--%s=%s�rzsave-all-parametersz--save-all-parametersz
--reseller=%sT)�stderr�Limits)rGr$�stripr�isdigitr�lenrrr�_LveCtl__set_error)rZcommandZcontainer_id�limitsr%r?�k�vr@�outrNrrr
�_set_container_limits_by_id�s0




z"LveCtl._set_container_limits_by_idcCs<d|g}t|j|dd�\}}}|dkr8t|�d||���dS)z�
        Set limits for given container id
        :param reseller_id: LVP id or reseller's name or '--all'
        :type reseller_id: int | str
        zset-resellerT)rTrrUN)rrrrY)rZreseller_idr?r@r]rNrrr
�#_set_container_limits_by_id_or_name�sz*LveCtl._set_container_limits_by_id_or_namecCs,t|�r|�|�sdS|jd|||d�dS)z�
        Wrapper for _set_container_limits_by_id, set limits for lve_id;
        :param int lve_id: user's container id
        :param limits: dict with limits to set
        :param reseller_name: Reseller name
        :return: int
        rE�set)r%r)�boolrIr^)rrMrZr%rrr
�set_lve_limits_by_user_id�sz LveCtl.set_lve_limits_by_user_idcCs|�d||�dS)z�
        Wrapper for _set_container_limits_by_id, set limits for lvp_id;
        :type lvp_id: int
        :type limits: dict
        :return: int
        zset-resellerr)r^)r�lvp_idrZrrr
�set_lvp_limits_by_reseller_id�sz$LveCtl.set_lvp_limits_by_reseller_idcCs|�d||�dS)z�
        Wrapper for _set_container_limits_by_id, set limits for lvp_id;
        :type lvp_id: int
        :type limits: dict
        :return: int
        zset-reseller-defaultr)r^)rrcrZrrr
�set_lvp_defaults_by_reseller_id�sz&LveCtl.set_lvp_defaults_by_reseller_idcCsRdd|dg}|dk	r$|�d|g�t|j|�\}}|dkrNt|�d||���dS)z�
        Set unlimited LVE for lve_id
        :param: lve_id `int`: LVE id
        :param reseller_name: Reseller name
        :return: 0
        r`z%sz--unlimitedNz
--resellerr�	Unlimited)�extendrrrrY)rrMr%�argsr@rNrrr
�set_lve_unlimited�szLveCtl.set_lve_unlimitedcCs<dd|dg}t|j|�\}}|dkr8t|�d||���dS)z�
        Set unlimited LVP for reseller;
        Accepts name or id;
        :type lvp_id: str | int
        :return: 0
        zset-resellerz%sz--unlimitedrrf)rrrrY)rrcrhr@rNrrr
�set_lvp_unlimiteds
zLveCtl.set_lvp_unlimitedcCsFdd|dd�|�g}t|j|�\}}|dkrBt|�d||���dS)z�
        Reset LVE limits for lve_id. Set default limits for LVE package or
        system default LVE
        :param: lve_id `int: LVE id
        :return: 0
        r`z%sz--default=%s�,r�Default)�joinrrrrY)rrMrZrhr@rNrrr
�reset_lve_limits
s
zLveCtl.reset_lve_limitscCsFdd|dd�|�g}t|j|�\}}|dkrBt|�d||���dS)zk
        Reset LVP limits for reseller_name.
        :param: reseller_name str:
        :return: 0
        zset-resellerz%sz--default=%srkrrl)rmrrrrY)rr%rZrhr@rNrrr
�reset_reseller_limitss
zLveCtl.reset_reseller_limitscCst|jddg�\}}|S)zO
        Apply all already configured limits
        :return: ret code
        Zapplyr+)rr)rr@rNrrr
�apply_all_limits&szLveCtl.apply_all_limitscCs<dd|dg}t|j|�\}}|dkr8t|�d||���dS)z�
        Disable reseller limits for given name;
        Equivalent to lvectl remove-reseller <str>
        :type reseller_name: str
        :return: 0
        zremove-resellerz%sz--jsonrzDisable reseller limits)rrrrY)rr%rhr@rNrrr
�disable_reseller_limits.s
zLveCtl.disable_reseller_limitsc
Cs t�|_tj��sdSdddg}|s.|�d�t|j|�\}}t�	|�}|dkr\t
|d��x2t��D]&}|rx||krxqft
|�id�|j|<qfWx�|�d	g�D]z}|d
�d�\}}	|r�||	kr�q�t||	tt|dd
�|dt|dd
�|d|dt|d|�d�d�}
|
|j|
d<q�WdS)z�
        Load information about resellers;
        :type human_readable_numbers: bool
        :type reseller_name: str | None
        :return:
        Nz
list-resellerz--jsonz--with-namez--bytesrr')�namerZr(�ID�:r*)r+r,r-r.r/r0)r2r3r4r5r6r7)�idrrrZrr)r>rr9r:r;rrrr<r=rrZ	resellersrr$�splitr)rr!r%r?r@rArB�resellerZid_rrZ
reseller_inforrr
r#;s<



zLveCtl._load_resellers_infoc
Cs|jdkr|�||�|jdk	r$dSt�|_|dk	rBdt|�g}n|dk	rXdt|�g}ndg}|�d�|sv|�d�t|j|�\}}t�	|�}|dkr�t
|d��|d}x�|D]�}	t�}
|	d	}|d
kr�d}||
d	<d|	d
i|
d<d|	di|
d<t|	d|�|
d<|	d|
d<|jdk�r@t|	d|�|
d<|	d|
d<|jdk�rX|	d|
d<|
|jt
|	d�<q�W|dk	�r�|�||�}|�r�||jd<dSd|jk�rt�}
d|
d	<ddi|
d<ddi|
d<d|
d<d|
d<|jdk�r�d|
d<d|
d<|jdk�r
d|
d<|
|jd<dS) z�
        Loads all package info from lvectl
        :param human_readable_numbers: if True PMEM and VMEM limits in KBytes, MBytes or GBytes
            False - in bytes
        :return: None
        NZpaneluserlimitsZpaneluserslimitsz--jsonz--bytesrr'r(rZ
VE_DEFAULTr)r+r*r2r-r4r1r8r,r3rRr0r7r/r6�r.r5rs�0Z0K)rr#rr>rGrrrr<r=rrrrrC)
rr!rrwr?r@rArBZ	json_dataZpkg_dataZ
pkg_limitsZpkg_nameZreseller_defaultsrrr
rlsl









zLveCtl._load_info)F)F)F)N)N)N)NN) r	r
r�__doc__ZMEGAHERZZGIGAHERZrrZ_packages_limitsrrr�staticmethodrr"r&rCrIrYr^r_rbrdrerirjrnrorprqr#rrrrr
rs8	


#
(







1r)Z
__future__rZ
past.builtinsrr9r<rZcllimits.librZclcommon.clexceptionrZclcommonrZcllimits.lib.utilsrr�objectrrrrr
�<module>
s