a
    lcz                     @   s|  d Z ddlZddlZddlZddlZddlm  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 ddlm Z  ddlm!Z! ddlm"Z" g Z#erzej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1iZ2n~erej$ej%ej(ej)ej*ej+ej3ej-ej,ej-ej&ej4ej5ej'iZ2n:erej$ej%ej(ej)ej*ej+ej,ej-ej&ej4ej5ej'iZ2ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMiZNeO ZPejQZQeRedZSeRedZTeRedZUeRedZVeWdddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4ZXed5g d6ZYed7g d8ZZed9g d:Z[e[Z\ed;g d<Z]ed=d>Z^ed?d@Z_er2edAg dBZ`nedAg dCZ`dDdE ZadFdG ZbdHdI ZceSrhdJd ZdndKd ZddLed_edMdN ZfeserdOdP ZgndQdP ZgdRdS ZherdTdU ZinerdVdU ZidsdWdXZjejkZkejlZlejmZmejnZndYdZ Zod[d\ Zper
d]d^ Zqd_d` Zrdadb Zsdcdd Ztededf Zudgdh Zves:erDdidj ZwnejwZwdkdl Zxdmdn Zyejzdodp Z{G dqdr dre|Z}dS )tz5FreeBSD, OpenBSD and NetBSD platforms implementation.    N)defaultdict)
namedtuple   )_common)_psposix)_psutil_bsd)_psutil_posix)FREEBSD)NETBSD)OPENBSD)AccessDenied)NoSuchProcess)ZombieProcess)	conn_tmap)conn_to_ntuple)memoize)memoize_when_activated)usage_percent)FileNotFoundError)PermissionError)ProcessLookupError)which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pmem)rE   rF   textdatastack	pcputimes)rZ   r\   children_userchildren_systempmmap_grouped*path rss, private, ref_count, shadow_count	pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskio)
read_countwrite_count
read_byteswrite_bytesZ	read_timeZ
write_timeZ	busy_time)rk   rl   rm   rn   c                  C   s   t  } | \}}}}}}}}trtddx}	|	D ]b}
|
drTt|
 d d }q0|
drtt|
 d d }q0|
dr0t|
 d d }q0W d   n1 s0    Y  || | }|| | }t|| |dd	}t|||||||||||S )
z&System virtual memory as a namedtuple.z/proc/meminforbs   Buffers:r   i   s
   MemShared:s   Cached:NZround_)	cextZvirtual_memr
   open
startswithintsplitr   rL   )ZmemrM   rQ   rR   rS   rW   rU   rT   rV   flineZavailrP   rO    rx   I/var/www/html/django/DPS/env/lib/python3.9/site-packages/psutil/_psbsd.pyvirtual_memory   s"    


4rz   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   rp   )rq   Zswap_memr   r   Zsswap)rM   rP   rQ   sinZsoutrO   rx   rx   ry   swap_memory   s    r|   c                  C   s"   t  \} }}}}t| ||||S )z+Return system per-CPU times as a namedtuple)rq   	cpu_timesrX   rY   rx   rx   ry   r}      s    r}   c                  C   s>   g } t  D ],}|\}}}}}t|||||}| | q| S )'Return system CPU times as a namedtuple)rq   r   rX   append)retZcpu_trZ   r[   r\   r]   r^   itemrx   rx   ry   r      s    c                   C   s.   t  dkrt gS tjr tddt_t gS )r~   r   &supported only starting from FreeBSD 8T)cpu_count_logicalr}   r   
__called__NotImplementedErrorrx   rx   rx   ry   r      s    
Fc                   C   s   t  S )z0Return the number of logical CPUs in the system.)rq   r   rx   rx   rx   ry   r      s    r   c                   C   s   t  dkrdS d S )Nr   )r   rx   rx   rx   ry   cpu_count_cores   s    r   c                  C   s   d} t  }|durj|d}|dkrj|d|d  }t|}zt|dpRd} W |  n
|  0 | s|t dkr|dS | S )z-Return the number of CPU cores in the system.Nz	</groups>r#   zgroup/children/group/cpur   )	rq   Zcpu_topologyrfindETZ
fromstringlenfindallclearr   )r   sindexrootrx   rx   ry   r     s    


c            	      C   s   t rt \} }}}}ntrt \} }}}}}}tdd4}|D ]}|drBt| d }qBW d   q1 sv0    Y  ntrt \} }}}}}}t	
| |||S )z*Return various CPU stats as a named tuple.z
/proc/statro   s   intrr   N)r	   rq   	cpu_statsr
   rr   rs   rt   ru   r   r   Z	scpustats)	ZctxswZintrsZ
soft_intrsZsyscallsZtrapsZfaultsZforksrv   rw   rx   rx   ry   r     s    
2r   c               
   C   s   g } t  }t|D ]}zt|\}}W n ty>   Y qY n0 |rz t|dd dd }W n ttfy~   d}Y n0 z t|dd dd }W n ttfy   d}Y n0 | 	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   rangerq   cpu_freqr   rt   ru   
IndexError
ValueErrorr   r   scpufreq)r   num_cpuscpucurrentZavailable_freqZmin_freqZmax_freqrx   rx   ry   r   <  s$    
 
 
r   c                  C   s   t t } t| ddgS )Ng        )floatrq   r   r   r   )currrx   rx   ry   r   T  s    c              	   C   sL   g }t  }|D ]6}|\}}}}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
    N)rq   disk_partitionsr   Z	sdiskpartr   )allretlistZ
partitions	partitionZdeviceZ
mountpointZfstypeoptsZmaxfileZmaxpathntuplerx   rx   ry   r   ^  s    r   c            
      C   s   t   } i }| D ]}z&t|}t|}t|\}}W n2 tyn } z|jtjkrZ W Y d}~qd}~0 0 t	t
drt
|}d|}d|v }	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   rK   ZmtuflagsZduplexspeederrZoutput_flagsZisuprx   rx   ry   net_if_stats{  s$    






r   c              
   C   s  t rrg }t D ]^}zt|| }W n ttfy>   Y qY q0 |D ]&}t|}|| |tj	|  qDq|S | tj
vrtd| ddd t
D f t
|  \}}t }trtd}nt }|D ]F}|\}	}
}}}}}|
|v r||v rt|	|
||||t|}|| qt|S )z System-wide network connections.+invalid %r kind argument; choose between %s, c                 S   s   g | ]}t |qS rx   repr.0xrx   rx   ry   
<listcomp>      z#net_connections.<locals>.<listcomp>r   )r   pidsProcessconnectionsr   r   listr   r   Zsconnr   r   r   setr
   rq   net_connectionsr   TCP_STATUSESadd)kindr   pidZconsconnfamiliestypesrawlistr   fdfamtypeladdrraddrr4   ntrx   rx   ry   r     s:    



r   c                  C   sb   zt  \} }}W n ty&   Y dS 0 |dk}|r<tj}n|dkrLtj}n|d }t| ||S )zReturn battery info.Nr   r   <   )rq   sensors_batteryr   r   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rO   ZminsleftZpower_pluggedZsecsleftrx   rx   ry   r     s    r   c               	   C   st   t t} t }t|D ]X}z@t|\}}|dkr6d}d| }| d t|||| W q t	yl   Y q0 q| S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore %sZcoretemp)
r   r   r   r   rq   Zsensors_cpu_temperaturer   r   Zshwtempr   )r   r   r   r   highrK   rx   rx   ry   sensors_temperatures  s    r   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)rq   	boot_timerx   rx   rx   ry   r     s    r   c            	      C   sf   g } t  }|D ]P}|\}}}}}|dkr6ts2J d}|dkr@qt||pLd|||}| | q| S )z:Return currently connected users as a list of namedtuples.r   N~)rq   usersr   r   Zsuserr   )	r   r   r   rZ   ttyhostnameZtstampr   r   rx   rx   ry   r     s    r   c                   C   s@   zt d  W n& ty$   Y dS  ty6   Y dS 0 dS d S )Nr   FT)r   rK   r   r   rx   rx   rx   ry   _pid_0_exists  s    r   c                  C   s*   t  } tr&d| vr&t r&| dd | S )z7Returns a list of PIDs currently running on the system.r   )rq   r   r   r   insert)r   rx   rx   ry   r   	  s    r   c                 C   s    t | }|s| t v S dS dS )zReturn True if pid exists.TN)r   
pid_existsr   )r   existsrx   rx   ry   r     s    

r   c                 C   s8   zt | td  }|t jkW S  ty2   Y dS 0 d S )Nr4   F)rq   proc_oneshot_infokinfo_proc_mapSZOMB	Exception)r   strx   rx   ry   	is_zombie!  s
    r   c                    s   t   fdd}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                    s   z | g|R i |W S  t yV   t| jrDt| j| j| jnt| j| jY nX tyt   t| j| jY n: t	y   | jdkrdt
 v rt| j| jn  Y n0 d S Nr   )r   r   r   r   _name_ppidr   r   r   r   r   )selfargskwargsfunrx   ry   wrapper-  s    


z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rx   r   ry   wrap_exceptions)  s    r   c              	   c   sp   z
dV  W n` t tfyL   t| jr:t| j| j| jnt| j| jY n  tyj   t	| j| jY n0 dS )z8Same as above, for routines relying on reading /proc fs.N)
r   r   r   r   r   r   r   r   r   r   )instrx   rx   ry   wrap_exceptions_procfsB  s    

r   c                   @   s  e Zd ZdZg d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dLd,d-ZedMd/d0Zed1d2 Zed3d4 Z ed5d6 Z!ed7d8 Z"ed9d: Z#e$d;d<Z%e$d;d=Z&d>d? Z'e(red@dA Z)ne'Z)e*redBdC Z+ne'Z+eredDdE Z,edFdG Z-edHdI Z.edNdJdKZ/d.S )Or   z1Wrapper class around underlying C implementation.)r   r   r   _cachec                 C   s   || _ d | _d | _d S N)r   r   r   )r   r   rx   rx   ry   __init__X  s    zProcess.__init__c                 C   s   t | j dS )z+Raise NSP if the process disappeared on us.N)rq   	proc_namer   r   rx   rx   ry   _assert_alive]  s    zProcess._assert_alivec                 C   s$   t | j}t|ttks J |S )z;Retrieves multiple process info in one shot as a raw tuple.)rq   r   r   r   r   r   r   rx   rx   ry   oneshotc  s    zProcess.oneshotc                 C   s   | j |  d S r   )r   Zcache_activater   rx   rx   ry   oneshot_enterk  s    zProcess.oneshot_enterc                 C   s   | j |  d S r   )r   Zcache_deactivater   rx   rx   ry   oneshot_exitn  s    zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )NrK   )r   r   rq   r   r   )r   rK   rx   rx   ry   rK   q  s    zProcess.namec                 C   s   t r| jdkrdS t| jS trj| jdkr0dS t|   td| j W  d    S 1 s^0    Y  n |  }|rt	|d pdS dS d S )Nr    z/proc/%s/exe)
r	   r   rq   Zproc_exer
   r   osreadlinkcmdliner   )r   r   rx   rx   ry   exev  s    


0zProcess.exec              
   C   s   t r| jdkrg S trzt| jW S  ty } zh|jtjkrt| jr^t	| j| j
| jqt| js|t| j| j
| jqg W  Y d }~S n W Y d }~qd }~0 0 nt| jS d S r   )r   r   r
   rq   Zproc_cmdliner   r   EINVALr   r   r   r   r   r   )r   r   rx   rx   ry   r     s    

zProcess.cmdlinec                 C   s   t | jS r   )rq   Zproc_environr   r   rx   rx   ry   environ  s    zProcess.environc                 C   s<   |   td  }t }z
|| W S  ty6   Y d S 0 d S )Nr;   )r   r   r   Zget_terminal_mapKeyError)r   Ztty_nrZtmaprx   rx   ry   terminal  s    
zProcess.terminalc                 C   s   |   td  | _| jS )Nr3   )r   r   r   r   rx   rx   ry   r3     s    zProcess.ppidc                 C   s.   |   }t|td  |td  |td  S )Nr5   r6   r7   )r   r   Zpuidsr   r   Zrawtuplerx   rx   ry   uids  s    


zProcess.uidsc                 C   s.   |   }t|td  |td  |td  S )Nr8   r9   r:   )r   r   Zpgidsr   r  rx   rx   ry   gids  s    


zProcess.gidsc                 C   s8   |   }t|td  |td  |td  |td  S )NrA   rB   rC   rD   )r   r   rc   r   r  rx   rx   ry   r}     s    



zProcess.cpu_timesc                 C   s   |   td  S )NrJ   r   r   r   rx   rx   ry   cpu_num  s    zProcess.cpu_numc                 C   s@   |   }t|td  |td  |td  |td  |td  S )NrE   rF   rG   rH   rI   )r   r_   r   r  rx   rx   ry   memory_info  s    




zProcess.memory_infoc                 C   s   |   td  S )Nr<   r  r   rx   rx   ry   r<     s    zProcess.create_timec                 C   s    t rt| jS t|  S d S r   )HAS_PROC_NUM_THREADSrq   r   r   r   threadsr   rx   rx   ry   num_threads  s    zProcess.num_threadsc                 C   s$   |   }t|td  |td  S )Nr=   r>   )r   r   Zpctxswr   r  rx   rx   ry   num_ctx_switches  s
    

zProcess.num_ctx_switchesc                 C   sH   t | j}g }|D ]"\}}}t|||}|| qtrD|   |S r   )rq   Zproc_threadsr   r   Zpthreadr   r   r   )r   r   r   	thread_idutimeZstimer   rx   rx   ry   r
    s    zProcess.threadsinetc              	   C   s  |t vr(td|ddd t D f trt | \}}g }t| j}|D ]R}|\}}}	}
}}}|| jkspJ ||v rL|	|v rLt|||	|
||t}|	| qL| 
  t|S t | \}}t| j||}g }|D ]2}|\}}}	}
}}t|||	|
||t}|	| qtr| 
  |S )Nr   r   c                 S   s   g | ]}t |qS rx   r   r   rx   rx   ry   r     r   z'Process.connections.<locals>.<listcomp>)r   r   r   r
   rq   r   r   r   r   r   r   r   Zproc_connectionsr   )r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r   rx   rx   ry   r     s<    zProcess.connectionsNc                 C   s   t | j|| jS r   )r   Zwait_pidr   r   )r   timeoutrx   rx   ry   wait%  s    zProcess.waitc                 C   s   t | jS r   )r   getpriorityr   r   rx   rx   ry   nice_get)  s    zProcess.nice_getc                 C   s   t | j|S r   )r   setpriorityr   )r   valuerx   rx   ry   nice_set-  s    zProcess.nice_setc                 C   s   |   td  }t|dS )Nr4   ?)r   r   PROC_STATUSESget)r   coderx   rx   ry   r4   1  s    zProcess.statusc                 C   s(   |   }t|td  |td  ddS )Nr?   r@   r   )r   r   Zpior   r  rx   rx   ry   io_counters7  s    

zProcess.io_countersc                 C   s>   t r| jdkrdS tstr*t| jp(dS ttr4dnddS )z)Return process current working directory.r   Nr   r   )r   r   r
   HAS_PROC_OPEN_FILESrq   Zproc_cwdr   r	   r   rx   rx   ry   cwd@  s    zProcess.cwdmmaprg   ri   c                 C   s   t d S r   )r   r   rx   rx   ry   _not_implementedU  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 rx   )r   Z	popenfile)r   pathr   rx   rx   ry   r   _  r   z&Process.open_files.<locals>.<listcomp>)rq   r   r   )r   r   rx   rx   ry   
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.)rq   r   r   r
   r   r   rx   rx   ry   num_fdsf  s    zProcess.num_fdsc                 C   s   t | jS r   )rq   Zproc_cpu_affinity_getr   r   rx   rx   ry   cpu_affinity_gett  s    zProcess.cpu_affinity_getc              
   C   s   t ttt }|D ]}||vrtd||f qzt| j| W nZ ty } zB|j	t	j
t	jfv r|D ]}||vrltd||f ql W Y d }~n
d }~0 0 d S )Nz#invalid CPU #%i (choose between %s))tupler   r   r   r   rq   Zproc_cpu_affinity_setr   r   r   r   ZEDEADLK)r   ZcpusZallcpusr   r   rx   rx   ry   cpu_affinity_setx  s$    zProcess.cpu_affinity_setc                 C   s   t | jS r   )rq   Zproc_memory_mapsr   r   rx   rx   ry   memory_maps  s    zProcess.memory_mapsc                 C   sP   |d u rt | j|S t|dkr2tdt| |\}}t | j|||S d S )Nr   z4second argument must be a (soft, hard) tuple, got %s)rq   Zproc_getrlimitr   r   r   r   Zproc_setrlimit)r   resourceZlimitsZsofthardrx   rx   ry   rlimit  s    zProcess.rlimit)r  )N)N)0__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   rK   r   r   r   r  r3   r  r  r}   r	   r  r  Zmemory_full_infor<   r  r  r
  r   r  r  r  r4   r  r  r   Znt_mmap_groupedZnt_mmap_extr  r  r!  HAS_PROC_NUM_FDSr"  r#  r%  r&  r)  rx   rx   rx   ry   r   S  s   










	



!







r   )F)~r-  
contextlibr   r   r   Zxml.etree.ElementTreeetreeZElementTreer   collectionsr   r   r   r   r   r   rq   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Z_compatr   r   r   r   Z__extra__all__ZSIDLZSTATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDr   ZSTATUS_ZOMBIEZ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   rL   rX   r_   Zpfullmemrc   rf   rh   rj   rz   r|   r}   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   objectr   rx   rx   rx   ry   <module>   s<  	




#	
	



(




