HEX
Server: LiteSpeed
System: Linux linux31.centraldnserver.com 4.18.0-553.83.1.lve.el8.x86_64 #1 SMP Wed Nov 12 10:04:12 UTC 2025 x86_64
User: salamatk (1501)
PHP: 8.1.33
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/xray/adviser/__pycache__/clwpos_get.cpython-37.pyc
B

�V�di�@s�dZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
ddlmZdd	lmZe�d
�ZGdd�d�ZdS)
zG
This module contains a wrapper around `clwpos-user get` local utility
�N)�Optional)�Feature)�is_panel_feature_supported)�CloudlinuxSummary�)�
get_client)�NginxUserCacheZclwpos_utilc@s�eZdZdZeedd�dd�Zeeed�dd��Ze	e
ed	�d
d��Ze	ed	�dd
��Zeee
e
d�dd�Zeee
d�dd�Zeed	�dd��Zee
dd�dd��ZdS)�ClWposGetterz/usr/bin/clwpos-userN)�username�domain�returncCsV|�|�rt�d�dS|�||�}t�dt|��|rD|�|�nt�d||�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_user�logger�info�construct_metadata�debug�str�send�warning)�selfr
r�	json_data�r�H/opt/alt/python37/lib/python3.7/site-packages/xray/adviser/clwpos_get.py�
post_metadatas

zClWposGetter.post_metadata)r
rcCs
t|�jS)z9
        Check nginx cache status for given user
        )r�
is_enabled)r
rrrr
+sz!ClWposGetter.nginx_cache_for_user)rcCsttj�sdSdS)z0Special hack for executing user commands on Soloz%sudo -u  %(username)s -s /bin/bash -cN)rr�CAGEFS)rrrr�wrapper2s
zClWposGetter.wrappercCs(ttj�s|j�d�Sd|j�d�SdS)zResolve command to executez scan --website %(website)sz%/sbin/cagefs_enter_user %(username)s N)rrr�util)rrrr�cmd8s
zClWposGetter.cmd)r
�
domainnamercCs.tj�|j�sdS|jdk	rH|j||d���}|�|j||d��n|j||d���}ytj	|ddd�}Wn:t
ttjfk
r�}zt
�d|j|�dSd}~XYnX|jdkr�t
�d|jtt|dd��tt|d	d���dSyt�|j���Stjk
�r(t
�d
|jtt|dd���dSXdS)z<
        External call of `clwpos-user get` utility
        N)r
�websiteT)�capture_output�textzError running %s: %srz9Metadata collection via %s failed. stdout: %s, stderr: %s�stdout�stderrz8Invalid JSON from %s for metadata collection. stdout: %s)�os�path�isfilerr�split�appendr�
subprocess�run�OSError�
ValueError�SubprocessErrorr�error�
returncoder�getattr�json�loadsr#�strip�JSONDecodeError)rr
r�_exec�result�errr�utility@s0

zClWposGetter.utilitycsDd}|�||���dk	r@||�fdd��d��D�|��d�}|S)zX
        Ensure format accepted by Smart Advice POST requests/metadata endpoint
        Ncs.g|]&\}}td|���d�|g�d��qS)�/�issues)r&r;)�dict�get)�.0�siter;)�datarr�
<listcomp>qsz3ClWposGetter.construct_metadata.<locals>.<listcomp>r;)r
r�websites�server_load_rate)r9�itemsrC)rr
rZdummy_resultr)r@rrfs
zClWposGetter.construct_metadatac
CsTyt��}Wn2tk
r>}zt�dt|��dSd}~XYnXt��pJd}||S)�z%Unable to get domains_total stats: %sg�Ng�?)rZ_get_total_domains_amount�	Exceptionrr/r�multiprocessing�	cpu_count)Z
domains_totalr8rHrrrrCxszClWposGetter.server_load_rate)�statrcCs"|drtd�}|�j|d�dS)zo
        Send gathered metadata to adviser miscroservice.
        Ignore sending if websites are empty
        rB�adviser)r@N)rZ	send_stat)rI�clientrrrr�szClWposGetter.send)�__name__�
__module__�__qualname__rrr�staticmethod�boolr
�propertyrrrr<r9r�floatrCrrrrrr	s&
r	)�__doc__r2�loggingr%r*rG�typingr�clcommon.constr�clcommon.cpapirZclsummary.summaryr�	apiclientr�internal.nginx_utilsr�	getLoggerrr	rrrr�<module>
s