IQgddlZddlZddlZddlZddlZdZdZdddddZd ee zd ee zdzfd Z dej fd Z dej fd Z dZdZddZddZddZdZdZdZdZded efdZdS)Nz/proc/lve/listcz ttd5}|d}dddn #1swxYwYt|ddddg}nJ#t $rdd tg}Yn2t $rdd tg}Ynt$rdd tg}YnwxYw|S) z/ Obtain lve process filesystem version utf-8encodingN:rOKz+clcommon: get_lve_version: Can`t open file z/clcommon: get_lve_version: Can`t get data from z'clcommon: get_lve_version: Can`t parse )openLVE_FILEreadintrsplitIOError IndexError ValueError)flinelve_procfs_versions o/builddir/build/BUILD/imunify360-venv-2.5.0/opt/imunify360/venv/lib/python3.11/site-packages/clcommon/clfunc.pyget_lve_versionrsF Z (W - - - 66!99D               !$++c1"5"5a"8994@ ^^^"$\RZ$\$\] bbb"$`V^$`$`a ZZZ"$Xh$X$XYZ s:A1: A1>A1>.A11B8 B8 B87B8r i@)KMGTvalreturnc(t|}tjd}||}|r@t |t t frt |S|dStjd}||}|r|ddStjdtj}||}|r| \}}}||SdS)z Check that the value is a valid CPU limit (0-100 int or speed (% or MHz/GHz)). Return the value if valid, otherwise None. If the value contains decimal part, return only integer part. z^([1-9][0-9]?|100)(?:\.(\d+))?$r z"^([1-9]|[1-9][0-9]*)(?:\.(\d+))?%$%z*^([1-9]|[1-9][0-9]*)(?:\.(\d+))?(mhz|ghz)$N) strrecompilematch isinstancefloatrgroup IGNORECASEgroups) rdata regexp_int regex_match regexp_speedp regexp_speedf integer_part_units r validate_cpur3-s s88D>??J""4((K$ cE3< ( ( s88O  ###JDEEM%%d++K*##A&&))))JLbm\\M%%d++K' + 2 2 4 4 a&&&& 4cp t|}n#t$rYdSwxYw||cxkr|krndS|SdS)zH Check that val - is a string number return val as a string N)rr)rmin_valmax_valdig_vals r validate_intr9Msh c(( tt'$$$$W$$$$$$ %$s   c< |d}|rd}||z}tt|ddt|zdz }||cxkr|krnn|Sn#t t tf$rYnwxYwdS)Nr)isdigitrr'BYTES_CONVERSION_TABLEupperrrKeyError)rr6r7suffixresults rmemory_to_pagerCZs  R >>   F,CU3ss8__'=fllnn'MMPQQRR f ' ' ' ' ' ' ' ' 'M  H -     4sA;A??BBc|dkrt|dzdzS|dkr3ttt|dzdz ddzSttt|dzdz dd zS) Nr<rirrrr)r"roundr')pagess rpage_to_memoryrIhs s{{519~~## v~~5u)D0!4455;; uU5\\A%5q99 : :S @@r4c*tjdd|d|gtj5}|dd}dddn #1swxYwY|D]}|} |d|tj t|dtj #tttf$rYwxYwdS)Nz/bin/psz-Uz-u)stdoutr r;) subprocessPopenPIPE communicatesplitrstripindexencodeoskillrsignalSIGHUPrrOSError)itemusernameproclinesrowpartss rreload_processesr`psE   D(D(3   3   ""1%++E22 333333333333333  ""$$  "IOODKKMM * * * GCaMM6= 1 1 1 1J0    H  s$.A  A$'A$AC66DD/etc/login.defscZt|d5}|D]}}|dr|ddd}|}t|dkr"|d|kr|dccdddS~ dddn #1swxYwY|S)Nrr#r rrF)r startswithrQlen)keydefault_path login_defsraw_liner line_spliteds rriris eg & & &'*" ' 'H""3'' >>#q))!,D::<zbyteify..s:000C genn000r4c,g|]}t|Srrrelements r zbyteify..s 555W  555r4c34K|]}t|VdSNrrs r zbyteify..s*::'WW%%::::::r4)r&dictitemslisttupler"rTr+s rrrs$ 00"&**,,000 0 D$  555555 D% ::T:::::: D#  {{}} r4c\t|trd|DSt|tr d|DSt|trt d|DSt|t r|S|S)NcNi|]"\}}t|t|#Sr unicodeifyrs rrzunicodeify..s<000C3E!2!2000r4c,g|]}t|Srrrs rrzunicodeify..s 888 7##888r4c34K|]}t|VdSrrrs rrzunicodeify..s*==WZ((======r4)r&rrrrbytesr}rs rrrs$ 00"&**,,000 0 D$  8848888 D% ======== D% {{}} r4c| |dddS#t$rYdSwxYw)z Check is string contains only ASCII characters :param s: string to check :return: True - string contains only ASCII characters rrasciiTF)rTr}r~rs ris_ascii_stringrsT  '""))'222t uus )- ;;textcdd}tjd||}tjdd|}|S)zG Escape '%' characters inside text, except '%' followed by '(' cv|dddz|dzS)zo Generate string to replace from matched string '% ' -> '%% ' '%%c' -> '%%%%c' Nr;rF)r() match_objs rreplacez(escape_formatting_chars..replaces6   "%)IOO,=,=b,AAAr4z%+([^(])z%$z%%)r#sub)rrs rescape_formatting_charsrsABBB 6+w - -D 6% % %D Kr4)Nra)rl)r )rUr#rWrMrtr rr>r"rr3maxsizer9rCrIr`rirqrzrrrrrrr4rrs  &   cCiC#I$4@     !"3;    AAA                    ##r4