§ Ù@ªj~cãóÜ—ddlZddlZddlZddlZddlmZddlmZddlmZm Z m Z m Z m Z ddl Z ddlZddlmZddlmZddlmZmZmZddlmZdd lmZmZdd lmZmZdd l m!Z!dd l"m#Z#dd l$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/ddl0m1Z1m2Z2m3Z3dZ4Gd„de5¦«Z6d„Z7d d„Z8d„Z9ej:¦«fd„Z;ej<j=j>j?d!d„¦«Z@d"d„ZAd„ZBdS)#éN)Ú defaultdict)Údatetime)ÚDictÚListÚOptionalÚTupleÚUnion)Úcpapi)Úgetuser)ÚGovernorStatusÚ MySQLGovernorÚMySQLGovException)Úconfig)ÚdateutilÚfunc)Údeserialize_lve_idÚget_users_for_reseller)Ú setup_logging)Úg_users_manager)Úmake_db_engine)Úmain_)ÚLVEList)ÚHistoryShowUnion)ÚHistoryShowDBGov)Úsetup_statistics_parser)Úusername_to_uid_localÚreseller_to_uidÚuid_to_usernamezN/Acó —eZdZ d!d„Zed„¦«Zd „Zd „Zd „Zd „Z d „Z d„Z d„Z d„Z d„Zd„Zed„¦«Zd„Zd„Zed„¦«Zed„¦«Zd„Zd„Zd„Zd„Zd"d„Zed„¦«Zd„Zd „ZdS)#ÚCloudLinuxStatisticsÚNçÍÌÌÌÌÌì?éré<c ó´—d|_d|_||_||_d|_d|_| |_| |_|jdup t|jttf¦«|_ g|_ g|_ g|_d|vrgd¢}d„|D¦«|_| |¦«|_||_| ||j¦«g|_g|_d|_d|_| ¦«|jr| |_n| |_| |_d|_d|_| |¦«||_||_t?¦«|_ tCj"|j#j$¦«|_%| &¦«|_'tQ¦«dkr| )¦«n tU¦«|_+dS)zä Initializes statistics object used by SPA UI. Note, that if we set order_by to mysql_*, and set by_usage or by_fault, end result will will not be ordered by mysql_ column, using uid for ordering instead NrÚall) ÚcpuÚepÚvmemÚpmemÚnprocÚioÚiopsr+Úmysqlcó6—g|]}| ¦«‘ŒS©)Úlower)Ú.0Úss ú�/builddir/build/BUILDROOT/lve-stats-5.0.5-1.el8.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/cloudlinux_statistics.pyú z1CloudLinuxStatistics.__init__..Ls €Ð=Ð=Ð=¨1˜QŸWšW™YœYÐ=Ð=Ð=óÚroot),Ú order_by_lveÚ order_by_govÚ server_idÚengineÚ limit_govÚ limit_lveÚuidÚ time_unitÚ isinstanceÚlistÚtupleÚ is_many_uidsÚ _lve_resultsÚ _gov_resultsÚ_resellers_resultsÚ show_columnsÚnormalize_by_faultÚby_faultÚorder_byÚ init_order_byÚ_show_columns_lveÚ_show_columns_govÚ_gov_key_indexÚ_lve_key_indexÚinit_show_columnsÚlimitÚ by_usage_lveÚ by_usage_govÚ init_by_usageÚby_usage_percentageÚ thresholdr Úmysql_governorÚloggingÚ getLoggerÚ __class__Ú__name__ÚlogÚ _show_mysqlÚ show_mysqlr Ú_get_admin_uidsÚsetÚ _admins_uids) Úselfr;rGrJr:Úby_usagerUrIrVrQr>r?s r4Ú__init__zCloudLinuxStatistics.__init__+sÈ€ð$!ˆÔØ ˆÔØ"ˆŒØˆŒ ؈ŒØˆŒØˆŒØ"ˆŒØ œH¨Ð,ÐSµ ¸4¼8ÅdÍEÀ]Ñ0SÔ0SˆÔØˆÔØˆÔØ"$ˆÔà �LÐ Ð ØaÐaÐaˆLØ=Ð=° Ð=Ñ=Ô=ˆÔØ×/Ò/°Ñ9Ô9ˆŒ Ø ˆŒ Ø ×Ò˜8 T¤]Ñ3Ô3Ð3Ø!#ˆÔØ!#ˆÔØ"ˆÔØ"ˆÔØ ×ÒÑ Ô Ð Ø Ô ð #Ø"ˆDŒNˆNà"ˆDŒN؈Œ Ø ˆÔØ ˆÔØ ×Ò˜8Ñ$Ô$Ð$Ø#6ˆÔ Ø"ˆŒå+™oœoˆÔÝÔ$ T¤^Ô%<Ñ=Ô=ˆŒØ×*Ò*Ñ,Ô,ˆŒÝ6=±i´iÀ6Ò6IÐ6I˜D×0Ò0Ñ2Ô2Ð2ÍsÉuÌuˆÔÐÐr6có´— td„tj¦«D¦«¦«dhz S#tjtf$rt¦«cYSwxYw)Nc3ó4K—|]}t|¦«V—ŒdS©N)r)r2Úadmins r4ú z7CloudLinuxStatistics._get_admin_uids..hs+èè€ÐPÐP¸Õ,¨UÑ3Ô3ÐPÐPÐPÐPÐPÐPr6)r`r ÚadminsÚ NotSupportedÚAttributeErrorr0r6r4r_z$CloudLinuxStatistics._get_admin_uidsesc€ð ÝÐPÐPÅÄÁÄÐPÑPÔPÑPÔPÐTXÐSYÑYÐ YøÝÔ"¥NÐ3ð ð ð Ý‘5”5ˆLˆLˆLð øøøs‚-0°$AÁAcóF—|j ¦«od|jvS)Nr.)rWÚis_governor_presentrG)rbs r4r]z CloudLinuxStatistics._show_mysqlls$€àÔ"×6Ò6Ñ8Ô8ÐY¸WÈÔHYÐ=YÐYr6có8—||vr| |¦«SdSrg)Úindex)rbÚlist_Úkeys r4Ú _index_ofzCloudLinuxStatistics._index_ofps$€à �%ˆ<ˆ<Ø—;’;˜sÑ#Ô#Ð #ð ˆÚusernames r4Ú get_usernamez!CloudLinuxStatistics.get_usernamežs&€å" 3¨¬¸¼ÈÌ ÑTÔTˆØÐ(�=Ð(r6cóž—tt¦«}|jD]}|dkr d||d<Œ|jrd|dd<d|dd<|S)zS Return default info about user usage (mysql) :rtype: dict r.çÚlver'r,)rÚdictrGr^)rbÚ usage_fieldr†s r4Ú_get_default_user_usagez,CloudLinuxStatistics._get_default_user_usage£sl€õ "¥$Ñ'Ô'ˆ ØÔ'ð 1ð 1ˆFØ˜Ò Ð Ø-0� ˜FÔ# EÑ*øØ Œ?ð -Ø*-ˆK˜Ô ˜wÑ 'Ø),ˆK˜Ô ˜gÑ &ØÐr6cóΗtt¦«}|jD]}|dkr d||d<Œ|jr.| |¦«\}}||dd<||dd<|S)zT Return default info about user limits (mysql) :rtype: dict r.r•r–r'r,)rr—rGr^Úget_user_limits_safe)rbr’Ú limit_fieldr†Ú cpu_limitÚio_limits r4Ú_get_default_user_limitsz-CloudLinuxStatistics._get_default_user_limits±s„€õ "¥$Ñ'Ô'ˆ ØÔ'ð 1ð 1ˆFØ˜Ò Ð Ø-0� ˜FÔ# EÑ*øØ Œ?ð 2Ø"&×";Ò";¸HÑ"EÔ"EÑ ˆI�xØ*3ˆK˜Ô ˜wÑ 'Ø)1ˆK˜Ô ˜gÑ &ØÐr6có8—i}|jD]}|dkrddi||<Œ|S)Nr.r–r)rG)rbÚ fault_fieldr†s r4Ú_get_default_user_faultsz-CloudLinuxStatistics._get_default_user_faultsÀs9€Øˆ ØÔ'ð 1ð 1ˆFØ˜Ò Ð Ø',¨a j� ˜FÑ#øØÐr6c óº—|jr(t|¦«\}}| |¦«}n1t|j¦«\}}| |j¦«}| ¦«| |¦«dœ}|jdgkr| ¦«|d<|jrl|r| ||dœ¦«n‹| ||tj |d¬¦«pttj |d¬¦«ptdœ¦«n:| t|¦«t|¦«|jzdœ¦«|S) N)ÚusageÚlimitsr.rˆ)rwÚnameF)Ú raise_exc)rwr’ÚdomainÚreseller)rurv)rCrr“r>r™rŸrGr¢ÚupdaterÚ get_domainr‘Ú get_resellerÚintr?)rbÚikeyÚ_Ú is_resellerr’Úitems r4Úget_itemzCloudLinuxStatistics.get_itemÇs~€Ø Ô ð 3Ý/°Ñ5Ô5‰NˆAˆ{Ø×(Ò(¨Ñ.Ô.ˆHˆHå/°´Ñ9Ô9‰NˆAˆ{Ø×(Ò(¨¬Ñ2Ô2ˆHà×1Ò1Ñ3Ô3Ø×3Ò3°HÑ=Ô=ð ð ˆð Ô    Ò )Ð )Ø!×:Ò:Ñ<Ô<ˆD�‰NØ Ô ð 3Øð Ø— ’  4°Ð:Ð:Ñ;Ô;Ð;Ð;à— ’ ØØ (Ý-Ô8¸ÈUÐSÑSÔSÐdÕWdÝ /Ô <¸XÐQVÐ WÑ WÔ WÐ hÕ[hð ðñôððð �KŠKݘD™ œ ݘ$‘i”i $¤.Ñ0ð2ð2ñ 3ô 3ð 3ðˆ r6cóæ—|€|S|jrdnd}|jD]Y}|dkrŒ |||d|d<||dz|d|d<||dz|d|d<|dz }ŒZ|S) Nr#ér.r¤r–r¥érˆ)rCrG)rbr±ÚrowÚcountr†s r4Ú fill_lve_itemz"CloudLinuxStatistics.fill_lve_itemäsš€Ø ˆ;؈KØÔ&Ð1��¨EˆØÔ'ð ð ˆFØ˜Ò Ð ØØ+.¨u¬:ˆD�ŒM˜&Ô ! %Ñ (Ø,/°¸± ¬NˆD�ŒN˜6Ô " 5Ñ )Ø,/°¸± ¬NˆD�ŒN˜6Ô " 5Ñ )Ø �Q‰JˆEˆE؈ r6cóF—|pd}|pd}||zdzdz}t|¦«S)zÑ Get io value by read and write values. :param int|float|None read: read speed in MEGAbytes :param int|float|None write: write speed in MEGAbytes :return int: io, BYTES ré)r­)r|r~r,s r4Ú__get_io_bytesz#CloudLinuxStatistics.__get_io_bytesñs6€ðˆy�qˆØ� ˜ˆð�U‰l˜dÑ " TÑ )ˆÝ�2‰wŒwˆr6có¢—|€|Stt|dpd¦«d¦«|ddd<tt|dpd¦«d¦«|ddd<| |d|d ¦«|dd d<| |d |d ¦«|dd d<|S) Nr#rr¤r'r.rµr¥r´ér,éé)ÚroundÚfloatÚ#_CloudLinuxStatistics__get_io_bytes)rbr±r¶s r4Ú fill_gov_itemz"CloudLinuxStatistics.fill_gov_itemsÁ€Ø ˆ;؈KÝ(-­e°C¸´F°K¸aÑ.@Ô.@À!Ñ(DÔ(DˆˆWŒ �eÔ˜WÑ%Ý).­u°S¸´V°[¸qÑ/AÔ/AÀ1Ñ)EÔ)EˆˆXŒ�uÔ˜gÑ&Ø'+×':Ò':¸3¸q¼6À3ÀqÄ6Ñ'JÔ'JˆˆWŒ �dÔ˜GÑ$Ø(,×(;Ò(;¸CÀ¼FÀCÈÄFÑ(KÔ(KˆˆXŒ�tÔ˜WÑ%؈ r6c ó�—| ||¦«\}}}}}}} } |jst|¦«}nY|jr| ||| ¦«}n:|jr| ||| ¦«}n| ||||¦«\}}t|¦«t|¦«z } | dkrƒ| d¦«} | d¦«} |j   d|j |j | | d  |j¦«|j|j|j|j¦ « ||_||_dS)Nrz%Y-%m-%d %H:%MaKlen(lve_results) != len(gov_results), it might cause duplicated timestamps or mix of lve and governor stats from different periods in aggregated data. Utility was called with the following parameters: cloudlinux-statistics --json --time-unit %ss --id %s --from %s --to %s --show %s --server_id %s engine=%s order_by=%s by_fault=%s ú )Úprocess_indexesr^rAr9Úsort_by_another_listr8Ú sort_by_keyr€Ústrftimer\Úwarningr?r>ÚjoinrGr:r;rJrIrDrE)rbÚ lve_resultsÚ gov_resultsÚ period_fromÚ period_toÚfrom_gov_to_lve_indexesÚfrom_lve_to_gov_indexesÚgov_keysÚlve_keysÚnot_in_gov_indexesÚnot_in_lve_indexesÚlendiffÚfrom_formattedÚ to_formatteds r4Ú process_dataz!CloudLinuxStatistics.process_data sn€ð6:×5IÒ5IÈ+ÐWbÑ5cÔ5cñ 3ÐÐ!8Ø �kØ �kØ Ð 2ØŒð fݘ{Ñ+Ô+ˆKˆKØ Ô ð fØ×3Ò3Ð4KÈ[ÐZlÑmÔmˆKˆKØ Ô ð fØ×3Ò3Ð4KÈ[ÐZlÑmÔmˆKˆKà'+×'7Ò'7¸À+ÈxÐYdÑ'eÔ'eÑ $ˆK˜Ý�{Ñ#Ô#¥c¨+Ñ&6Ô&6Ñ6ˆØ �aŠ<ˆ<Ø(×1Ò1Ð2BÑCÔCˆNØ$×-Ò-Ð.>Ñ?Ô?ˆLØ ŒH× Ò ð8ð” ¤¨.¸,Ø—’˜Ô*Ñ+Ô+¨T¬^Ø” ˜Tœ]¨D¬Mñ ô ð ð(ˆÔØ'ˆÔÐÐr6có,—d}d}t|¦«}t|¦«}g}g} t||z¦«D�]W} ||kr<| dg||z z¦«|  ||d…¦«�n||kr;|  dg||z z¦«| ||d…¦«nÓ||||krA| ||¦«|  ||¦«|dz }|dz }ŒÙ||||kr7| d¦«|  ||¦«|dz }�Œ"|  d¦«| ||¦«|dz }�ŒY| |fS)Nrr#)r€ÚrangeÚextendÚappend) rÒrÍrÓrÌÚlve_posÚgov_posÚlve_lenÚgov_lenrDrEr¯s r4rÈz CloudLinuxStatistics.sort_by_key*sÕ€ðˆØˆÝ�kÑ"Ô"ˆÝ�kÑ"Ô"ˆØˆ ؈ õ�w Ñ(Ñ)Ô)ð ñ ˆAؘ'Ò!Ð!Ø×#Ò# T F¨g¸Ñ.?Ñ$@ÑAÔAÐAà×#Ò# K°°°Ô$9Ñ:Ô:Ð:ؘؑ'Ò!Ð!Ø×#Ò# T F¨g¸Ñ.?Ñ$@ÑAÔAÐAØ×#Ò# K°°°Ô$9Ñ:Ô:Ð:Ø�Ø˜Ô  H¨WÔ$5Ò5Ð5Ø×#Ò# K°Ô$8Ñ9Ô9Ð9Ø×#Ò# K°Ô$8Ñ9Ô9Ð9ؘ1‘ �ؘ1‘ ��ؘ'Ô" X¨gÔ%6Ò6Ð6Ø×#Ò# DÑ)Ô)Ð)Ø×#Ò# K°Ô$8Ñ9Ô9Ð9ؘ1‘ �‘à×#Ò# DÑ)Ô)Ð)Ø×#Ò# K°Ô$8Ñ9Ô9Ð9ؘ1‘ �‘ؘ\Ð)Ð)r6có¾—g}|D]5}|€| d¦«Œ| ||¦«Œ6|D]}| ||¦«Œ|}|Srg)rÝ)ÚindexesÚresultsÚnot_in_indexesÚ_resultsrps r4rÇz)CloudLinuxStatistics.sort_by_another_listNs}€ðˆØð 0ð 0ˆE؈}Ø—’ Ñ%Ô%Ð%Ð%à—’ ¨¤Ñ/Ô/Ð/Ð/Ø#ð ,ð ,ˆEØ �OŠO˜G EœNÑ +Ô +Ð +Ð +؈؈r6c󢇇 ‡ —‰jrd„|D¦«Š ˆ fd„|D¦«}‰js‰jrd„|D¦«Š ˆ fd„|D¦«}ˆfd„|D¦«}ˆfd„|D¦«}‰ ||¦«}d„t |¦«D¦«}‰ ||¦«}d„t |¦«D¦«}||||||||fS) Ncó—g|] }|d‘Œ S©rr0©r2r¯s r4r5z8CloudLinuxStatistics.process_indexes.._ó€Ð2Ð2Ð2 ˜˜!œÐ2Ð2Ð2r6có(•—g|]}|d‰v¯ |‘ŒSrér0)r2r¶Úgov_uidss €r4r5z8CloudLinuxStatistics.process_indexes..`ó'ø€ÐLÐLÐL 3¸¸Q¼À8Ð9KÐ9K˜3Ð9KÐ9KÐ9Kr6có—g|] }|d‘Œ Srér0rês r4r5z8CloudLinuxStatistics.process_indexes..brër6có(•—g|]}|d‰v¯ |‘ŒSrér0)r2r¶Úlve_uidss €r4r5z8CloudLinuxStatistics.process_indexes..crîr6có*•—g|]}|‰j‘ŒSr0)rN©r2r¯rbs €r4r5z8CloudLinuxStatistics.process_indexes..dó!ø€Ð@Ð@Ð@¨q�A�dÔ)Ô*Ð@Ð@Ð@r6có*•—g|]}|‰j‘ŒSr0)rOrós €r4r5z8CloudLinuxStatistics.process_indexes..erôr6có—g|] \}}|­|‘Œ Srgr0©r2Úir¯s r4r5z8CloudLinuxStatistics.process_indexes..gó"€Ð\Ð\Ð\¡D A qÐRSÐR[˜aÐR[ÐR[ÐR[r6có—g|] \}}|­|‘Œ Srgr0r÷s r4r5z8CloudLinuxStatistics.process_indexes..irùr6)rSrRrIÚ get_indexesÚ enumerate) rbrÍrÌrÒrÓrÐrÕrÑrÔrírñs ` @@r4rÆz$CloudLinuxStatistics.process_indexes\s7øøø€à Ô ð MØ2Ð2 kÐ2Ñ2Ô2ˆHØLÐLÐLÐL¨+ÐLÑLÔLˆKØ Ô ð M ¤ ð MØ2Ð2 kÐ2Ñ2Ô2ˆHØLÐLÐLÐL¨+ÐLÑLÔLˆKØ@Ð@Ð@Ð@°KÐ@Ñ@Ô@ˆØ@Ð@Ð@Ð@°KÐ@Ñ@Ô@ˆØ"&×"2Ò"2°8¸XÑ"FÔ"FÐØ\Ð\­IÐ6MÑ,NÔ,NÐ\Ñ\Ô\ÐØ"&×"2Ò"2°8¸XÑ"FÔ"FÐØ\Ð\­IÐ6MÑ,NÔ,NÐ\Ñ\Ô\ÐØ&Ð(?Ø �kØ �kØ Ð 2ð3ð 3r6có$‡‡—ˆˆfd„|D¦«S)Ncó<•—g|]}‰ ‰|¦«‘ŒSr0)rs)r2r>Ú second_uidsrbs €€r4r5z4CloudLinuxStatistics.get_indexes..qs'ø€ÐGÐGÐG°S�—’˜{¨CÑ0Ô0ÐGÐGÐGr6r0)rbÚ first_uidsrÿs` `r4rûz CloudLinuxStatistics.get_indexesos!øø€àGÐGÐGÐGÐG¸JÐGÑGÔGÐGr6cóÜ—|rL| |j||j¦«}| ||j|¦«S|jr ||jk�r…|jsL| |j||j¦«}| ||j|¦«S|js|jr’|j |}|�7| ||j ¦«}|  ||¦«n+| |j||j¦«}| ||j|¦«S|j|}|�7| ||j¦«}| ||¦«n+| |j ||j ¦«}|  ||j |¦«St‚)zS :type resellers: bool :type key: int :rtype: dict ) r²rFrOr¸rQr^rDr9r<rErNrÃÚ IndexError)rbrrÚ resellersr±r¶s r4Ú get_valuezCloudLinuxStatistics.get_valuessÍ€ð ð Ø—=’= Ô!8¸Ô!=¸dÔ>QÔ!RÑSÔSˆDØ×%Ò% d¨DÔ,CÀCÔ,HÑIÔIÐ IØ”ð ˜s T¤ZÒ/Ñ/Ø”?ð HØ—}’} TÔ%6°sÔ%;¸DÔ�?Ð "ð #ð #r6cóŠ—|r@| d¦«r|td¦«d…|_dSd|zf|_dSdS)Nr.rŠrx)r�r€rSrR)rbrcs r4rTz"CloudLinuxStatistics.init_by_usage±s[€à ð 4Ø×"Ò" 7Ñ+Ô+ð 4Ø$,­S°©]¬]¨^¨^Ô$<�Ô!Ð!Ð!à$'¨(¡N O�Ô!Ð!Ð!ð  4ð 4r6có*—tj|¦«}tj|¦«}|jr|t|j|||j|j|j|j|j|j |j |j |j |j ¬¦ « }| ¦«| ¦«}ng}|jr[t#|j|||j|j|j|j|j|j |jd|j¬¦ «  ¦«}ng}|jrbg}|D][} t1| |j¦«\} } | |jvrŒ)| r|j | ¦«ŒF| | ¦«Œ\|}| ||||¦«dS)zGenerate statistics.) ÚdbenginerÎrÏr>r?rGr:rJrcrUrIrVrQT) rrÎrÏr?r:rGrJrcrUrQÚreverser>N)rÚ local_to_gmrLrr;r>r?r:r8rRrUrIrVr=Úset_normalised_outputÚproceedr^rrMr9rSr<Úhistory_dbgov_showrCrrOrarFrÝrÙ) rbrÎrÏÚperiod_from_gmÚ period_to_gmÚ history_showrÌrÍÚusersr±r>r°s r4Úgenerate_statisticsz(CloudLinuxStatistics.generate_statistics¹sÇ€õ"Ô-¨kÑ:Ô:ˆÝÔ+¨IÑ6Ô6ˆ à Ô !ð Ý+ØœØ*°lØ”HØœ.Ø!Ô3Øœ.ØÔ*ØÔ*Ø$(Ô$<؜؜.Ø”nð &ñ &ô &ˆLð × .Ò .Ñ 0Ô 0Ð 0Ø&×.Ò.Ñ0Ô0ˆKˆKàˆKà Œ?ð Ý*ØœØ*Ø&Øœ.Øœ.Ø!Ô3ØÔ*ØÔ*Ø$(Ô$<Ø”nØØ”Hð ñ ô ÷!Ò Ñ"Ô"ð ˆKðˆKØ Ô ð ØˆEØ#ð 'ð '�Ý#5°d¸4Ô;NÔ6OÑ#PÔ#PÑ ��[ؘ$Ô+Ð+Ð+ØØð'ØÔ+×2Ò2°4Ñ8Ô8Ð8Ð8à—L’L Ñ&Ô&Ð&Ð&؈KØ ×Ò˜+ {°KÀÑKÔKÐKÐKÐKr6) r!NNr"Nr#rNr$)F)r[Ú __module__Ú __qualname__rdÚ staticmethodr_r]rsrPrKr“r™rŸr¢r²r¸rÂrÃrÙrÈrÇrÆrûrrr›rHrTrr0r6r4r r *s€€€€€ð ØØØ #ØØØØØð8Uð8Uð8Uð8Uðtððñ„\ðð ZðZðZð$ð$ð$ð QðQðQð4 9ð 9ð 9ð)ð)ð)ð ð ð ð ð ð ððððððð: ð ð ðð ð ñ„\ð ðððð(ð(ð(ð@ð!*ð!*ñ„\ð!*ðFð ð ñ„\ð ð3ð3ð3ð&HðHðHððððB$ð$ð$ð *ð*ð*ð*ð ð#ð#ñ„\ð#ð4ð4ð4ð5Lð5Lð5Lð5Lð5Lr6r c óÈ—t¦«dkrtj¦«Stj|¦«|r¤t |p t¦«¦«}t ttt tt|¦«¦«¦«¦«}t|p t¦«¦«}|r||vs||kr|ngS|�|  |¦«n|}|S)z= Get uid that should be selected from history table; r7) r ÚosÚgetuidrÚbuild_users_cacherrAÚfilterÚboolÚmaprrrÝ)Ú for_resellerr>Ú users_listÚid_Ú reseller_uids r4Ú_get_uid_for_selectr.ñsØ€õ �y„y�FÒÐÝŒy‰{Œ{ÐåÔ% lÑ3Ô3Ð3Øð Ý+¨LÐ,E½G¹I¼IÑFÔFˆ Ý•6�$¥¥SÕ)>À Ñ%KÔ%KÑ LÔ LÑMÔMÑNÔNˆÝ& |Ð'@µw±y´yÑAÔAˆ ð ð DØ ˜*˜*¨¨|Ò(;Ð(;�3�3ÀÐ Cà Ð #Ø �JŠJ�|Ñ $Ô $Ð $øàˆØ €Jr6có’—|jsdSt|j|j¦«}t ||||¦«}t |¦«}|dfS)z˜ Get command response and exitcode. :type log: None | logging.Logger :type engine: sqlalchemy.engine.base.Engine :rtype: (str, int) )z Only JSON mode supported for nowéÿÿÿÿr)Újsonr.r*rwÚget_statisticsÚ dump_json)r;Úoptionsr\r,Ú statisticsÚ json_datas r4Úexecuter7 sR€ð Œ<ð6Ø5Ð5å ˜gÔ2°G´JÑ ?Ô ?€CÝ ¨¨S°'Ñ:Ô:€Jݘ*Ñ%Ô%€Ià �aˆ<Ðr6có.—tj|¦«}|Srg)r1Údumps)r5r6s r4r3r3s€å” ˜:Ñ&Ô&€IØ Ðr6c óÜ—d|dœ}|j�'|j� |gkrd|j›d|j›d�}||d<|S t||j|j|j|j|jdz |j|j |j ||j ¬¦ « }|  t|d ¦«|j¦«t|¦«}t|d ¬ ¦«} |jr ||d <| |d <n||d<nM#t"$r@} t%| ¦«|d<|r"| t%| ¦«¦«Yd} ~ nd} ~ wwxYwt)j¦«\} } | |d<| t,jkr| j|d<| j|d<|S)NÚsuccess)rÚ timestampz Permission denied. User with id z does not belong reseller `ú`rgY@) rGrJr:rcrUrIrVrQr>r?ruT)rrrÚuserÚmySqlGovrÊr)r*rwr ÚshowrJr:rcÚ percentagerIrVrQr?rÚgetattrrvrrCÚ ExceptionÚstrÚerrorrÚget_governor_statusr ÚERRORr r) r;r,r\r4r<rÚ error_msgÚstatÚlvelistÚlvelist_resellersrÚstatusrEs r4r2r2#s×€ðØðð€FðÔÐ'¨G¬JÐ,BÀsÈbÂyÀyð NØŒzð Nð NØ6=Ô6Jð Nð Nð Nð ð%ˆˆxÑØˆ ðÝ#Ø Ø œØÔ%ØÔ'ØÔ%Ø 'Ô 2°TÑ 9ØÔ%ØÔ'Ø”-ØØÔ'ð )ñ )ô )ˆð × Ò ¥¨°&Ñ!9Ô!9¸7¼:ÑFÔFÐFå˜$‘-”-ˆÝ# D°DÐ9Ñ9Ô9ÐØ Ô ð %Ø%ˆF�7‰OØ"3ˆF�;Ñ Ð à$ˆF�6‰NøøÝ ðððݘq™6œ6ˆˆxÑØ ð Ø �IŠI•c˜!‘f”fÑ Ô Ð øøøøøøøøøðøøøõ Ô,Ñ.Ô.�M€FˆEØ€Fˆ:ÑØ •Ô%Ò%Ð%Ø!œMˆˆyÑØ!œMˆˆyÑØ €MsµB*C à D*Ã*6D%Ä%D*Ú localhostcóÀ—|€'tidtjtj¬¦«}t ||¦«}t |||¬¦«\}}t |¦«|S)z- Execute command and return exitcode Nr )Ú caller_nameÚ file_levelÚ console_level©r\)rrXÚWARNINGÚFATALrr7Úprint)r;Úargv_r:r\r4Újson_strÚ exit_codes r4ÚmainrY]sh€ð  €{ÝØ Ø.Ý”Ý!œ-ð  ñ ô ˆõ & e¨YÑ7Ô7€Gå! &¨'°sÐ;Ñ;Ô;Ñ€HˆiÝ ˆ(�O„O€OØ Ðr6Ú1dcóR—tj¦«}t|¦«}| dd¦«}dddd|zg}t ||¦«}t ||d¬¦«\}}t j|¦«}|d } |d } t| ¦«t| ¦«fS) z: Return amount of users and resellers with faults r:rMz --by-faultr‹ú--jsonz --period=NrRrr) rÚ read_configrÚgetrr7r1Úloadsr€) ÚperiodÚcnfrr:Úopt_listr4rWr¯r6rrs r4Ú#get_users_and_resellers_with_faultsrcqs¦€õ Ô Ñ Ô €CݘcÑ"Ô"€HØ—’˜  [Ñ1Ô1€Iؘe X¨{¸VÑ/CÐD€HÝ% h° Ñ:Ô:€Gݘ( G°Ð6Ñ6Ô6�K€HˆaÝ” ˜8Ñ$Ô$€Iؘ+Ô&€IØ �gÔ €EÝ ˆu‰:Œ:•s˜9‘~”~Ð %Ð%r6cóv—ttj¦«ddt|¦«dddtt t j|dz ¦«¦«¦«dzg¬¦«}|rtj|¦«} td „|d D¦«¦«}n#ttf$rd}YnwxYw|S) Nr\z--idz--show-columnsÚmPMemz--periodr$Úm)rVc3ó&K—|] }|dV—Œ dS)reNr0)r2Úxs r4riz)get_max_memory_for_lve..Šs&èè€Ð?Ð? a�q˜”zÐ?Ð?Ð?Ð?Ð?Ð?r6Údata) rrr]rDr­ÚmathÚceilr1r_ÚmaxÚ ValueErrorÚKeyError)Úlve_idÚperiod_secondsriÚ parsed_dataÚmax_pmems r4Úget_max_memory_for_lvers�sÒ€Ý ÝÔÑÔØ˜¥ V¡¤Ð.>ؘ ¥C­­D¬I°nÀrÑ6IÑ,JÔ,JÑ(KÔ(KÑ$LÔ$LÈsÑ$RðTð ñ ô €Dð  ð'Ý”j Ñ&Ô&ˆ ðÝÐ?Ð?¨;°vÔ+>Ð?Ñ?Ô?Ñ?Ô?ˆˆøÝ �Ð !ðððØˆˆˆðøøøà €OsÂB  B6Â5B6rg)rMN)rZ)Cr1rXrjr$Ú collectionsrrÚtypingrrrrr Ú sqlalchemyÚlvestats.lib.commons.decoratorsÚlvestatsÚclcommonr Úclcommon.cpapi.pluginlibr Ú clcommon.libr r rÚ lvestats.librÚlvestats.lib.commonsrrÚlvestats.lib.commons.funcrrÚlvestats.lib.commons.logsetuprÚ"lvestats.lib.commons.users_managerrÚlvestats.lib.dbenginerÚlvestats.lib.info.lveinfomainrÚlvestats.lib.lve_listrÚlvestats.lib.lveinfolibrÚlvestats.lib.lveinfolib_govrÚ1lvestats.lib.parsers.cloudlinux_statistics_parserrÚlvestats.lib.uidconverterrrrr‘Úobjectr r.r7r3Úgm_datetime_to_unixtimestampr2ÚlibÚcommonsÚ decoratorsÚ no_sigpiperYrcrsr0r6r4úrŽsÉðð € € € Ø€€€Ø € € € Ø € € € Ø#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØ5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5àÐÐÐà&Ð&Ð&Ð&ØÐÐÐÐÐØ,Ð,Ð,Ð,Ð,Ð,ØIÐIÐIÐIÐIÐIÐIÐIÐIÐIØÐÐÐÐÐØ/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØPÐPÐPÐPÐPÐPÐPÐPØ7Ð7Ð7Ð7Ð7Ð7Ø>Ð>Ð>Ð>Ð>Ð>Ø0Ð0Ð0Ð0Ð0Ð0Ø/Ð/Ð/Ð/Ð/Ð/Ø)Ð)Ð)Ð)Ð)Ð)Ø4Ð4Ð4Ð4Ð4Ð4Ø8Ð8Ð8Ð8Ð8Ð8ØUÐUÐUÐUÐUÐUððððððððððð € ðDLðDLðDLðDLðDL˜6ñDLôDLðDLðNððð4ðððð$ððð8�(Ô7Ñ9Ô9ð 7ð7ð7ð7ðt „ÔÔ Ô+ðððñ,Ô+ðð& &ð &ð &ð &ð ð ð ð ð r6