QwЕddlZddlZddlZddlmZddlZddlmZm Z ddl m Z ddl m Z ddlmZmZmZddlmZddlmZmZdd lmZmZdd lmZdd lmZdd lmZm Z dd l!m"Z"ddl#m$Z$dZ%Gdde&Z'dS)N)Callable)FormattedExceptioncpapi) NotSupported)getuser)GovernorStatus MySQLGovernorMySQLGovException)dbengine)func server_status)get_users_for_resellerskip_user_by_maxuid) setup_logging)g_users_manager)HIDE_MAX_UID_LVE_PARAMETER str_to_bool)cloudlinux_top_parser)uid_to_usernamezN/AceZdZddZedZdZdZddZdZ dZ dd Z d Z ed Z ejjjjdZdS) CloudLinuxTopNct|dtjtj|_d|_d|_d|_|dd|_ t|td|_ d|_ |||_n> tj||_n##tj$r}||_ Yd}~nd}~wwxYwt%|_|j\|_|_t/j|j|_t5d kr|n t9|_dS) Nr)config caller_name file_level console_levelz/var/lve/cloudlinux_top.jsonz/var/lve/cloudlinux_dbtop.jsonz/var/lve/governor.ts server_id localhosttrueroot)rloggingWARNINGFATAL_logfnamefname_db touch_fnamegetrrrhide_maxuid_lve engine_errorenginer make_db_engineMakeDbExceptionr mysql_governorget_governor_statusgovernor_statusgovernor_errorr get_governor_mode governor_moder _get_adminsset_admins)selfcnfr+es /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/info/cloudlinux_top.py__init__zCloudLinuxTop.__init__sL!O!-))) 4 8 1k::*3773Mv+V+VWW    DKK &&5c:: + & & &$%!!!!!! &+oo   3 3 5 5 2d1!3D4GHH-4YY&-@-@t'')))cee sB66CCCct tjS#ttf$rt cYSwxYwN)radminsrAttributeErrorr5r:r4zCloudLinuxTop._get_admins5s@ <>> !n-   55LLL s 77cFt||j|j|jS)N)uidlocal_server_idr db_engine)rrr+)r7rCs r:_get_username_by_idz!CloudLinuxTop._get_username_by_id<s+ Nnk     rAc hfd}dd|d|ddddd d }||S) zreturns key function for sortedcfd}|S)Nc~|d}|dvrdSd|}|S)Nid dbgov_datar)rF)kusername dbgov_statscl_datar7values r:keyz.mysql_key..keyHsI33AdG<<7<#8881"),"7"AK&u--rAr@)rPrQrOr7s` r: mysql_keyz/CloudLinuxTop._get_order_key..mysql_keyGs. . . . . . . .JrAc*|dddS)Nusagecpuallr@rLs r:z.CloudLinuxTop._get_order_key..RsQwZ.u5rAc*|dddS)NrTiorVr@rWs r:rXz.CloudLinuxTop._get_order_key..SsAgJt,U3rArUrZc:|dddS)NrTiopsrr(rWs r:rXz.CloudLinuxTop._get_order_key..VsajnnVQ77rAc|ddS)NrTepr@rWs r:rXz.CloudLinuxTop._get_order_key..WsAgJt,rAc:|dddS)NrTpnorr]rWs r:rXz.CloudLinuxTop._get_order_key..Xsqz~~eQ77rAc:|dddS)NrTmemrr]rWs r:rXz.CloudLinuxTop._get_order_key..YsajnnUA66rA)rUrZ mysql_cpumysql_ior\r_nprocpmemr@)r7orderrOrR order_key_maps` ` r:_get_order_keyzCloudLinuxTop._get_order_keyDsy      6533"5))! $77,,7766   U##rAc t|d5}tj|}dddn #1swxYwYn#ttf$r|}YnwxYw|S)a Try load and parse json data from file; return if loading or parsing wrong :param fname: path to parsed file :param None|dict default: default data if loaded file is wrong :return None| dict: return loaded data zutf-8)encodingN)openjsonloadIOErrorOSError)r7r%default json_filerOs r:_load_from_json_filez"CloudLinuxTop._load_from_json_file]s eg... /))I.. / / / / / / / / / / / / / / /!   GGG s,A4 A8A8AAAc tj|jdS#ttf$r$|jd|jYdSwxYw)z: Trying touch the file to signal new data zRAn error occurred while touching file %s. Database statistics may be not availableN)r touchr'rprqr$error)r7s r: _touch_dbtopzCloudLinuxTop._touch_dbtopls~ Z Jt' ( ( ( ( (! Z Z Z IOOGHLHX Z Z Z Z Z Z Zs1AAc||jggd}|||jdii|S)zZ Load and join data from separate files :return dict: loaded data )users resellersrK)rtr%updater&)r7rOs r: _load_datazCloudLinuxTop._load_datavsR ++DJ"SU8V8VWWt00r@RSSTTTrATrUcNg}g}g} t} | dk} | s|rH|tj||rt |p t} n| g} |} t | d||| d} | D]_}|jrt|dr | |dpt}| p|du}|r|| vs ||j vrY|tkrt|d<t|d<nMtj |d pt|d<tj|t| pt|d<|r|dtks||dvs|r|tks||vr||d <|r,|jt"jkr||| |||| d |cxkrt+|krn]nat | d g||| d}| rZ|D]W}| |d}|r||p tkr4|t}||d<||X||fS)a :type order: str :type show_mysql: bool :type limit: int|None :type domain_filter: str|None :type username_filter: str|None :param None|str reseller: get information about given reseller :rtype: tuple[list, list] r rzT)rQreverserJNdomainresellerF) raise_excrMrr{name)rrxrbuild_users_cacherr}sortedrjr)rrF NOT_AVAILABLEr6 get_reseller get_domainboolr0rENABLED_add_mysql_dataappendlenr()r7username_filter domain_filterlimit show_mysqlrhr users_resultresellers_result users_listcurrent_user_namecurrent_user_is_adminrOcl_users_data_ordereduserrMshould_skip_userscl_resellers_data_ordered reseller_infos r: _get_datazCloudLinuxTop._get_datas<   #II 1V ;  -H -        -h 7 7 7 K3H4I JJ +,J//## &ww'7T=P=PQVX_=`=`jn o o o)  D# (;DJ(G(G //T ;;L}H%: 9 QXT=Q   XZ%?%?8t|C[C[=((!.X#0Z  #2#?TY#Z#Z#Z#k^kZ !0!;HPTUbPcPc!d!d!d!uhuX 4>]#B#Bm[_`h[iFiFi$Gj*2m*C*C^fGfGf'D  >d2n6LLL$$T7H===    % % % Q%C%C%C%C#l2C2C%C%C%C%C%C 7;;{B//T5H5HPW5X5Xbf g g g " 7!: 7 7 33M$4GHHX-B C C#,H(0 f% '' 6666---rAc4|d|ddddd}|jdkr |j|}|d|ddd<|d d z|dd d<n/#t$r"}t j|_||_Yd }~nd }~wwxYw|d|d dd<|d |d d d<nd|ddd<d|dd d<t|d|d dd|d dd<t|d |d d d|d d d<|ddkrd|d<|dd|ddd|d<d Sd|d<d S)z add mysql statistics to the user dict :type cl_data: dict :type user: dict :type username: str rKr-)rUrZcause_of_restricttime_of_restrictrVrrUmysqlirZNrTrT restrictedrz Violated the z limit)timereason restrictionF) r(r3r.get_limits_by_userr rERRORr0r1min)r7rrOrMrN mysql_limitsr9s r:rzCloudLinuxTop._add_mysql_datasl+// QSa P P     & & F#2EEhOO 1=QW e$W-/;A/EW d#G,, % ( ( ('5';$&'###### (-8,>DM%  )+6t+$r}|j|d<|j|d<Yd}~nd}~wwxYw||dfS)z$ :rtype: (str, int) timestamp)z4Use --json option, other modes currently unsupportedrrresultcontextNr z[Permission denied. Reseller can view information only about himself. Option --for-reseller=z is forbidden.r)rrrrrhrsuccess)rrzr{mySqlGov mySqlGovModewarning) rr parse_argsrn ValueErrorargsrr for_resellerr check_server_statusRUNNINGstatus_descriptionr*messagerrrMrmax hide_mysqlorder_byr|r0r3rrr1r?rpstrr) r7rparserr namespacer9 error_msglvestats_statusrzr{s r:mainzCloudLinuxTop.mains '((ty{{+ +))$//I> QPP Q + + + vayF8  "F9 <<''* * * * * * * + 99  9#9#E)J`dkdmdmJmJmX1:1GXXXI )F8  "F9 <<''* *';== m3 3 3,?PF8     *#08F8  $ 1 9F9   /#'>>$-$6"+"2#-#,#77#,&3 $2$5$5 y '"!* $ 4$($6 88999'>+???(,(;(CF9%/,0,?,Gy)))///,.y)))/ @% ' ' '#&q66x $&y!!!!!!% . . .#$9x $%Iy!!!!!! .*||F##Q&&sSA B+A?9B?B=G2 GG.-G.2 I<H I%H>>Ir=)NNNTrUN)__name__ __module__ __qualname__r; staticmethodr4rFrjrtrxr}rrrlvestatslibcommons decorators no_sigpiperr@rAr:rrsLLLL.\    $$$2    ZZZ#' $! L.L.L.L.\#'#'#'J;;\;\$/>'>'0/>'>'>'rAr)(rnr!rtypingrlvestats.lib.commons.decoratorsrclcommonrrclcommon.cpapirclcommon.cpapi.pluginlibr clcommon.librr r lvestats.libr lvestats.lib.commonsr r lvestats.lib.commons.funcrrlvestats.lib.commons.logsetupr"lvestats.lib.commons.users_managerrlvestats.lib.configrr,lvestats.lib.parsers.cloudlinux_top_argparserlvestats.lib.uidconverterrrobjectrr@rAr:rs  &&&&........'''''',,,,,,IIIIIIIIII!!!!!!44444444QQQQQQQQ777777>>>>>>GGGGGGGGNNNNNN555555 \'\'\'\'\'F\'\'\'\'\'rA