o
    h*A                     @   s  d 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 g Ze ZejZ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'ej(e
j)ej*e
j+ej,e
j-ej.e
j/ej0e
j1ej2iZ3e
j4ej5e
j6ej7e
j8ej9e
j:ej;e
j<ej=iZ>e?ddddddddddddZ@e?dddddddddZAedg dZBed g d!ZCed"g d#ZDed$eDjEd% ZFd&d' ZGd(d) ZHd*d+ ZId,d- ZJd.d/ ZKd0d1 ZLd2d3 ZMe
N rd4d5 ZOejPZPe
jQZQdOd7d8ZRd9d: ZSe
jTZTejUZUdPd<d=ZVd>d? ZWd@dA ZXzeX ZYW n eZyY Z[ zedBe[ dZYW Y dZ[[[ndZ[[[ww dCdD Z\dEdF Z]dGdH Z^ej_Z_dIdJ Z`dKdL ZaG dMdN dNZbdS )QzmacOS platform implementation.    N)
namedtuple   )_common)_psposix)_psutil_osx)_psutil_posix)AccessDenied)NoSuchProcess)ZombieProcess)	conn_tmap)conn_to_ntuple)debug)isfile_strict)memoize_when_activated)parse_environ_block)usage_percent                     	   
   )ppidruideuidsuidrgidegidsgidttynrctimestatusname)cpuutimecpustimerssvmspfaultspageins
numthreadsvolctxsw	scputimesusernicesystemidlesvmem)total	availablepercentusedfreeactiveinactivewiredpmem)r(   r)   r*   r+   pfullmem)ussc            	   	   C   sT   t  \} }}}}}|| }|| }||8 }t| | | dd}t| |||||||S )z&System virtual memory as a namedtuple.r   round_)cextvirtual_memr   r4   )	r5   r:   r;   r<   r9   speculativeavailr8   r7    rF   C/var/www/html/ai/venv/lib/python3.10/site-packages/psutil/_psosx.pyvirtual_memoryo   s   rH   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r@   )rB   swap_memr   r   sswap)r5   r8   r9   sinsoutr7   rF   rF   rG   swap_memory~   s   rM   c                  C   s   t  \} }}}t| |||S )z(Return system CPU times as a namedtuple.)rB   	cpu_timesr.   r/   rF   rF   rG   rN      s   rN   c                  C   s:   g } t  D ]}|\}}}}t||||}| | q| S )z)Return system CPU times as a named tuple.)rB   per_cpu_timesr.   append)retcpu_tr0   r1   r2   r3   itemrF   rF   rG   rO      s   rO   c                   C      t  S )z0Return the number of logical CPUs in the system.)rB   cpu_count_logicalrF   rF   rF   rG   rU         rU   c                   C   rT   )z-Return the number of CPU cores in the system.)rB   cpu_count_coresrF   rF   rF   rG   rW      rV   rW   c                  C   s"   t  \} }}}}t| |||S N)rB   	cpu_statsr   	scpustats)ctx_switches
interruptssoft_interruptssyscalls_trapsrF   rF   rG   rY      s
   rY   c                  C   s   t  \} }}t| ||gS )zReturn CPU frequency.
        On macOS per-cpu frequency is not supported.
        Also, the returned frequency never changes, see:
        https://arstechnica.com/civis/viewtopic.php?f=19&t=465002.
        )rB   cpu_freqr   scpufreq)currmin_max_rF   rF   rG   r`      s   r`   Fc           	      C   sj   g }t  }|D ]*}|\}}}}|dkrd}| s%tj|r$tj|s%qt||||}|| q|S )z8Return mounted disk partitions as a list of namedtuples.none )	rB   disk_partitionsospathisabsexistsr   	sdiskpartrP   )	allretlist
partitions	partitiondevice
mountpointfstypeoptsntuplerF   rF   rG   rg      s   rg   c                  C   sb   z	t  \} }}W n
 ty   Y dS w |dk}|rtj}n|dkr&tj}n|d }t| ||S )zReturn battery information.Nr   <   )rB   sensors_batteryNotImplementedErrorr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)r7   minsleftpower_pluggedsecsleftrF   rF   rG   rx      s   rx   inetc              	   C   sf   g }t  D ]+}z	t|| }W n	 ty   Y qw |r0|D ]}t||g }|tj|  qq|S )z System-wide network connections.)pidsProcessnet_connectionsr	   listrP   r   sconn)kindrQ   pidconscrF   rF   rG   r      s   
r   c            
      C   s   t   } i }| D ]M}zt|}t|}t|\}}W n ty7 } z|jtjkr- W Y d}~q	d}~ww t	t
drBt
|}d|}d|v }	t
|	||||||< q	|S )z)Get NIC stats (isup, duplex, speed, mtu).N	NicDuplex,running)net_io_counterskeys
cext_posix
net_if_mtunet_if_flagsnet_if_duplex_speedOSErrorerrnoENODEVhasattrr   r   join	snicstats)
namesrQ   r%   mtuflagsduplexspeederroutput_flagsisuprF   rF   rG   net_if_stats  s*   







r   c                   C   rT   )z:The system boot time expressed in seconds since the epoch.)rB   	boot_timerF   rF   rF   rG   r      rV   r   zignoring exception on import: c                 C   sN   t dkr| S t t  }|dkst|dk r| S td |dk r#| | S | | S )z!Account for system clock updates.r   r   z9system clock was updated; adjusting process create_time())INIT_BOOT_TIMEr   absr   )r#   diffrF   rF   rG   adjust_proc_create_time-  s   
r   c            	      C   s\   g } t  }|D ]#}|\}}}}}|dkrq|sqt||pd|p"d||}| | q| S )z:Return currently connected users as a list of namedtuples.~N)r   usersr   suserrP   )	rn   rawlistrS   r0   ttyhostnametstampr   ntrF   rF   rG   r   <  s   r   c                  C   sf   t  } d| vr1ztd  | dd W | S  ty!   Y | S  ty0   | dd Y | S w | S Nr   )rB   r   r   create_timeinsertr	   r   )lsrF   rF   rG   r   P  s   r   c                 C   s4   zt | td  }|t jkW S  ty   Y dS w )Nr$   F)rB   proc_kinfo_oneshotkinfo_proc_mapSZOMBr   )r   strF   rF   rG   	is_zombiec  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 | g|R i |W S  ty4 } zt|r*t||||t|||d }~w tyE } zt|||d }~ww rX   )	r   _ppid_nameProcessLookupErrorr   r
   r	   PermissionErrorr   )selfargskwargsr   r   r%   r   funrF   rG   wrapperp  s   z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rF   r   rG   wrap_exceptionsk  s   r   c                   @   sj  e Zd ZdZg dZdd Zee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dd  Zed!d" Zed#d$ Zed>d&d'Zed(d) Zed*d+ Zed,d- Zed?d/d0Zed1d2 Zed@d4d5Zed6d7 Zed8d9 Z ed:d; Z!ed<d= Z"d3S )Ar   z1Wrapper class around underlying C implementation.)_cacher   r   r   c                 C   s   || _ d | _d | _d S rX   )r   r   r   )r   r   rF   rF   rG   __init__  s   
zProcess.__init__c                 C   $   t | j}t|ttksJ |S rX   )rB   r   r   lenr   r   rQ   rF   rF   rG   _get_kinfo_proc     zProcess._get_kinfo_procc                 C   r   rX   )rB   proc_pidtaskinfo_oneshotr   r   pidtaskinfo_mapr   rF   rF   rG   _get_pidtaskinfo  r   zProcess._get_pidtaskinfoc                 C      | j |  | j|  d S rX   )r   cache_activater   r   rF   rF   rG   oneshot_enter     zProcess.oneshot_enterc                 C   r   rX   )r   cache_deactivater   r   rF   rF   rG   oneshot_exit  r   zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )Nr%   )r   r   rB   	proc_namer   )r   r%   rF   rF   rG   r%     s   zProcess.namec                 C      t | jS rX   )rB   proc_exer   r   rF   rF   rG   exe     zProcess.exec                 C   r   rX   )rB   proc_cmdliner   r   rF   rF   rG   cmdline  r   zProcess.cmdlinec                 C   s   t t| jS rX   )r   rB   proc_environr   r   rF   rF   rG   environ     zProcess.environc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   rF   rF   rG   r     s   zProcess.ppidc                 C   r   rX   )rB   proc_cwdr   r   rF   rF   rG   cwd  r   zProcess.cwdc                 C   .   |   }t|td  |td  |td  S )Nr   r   r   r   r   puidsr   r   rawtuplerF   rF   rG   uids     


zProcess.uidsc                 C   r   )Nr   r    r!   r   r   rF   rF   rG   gids  r   zProcess.gidsc                 C   s8   |   td  }t }z|| W S  ty   Y d S w )Nr"   )r   r   r   get_terminal_mapKeyError)r   tty_nrtmaprF   rF   rG   terminal  s   
zProcess.terminalc                 C   s6   |   }t|td  |td  |td  |td  S )Nr(   r)   r*   r+   )r   r=   r   r   rF   rF   rG   memory_info  s   



zProcess.memory_infoc                 C   s"   |   }t| j}t||f  S rX   )r   rB   proc_memory_ussr   r>   )r   	basic_memr?   rF   rF   rG   memory_full_info  s   zProcess.memory_full_infoc                 C   s(   |   }t|td  |td  ddS )Nr&   r'   g        )r   r   	pcputimesr   r   rF   rF   rG   rN     s   

zProcess.cpu_timesFc                 C   s    |   td  }|st|}|S )Nr#   )r   r   r   )r   	monotonicr#   rF   rF   rG   r     s   zProcess.create_timec                 C      |   td  }t|dS )Nr-   r   )r   r   r   pctxsw)r   volrF   rF   rG   num_ctx_switches  s   zProcess.num_ctx_switchesc                 C   s   |   td  S )Nr,   )r   r   r   rF   rF   rG   num_threads   r   zProcess.num_threadsc                 C   sN   | j dkrg S g }t| j }|D ]\}}t|r$t||}|| q|S r   )r   rB   proc_open_filesr   r   	popenfilerP   )r   filesr   ri   fdru   rF   rF   rG   
open_files  s   

zProcess.open_filesr   c              	   C   s\   t | \}}t| j||}g }|D ]}|\}}}	}
}}t|||	|
||t}|| q|S rX   )r   rB   proc_net_connectionsr   r   TCP_STATUSESrP   )r   r   familiestypesr   rQ   rS   r   famtypeladdrraddrr$   r   rF   rF   rG   r     s   zProcess.net_connectionsc                 C   s   | j dkrdS t| j S r   )r   rB   proc_num_fdsr   rF   rF   rG   num_fds  s   
zProcess.num_fdsNc                 C   s   t | j|| jS rX   )r   wait_pidr   r   )r   timeoutrF   rF   rG   wait#  s   zProcess.waitc                 C   r   rX   )r   getpriorityr   r   rF   rF   rG   nice_get'  r   zProcess.nice_getc                 C   s   t | j|S rX   )r   setpriorityr   )r   valuerF   rF   rG   nice_set+  s   zProcess.nice_setc                 C   r   )Nr$   ?)r   r   PROC_STATUSESget)r   coderF   rF   rG   r$   /  s   zProcess.statusc                 C   s<   t | j}g }|D ]\}}}t|||}|| q
|S rX   )rB   proc_threadsr   r   pthreadrP   )r   r   rn   	thread_idutimestimeru   rF   rF   rG   threads5  s   zProcess.threadsFr   rX   )#__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r%   r   r   r   r   r   r   r   r   r   r   rN   r   r   r   r   r   r  r  r  r  r$   r  rF   rF   rF   rG   r     st    









	









r   r  r  )cr   r   r   rh   collectionsr   rf   r   r   r   rB   r   r   r   r	   r
   r   r   r   r   r   r   r   __extra__all__getpagesizePAGESIZEAF_LINKTCPS_ESTABLISHEDCONN_ESTABLISHEDTCPS_SYN_SENTCONN_SYN_SENTTCPS_SYN_RECEIVEDCONN_SYN_RECVTCPS_FIN_WAIT_1CONN_FIN_WAIT1TCPS_FIN_WAIT_2CONN_FIN_WAIT2TCPS_TIME_WAITCONN_TIME_WAITTCPS_CLOSED
CONN_CLOSETCPS_CLOSE_WAITCONN_CLOSE_WAITTCPS_LAST_ACKCONN_LAST_ACKTCPS_LISTENCONN_LISTENTCPS_CLOSINGCONN_CLOSINGPSUTIL_CONN_NONE	CONN_NONEr   SIDLSTATUS_IDLESRUNSTATUS_RUNNINGSSLEEPSTATUS_SLEEPINGSSTOPSTATUS_STOPPEDr   STATUS_ZOMBIEr  dictr   r   r.   r4   r=   _fieldsr>   rH   rM   rN   rO   rU   rW   rY   has_cpu_freqr`   
disk_usagedisk_io_countersrg   rx   r   net_if_addrsr   r   r   r   	Exceptionr   r   r   r   
pid_existsr   r   r   rF   rF   rF   rG   <module>   s   	

	


