B �=�_{H�@s�dZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZdgZe e d�Z!e e d�Z"e e d�Z#e�$�Z%ej&Z&e j'e j(e j)e j*e j+e j,e j-e j,e j.e j/iZ0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:e j;e je j?e j@e jAe jBe jCe jDe jEe jFe jGe jHi ZIeJdddddddd d!�ZKed"d#d$g�ZLeLZMed%d&d'd(d)g�ZNed*d+d,d-d.d/g�ZOd0d1�ZPd2d3�ZQd4d5�ZRd6d7�ZSd8d9�ZTd:d;�ZUd�szcpu_times..)r3� per_cpu_timesr)�zip)�retr4r4r5� cpu_times}srBcCst��}dd�|D�S)z5Return system per-CPU times as a list of named tuplescSsg|] }t|��qSr4)r))r<r=r4r4r5r>�sz!per_cpu_times..)r3r?)rAr4r4r5r?�sr?cCs$y t�d�Stk rdSXdS)z0Return the number of logical CPUs in the system.�SC_NPROCESSORS_ONLNN)�os�sysconf� ValueErrorr4r4r4r5�cpu_count_logical�s rGcCsrd}tj|dtjtjd�}|��\}}tr@dd�||fD�\}}|jdkrZtd||f��|����}t |�ppdS)Nzlsdev -Cc processorT)�shell�stdout�stderrcSsg|]}|�tjj��qSr4)�decode�sysrI�encoding)r<r=r4r4r5r>�sz&cpu_count_physical..rz%r command error %s) � subprocess�Popen�PIPE� communicater� returncode� RuntimeError�strip� splitlines�len)�cmd�prIrJZ processorsr4r4r5�cpu_count_physical�s     rYcCs t��\}}}}t�||||�S)z*Return various CPU stats as a named tuple.)r3� cpu_statsr� scpustats)� ctx_switches� interrupts�soft_interrupts�syscallsr4r4r5rZ�srZFc Cslg}t��}xZ|D]R}|\}}}}|dkr.d}|s>t|�js>qd}} t�|||||| �} |�| �qW|S)zReturn system disk partitions.Znone�N)r3�disk_partitions� disk_usager.r� sdiskpart�append) �all�retlist� partitions� partition�device� mountpoint�fstype�opts�maxfile�maxpath�ntupler4r4r5ra�s    ra�����c Cs�tj}||kr.td|d�dd�|D��f��tj|\}}t�|�}g}x`|D]X}|\}} } } } } }| |krpqP| |krzqPt|| | | | | t|dkr�|ndd�}|�|�qPW|S)z�Return socket connections. If pid == -1 return system-wide connections (as opposed to connections opened by one process only). z+invalid %r kind argument; choose between %sz, cSsg|] }t|��qSr4)�repr)r<r=r4r4r5r>�sz#net_connections..rpN)�pid) r� conn_tmaprF�joinr3�net_connectionsr � TCP_STATUSESrd)�kind�_pidZcmapZfamilies�types�rawlistrA�item�fd�fam�type_�laddr�raddrr&rr�ntr4r4r5ru�s"  ruc Cs�ttd�}tdd�t�D��}i}x�|D]�}t�|�\}}d}d}tjdd|gtjtjd�}|� �\} } t r�d d�| | fD�\} } |j dkr�t � d | �} | d k r�t| �d ��}| �d �}|�|t�}t�||||�||<q(W|S)z)Get NIC stats (isup, duplex, speed, mtu).)�FullZHalfcSsg|] }|d�qS)rr4)r<r=r4r4r5r>�sz net_if_stats..r`rz/usr/bin/entstatz-d)rIrJcSsg|]}|�tjj��qSr4)rKrLrIrM)r<r=r4r4r5r>�sz"Running: (\d+) Mbps.*?(\w+) DuplexNrr)r r �set� net_if_addrsr3� net_if_statsrNrOrPrQrrR�re�search�int�group�getrr� snicstats) Z duplex_map�namesrA�name�isup�mtu�duplex�speedrXrIrJZ re_resultr4r4r5r��s.      r�cCst��S)z:The system boot time expressed in seconds since the epoch.)r3� boot_timer4r4r4r5r�sr�c Cs`g}t��}d}xJ|D]B}|\}}}}}} |s0q||kr-szpids..)rD�listdirr r4r4r4r5�pids+sr�cCstj�tj�t�t|�d��S)z&Check for the existence of a unix pid.Zpsinfo)rD�path�existsrtr �str)rrr4r4r5� pid_exists0sr�cst����fdd��}|S)z�Call callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c szy�|f|�|�Sttfk rTt|j�s>t|j|j��nt|j|j|j��Yn"tk rtt |j|j��YnXdS)N) rrr�rrr�_namer�_ppidrr)�self�args�kwargs)�funr4r5�wrapper9s z wrap_exceptions..wrapper)� functools�wraps)r�r�r4)r�r5�wrap_exceptions5sr�c@sxeZdZdZdddddgZdd�Zd d �Zd d �Zee d d���Z ee dd���Z edd��Z edd��Z edd��Zedd��Zedd��Zedd��Zer�edd��ZedAd d!��Zed"d#��Zed$d%��Zed&d'��Zed(d)��Zed*d+��Zed,d-��Zed.d/��Zed0d1��Zed2d3��ZeZed4d5��Zd6d7�Z ed8d9��Z!ed:d;��Z"edBd=d>��Z#e$�rted?d@��Z%d�sz&Process.open_files..zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//rzcannot be retrieved)rNrOr�rrrPrQr�lowerrr�r��findallrT� startswithrdr� popenfiler�)r�rXrIrJZ procfilesrfr|r�r4r4r5� open_files�s$      zProcess.open_filescCs(|jdkrdStt�d|j|jf��S)Nrz%s/%s/fd)rrrVrDr�r�)r�r4r4r5�num_fdss zProcess.num_fdscCstjt�|j��S)N)r�pctxswr3Zproc_num_ctx_switchesrr)r�r4r4r5�num_ctx_switchesszProcess.num_ctx_switchesNcCst�|j||j�S)N)rZwait_pidrrr�)r��timeoutr4r4r5�waitsz Process.waitcCsXyt�|j�\}}}}Wn.tk rFt|j�s@t|j|j���YnXt�||||�S)N) r3rrr�OSErrorr�rr�r�pio)r��rcZwc�rb�wbr4r4r5� io_counterss zProcess.io_counters)r�)N)&�__name__� __module__� __qualname__�__doc__� __slots__r�r�r�r�r r�r�r�r�r�r�r#r%� HAS_THREADSr�r�r�r�r r�r�rBr�r�r�Zmemory_full_infor&r�r�r�r��HAS_PROC_IO_COUNTERSr�r4r4r4r5r�JsJ                  r�)F)rp)er�r�r�rDr�rNrL� collectionsrr`rrrr3rr�rr r r r r rrrr�_compatrrrrZ__extra__all__�hasattrr�ZHAS_NET_IO_COUNTERSr�Z getpagesizeZ PAGE_SIZEZAF_LINKZSIDL� STATUS_IDLEZSZOMB� STATUS_ZOMBIEZSACTIVE�STATUS_RUNNINGZSSWAPZSSTOP�STATUS_STOPPEDr�ZTCPS_ESTABLISHED�CONN_ESTABLISHEDZ TCPS_SYN_SENT� CONN_SYN_SENTZ TCPS_SYN_RCVD� CONN_SYN_RECVZTCPS_FIN_WAIT_1�CONN_FIN_WAIT1ZTCPS_FIN_WAIT_2�CONN_FIN_WAIT2ZTCPS_TIME_WAIT�CONN_TIME_WAITZ TCPS_CLOSED� CONN_CLOSEZTCPS_CLOSE_WAIT�CONN_CLOSE_WAITZ TCPS_LAST_ACK� CONN_LAST_ACKZ TCPS_LISTEN� CONN_LISTENZ TCPS_CLOSING� CONN_CLOSINGZPSUTIL_CONN_NONE� CONN_NONErv�dictr�r(Zpfullmemr)r-r6r:rBr?rGrYrZZdisk_io_countersrbrar�rrur�r�r�r�r�r��objectr�r4r4r4r5�s�                              %