U
    ;g|                     @   s  d Z ddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ dd	l
mZ dd
l
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ g ZerPejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+iZ,n~erejejej"ej#ej$ej%ej-ej'ej&ej'ej ej.ej/ej!iZ,n:erejejej"ej#ej$ej%ej&ej'ej ej.ej/ej!iZ,ej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGiZHeI ZJejKZKeLedZMeLedZNeLedZOeLedZPeQdddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2ZRed3d4d5d6d7d8d9d:d;d<d=d>gZSed?d@dAdBdCdDgZTedEdFdGdHdIdJgZUeUZVedKd@dBdLdMgZWedNdOZXedPdQZYer4edRdSdTdUdVdWdXdYgZZnedRdSdTdUdVgZZdZd[ Z[d\d] Z\d^d_ Z]eMrnd`d Z^ndad Z^dbe^__dcdd Z`eserdedf Zandgdf Zadhdi Zberdjdk Zcnerdldk ZcddmdnZdejeZeejfZfejgZgejhZhdodp Zidqdr Zjerdsdt Zkdudv Zldwdx Zmdydz Zned{d| Zod}d~ ZperDdd ZqnerTdd ZqnejqZqdd Zrdd Zsejtdd ZuG dd dZvdS )z5FreeBSD, OpenBSD and NetBSD platforms implementation.    N)defaultdict)
namedtuple)ElementTree   )_common)_psposix)_psutil_bsd)_psutil_posix)FREEBSD)NETBSD)OPENBSD)AccessDenied)NoSuchProcess)ZombieProcess)	conn_tmap)conn_to_ntuple)debug)memoize)memoize_when_activated)usage_percentper_cpu_timesproc_num_threadsproc_open_filesproc_num_fds                     	   
                                             )ppidstatusreal_uideffective_uid	saved_uidreal_gideffective_gid	saved_gidttynrcreate_timectx_switches_volctx_switches_unvolread_io_countwrite_io_count	user_timesys_timech_user_timech_sys_timerssvmsmemtextmemdatamemstackcpunumnamesvmemtotal	availablepercentusedfreeactiveinactivebufferscachedsharedwired	scputimesusernicesystemidleirqpmemrC   rD   textdatastack	pcputimeschildren_userchildren_systempmmap_grouped*path rss, private, ref_count, shadow_count	pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskioZ
read_countZwrite_count
read_byteswrite_bytesZ	read_timeZ
write_timeZ	busy_timec                  C   s   t  } tr| \}}}}}}tddN}|D ]B}|drPt| d d }	q,|dr,t| d d }
q,W 5 Q R X || }|| }n,| \}}}}}}}	}
|| | }|| | }t|| |dd}t||||||||	||
|S )Nz/proc/meminforbs   Buffers:r   i   s
   MemShared:Zround_)	cextZvirtual_memr   open
startswithintsplitr   rJ   )ZmemrK   rO   rP   rQ   rU   rS   flinerR   rT   rN   ZavailrM    rs   M/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/psutil/_psbsd.pyvirtual_memory   s8    

 
ru   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   rk   )rl   Zswap_memr   r   Zsswap)rK   rN   rO   sinZsoutrM   rs   rs   rt   swap_memory   s    rw   c                  C   s"   t  \} }}}}t| ||||S )z,Return system per-CPU times as a namedtuple.)rl   	cpu_timesrV   )rW   rX   rY   rZ   r[   rs   rs   rt   rx      s    rx   c                  C   s>   g } t  D ],}|\}}}}}t|||||}| | q| S )(Return system CPU times as a namedtuple.)rl   r   rV   append)retZcpu_trW   rX   rY   rZ   r[   itemrs   rs   rt   r      s    c                  C   s2   t  dkrt gS tjr$d} t| dt_t gS )ry   r   &supported only starting from FreeBSD 8T)cpu_count_logicalrx   r   
__called__NotImplementedError)msgrs   rs   rt   r     s    
Fc                   C   s   t  S )z0Return the number of logical CPUs in the system.)rl   r~   rs   rs   rs   rt   r~     s    r~   c                   C   s   t  dkrdS d S )Nr   )r~   rs   rs   rs   rt   cpu_count_cores  s    r   c                  C   sx   d} t  }|dk	rb|d}|dkrb|d|d  }t|}zt|dpRd} W 5 |  X | stt dkrtdS | S )z-Return the number of CPU cores in the system.Nz	</groups>r!   zgroup/children/group/cpur   )	rl   Zcpu_topologyrfindr   
fromstringclearlenfindallr~   )r{   sindexrootrs   rs   rt   r      s    



c            	   	   C   s   t rt \} }}}}nptrnt \} }}}}}}tdd*}|D ]}|drBt| d }qBW 5 Q R X ntrt \} }}}}}}t	
| |||S )z*Return various CPU stats as a named tuple.z
/proc/statrj   s   intrr   )r
   rl   	cpu_statsr   rm   rn   ro   rp   r   r   Z	scpustats)	ZctxswZintrsZ
soft_intrsZsyscallsZ_trapsZ_faultsZ_forksrq   rr   rs   rs   rt   r   ;  s    
r   c               
   C   s   g } t  }t|D ]}zt|\}}W n tk
r@   Y qY nX |rz t|dd dd }W n ttfk
r   d}Y nX z t|dd dd }W n ttfk
r   d}Y nX | 	t
||| q| S )zReturn frequency metrics for CPUs. As of Dec 2018 only
        CPU 0 appears to be supported by FreeBSD and all other cores
        match the frequency of CPU 0.
         r   /r   N)r~   rangerl   cpu_freqr   ro   rp   
IndexError
ValueErrorrz   r   scpufreq)r{   num_cpuscpucurrentZavailable_freqZmin_freqZmax_freqrs   rs   rt   r   ]  s$    
 
 
r   c                  C   s   t t } t| ddgS )Ng        )floatrl   r   r   r   )currrs   rs   rt   r   w  s    c           	      C   s@   g }t  }|D ]*}|\}}}}t||||}|| q|S )zReturn mounted disk partitions as a list of namedtuples.
    'all' argument is ignored, see:
    https://github.com/giampaolo/psutil/issues/906.
    )rl   disk_partitionsr   Z	sdiskpartrz   )	allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsntuplers   rs   rt   r     s    r   c            
      C   s   t   } i }| D ]}z&t|}t|}t|\}}W n0 tk
rl } z|jtjkr\ W 5 d}~X Y qX t	t
drt
|}d|}d|k}	t
|	||||||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).N	NicDuplex,running)net_io_counterskeys
cext_posixZ
net_if_mtuZnet_if_flagsZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrr   r   joinZ	snicstats)
namesr{   rI   ZmtuflagsZduplexspeederrZoutput_flagsZisuprs   rs   rt   net_if_stats  s,    





    
r   c              
   C   s   t |  \}}t }tr&td||}ntr8td| }nt||}|D ]6}|\}}}}	}
}}t||||	|
|t|}|| qHt	|S )z System-wide network connections.r   )
r   setr   rl   net_connectionsr   r   TCP_STATUSESaddlist)kindfamiliestypesr{   rawlistr|   fdfamtypeladdrraddrr2   pidntrs   rs   rt   r     s*           r   c                  C   sd   zt  \} }}W n tk
r(   Y dS X |dk}|r>tj}n|dkrNtj}n|d }t| ||S )zReturn battery info.Nr   r   <   )rl   sensors_batteryr   r   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rM   ZminsleftZpower_pluggedZsecsleftrs   rs   rt   r     s    r   c               	   C   sx   t t} t }t|D ]\}zBt|\}}|dkr6d}d| }| d t|||| W q t	k
rp   Y qX q| S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore Zcoretemp)
r   r   r~   r   rl   Zsensors_cpu_temperaturerz   r   Zshwtempr   )r{   r   r   r   highrI   rs   rs   rt   sensors_temperatures  s    
r   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)rl   	boot_timers   rs   rs   rt   r     s    r   c            	      C   sf   g } t  }|D ]P}|\}}}}}|dkr6ts2td}|dkr@qt||pLd|||}| | q| S )z:Return currently connected users as a list of namedtuples.r   N~)rl   usersr   AssertionErrorr   Zsuserrz   )	r   r   r|   rW   ttyhostnameZtstampr   r   rs   rs   rt   r     s    r   c                   C   sD   zt d  W n* tk
r&   Y dS  tk
r:   Y dS X dS d S )Nr   FT)ProcessrI   r   r   rs   rs   rs   rt   _pid_0_exists  s    r   c                  C   s*   t  } tr&d| kr&t r&| dd | S )z7Returns a list of PIDs currently running on the system.r   )rl   pidsr   r   insert)r{   rs   rs   rt   r     s    r   c                 C   s    t | }|s| t kS dS d S )NTr   
pid_existsr   r   existsrs   rs   rt   r   )  s    

r   c                 C   s    t | }|sdS | t kS d S )NFr   r   rs   rs   rt   r   4  s    
c                 C   s@   z$t | td  }t|tjkW S  tk
r:   Y dS X d S )Nr2   F)rl   proc_oneshot_infokinfo_proc_mapPROC_STATUSESgetr   STATUS_ZOMBIEr   )r   strs   rs   rt   	is_zombieB  s
    r   c                    s   t   fdd}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c              
      s   | j | j| j  }}}z | f||W S  tk
rl } z&t|rPt||||t|||W 5 d }~X Y nn tk
r } zt|||W 5 d }~X Y nB t	k
r } z$|dkrdt
 krt||| W 5 d }~X Y nX d S )Nr   )r   _ppid_nameProcessLookupErrorr   r   r   PermissionErrorr   r   r   )selfargskwargsr   r1   rI   r   funrs   rt   wrapperO  s    z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rs   r   rt   wrap_exceptionsJ  s    r   c              
   c   s   | j | j| j  }}}z
dV  W nx ttfk
rl } z*t| j rPt||||nt|||W 5 d}~X Y n. tk
r } zt	|||W 5 d}~X Y nX dS )z8Same as above, for routines relying on reading /proc fs.N)
r   r   r   r   FileNotFoundErrorr   r   r   r   r   )instr   rI   r1   r   rs   rs   rt   wrap_exceptions_procfsb  s    

r   c                   @   s  e Zd ZdZddddgZdd Zdd	 Zeed
d Z	dd Z
dd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zed d! Zered"d# Zed$d% ZeZed&d' Zed(d) Zed*d+ Zed,d- ZedOd/d0ZedPd2d3Zed4d5 Zed6d7 Z ed8d9 Z!ed:d; Z"ed<d= Z#e$d>d?Z%e$d>d@Z&dAdB Z'e(redCdD Z)ne'Z)e*redEdF Z+ne'Z+eredGdH Z,edIdJ Z-edKdL Z.edQdMdNZ/d1S )Rr   z1Wrapper class around underlying C implementation._cacher   r   r   c                 C   s   || _ d | _d | _d S N)r   r   r   )r   r   rs   rs   rt   __init__y  s    zProcess.__init__c                 C   s   t | j dS )z+Raise NSP if the process disappeared on us.N)rl   	proc_namer   r   rs   rs   rt   _assert_alive~  s    zProcess._assert_alivec                 C   s$   t | j}t|ttks t|S )z;Retrieves multiple process info in one shot as a raw tuple.)rl   r   r   r   r   r   r   r{   rs   rs   rt   oneshot  s    zProcess.oneshotc                 C   s   | j |  d S r   )r   Zcache_activater   rs   rs   rt   oneshot_enter  s    zProcess.oneshot_enterc                 C   s   | j |  d S r   )r   Zcache_deactivater   rs   rs   rt   oneshot_exit  s    zProcess.oneshot_exitc                 C   s(   |   td  }|d k	r|S t| jS )NrI   )r   r   rl   r   r   )r   rI   rs   rs   rt   rI     s    zProcess.namec              
   C   s   t r| jdkrdS t| jS trb| jdkr0dS t| " td| j dW  5 Q R  S Q R X n*dd l}| 	 }|r|
|d pdS dS d S )Nr    z/proc/z/exe)r
   r   rl   Zproc_exer   r   osreadlinkshutilcmdlinewhich)r   r   r   rs   rs   rt   exe  s    


(zProcess.exec              
   C   s   t r| jdkrg S trzt| jW S  tk
r } zt|jtjkr| j| j| j	  }}}t
| jrpt||||t| jst||||td|d g  W Y S  W 5 d }~X Y qX nt| jS d S )Nr   z	ignoring z and returning an empty list)r   r   r   rl   Zproc_cmdliner   r   EINVALr   r   r   r   r   r   r   )r   r   r   rI   r1   rs   rs   rt   r     s     

zProcess.cmdlinec                 C   s   t | jS r   )rl   Zproc_environr   r   rs   rs   rt   environ  s    zProcess.environc                 C   s>   |   td  }t }z
|| W S  tk
r8   Y d S X d S )Nr9   )r   r   r   Zget_terminal_mapKeyError)r   Ztty_nrZtmaprs   rs   rt   terminal  s    
zProcess.terminalc                 C   s   |   td  | _| jS )Nr1   )r   r   r   r   rs   rs   rt   r1     s    zProcess.ppidc                 C   s.   |   }t|td  |td  |td  S )Nr3   r4   r5   )r   r   Zpuidsr   r   Zrawtuplers   rs   rt   uids  s    


zProcess.uidsc                 C   s.   |   }t|td  |td  |td  S )Nr6   r7   r8   )r   r   Zpgidsr   r   rs   rs   rt   gids  s    


zProcess.gidsc                 C   s8   |   }t|td  |td  |td  |td  S )Nr?   r@   rA   rB   )r   r   r`   r   r   rs   rs   rt   rx     s    



zProcess.cpu_timesc                 C   s   |   td  S )NrH   r   r   r   rs   rs   rt   cpu_num  s    zProcess.cpu_numc                 C   s@   |   }t|td  |td  |td  |td  |td  S )NrC   rD   rE   rF   rG   )r   r\   r   r   rs   rs   rt   memory_info   s    




zProcess.memory_infoc                 C   s   |   td  S )Nr:   r   r   rs   rs   rt   r:     s    zProcess.create_timec                 C   s    t rt| jS t|  S d S r   )HAS_PROC_NUM_THREADSrl   r   r   r   threadsr   rs   rs   rt   num_threads  s    zProcess.num_threadsc                 C   s$   |   }t|td  |td  S )Nr;   r<   )r   r   Zpctxswr   r   rs   rs   rt   num_ctx_switches  s
    

zProcess.num_ctx_switchesc                 C   sH   t | j}g }|D ]"\}}}t|||}|| qtrD|   |S r   )rl   Zproc_threadsr   r   Zpthreadrz   r   r   )r   r   r   Z	thread_idutimeZstimer   rs   rs   rt   r  !  s    zProcess.threadsinetc              	   C   s   t | \}}g }tr$t| j|}n&tr:t| j||}nt| j||}|D ]P}|d d \}}}	}
}}tr||ksN|	|krqNt|||	|
||t	}|
| qN|   |S )Nr   )r   r   rl   r   r   r   Zproc_net_connectionsr
   r   r   rz   r   )r   r   r   r   r{   r   r|   r   r   r   r   r   r2   r   rs   rs   rt   r   -  s0          zProcess.net_connectionsNc                 C   s   t | j|| jS r   )r   Zwait_pidr   r   )r   timeoutrs   rs   rt   waitF  s    zProcess.waitc                 C   s   t | jS r   )r   getpriorityr   r   rs   rs   rt   nice_getJ  s    zProcess.nice_getc                 C   s   t | j|S r   )r   setpriorityr   )r   valuers   rs   rt   nice_setN  s    zProcess.nice_setc                 C   s   |   td  }t|dS )Nr2   ?)r   r   r   r   )r   coders   rs   rt   r2   R  s    zProcess.statusc                 C   s(   |   }t|td  |td  ddS )Nr=   r>   r   )r   r   Zpior   r   rs   rs   rt   io_countersX  s    

zProcess.io_countersc                 C   s:   t r| jdkrdS tstr&t| jS ttr0dnddS )z)Return process current working directory.r   r   r}   N)r   r   r   HAS_PROC_OPEN_FILESrl   Zproc_cwdr   r
   r   rs   rs   rt   cwdb  s    
zProcess.cwdmmaprd   rf   c                 C   s   t d S r   )r   r   rs   rs   rt   _not_implementedy  s    zProcess._not_implementedc                 C   s   t | j}dd |D S )z8Return files opened by process as a list of namedtuples.c                 S   s   g | ]\}}t ||qS rs   )r   Z	popenfile).0pathr   rs   rs   rt   
<listcomp>  s     z&Process.open_files.<locals>.<listcomp>)rl   r   r   )r   r   rs   rs   rt   
open_files  s    zProcess.open_filesc                 C   s   t | j}tr|   |S )z=Return the number of file descriptors opened by this process.)rl   r   r   r   r   r   rs   rs   rt   num_fds  s    zProcess.num_fdsc                 C   s   t | jS r   )rl   Zproc_cpu_affinity_getr   r   rs   rs   rt   cpu_affinity_get  s    zProcess.cpu_affinity_getc              
   C   s   t ttt }|D ]&}||krd|d| d}t|qzt| j| W nd tk
r } zF|j	t	j
t	jhkr|D ](}||krxd|d| d}t||qx W 5 d }~X Y nX d S )Nzinvalid CPU z (choose between ))r   r   r   r   r   rl   Zproc_cpu_affinity_setr   r   r   r   ZEDEADLK)r   ZcpusZallcpusr   r   r   rs   rs   rt   cpu_affinity_set  s    
zProcess.cpu_affinity_setc                 C   s   t | jS r   )rl   Zproc_memory_mapsr   r   rs   rs   rt   memory_maps  s    zProcess.memory_mapsc                 C   sR   |d krt | j|S t|dkr4d|}t||\}}t | j|||S d S )Nr   z2second argument must be a (soft, hard) tuple, got )rl   Zproc_getrlimitr   r   r   Zproc_setrlimit)r   resourceZlimitsr   Zsofthardrs   rs   rt   rlimit  s    zProcess.rlimit)r  )N)N)0__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   rI   r   r   r   r   r1   r   r   rx   r
   r   r  Zmemory_full_infor:   r  r  r  r   r	  r  r  r2   r  r  r   Znt_mmap_groupedZnt_mmap_extr  r  r  HAS_PROC_NUM_FDSr  r  r  r  r!  rs   rs   rs   rt   r   t  s   








	










	
  


r   )F)wr%  
contextlibr   r   r   collectionsr   r   Z	xml.etreer   r   r   r   r   rl   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   Z__extra__all__ZSIDLZSTATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDZSZOMBr   ZSWAITZSTATUS_WAITINGZSLOCKZSTATUS_LOCKEDr   ZSDEADZSTATUS_WAKINGZSONPROCZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZTCPS_SYN_SENTZCONN_SYN_SENTZTCPS_SYN_RECEIVEDZCONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZTCPS_CLOSEDZ
CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZTCPS_LAST_ACKZCONN_LAST_ACKZTCPS_LISTENZCONN_LISTENZTCPS_CLOSINGZCONN_CLOSINGZPSUTIL_CONN_NONEZ	CONN_NONEr   ZgetpagesizePAGESIZEZAF_LINKr   ZHAS_PER_CPU_TIMESr  r  r'  dictr   rJ   rV   r\   Zpfullmemr`   rc   re   rg   ru   rw   rx   r   r   r~   r   r   r   r   
disk_usageZdisk_io_countersr   Znet_if_addrsr   r   r   r   r   r   r   r   r   r   r   contextmanagerr   r   rs   rs   rs   rt   <module>   s         	             
            



$ 
      
     
/


 





	

