|9eDddlmZddlmZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZGdd e ZGd d eZdS) )absolute_import)unicodeN) exec_utility)FormattedException)cpapi)(_convert_memory_value_to_adaptive_formatceZdZdS)LvectlExceptionN)__name__ __module__ __qualname__J/opt/cloudlinux/venv/lib64/python3.11/site-packages/cllimits/lvectl_lib.pyr r sDrr ceZdZdZdZdZdZdZdZdZ dZ dZ e dZ dd Zdd Zdd Zd Zd ZddZdZddZdZdZddZdZdZdZdZdZdZddZdS)LveCtlz* Library for work with LVE limits i@Biʚ;Nz/usr/sbin/lvectlc|t|jdg\}}t||_d|_d|_dS)z5 Object constructor. Get LVE version z lve-versionN)r _UTILITY_PATHint lve_version _package_data_resellers_data)self_ s_lve_versions r__init__zLveCtl.__init__&sC((:]OLL=}--!#rctj}t|}|d|S)zH Get panel users uid list :return: List of uids r)r list_userslistkeysappend) user_packagesuid_lists rget_panel_users_uid_listzLveCtl.get_panel_users_uid_list/sB (**  **,,--rFc|||||jvr$tj|j|}|d=|Stj|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 )useridPACKAGEr) _load_inforcopydeepcopy)ruser_idhuman_readable_numbers user_limitss rget_limits_by_user_idzLveCtl.get_limits_by_user_id:su .w??? d( ( (-(:7(CDDKI& mD$6q$9::  "rc|||tj|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_infor)r*rget)r reseller_namer,reseller_limitss rget_limits_by_reseller_namez"LveCtl.get_limits_by_reseller_nameOsA !!"8-HHH-(<(@(@(O(OPPrc tjsdSd|ddg}|s|dt |j|\}}t j|}|dkrt|d| dg}|rtd t|dd  |dd t|dd  |dd|ddt|dd|t|dd|}|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] N list-reseller--json --with-name--bytesrmsgdataDEFAULTSPEEDallEPIOIOPSNPROCPMEMVMEM)r'cpuepioiopsnprocpmemvmem) lvectlliblvereseller_limit_supportedr!rrjsonloadsr r1dictr) rr2r, lvectl_argsret_codestd_out loaded_json default_infodefault_limitss r#get_default_limits_by_reseller_namez*LveCtl.get_default_limits_by_reseller_name]s[}5577  F& xO % *   y ) ) )();[II'j)) q==!+e"455 5"vr22  "!!\!_W5666?4(LOD1222!!_V,"1og.=l1of>U>TVV=l1of>U>TVV   N" ! " "rc|j8ddlm} t||d}n\#t$rd}YnNwxYw||jvr!t|j|d}n t|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_uidr')rclcommon.cpapir[str IndexError)rr+r[ package_names rget_package_name_by_user_idz"LveCtl.get_package_name_by_user_ids   % > > > > > > ""#:#:7#C#CA#FGG  " " "!  "$,,,"4#5g#>y#IJJ  #4#5a#8#CDD s . ==c"d|||rd|zndddS)Nz+%(what)s set error for uid=%(uid)s%(error)sz [%s]r])whatuiderror)messagecontextr)rparamlve_iderrs r __set_errorzLveCtl.__set_errors8H$)&69%AWs]]rCCDD Drc|t|g}d|vsd|vr,|d|d|d<dD]}||}|t|}|dvr |jdkrK|dvr |jd kr[|d kr|rd |z}|d |d |t |dkrdS|dr|d|r|d|zt|j|d\}} } |dkr$t| 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 meprG maxEntryProcs)speedrLrKrorHrJrIN)rKrJrI)rIrpz%s%%z--=rzsave-all-parametersz--save-all-parametersz --reseller=%sTstderrLimits) r_r1striprisdigitr!lenrrr _LveCtl__set_error) rcommand container_idlimitsr2rSkvrToutrks r_set_container_limits_by_idz"LveCtl._set_container_limits_by_idsL 1 12 F??dfnn&,jj 48H8H&I&IF? #R 3 3A 1 AyA A---$2Ba2G2Gh4#3q#8#8G|| |QJ    AAAqq1 2 2 2 2 {  q 1 ::+ , , 8   6 7 7 7  @   > ? ? ?)$*> # q==!$"2"2;"L"LMM Mqrcdd|zdg}t|j|\}}|dkr$t|d||dS)z Set unlimited LVP for reseller; Accepts name or id; :type lvp_id: str | int :return: 0 rrrrrr)rrrrTrks rset_lvp_unlimitedzLveCtl.set_lvp_unlimitedsXv }=$T%7>> # q==!$"2"2;"L"LMM Mqrcdd|zdd|zg}t|j|\}}|dkr$t|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 rr --default=%s,rDefaultjoinrrr r{)rrjr~rrTrks rreset_lve_limitszLveCtl.reset_lve_limits sitf}nsxx7G7G&GH$T%7>> # q==!$"2"29fc"J"JKK Kqrcdd|zdd|zg}t|j|\}}|dkr$t|d||dS)zk Reset LVP limits for reseller_name. :param: reseller_name str: :return: 0 rrrrrrr)rr2r~rrTrks rreset_reseller_limitszLveCtl.reset_reseller_limitssk } 4nsxxPVGWGW6WX$T%7>> # q==!$"2"29mS"Q"QRR Rqrc:t|jddg\}}|S)zO Apply all already configured limits :return: ret code applyr?)rr)rrTrks rapply_all_limitszLveCtl.apply_all_limits&s$ %T%7'59IJJ #rcdd|zdg}t|j|\}}|dkr$t|d||dS)z Disable reseller limits for given name; Equivalent to lvectl remove-reseller :type reseller_name: str :return: 0 zremove-resellerrr7rzDisable reseller limitsr)rr2rrTrks rdisable_reseller_limitszLveCtl.disable_reseller_limits.s["4-#7B$T%7>> # q==!$"2"23Lm]`"a"abb bqrc(t|_tjsdSgd}|s|dt |j|\}}tj |}|dkrt|dtj D]%}|r||kr t|id|j|<&|dgD]}|dd \}} |r|| kr)t|| tt|d  |d t|d  |d|dt!|d|} | |j| d<dS)z Load information about resellers; :type human_readable_numbers: bool :type reseller_name: str | None :return: N)r6r7r8r9rr:)namer~r;ID:r=r>r@rArBrCrD)rFrGrHrIrJrK)idrr~r)rRrrMrNrOr!rrrPrQr r resellersrr1splitr) rr,r2rSrTrUrVresellerid_r reseller_infos rr0zLveCtl._load_resellers_info;s $vv}5577  F@@@ % *   y ) ) )();[II'j)) q==!+e"455 5)) W WH (!:!:6=h6G6GSU-V-VD  * *$33 H HH ,,S11IC $!6!6 '!2333~///!&)"7+A(6BRBXZZ    M;HD v!6 7 7# H Hrcj|j||||jdSt|_|dt |g}n|dt |g}ndg}|d|s|dt |j|\}}tj |}|dkrt|d|d}|D]} t} | d } | d krd } | | d <d | d i| d<d | di| d<t| d|| d<| d| d<|j dkr$t| d|| d<| d| d<|j dkr | d| d<| |jt| d<|$|||} | r | |jd<dSd|jvr\t} d | d <d di| d<d di| d<d| d<d| d<|j dkr d| d<d| d<|j dkrd| d<| |jd<dSdS) 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 Npaneluserlimitspaneluserslimitsr7r9rr:r;r' VE_DEFAULTr<r?r=rFrArHrErLr@rGrrrDrKrCrJrBrIr00K)rr0rrRr_r!rrrPrQr rrrrY) rr,r&rrSrTrUrV json_datapkg_data pkg_limitspkg_namereseller_defaultss rr(zLveCtl._load_infols   '  % %&22 3 3   $ H HSi j j   (9"1% D& & &J$-Jy !!& Ju  %t}Jt !&Jv #Jt 1$$%* 6"&* 7#1$$%) 6"$.D q ! ! !! ' &r)F)N)NN) r r r __doc__MEGAHERZGIGAHERZrr_packages_limitsrrr staticmethodr$r.r4rYrbr{rrrrrrrrrrrr0r(rrrrrsHHK&MMO$$$\*    !"!"!"!"F.DDD &Q&Q&Q&QP P P P                    /H/H/HbK/K/K/K/K/K/rr) __future__r past.builtinsrrMrPr) cllimits.librclcommon.clexceptionrclcommonrcllimits.lib.utilsrr objectrrrrrs'&&&&&!!!!!! %%%%%%333333GGGGGG     (   ]/]/]/]/]/V]/]/]/]/]/r