o
    jĎi)>                     @   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 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j.e
j/ej0iZ1e
j2ej3e
j4ej5e
j6ej7e
j8ej9e
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Z?dd Z@dd  ZAe
jBZBe
jCZCd!d" ZDd#d$ ZEd%d& ZFd'd( ZGd)d* ZHe
I rd+d, ZJejKZKe
jLZLdDd.d/ZMd0d1 ZNe
jOZOe
jPZPdEd3d4ZQd5d6 ZRd7d8 ZSzeS ZTW n eUy; ZV zed9eV dZTW Y dZV[VndZV[Vww d:d; ZWd<d= ZXd>d? ZYejZZZd@dA Z[G dBdC dCZ\dS )FzmacOS platform implementation.    N   )_common)_ntuples)_psposix)_psutil_osx)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volctxswc            	   
   C   sV   t  \} }}}}}|| }|| }||8 }t| | | dd}t| |||||||S )z&System virtual memory as a namedtuple.r   round_)cextvirtual_memr   ntpsvmem)	totalactiveinactivewiredfreespeculativeavailusedpercent r<   I/home/jeff/fluffinator/venv/lib/python3.10/site-packages/psutil/_psosx.pyvirtual_memory[   s   r>   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r-   )r/   swap_memr   r1   sswap)r3   r:   r7   sinsoutr;   r<   r<   r=   swap_memoryl   s   rC   c                  C   s    t  \} }}}t| |||S )z(Return system CPU times as a namedtuple.)r/   	cpu_timesr1   	scputimes)usernicesystemidler<   r<   r=   rD   }   s   rD   c                  C   s<   g } t  D ]}|\}}}}t||||}| | q| S )z)Return system CPU times as a named tuple.)r/   per_cpu_timesr1   rE   append)retcpu_trF   rG   rH   rI   itemr<   r<   r=   rJ      s   rJ   c                   C      t  S )z0Return the number of logical CPUs in the system.)r/   cpu_count_logicalr<   r<   r<   r=   rP         rP   c                   C   rO   )z-Return the number of CPU cores in the system.)r/   cpu_count_coresr<   r<   r<   r=   rR      rQ   rR   c                  C   s"   t  \} }}}}t| |||S N)r/   	cpu_statsr1   	scpustats)ctx_switches
interruptssoft_interruptssyscalls_trapsr<   r<   r=   rT      s   rT   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.
        )r/   cpu_freqr1   scpufreq)currmin_max_r<   r<   r=   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 )	r/   disk_partitionsospathisabsexistsr1   	sdiskpartrK   )	allretlist
partitions	partitiondevice
mountpointfstypeoptsntupler<   r<   r=   rb      s   rb   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   <   )r/   sensors_batteryNotImplementedErrorr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNr1   sbattery)r;   minsleftpower_pluggedsecsleftr<   r<   r=   rs      s   rs   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   listrK   r1   sconn)kindrL   pidconscr<   r<   r=   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keysr/   
net_if_mtunet_if_flagsnet_if_duplex_speedOSErrorerrnoENODEVhasattrr   r   joinr1   	snicstats)
namesrL   r$   mtuflagsduplexspeederroutput_flagsisupr<   r<   r=   net_if_stats   s&   





r   c                   C   rO   )z:The system boot time expressed in seconds since the epoch.)r/   	boot_timer<   r<   r<   r=   r     rQ   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"   diffr<   r<   r=   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/   usersr1   suserrK   )	ri   rawlistrN   rF   ttyhostnametstampr   ntr<   r<   r=   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   )r/   r|   r}   create_timeinsertr   r   )lsr<   r<   r=   r|   ?  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y5 } zt|r+t||||t|||d }~w tyF } zt	|||d }~w tj
yY } zt||||d }~ww rS   )r   _ppid_nameProcessLookupErrorr/   proc_is_zombier	   r   PermissionErrorr   ZombieProcessError)selfargskwargsr   r   r$   r   funr<   r=   wrapperW  s   
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   r<   r   r=   wrap_exceptionsR  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 rS   )r   r   r   )r   r   r<   r<   r=   __init__m  s   
zProcess.__init__c                 C   $   t | j}t|ttksJ |S rS   )r/   proc_kinfo_oneshotr   lenkinfo_proc_mapr   rL   r<   r<   r=   _get_kinfo_procr     zProcess._get_kinfo_procc                 C   r   rS   )r/   proc_pidtaskinfo_oneshotr   r   pidtaskinfo_mapr   r<   r<   r=   _get_pidtaskinfoz  r   zProcess._get_pidtaskinfoc                 C      | j |  | j|  d S rS   )r   cache_activater   r   r<   r<   r=   oneshot_enter     zProcess.oneshot_enterc                 C   r   rS   )r   cache_deactivater   r   r<   r<   r=   oneshot_exit  r   zProcess.oneshot_exitc                 C   s(   |   td  }|d ur|S t| jS )Nr$   )r   r   r/   	proc_namer   )r   r$   r<   r<   r=   r$     s   zProcess.namec                 C      t | jS rS   )r/   proc_exer   r   r<   r<   r=   exe     zProcess.exec                 C   r   rS   )r/   proc_cmdliner   r   r<   r<   r=   cmdline  r   zProcess.cmdlinec                 C   s   t t| jS rS   )r   r/   proc_environr   r   r<   r<   r=   environ     zProcess.environc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   r<   r<   r=   r     s   zProcess.ppidc                 C   r   rS   )r/   proc_cwdr   r   r<   r<   r=   cwd  r   zProcess.cwdc                 C   .   |   }t|td  |td  |td  S )Nr   r   r   r   r1   puidsr   r   rawtupler<   r<   r=   uids     


zProcess.uidsc                 C   r   )Nr   r   r    r   r   r<   r<   r=   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tmapr<   r<   r=   terminal  s   
zProcess.terminalc                 C   s8   |   }t|td  |td  |td  |td  S )Nr'   r(   r)   r*   )r   r1   pmemr   r   r<   r<   r=   memory_info  s   



zProcess.memory_infoc                 C   s$   |   }t| j}tj||f  S rS   )r   r/   proc_memory_ussr   r1   pfullmem)r   	basic_memussr<   r<   r=   memory_full_info  s   zProcess.memory_full_infoc                 C   s(   |   }t|td  |td  ddS )Nr%   r&   g        )r   r1   	pcputimesr   r   r<   r<   r=   rD     s   

zProcess.cpu_timesFc                 C   s    |   td  }|st|}|S )Nr"   )r   r   r   )r   	monotonicr"   r<   r<   r=   r     s   zProcess.create_timec                 C      |   td  }t|dS )Nr,   r   )r   r   r1   pctxsw)r   volr<   r<   r=   num_ctx_switches  s   zProcess.num_ctx_switchesc                 C   s   |   td  S )Nr+   )r   r   r   r<   r<   r=   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   r/   proc_open_filesr   r1   	popenfilerK   )r   filesr   rd   fdrp   r<   r<   r=   
open_files  s   

zProcess.open_filesr{   c              	   C   s\   t | \}}t| j||}g }|D ]}|\}}}	}
}}t|||	|
||t}|| q|S rS   )r
   r/   proc_net_connectionsr   r   TCP_STATUSESrK   )r   r   familiestypesr   rL   rN   r   famtypeladdrraddrr#   r   r<   r<   r=   r~     s   zProcess.net_connectionsc                 C   s   | j dkrdS t| j S r   )r   r/   proc_num_fdsr   r<   r<   r=   num_fds  s   
zProcess.num_fdsNc                 C      t | j|S rS   )r   wait_pidr   )r   timeoutr<   r<   r=   wait     zProcess.waitc                 C   r   rS   )r/   proc_priority_getr   r   r<   r<   r=   nice_get  r   zProcess.nice_getc                 C   r  rS   )r/   proc_priority_setr   )r   valuer<   r<   r=   nice_set  r	  zProcess.nice_setc                 C   r   )Nr#   ?)r   r   PROC_STATUSESget)r   coder<   r<   r=   r#     s   zProcess.statusc                 C   s<   t | j}g }|D ]\}}}t|||}|| q
|S rS   )r/   proc_threadsr   r1   pthreadrK   )r   r   ri   	thread_idutimestimerp   r<   r<   r=   threads  s   zProcess.threadsFr{   rS   )#__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r$   r   r   r   r   r   r   r   r   r   r   rD   r   r   r   r   r~   r  r  r  r  r#   r  r<   r<   r<   r=   r}   h  st    









	









r}   r  r  )]r  r   r   rc   ra   r   r   r1   r   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_STOPPEDSZOMBSTATUS_ZOMBIEr  dictr   r   r>   rC   	heap_info	heap_trimrD   rJ   rP   rR   rT   has_cpu_freqr[   
disk_usagedisk_io_countersrb   rs   r   net_if_addrsr~   r   r   r   	Exceptionr   r   r   r|   
pid_existsr   r}   r<   r<   r<   r=   <module>   s   



