?HgCddlZddlZddlZddlmZddlmZddlmZddl m Z GddeZ Gdd Z dS) N)cpapi)FormattedException) exec_utility)(_convert_memory_value_to_adaptive_formatceZdZdS)LvectlExceptionN)__name__ __module__ __qualname__H/opt/cloudlinux/venv/lib/python3.11/site-packages/cllimits/lvectl_lib.pyrrsDr rceZdZdZdZdZdZdZdZdZ 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=}--!#r ctj}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 (**  **,,--r Fc|||||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_id8su .w??? d( ( (-(:7(CDDKI& mD$6q$9::  "r c|||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_nameMsA !!"8-HHH-(<(@(@(O(OPPr c @tjsdSd|ddg}|s|dt |j|\}}t j|}|dkrt|d| dg}|rd d |dd i|dd d |dd i|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] N list-reseller--json --with-name--bytesrmsgdataDEFAULTallSPEEDEPIOIOPSNPROCPMEMVMEM)r%cpuepioiopsnprocpmemvmem) lvectlliblvereseller_limit_supportedrrrjsonloadsrr/r) rr0r* lvectl_argsret_codestd_out loaded_json default_infodefault_limitss r#get_default_limits_by_reseller_namez*LveCtl.get_default_limits_by_reseller_name[sI}5577  F& xO % *   y ) ) )();[II'j)) q==!+e"455 5"vr22  "$|Aw78"1od+l1od34$Q/%a1@aQWAXAWYY@aQWAXAWYY  N" ! " "r c|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.cpapirWstr IndexError)rr)rW package_names rget_package_name_by_user_idz"LveCtl.get_package_name_by_user_id~s   % > > > > > > ""#:#:7#C#CA#FGG  " " "!  "$,,,"4#5g#>y#IJJ  #4#5a#8#CDD s . ==c$d|||rd|dndddS)Nz+%(what)s set error for uid=%(uid)s%(error)sz []rY)whatuiderror)messagecontextr )rparamlve_iderrs r __set_errorzLveCtl.__set_errors<H$)&47%?[#[[[[RAABB Br c|t|g}d|vsd|vr,|d|d|d<dD]}||}|t|}|dvr |jdkrK|dvr |jd kr[|d kr|r|d }|d |d |t |dkrdS|dr|d|r|d|t|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 meprD maxEntryProcs)speedrIrHrlrErGrFN)rHrGrF)rFrm%z--=rzsave-all-parametersz--save-all-parametersz --reseller=TstderrLimits) r[r/striprisdigitrlenrrr_LveCtl__set_error) rcommand container_idlimitsr0rOkvrPoutrhs r_set_container_limits_by_idz"LveCtl._set_container_limits_by_idsL 1 12 F??dfnn&,jj 48H8H&I&IF? #R - -A 1 AyA A---$2Ba2G2GH}}!1Q!6!6G|| |GGG   |A|||| , , , , {  q 1 ::+ , , 8   6 7 7 7  >   <]<< = = =)$*> # q==!$"2"2;"L"LMM Mqr cdt|dg}t|j|\}}|dkr$t|d||dS)z Set unlimited LVP for reseller; Accepts name or id; :type lvp_id: str | int :return: 0 rrrrr[rrrry)rrrrPrhs rset_lvp_unlimitedzLveCtl.set_lvp_unlimitedsZF ];$T%7>> # q==!$"2"2;"L"LMM Mqr cdt|dd|g}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 r --default=,rDefaultr[joinrrrry)rrgr|rrPrhs rreset_lve_limitszLveCtl.reset_lve_limits sos6{{$C&1A1A$C$CD$T%7>> # q==!$"2"29fc"J"JKK Kqr cdt|dd|g}t|j|\}}|dkr$t |d||dS)zk Reset LVP limits for reseller_name. :param: reseller_name str: :return: 0 rrrrrr)rr0r|rrPrhs rreset_reseller_limitszLveCtl.reset_reseller_limitssq M 2 24S&AQAQ4S4ST$T%7>> # q==!$"2"29mS"Q"QRR Rqr c:t|jddg\}}|S)zO Apply all already configured limits :return: ret code applyr;)rr)rrPrhs rapply_all_limitszLveCtl.apply_all_limits$s$ %T%7'59IJJ #r cdt|dg}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-resellerr5rzDisable reseller limitsr)rr0rrPrhs rdisable_reseller_limitszLveCtl.disable_reseller_limits,s^"3}#5#5x@$T%7>> # q==!$"2"23Lm]`"a"abb bqr c i|_tjsdSgd}|s|dt |j|\}}tj|}|dkrt|dtj D]}|r||kr |id|j|<| dgD]|}|d d \}} |r|| kr)|| d |d i|d d |d i|d|dt|d|dd} | |j| d<}dS)z Load information about resellers; :type human_readable_numbers: bool :type reseller_name: str | None :return: N)r4r5r6r7rr8)namer|r9ID:r;r<r=r>r?r@rA)rCrDrErFrGrH)idrr|r)rrJrKrLrrrrMrNrr resellersr/splitr) rr*r0rOrPrQrRresellerid_r reseller_infos rr.zLveCtl._load_resellers_info9s "}5577  F@@@ % *   y ) ) )();[II'j)) q==!+e"455 5)) N NH (!:!:6>"-M-MD  * *$33 H HH ,,S11IC $!6!6!8G#45"4. (4.1$V,%g.DXfEUE[]]   M;HD v!6 7 7# H Hr c"|j||||jdSi|_|dt|g}n|dt|g}ndg}|d|s|dt |j|\}}tj|}|dkrt|d|d}|D]} i} | 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|jvrPi} 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 Npaneluserlimitspaneluserslimitsr5r7rr8r9r% VE_DEFAULTr:r;r<rCr>rErBrIr=rDrorArHr@rGr?rFr00K)rr.rr[rrrrMrNrrrrrU) rr*r$rrOrPrQrR json_datapkg_data pkg_limitspkg_namereseller_defaultss rr&zLveCtl._load_infojs   '  % %&22 3 3   $ H HSi j j   (9"1% D& & &J$-Jy !!& Ju  %s|Jt !%Jv "Jt 1$$%) 6"&) 7#1$$%( 6"$.D q ! ! !! ' &r )F)N)NN) r r r __doc__MEGAHERZGIGAHERZrr_packages_limitsrrr staticmethodr"r,r2rUr^ryrrrrrrrrrrrr.r&r r rrrsHHK&MMO$$$\*    !"!"!"!"F.BBB &Q&Q&Q&QP P P P                    /H/H/HbK/K/K/K/K/K/r r) r'rMrJclcommonrclcommon.clexceptionr cllimits.librcllimits.lib.utilsrrrr r rrs 333333%%%%%%GGGGGG     (   ]/]/]/]/]/]/]/]/]/]/r