U |fc@sJdZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z ddl m Zdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlm Z ddlm!Z!dddgZ"e#Z$ej%Z%ej&dkZ'dZ(dZ)ej*e j+ej,e j-ej.e j/ej0e j1ej2e j3ej4e j-ej5e j6iZ7ej8e j9ej:e j;eje j?ej@e jAejBe jCejDe jEejFe jGejHe jIejJe jKejLe jMejNe jOejPe(ejQe)iZReSddd d!d"d#d$d%d&d'd(d)d* ZTed+d,d-d.d/gZUed0d,d-d1d2gZVed3d4d5d6d7d8gZWed9d:d;gZXeXZYedd?gZZed@dAdB[eZj\Z]dCdDZ^dEdFZ_dGdHZ`dIdJZadKdLZbdMdNZcdOdPZdejeZee jfZfdedRdSZgejhZhejiZidfdUdVZjdWdXZkdYdZZld[d\Zmd]d^Znd_d`ZodadbZpGdcddddZqdS)gz'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_BOUNDZ PROCFS_PATHlZIDLEZBOUND ) ppidrssvms create_timenice num_threadsstatusttynruideuidgidegid scputimesusersystemidleZiowait pcputimes children_userchildren_systemsvmemtotal availablepercentusedfreepmemr&r' pmmap_groupedpathZ anonymouslocked pmmap_extz addr perms  cCsFtdt}tdt}}||}t||dd}t|||||S)zReport virtual memory metrics. SC_PHYS_PAGESSC_AVPHYS_PAGESrZround_)ossysconf PAGE_SIZErr8)r9r=Zavailr<r;rJB/opt/alt/python38/lib64/python3.8/site-packages/psutil/_pssunos.pyvirtual_memorys rLc Cst\}}tjddtjdddgtjd}|\}}trL| t j j }|j dkrdtd|j |d d d }|sd }t|d}}|D]D} | } | d d\} } |tt| d7}|tt| d7}q||} t| |d d} t|| || |t|tS)zReport swap memory metrics.z /usr/bin/envzPATH=/usr/sbin:/sbin:%sPATHZswapz-l)stdoutrz'swap -l' failed (retcode=%s) rNzno swap device(s) configuredrrirF)cextZswap_mem subprocessPopenrGenvironPIPE communicaterdecodesysrNencoding returncode RuntimeErrorstripsplitintrrZsswaprI)sinZsoutprN_linesmsgr9r=linetfr<r;rJrJrK swap_memorysD    rfcCst}tddt|DS)z.Return system-wide CPU times as a named tuple.cSsg|] }t|qSrJ)sum.0xrJrJrK szcpu_times..)rP per_cpu_timesr1zipretrJrJrK cpu_timessrpcCst}dd|DS)z6Return system per-CPU times as a list of named tuples.cSsg|] }t|qSrJ)r1rhrJrJrKrksz!per_cpu_times..)rPrlrnrJrJrKrlsrlcCs(z tdWStk r"YdSXdS)z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)rGrH ValueErrorrJrJrJrKcpu_count_logicals rscCstS)z-Return the number of CPU cores in the system.)rPcpu_count_coresrJrJrJrKrtsrtcCs$t\}}}}d}t||||S)z*Return various CPU stats as a named tuple.r)rP cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsyscallsZ_trapsZsoft_interruptsrJrJrKrusruFc Csg}t}|D]}|\}}}}|dkr,d}|s~zt|js@WqWn:tk r|}ztd||fWYqW5d}~XYnXt||||} || q|S)zReturn system disk partitions.nonezskipping %r: %sN) rPdisk_partitions disk_usager9OSErrorr rZ sdiskpartappend) allretlistZ partitions partitionZdeviceZ mountpointZfstypeoptserrZntuplerJrJrKrxs    rxc Cstj}|dkr|dd||krFtd|ddd|Dftj|\}}t|}t}|D]}|\}} } } } } }| |krqh| |krqh| t t fkr| rtj | } | rtj | } t | } t | } t| } |dkrt|| | | | | |}nt|| | | | | }||qht|S)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). runixrz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrJ)reprrhrJrJrKrksz#net_connections..)rZ conn_tmapcopypoprrjoinrPnet_connectionssetrr addr TCP_STATUSESrrZsconnpconnaddlist)kind_pidZcmapZfamiliestypesrawlistroitemfdfamtype_laddrraddrr+pidntrJrJrKrs>       rcCsTt}|D]>\}}|\}}}}ttdr8t|}t||||d||<q|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplexrw)rP net_if_statsitemshasattrrrZ snicstats)ronamerZisupZduplexspeedZmturJrJrKr.s   rcCstS)z:The system boot time expressed in seconds since the epoch.)rP boot_timerJrJrJrKr>src Cs\g}t}d}|D]B}|\}}}}}} |s.q||kr:d}t||||| } || q|S)z:Return currently connected users as a list of namedtuples.)z:0.0z:0 localhost)rPusersrZsuserr{) r}rrrr2ttyhostnameZtstampZ user_processrrrJrJrKrCs rcCsddtttDS)z7Returns a list of PIDs currently running on the system.cSsg|]}|rt|qSrJ)isdigitr]rhrJrJrKrk]szpids..)rGlistdirrrrJrJrJrKpids[srcCs t|S)z&Check for the existence of a unix pid.)r pid_exists)rrJrJrKr`srcstfdd}|S)zCall callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c sz|f||WSttfk rVt|js@t|j|jnt|j|j|jYn\tk rvt |j|jYn<t k r|jdkrdt krt |j|jnYnXdSNr) rrrrr _namer _ppidrr rzr)selfargskwargsfunrJrKwrapperjs   z wrap_exceptions..wrapper) functoolswraps)rrrJrrKwrap_exceptionsesrc@seZdZdZdddddgZddZd d Zd d Zd dZe e ddZ e e ddZ e e ddZ e ddZe ddZe ddZe ddZe ddZe dd Ze d!d"Ze d#d$Ze d%d&Ze d'd(Ze d)d*Ze d+d,Ze d-d.Ze d/d0Ze d1d2Ze d3d4ZeZe d5d6Ze d7d8Z e d9d:Z!d;d<Z"e dLd>d?Z#e$d@dAZ%e$d@dBZ&e dCdDZ'e dEdFZ(e dGdHZ)e dMdJdKZ*dIS)NProcessz1Wrapper class around underlying C implementation.rrr _procfs_path_cachecCs||_d|_d|_t|_dSN)rrrrr)rrrJrJrK__init__szProcess.__init__cCstd|j|jfdS)z+Raise NSP if the process disappeared on us.%s/%sN)rGstatrrrrJrJrK _assert_aliveszProcess._assert_alivecCs(|j||j||j|dSr)_proc_name_and_argsZcache_activate_proc_basic_info _proc_credrrJrJrK oneshot_enters  zProcess.oneshot_entercCs(|j||j||j|dSr)rZcache_deactivaterrrrJrJrK oneshot_exits  zProcess.oneshot_exitcCst|j|jSr)rPZproc_name_and_argsrrrrJrJrKrszProcess._proc_name_and_argscCsT|jdkr,tjd|j|jfs,t|jt|j|j}t|tt ksPt |S)Nrz %s/%s/psinfo) rrGr@existsrr rPZproc_basic_infolen proc_info_mapAssertionError)rrorJrJrKrs zProcess._proc_basic_infocCst|j|jSr)rPZ proc_credrrrrJrJrKrszProcess._proc_credcCs |dSr)rrrJrJrKrsz Process.namecCs:ztd|j|jfWStk r,YnX|dS)Nz%s/%s/path/a.outrw)rGreadlinkrrrzcmdlinerrJrJrKexesz Process.execCs|ddS)NrrC)rr\rrJrJrKrszProcess.cmdlinecCst|j|jSr)rPZ proc_environrrrrJrJrKrSszProcess.environcCs|tdS)Nr(rrrrJrJrKr(szProcess.create_timecCs|tdS)Nr*rrrJrJrKr*szProcess.num_threadscCs|tdS)Nr)rrrJrJrKnice_getszProcess.nice_getcCs&|jdkrt|j|jt|j|S)N)rr)rr r cext_posix setpriority)rvaluerJrJrKnice_sets zProcess.nice_setcCs|td|_|jS)Nr%)rrrrrJrJrKr%sz Process.ppidcCs`z|\}}}}}}Wn8tk rP|td}|td}d}YnXt|||S)Nr-r.rr rrrZpuids)rreal effectivesavedr`rJrJrKuidss z Process.uidscCs`z|\}}}}}}Wn8tk rP|td}|td}d}YnXt|||S)Nr/r0r)rr`rrrrJrJrKgidss z Process.gidsc CsZzt|j|j}Wn:tk rN}z|jtjkr}ztd||j|fWSt k rhd}Yq,Yq,Xq,|rx| dS)NFr,)rrrz %s/%d/path/%dT) rrrrrPZPRNODEVrGrrrr)r procfs_path hit_enoentrrjrJrJrKterminals   zProcess.terminalcCsL|j}ztd||jfWStk rFtd||jfYdSXdS)Nz%s/%s/path/cwdrrw)rrGrrrr)rrrJrJrKcwd's z Process.cwdcCs2|}|tdd}|tdd}t||S)Nr&ir')rrr>)rror&r'rJrJrK memory_info4szProcess.memory_infocCs|td}t|dS)Nr+?)rr PROC_STATUSESget)rcoderJrJrKr+=szProcess.statusc Cs|j}g}td||jf}d}|D]}t|}zt|j||\}}WnTtk r}z6|jtj krtt stWY q&|jtj krd}WYq&W5d}~XYq&Xt |||} || q&|r||S)Nz %s/%d/lwpFT)rrGrrr]rPZquery_process_threadEnvironmentErrorrrrENOENTrZpthreadr{r) rrroZtidsrtidutimeZstimerrrJrJrKthreadsCs0   zProcess.threadsc Csg}d}|j}d||jf}td||jfD]h}tj||}tj|r0zt|}Wntk rxd}Yq0Yq0Xt |r0| t |t |q0|r||S)NFz %s/%d/pathz%s/%d/fdT)rrrGrr@rislinkrrrr{rZ popenfiler]r)rr}rrZpathdirrr@filerJrJrK open_fileses"  zProcess.open_filesc cs*dt|g}tj|tjtjd}|\}}trFdd||fD\}}|jdkrd|krjt|j |j d|krt |j |j t d||f| d d d }t|D]v\}}|}|d r| d d d } ||d } | dkrtj} n| dkr tj} nd} dtj| | dtjfVqd S)zsz,Process._get_unix_sockets..rzpermission deniedzno such processz%r command error %srOrNzsockname: AF_UNIXrC SOCK_STREAM SOCK_DGRAMrrw)strrQrRrTrUrrYlowerr rrr rZr\ enumeratelstrip startswithr[socketrrAF_UNIXr CONN_NONE) rrcmdr_rNrraircr@typerJrJrK_get_unix_socketszs:        zProcess._get_unix_socketsinetcCsPt||jd}|s(td|j|jf|dkrL|dd||jD|S)N)rr)r|rcSsg|]}tj|qSrJ)rr)riconnrJrJrKrksz+Process.net_connections..)rrrGrrextendr)rrrorJrJrKrs  zProcess.net_connectionsmmapzpath rss anon lockedzaddr perms path rss anon lockedc Cs$dd}|j}g}zt|j|}Wn@tk rd}z"|jtjkrRtsRgWYSW5d}~XYnXd}|D]}|\}} } } } } }||| }| dszt d||j| f} WnFtk r}z(|jtj krd||j| f} d}nW5d}~XYnX| || | | | |fqn|r | |S)NcSs0dt|dddt|dddfS)Nz%s-%srL)hexr[)startendrJrJrKtoaddrsz#Process.memory_maps..toaddrF[z %s/%s/path/%sT)rrPZproc_memory_mapsrrzrrrrrGrrr{r)rrrr}rrrrrZaddrsizepermrr&ZanonrArJrJrK memory_mapss6    zProcess.memory_mapscCsttd|j|jfS)Nz%s/%s/fd)rrGrrrrrJrJrKnum_fdsszProcess.num_fdscCstjt|j|jSr)rZpctxswrPZproc_num_ctx_switchesrrrrJrJrKnum_ctx_switchesszProcess.num_ctx_switchesNcCst|j||jSr)rZwait_pidrr)rtimeoutrJrJrKwaitsz Process.wait)r)N)+__name__ __module__ __qualname____doc__ __slots__rrrrrrrrrrrrrSr(r*rrr%rrrprrrrZmemory_full_infor+rrrrrZnt_mmap_groupedZ nt_mmap_extr r r r rJrJrJrKrs                     ! "    1  r)F)r)rrrrrGrrQrW collectionsrrrwrrrrrrPr r r r r rrrrrrZ_compatrrrrrZ__extra__all__Z getpagesizerIZAF_LINKmaxsizerrrZSSLEEPZSTATUS_SLEEPINGZSRUNZSTATUS_RUNNINGZSZOMBZ STATUS_ZOMBIEZSSTOPZSTATUS_STOPPEDZSIDLZ STATUS_IDLEZSONPROCZSWAITZSTATUS_WAITINGrZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZ TCPS_SYN_RCVDZ CONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZ TCPS_CLOSEDZ CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZ TCPS_LAST_ACKZ CONN_LAST_ACKZ TCPS_LISTENZ CONN_LISTENZ TCPS_CLOSINGZ CONN_CLOSINGZPSUTIL_CONN_NONErZ TCPS_IDLEZ TCPS_BOUNDrdictrr1r5r8r>Zpfullmemr?r_fieldsrBrLrfrprlrsrtruZdisk_io_countersryrxZnet_io_countersZ net_if_addrsrrrrrrrrrJrJrJrKs                             .   '