fjdZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z  ddl m Z n#e$rdZ YnwxYwdd lmZdd lmZdd lmZdd lmZejd ZGddZdS)zG This module contains a wrapper around `clwpos-user get` local utility N)Optionalbuild_clwpos_user_cmd)CloudlinuxSummary)is_wpos_visiblecdS)Nusernames N/opt/cloudlinux/venv/lib64/python3.11/site-packages/xray/adviser/clwpos_get.pyr st) get_client)NginxUserCache)get_plugin_status)any_suite_allowed_on_server clwpos_utilceZdZdZdZdededdfdZededefdZ ded ede fd Z ded ede e fd Zed Zd Zded ede fdZedefdZede ddfdZdZdS) ClWposGetterz/usr/bin/clwpos-userz'/usr/sbin/clwpos_collect_information.pyr domainreturnNcN||rtddS|||}tdt ||r||dStd||dS)z8Construct and POST metadata to Smart Advice microservicez)ea-nginx detected, skipping metadata sendNz Got WPOS: %sz4Metadata for user %s with domain %s will not be sent)nginx_cache_for_userloggerinfoconstruct_metadatadebugstrsenderror)selfr r json_datas r post_metadatazClWposGetter.post_metadata&s  $ $X . .  KKC D D D F++Hf==  ^S^^444  c IIi LLOQY[a b b b b brc*t|jS)z9 Check nginx cache status for given user )r is_enabledr s r rz!ClWposGetter.nginx_cache_for_user2s h''22r domainnamec(t|dd|gS)z-Build command list for clwpos-user invocationscanz --websiter)r"r r's r _build_cmdzClWposGetter._build_cmd9s$X Z/PQQQrc tj|jsdS|r|sdS |||}n:#t $r-}t d||j|Yd}~dSd}~wwxYw tj |dd}nK#tt tj f$r,}t d|j|Yd}~dSd}~wwxYw|j dkr\t d|jtt|ddtt|d ddS tj|jS#tj$rAt d |jtt|ddYdSwxYw) z< External call of `clwpos-user get` utility NzInvalid username %r for %s: %sT)capture_outputtextzError running %s: %srz9Metadata collection via %s failed. stdout: %s, stderr: %sstdoutstderrz8Invalid JSON from %s for metadata collection. stdout: %s)ospathisfileutilr* ValueErrorrr! subprocessrunOSErrorSubprocessError returncodergetattrjsonloadsr.stripJSONDecodeError)r"r r'_execeresults r utilityzClWposGetter.utility=sw~~di((  F z  F OOHj99EE    LL98TYPQ R R R44444   ^E$TJJJFFZ%?@    LL/A > > >44444    ! ! LLTWVXt<<==WVXt<<== ? ? ?4 :fm113344 4#    LLSWVXt<<== ? ? ?44  sBA A<"A77A<BC 4!CC  *E66A GGc(fd|DS)zp Iterate through advices and return only those which relate to current user-domain-site cg|]:}|ddkr&|ddkr|ddk8|;S)metadatar rwebsiter ).0adviceruserrFs r z8ClWposGetter.get_advices_for_website..jsd   j!*-55j!(+v55j!),77 877rr )advicesrIrrFs ```r get_advices_for_websitez$ClWposGetter.get_advices_for_websiteds:       !    rc6i}|||}|s|Sg}|dD]\}}d|} |d|g} ||||| } t ||| | | } |t | | | nN#t$rAt d|t | | YnwxYw|||| d}|S)zP For getting extended metadata which will be sent daily by cron issues/)r1rNwp_plugin_statusz)Getting Smart Advice plugin status failedr1rNr rwebsitesserver_load_rate) rBitemsgetrLrappenddict Exceptionr exceptionrT) r"r rcurrent_advicesfinal_metadatawebsites_metadatarSsiterNr1website_issuesadvice_for_websitesmart_advice_plugin_statuss r get_updated_extended_metadataz*ClWposGetter.get_updated_extended_metadatars LL6::  "! !-h7==??  LD&t::D.x8<xHNHLHVHZ .\.\*$,:6P!R!R!RSSSS  = = =  !LMMM$,:!<!<!<===== =% $$($9$9$;$; NN s8B11AC<;C<cd}|||=||fddD|d}|S)zX Ensure format accepted by Smart Advice POST requests/metadata endpoint Nc rg|]3\}}td|d|g4S)rOrNrQ)rXrV)rGr^rNdatas r rJz3ClWposGetter.construct_metadata..s^!#!#!#%1T6"&:t::-1(^-?-?b-I-I"K"K"K!#!#!#rrNrR)rBrUrT)r"r r' dummy_resultres @r rzClWposGetter.construct_metadatas ||Hj11  (0&0!#!#!#!#59(^5I5I5K5K!#!#!#150E0E0G0GIILrc tj}n@#t$r3}tdt |Yd}~dSd}~wwxYwt jpd}||z S)z%Unable to get domains_total stats: %sNgg?)r_get_total_domains_amountrYrr!rmultiprocessing cpu_count) domains_totalr@rks r rTzClWposGetter.server_load_rates~ -GIIMM    LL@#a&& I I I44444  $-//63 y((s A(AAstatct|dr/td}||dSdS)zo Send gathered metadata to adviser miscroservice. Ignore sending if websites are empty rSadviser)reN)r send_stat)rmclients r r zClWposGetter.sendsK   * **F FHH  D  ) ) ) ) ) * *rc`tstj|jdgddSdS)z Needed to save PHP info to work without clwpos_monitoring demon when AccelerateWP is turned off completely z--forceT)r,N)rr5r6awp_info_collector)r"s r save_clwpos_infozClWposGetter.save_clwpos_infosC +,, V ND3Y?PT U U U U U U V Vr)__name__ __module__ __qualname__r3rsrr$ staticmethodboolrlistr*rrXrBrLrbrfloatrTr rtr rr rr"s !DB cc c3 c4 c c c c3s3t333\3 R3RCRDRRRR%%%$%%%%N   \  %%%N3CD& )e ) ) )\ )*4*D***\*VVVVVrr)__doc__r;loggingr0r5rjtypingrxray.internal.utilsrclsummary.summaryr clwpos.papir ImportError apiclientrinternal.nginx_utilsr xray.smart_advice_plugin_helpersr!xray.internal.clwpos_safe_importsr getLoggerrrr rr rs]  555555//////,+++++++,,,++OOO,#"""""111111>>>>>>IIIIII  = ) )iViViViViViViViViViVs 1<<