Your IP : 216.73.216.86


Current Path : /lib/fm-agent/library/__pycache__/
Upload File :
Current File : //lib/fm-agent/library/__pycache__/agent_util.cpython-36.pyc

3

q��i�$�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	yddl
Z
Wnek
rtddlZ
YnXyddl
Z
WnddljZ
YnXejddkr�ddlmZnddlmZdejkr�dejd<ejej�dd	�ZeZiZd
Zdd�Zd
d�Zdd�ZdZdZdZ ddddddgZ!d-dd�Z"d.dd�Z#d/d!d"�Z$d#d$�Z%d%d&�Z&d'd(�Z'Gd)d*�d*e
j(�Z)Gd+d,�d,e*�Z+dS)0zEThis file is a library of some essential classes for our agent's use.�N�3)�BytesIO)�StringIO�LC_ALL�CcCsJytjt|��Stk
rDtt�ti�kr:td|�Stj|�SXdS)N�float)�localeZatof�str�	Exception�type�__builtins__r)�value�r�'/usr/lib/fm-agent/library/agent_util.py�custom_float&sr�<cCsx|D]}|rdSqWdS)NTFr)�iterable�elementrrr�any5s
rcCsx|D]}|sdSqWdS)NFTr)rrrrr�all<s
rcCs"|j|j|jddddS)N�i�
�i@Bi@B)Zmicroseconds�seconds�days)�	timedeltarrr�
total_secondsCsr��z/usr/local/sbinz/usr/local/binz	/usr/sbinz/usr/binz/sbinz/binFcCs�dd�}tjj|�\}}|r*||�rv|SnLdtjkr8dSx<tjtjdjtj�t�D]}tjj||�}||�rT|SqTW|r�t	d|��ndSdS)NcSstjj|�otj|tj�S)N)�os�path�exists�access�X_OK)�fpathrrr�is_exe\szwhich.<locals>.is_exe�PATHz%r not found)
rr �split�environ�	itertools�chain�pathsep�ADDITIONAL_SEARCH_PATHS�joinr
)Zprogram�excr%r$�fnamer Zexe_filerrr�which[s
r0�cCs tj|d|ddd�}|jjd�S)NFT)�shell�timeout�checkZcapture_outputzutf-8)�
subprocess�run�stdout�decode)Zcommand_argsr3�prrr�run_commandssr:T�cs�|dkr|j�}tjd�}|rdtj|�}	|	rdtj�|	jd�|krd|jd|�|	jd�|	jd�fSd}
dtjj	�k�r,t
j|||t
jt
j|d	�}
|s�dSy|
j
|d
�\}}Wnxt
jk
�r&}
zX|
jg}|r�|jt|
j��x6|D].}ytj|tj�Wq�tk
�rYq�Xq�WdSd}
~
XnX�n
Gd
d�dt���fdd�}t
j|||t
jt
j|d	�}
|�sldS|dk�r�|dk�r�tjtj|�tj|�y.|
j
�\}}|dk�r�|dk�r�tjd�Wnn�k
�r4|
jg}|�r�|jt|
j��x8|D]0}ytj|tj�Wntk
�r(YnX�q�WdSX|
j}|�sF|}|jd�}|�rx|jd|�||tj�d�t|<|jd|||f�||fS)zNRun a command line call with a timeout after which it will be forcibly killed.F�execute_command�	timestampz9Retrieved information from the local cache timeout for %s�retcode�outputN�darwin)r2�cwdr7�stderr�env)r3�	� Timeout exceeded, process killedc@seZdZdS)zexecute_command.<locals>.AlarmN)�__name__�
__module__�__qualname__rrrr�Alarm�srIcs��dS)Nr)Zsignum�frame)rIrr�
alarm_handler�sz&execute_command.<locals>.alarm_handlerrr�utf8zCreated cache for cmd %s)r>r?r=z	%s: %s %s���)rMrE���rN���)rOrE)r'�logging�	getLogger�LOCAL_CACHE_RESULTS�get�time�debug�sys�platform�lowerr5�Popen�PIPE�communicate�TimeoutExpired�pid�extend�get_process_childrenr�kill�signal�SIGKILL�OSErrorr
�SIGALRM�alarm�
returncoder8)�cmdrAr2Z	kill_treer3rC�blockZ
cache_timeout�logZ
cached_resultr9r7rBZte�pidsr]rKr>r?r)rIrr<zs�






r<cCs8tjd|dtjtjd�}|j�\}}dd�|j�D�S)z?Helper method for killing off child processes when they timeoutz ps --no-headers -o pid --ppid %dT)r2r7rBcSsg|]}t|��qSr)�int)�.0r9rrr�
<listcomp>�sz(get_process_children.<locals>.<listcomp>)r5rYrZr[r')r]r9r7rBrrrr_�s
r_cCs`y$|dd}t|j��d}|dStk
rZtj�dd�\}}tj|�|�YnXdS)NZNetworkSettingsZNetworksrZ	IPAddressr)�list�valuesr
rV�exc_inforP�	exception)�	containerZnetworksZnetwork�t�errr�get_container_ip�s
rucKs6ytj|f|�Stk
r0tj|j�f|�SXdS)N)�json�loads�	TypeErrorr8)�val�kwargsrrr�
json_loadssr{c@seZdZddd�Zdd�ZdS)�UnixHTTPConnection�	localhostcKstjj||f|�||_dS)N)�httplib�HTTPConnection�__init__r )�selfr �hostrzrrrr�szUnixHTTPConnection.__init__cCs&tjtjtj�}|j|j�||_dS)N)�socketZAF_UNIXZSOCK_STREAM�connectr �sock)r�r�rrrr�szUnixHTTPConnection.connectN)r})rFrGrHr�r�rrrrr|
s
r|c@sDeZdZdZdZeZdd�Zddd�Zdd	d
�Z	dd�Z
d
d�ZdS)�PluginZ	undefined�cCs||_tjd|j�|_dS)Nz	plugin %r)�schedulerPrQ�textkeyri)r�r�rrrr�$szPlugin.__init__Fc	Csbtj�}|jj}|j|i�}|r(g||<|j|g�}|j||f�xt|�dkr\|jd�qDWdS)Ni�r)rTr��cached_results�
setdefault�append�len�pop)	r�r��optionr
�replace�now�cache�tcache�resultsrrr�cache_result*szPlugin.cache_resultrcCsftj�}|jj}|j|i�}|j|g�}g}x,||d�D]\}	}
|j||	|
f�q<W|j�|S)N)rTr�r�r�r��reverse)r�r�r�Znumr�r�r�r�ZretZstored�resultrrr�get_cache_results?szPlugin.get_cache_resultscCsiS)Nr)r��configrrr�get_metadataLszPlugin.get_metadatacCsdS)Nrr)r�r��datar�rrrr4OszPlugin.checkN)F)r)rFrGrHr��descriptionrPrir�r�r�r�r4rrrrr�s


r�)F)r1)NTTr;NTN),�__doc__rTrPrr)r5rVrarr�rv�ImportError�
simplejsonr~�http.client�client�version�iorrr(�	setlocale�
LC_NUMERICrrrRZDEFAULT_CACHE_TIMEOUTrrrZ	SUPPORTEDZUNSUPPORTEDZ
MISCONFIGUREDr,r0r:r<r_rur{rr|�objectr�rrrr�<module>sj

	

	
j