
    gc                        d Z ddlZddl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 ddlmZ ddlm Z  ddlm!Z! g dZ" ejF                         Z$ejJ                  Z%ejL                  dkD  Z'dZ(dZ)ejT                  ejV                  ejX                  ejZ                  ej\                  ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejZ                  ejj                  ejl                  iZ7ejp                  ejr                  ejt                  ejv                  ejx                  ejz                  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(ej                  e)iZR eSddddd d!d"d#d$d%d&d'(      ZT ed)g d*      ZU ed+g d,      ZV ed-g d.      ZW ed/d0d1g      ZXeXZY ed2g d3      ZZ ed4d5d6j                  eZj                        z         Z]d7 Z^d8 Z_d9 Z`d: Zad; Zbd< Zcd= Zdej                  Zeej                  ZfdHd>Zgej                  Zhej                  ZidId?Zjd@ ZkdA ZldB ZmdC ZndD ZodE Zp G dF dG      Zqy)Jz'Sun OS Solaris platform implementation.    N)
namedtuple)AF_INET   )_common)_psposix)_psutil_posix)_psutil_sunos)AF_INET6)AccessDenied)NoSuchProcess)ZombieProcess)debug)get_procfs_path)isfile_strict)memoize_when_activated)sockfam_to_enum)socktype_to_enum)usage_percent)PY3)FileNotFoundError)PermissionError)ProcessLookupError)b)	CONN_IDLE
CONN_BOUNDPROCFS_PATHl        IDLEBOUND                     	   
      )ppidrssvmscreate_timenicenum_threadsstatusttynruideuidgidegid	scputimes)usersystemidleiowait	pcputimes)r6   r7   children_userchildren_systemsvmem)total	availablepercentusedfreepmemr*   r+   pmmap_grouped)pathr*   	anonymouslocked	pmmap_extzaddr perms  c                      t        j                  d      t        z  } t        j                  d      t        z  x}}| |z
  }t        || d      }t	        | ||||      S )zReport virtual memory metrics.SC_PHYS_PAGESSC_AVPHYS_PAGESr   round_)ossysconf	PAGE_SIZEr   r=   )r>   rB   availrA   r@   s        D/var/www/openai/venv/lib/python3.12/site-packages/psutil/_pssunos.pyvirtual_memoryrT      sZ     JJ')3E::/09<<D54<DD%2Gwd33    c            	         t        j                         \  } }t        j                  ddt        j
                  d   z  ddgt        j                        }|j                         \  }}t        r)|j                  t        j                  j                        }|j                  dk7  rt        d|j                  z        |j                         j!                  d	      d
d }|sd}t        |      dx}}|D ]N  }	|	j!                         }	|	dd \  }
}|t#        t#        |
      dz        z  }|t#        t#        |      dz        z  }P ||z
  }t%        ||d
      }t'        j(                  ||||| t*        z  |t*        z        S )zReport swap memory metrics.z/usr/bin/envzPATH=/usr/sbin:/sbin:%sPATHswapz-l)stdoutr   z'swap -l' failed (retcode=%s)
r   Nzno swap device(s) configuredr    r"   i   rM   )cextswap_mem
subprocessPopenrO   environPIPEcommunicater   decodesysrY   encoding
returncodeRuntimeErrorstripsplitintr   r   sswaprQ   )sinsoutprY   _linesmsgr>   rB   linetfrA   r@   s                 rS   swap_memoryrt      sd   IC 	%

6(::		
 	A IFA
szz223||q:Q\\IJJLLN  &qr*E,3EDzz|Aay1SVc\""CFSL!!	 
 4<DD%2G==tT7C)OTI5E rU   c                  ~    t        j                         } t        t        |  D cg c]  }t	        |       c} S c c}w )z.Return system-wide CPU times as a named tuple.)r[   per_cpu_timesr5   zipsumretxs     rS   	cpu_timesr|      s5    



CsCy1y!s1vy1221s   :c                  `    t        j                         } | D cg c]
  }t        |  c}S c c}w )z6Return system per-CPU times as a list of named tuples.)r[   rv   r5   ry   s     rS   rv   rv      s,    



C#&'3aIqM3'''s   +c                  L    	 t        j                  d      S # t        $ r Y yw xY w)z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)rO   rP   
ValueError rU   rS   cpu_count_logicalr      s)    zz/00 s    	##c                  *    t        j                         S )z-Return the number of CPU cores in the system.)r[   cpu_count_coresr   rU   rS   r   r      s    !!rU   c                  h    t        j                         \  } }}}d}t        j                  | |||      S )z*Return various CPU stats as a named tuple.r   )r[   	cpu_statsr   	scpustats)ctx_switches
interruptssyscalls_trapssoft_interruptss        rS   r   r      s8    151A.L*hOj/8 rU   c                 0   g }t        j                         }|D ]S  }|\  }}}}|dk(  rd}| s	 t        |      j                  s*	 t        j                  ||||      }	|j                  |	       U |S # t        $ r}t        d|d|       Y d}~wd}~ww xY w)zReturn system disk partitions.none z	skipping z: N)	r[   disk_partitions
disk_usager>   OSErrorr   r   	sdiskpartappend)
allretlist
partitions	partitiondevice
mountpointfstypeoptserrntuples
             rS   r   r      s     G%%'J	+4(
FDVF!*-33 4 ""6:vtDv!  " N  :s;<s   A11	B:BBc                    t         j                  j                         }|dk(  r|j                  dd       | |vr7t	        d| ddj                  |D cg c]  }t        |       c}            t         j                  |    \  }}t        j                  |      }t               }|D ]  }|\  }	}
}}}}}|
|vr||vr|
t        t        hv r(|rt        j                  | }|rt        j                  | }t        |   }t        |
      }
t        |      }|dk(  rt        j                   |	|
|||||      }nt        j"                  |	|
||||      }|j%                  |        t'        |      S c c}w )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    Only INET sockets are returned (UNIX are not).
    unixr   zinvalid z kind argument; choose between z, )r   	conn_tmapcopypopr   joinreprr[   net_connectionssetr   r
   addrTCP_STATUSESr   r   sconnpconnaddlist)kind_pidcmapr{   familiestypesrawlistrz   itemfdfamtype_laddrraddrr/   pidnts                    rS   r   r     sk   
 !!#Drz4TYY6AQ679
 	
 ''-OHe""4(G
%C481Cufch7H%%e,e,f%c" '2:r3ueVSIBr3ueVDB' ( 93  7s   E-c                      t        j                         } | j                         D ]M  \  }}|\  }}}}t        t        d      rt	        j
                  |      }t	        j                  ||||d      | |<   O | S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplexr   )r[   net_if_statsitemshasattrr   r   	snicstats)rz   namer   isupduplexspeedmtus          rS   r   r   .  so    



Cyy{e#( feS7K(&&v.F%%dFE3CD		 #
 JrU   c                  *    t        j                         S )z:The system boot time expressed in seconds since the epoch.)r[   	boot_timer   rU   rS   r   r   >  s    >>rU   c                      g } t        j                         }d}|D ]>  }|\  }}}}}}	|s||v rd}t        j                  |||||	      }
| j	                  |
       @ | S )z:Return currently connected users as a list of namedtuples.)z:0.0z:0	localhost)r[   usersr   suserr   )r   r   r   r   r6   ttyhostnametstampuser_processr   r   s              rS   r   r   C  sq    GjjlGI9=6c8V\3 y "H]]4h<r  NrU   c                      t        j                  t        t                           D  cg c]  } | j	                         st        |         c} S c c} w )z7Returns a list of PIDs currently running on the system.)rO   listdirr   r   isdigitri   )r{   s    rS   pidsr   [  s9    JJq):';<L<q		CF<LLLs
   AAc                 ,    t        j                  |       S )z&Check for the existence of a unix pid.)r   
pid_exists)r   s    rS   r   r   `  s    s##rU   c                 B     t        j                          fd       }|S )zCall callable into a try/except clause and translate ENOENT,
    EACCES and EPERM in NoSuchProcess or AccessDenied exceptions.
    c                    	  | g|i |S # t         t        f$ ra t        | j                        s t	        | j                  | j
                        t        | j                  | j
                  | j                        t        $ r! t        | j                  | j
                        t        $ r> | j                  dk(  r-dt               v r t        | j                  | j
                          w xY wNr   )r   r   r   r   r   _namer   _ppidr   r   r   r   )selfargskwargsfuns      rS   wrapperz wrap_exceptions.<locals>.wrapperj  s    	t-d-f--!#56 	F dhh'#DHHdjj99#DHHdjj$**EE 	5txx44 	xx1};&txx<<	s
    CC,)	functoolswraps)r   r   s   ` rS   wrap_exceptionsr   e  s'    
 __S * NrU   c                   0   e Zd ZdZg dZd Zd Zd Zd Ze	e
d               Ze	e
d               Ze	e
d	               Ze	d
        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        Ze	d        ZeZe	d        Ze	d        Z e	d        Z!d Z"e	d'd       Z# e$dd       Z% e$dd!      Z&e	d"        Z'e	d#        Z(e	d$        Z)e	d(d&       Z*y%))Processz1Wrapper class around underlying C implementation.)_cacher   r   _procfs_pathr   c                 L    || _         d | _        d | _        t               | _        y N)r   r   r   r   r   )r   r   s     rS   __init__zProcess.__init__  s"    

+-rU   c                 `    t        j                  | j                  d| j                         y)z+Raise NSP if the process disappeared on us./N)rO   statr   r   r   s    rS   _assert_alivezProcess._assert_alive  s     	4,,dhh78rU   c                     | j                   j                  |        | j                  j                  |        | j                  j                  |        y r   )_proc_name_and_argscache_activate_proc_basic_info
_proc_credr   s    rS   oneshot_enterzProcess.oneshot_enter  s<      //5,,T2&&t,rU   c                     | j                   j                  |        | j                  j                  |        | j                  j                  |        y r   )r   cache_deactivater   r   r   s    rS   oneshot_exitzProcess.oneshot_exit  s<      11$7..t4((.rU   c                 V    t        j                  | j                  | j                        S r   )r[   proc_name_and_argsr   r   r   s    rS   r   zProcess._proc_name_and_args  s!     &&txx1B1BCCrU   c                 N   | j                   dk(  rNt        j                  j                  | j                  d| j                   d      st        | j                         t        j                  | j                   | j                        }t        |      t        t              k(  sJ |S )Nr   r   z/psinfo)
r   rO   rE   existsr   r   r[   proc_basic_infolenproc_info_map)r   rz   s     rS   r   zProcess._proc_basic_info  sy     88q="//:"
 txx((""488T->->?3x3}----
rU   c                 V    t        j                  | j                  | j                        S r   )r[   	proc_credr   r   r   s    rS   r   zProcess._proc_cred  s     ~~dhh(9(9::rU   c                 (    | j                         d   S r   )r   r   s    rS   r   zProcess.name  s     '')!,,rU   c                     	 t        j                  | j                  d| j                  d      S # t        $ r Y nw xY w| j                          y)Nr   z/path/a.outr   )rO   readlinkr   r   r   cmdliner   s    rS   exezProcess.exe  sL    	;;&*&7&7B   		
 	s   .1 	==c                 F    | j                         d   j                  d      S )Nr   rI   )r   rh   r   s    rS   r  zProcess.cmdline  s!    '')!,22377rU   c                 V    t        j                  | j                  | j                        S r   )r[   proc_environr   r   r   s    rS   r_   zProcess.environ        4+<+<==rU   c                 6    | j                         t        d      S )Nr,   r   r   r   s    rS   r,   zProcess.create_time      $$&}]'CDDrU   c                 6    | j                         t        d      S )Nr.   r  r   s    rS   r.   zProcess.num_threads  r  rU   c                 6    | j                         t        d      S )Nr-   r  r   s    rS   nice_getzProcess.nice_get  s    
 $$&}V'<==rU   c                     | j                   dv r t        | j                   | j                        t        j                  | j                   |      S )N>   r   r    )r   r   r   
cext_posixsetpriority)r   values     rS   nice_setzProcess.nice_set  s<    88v
 txx44%%dhh66rU   c                 X    | j                         t        d      | _        | j                  S )Nr)   )r   r   r   r   s    rS   r)   zProcess.ppid  s&    **,]6-BC
zzrU   c                     	 | j                         \  }}}}}}t	        j
                  |||      S # t        $ r9 | j                         t        d      }| j                         t        d      }d }Y Xw xY w)Nr1   r2   r   r   r   r   r   puids)r   real	effectivesavedrn   s        rS   uidszProcess.uids  s{    	.2oo.?+D)UAq!
 }}T9e44	  	((*=+?@D--/f0EFIE	   0 ?A21A2c                     	 | j                         \  }}}}}}t	        j
                  |||      S # t        $ r9 | j                         t        d      }| j                         t        d      }d }Y Xw xY w)Nr3   r4   r  )r   rn   r  r  r  s        rS   gidszProcess.gids  s{    	.2oo.?+Aq!T9e
 }}T9e44	  	((*=+?@D--/f0EFIE	r  c                     	 t        j                  | j                  | j                        }t        j                  | S # t        $ r1}|j
                  t
        j                  k(  r	t        sd}n Y d }~Gd }~ww xY w)N)        r#  r#  r#  )
r[   proc_cpu_timesr   r   r   errno	EOVERFLOW	IS_64_BITr   r:   )r   timesr   s      rS   r|   zProcess.cpu_times   si    	''$2C2CDE   %((  	yyEOO+I - 	s   *> 	A8'A33A8c                 V    t        j                  | j                  | j                        S r   )r[   proc_cpu_numr   r   r   s    rS   cpu_numzProcess.cpu_num  r  rU   c                 0   | j                   }d}t        | j                         t        d            }|t        j
                  k7  r.dD ])  }	 t        j                  d|| j                  |fz        c S  |r| j                          y y # t        $ r d}Y Mw xY w)NFr0   )r   r   r      z%s/%d/path/%dT)r   r   r   r   r[   PRNODEVrO   r  r   r   r   )r   procfs_path
hit_enoentr   r{   s        rS   terminalzProcess.terminal  s    ''
d335mG6LMN$,,#;;';!*DD  $    ) !%Js   $BBBc                     | j                   }	 t        j                  |d| j                  d      S # t        $ r' t        j
                  |d| j                         Y yw xY w)Nr   z	/path/cwdr   )r   rO   r  r   r   r   )r   r/  s     rS   cwdzProcess.cwd'  sS     ''	;;;IJJ  	GG{DHH56	s   $3 -A#"A#c                 v    | j                         }|t        d      dz  }|t        d      dz  }t        ||      S )Nr*   i   r+   )r   r   rC   )r   rz   r*   r+   s       rS   memory_infozProcess.memory_info4  sD    ##%-&'$.-&'$.C~rU   c                 b    | j                         t        d      }t        j                  |d      S )Nr/   ?)r   r   PROC_STATUSESget)r   codes     rS   r/   zProcess.status=  s-    $$&}X'>?  s++rU   c                    | j                   }g }t        j                  d|| j                  fz        }d}|D ]Z  }t	        |      }	 t        j                  | j                  ||      \  }}t        j                  |||      }|j                  |       \ |r| j                          |S # t        $ rR}	|	j                  t        j                  k(  rt        sY d }	~	|	j                  t        j                  k(  rd}Y d }	~	Ƃ d }	~	ww xY w)Nz	%s/%d/lwpFT)r   rO   r   r   ri   r[   query_process_threadr   pthreadr   EnvironmentErrorr%  r&  r'  ENOENTr   )
r   r/  rz   tidsr0  tidutimestimer   r   s
             rS   threadszProcess.threadsC  s    ''zz+dhh(??@
Cc(C#88HHc; u& __S%7

2/ 0  
) $ 99/	 99,!%Js$   $B((	D1#C>C>=C>>Dc           	          g }d}| j                   }d|| j                  fz  }t        j                  d|| j                  fz        D ]  }t        j                  j                  ||      }t        j                  j                  |      sC	 t        j                  |      }t        |      se|j                  t        j                  |t        |                    |r| j                          |S # t        $ r d}Y w xY w)NFz
%s/%d/pathz%s/%d/fdT)r   r   rO   r   rE   r   islinkr  r   r   r   	popenfileri   r   r   )r   r   r0  r/  pathdirr   rE   files           rS   
open_fileszProcess.open_filese  s    
''+txx!88**Z;*AABB77<<,Dww~~d#I;;t,D
 %T*w'8'8s2w'GH C   ) !%Js   
C//C=<C=c              #   r  K   dt        |      g}t        j                  |t        j                  t        j                        }|j	                         \  }}t
        rd ||fD        \  }}|j                  dk7  rtd|j                         v r t        | j                  | j                        d|j                         v r t        | j                  | j                        t        |d|      |j                  d      d	d
 }t        |      D ]  \  }}|j                         }|j!                  d      s(|j                  dd	      d	   }	||d	z
     j#                         }
|
dk(  rt$        j&                  }
n|
dk(  rt$        j(                  }
nd}
dt$        j*                  |
|	dt,        j.                  f  y
w)z<Get UNIX sockets used by process by parsing 'pfiles' output.pfiles)rY   stderrc              3   n   K   | ]-  }|j                  t        j                  j                         / y wr   )rb   rc   rY   rd   ).0r{   s     rS   	<genexpr>z,Process._get_unix_sockets.<locals>.<genexpr>  s(      7G!,,-7Gs   35r   zpermission deniedzno such processz command error
rZ   r   Nzsockname: AF_UNIXrI   SOCK_STREAM
SOCK_DGRAMr   r   )strr]   r^   r`   ra   r   re   lowerr   r   r   r   rf   rh   	enumeratelstrip
startswithrg   socketrQ  rR  AF_UNIXr   	CONN_NONE)r   r   cmdrm   rY   rM  ro   irq   rE   types              rS   _get_unix_socketszProcess._get_unix_socketsz  sx     S"


 8>7GNFF <<1"flln4"488TZZ88 FLLN2#DHHdjj99fEFFT"12& 'GAt;;=D23zz#q)!,QU|))+=(!--D\)!,,DD6>>4r7;L;LMM (s   D2F75BF7c                 6   t        || j                        }|s.t        j                  | j                  d| j                         |dv rH|j                  | j                  | j                        D cg c]  }t        j                  |  c}       |S c c}w )N)r   r   >   r   r   )	r   r   rO   r   r   extendr^  r   r   )r   r   rz   conns       rS   r   zProcess.net_connections  s    d2 GGt00$((;< ?"JJ 22488<<D t$<  
	s   4Bmmapzpath rss anon lockedzaddr perms path rss anon lockedc           	      t   d }| j                   }g }	 t        j                  | j                  |      }d}|D ]e  }|\  }}	}
}}}} |||	      }|j                  d      s(	 t        j                  |d| j                  d|      }|j                  ||
||||f       g |r| j                          |S # t        $ r0}|j
                  t
        j                  k(  rt        sg cY d }~S  d }~ww xY w# t        $ r?}|j
                  t
        j                  k(  r|d| j                  d|}d}n Y d }~d }~ww xY w)Nc                 |    t        |       dd  j                  d      dt        |      dd  j                  d      S )Nr   L-)hexrg   )startends     rS   toaddrz#Process.memory_maps.<locals>.toaddr  s<    E
12$$S)C""3' rU   F[r   z/path/T)r   r[   proc_memory_mapsr   r   r%  r&  r'  rW  rO   r  r?  r   r   )r   rj  r/  r   r   r   r0  r   r   addrsizepermr   r*   anonrG   s                  rS   memory_mapszProcess.memory_maps  s2   	 ''	++DHHkBG 
D<@9D(D$T6$)D??3';;+6$GD NND$c4@A) *  I  	yyEOO+I 		*  yyELL0 3>txxN%)
 #s;    B3 'C/3	C,<$C' C,&C''C,/	D785D22D7c                 r    t        t        j                  | j                  d| j                  d            S )Nr   z/fd)r   rO   r   r   r   r   s    rS   num_fdszProcess.num_fds  s%    2::D,=,=txxHIJJrU   c                 v    t        j                  t        j                  | j                  | j
                         S r   )r   pctxswr[   proc_num_ctx_switchesr   r   r   s    rS   num_ctx_switcheszProcess.num_ctx_switches  s-    ~~''$2C2CD
 	
rU   Nc                 X    t        j                  | j                  || j                        S r   )r   wait_pidr   r   )r   timeouts     rS   waitzProcess.wait  s      7DJJ??rU   )inetr   )+__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r   r   r   r  r  r_   r,   r.   r  r  r)   r  r!  r|   r+  r1  r3  r5  memory_full_infor/   rD  rJ  r^  r   r   nt_mmap_groupednt_mmap_extrp  rr  rv  rz  r   rU   rS   r   r     s   ;CI.9-
/
 D  D    ;  ; - -   8 8 > > E E E E > > 7 7   5 5 5 5 ) )" > > ! !  
 
   #, ,
  B  ( ND  & !)?@OV%FGK/ /b K K 
 

 @ @rU   r   )F)r   )rr  r%  r   rO   rX  r]   rc   collectionsr   r   r   r   r   r   r  r	   r[   r
   r   r   r   r   r   r   r   r   r   r   _compatr   r   r   r   r   __extra__all__getpagesizerQ   AF_LINKmaxsizer'  r   r   SSLEEPSTATUS_SLEEPINGSRUNSTATUS_RUNNINGSZOMBSTATUS_ZOMBIESSTOPSTATUS_STOPPEDSIDLSTATUS_IDLESONPROCSWAITSTATUS_WAITINGr8  TCPS_ESTABLISHEDCONN_ESTABLISHEDTCPS_SYN_SENTCONN_SYN_SENTTCPS_SYN_RCVD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_NONErZ  	TCPS_IDLE
TCPS_BOUNDr   dictr   r5   r:   r=   rC   pfullmemrD   r   _fieldsrH   rT   rt   r|   rv   r   r   r   disk_io_countersr   r   net_io_countersnet_if_addrsr   r   r   r   r   r   r   r   r   rU   rS   <module>r     s(  
 .   	   
 "    ) #  ! " "  $ " + $ % "  & $ '  < #J""$	


KK%		
 	KK((IIw%%JJ%%JJ&&IIw""LL'((JJ&& 	733----'00'00//g(('11--g))w++7,,NNIOOZ" 	
			

		

	, {$HI	G	 	7MN&5%.); -*?*?!@@	4&\3("
 ((   
> &&&&$N 
0M
$
<n@ n@rU   