U g}@sdZddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z dd l m Zdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlm Z ddlm!Z!gZ"erej#e j$ej%e j&ej'e j(ej)e j*ej+e j,ej-e j.ej/e j0iZ1n~erej#e j$ej'e j(ej)e j*ej2e j,ej+e j,ej%e j3ej4e j&iZ1n:erej#e j$ej'e j(ej)e j*ej+e j,ej%e j3ej4e j&iZ1ej5e j6ej7e j8ej9e j:ej;e jej?e j@ejAe jBejCe jDejEe jFejGe jHejIe jJejKe jLi ZMeNZOejPZPeQedZReQedZSeQedZTeQedZUeVdddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6ZWed7d8d9d:d;dd?d@dAdBg ZXedCdDdEdFdGdHgZYedIdJdKdLdMdNgZZeZZ[edOdDdFdPdQgZ\edRdSZ]edTdUZ^erdedVdWdXdYdZd[d\d]gZ_nedVdWdXdYdZgZ_d^d_Z`d`daZadbdcZbeRrdddZcndedZcdfec_ddgdhZeeserdidjZfndkdjZfdldmZgerdndoZhnerdpdoZhddqdrZie jjZjejkZkejlZlejmZmdsdtZndudvZoer@dwdxZpdydzZqd{d|Zrd}d~ZseddZtddZuertddZvnerddZvne jvZvddZwddZxejyddZzGdddZ{dS)z5FreeBSD, OpenBSD and NetBSD platforms implementation.N) defaultdict) namedtuple) ElementTree)_common)_psposix) _psutil_bsd) _psutil_posix)FREEBSD)NETBSD)OPENBSD) AccessDenied) NoSuchProcess) ZombieProcess) conn_tmap)conn_to_ntuple)debug)memoize)memoize_when_activated) usage_percent)FileNotFoundError)PermissionError)ProcessLookupError)which per_cpu_timesproc_num_threadsproc_open_files proc_num_fds )ppidstatusreal_uid effective_uid saved_uidreal_gid effective_gid saved_gidttynr create_timectx_switches_volctx_switches_unvol read_io_countwrite_io_count user_timesys_time ch_user_time ch_sys_timerssvmsmemtextmemdatamemstackcpunumnamesvmemtotal availablepercentusedfreeactiveinactivebufferscachedsharedwired scputimesusernicesystemidleirqpmemrGrHtextdatastack pcputimes children_userchildren_system pmmap_grouped*path rss, private, ref_count, shadow_count pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskioZ read_countZ write_count read_bytes write_bytesZ read_timeZ write_timeZ busy_timec Cst}tr|\}}}}}}tddN}|D]B}|drPt|dd} q,|dr,t|dd} q,W5QRX||} || } n,|\}}}}}}} } |||} |||} t|| |dd} t|| | | |||| || | S)Nz /proc/meminforbsBuffers:ris MemShared:Zround_) cextZ virtual_memr open startswithintsplitrrN)ZmemrOrSrTrUrYrWflinerVrXrRZavailrQrw=/opt/hc_python/lib64/python3.8/site-packages/psutil/_psbsd.pyvirtual_memorys8       rycCs4t\}}}}}t||dd}t||||||S)z@System swap memory as (total, used, free, sin, sout) namedtuple.rro)rpZswap_memrrZsswap)rOrRrSsinZsoutrQrwrwrx swap_memorysr{cCs"t\}}}}}t|||||S)z,Return system per-CPU times as a namedtuple.)rp cpu_timesrZ)r[r\r]r^r_rwrwrxr|sr|cCs>g}tD],}|\}}}}}t|||||}||q |S)(Return system CPU times as a namedtuple.)rprrZappend)retZcpu_tr[r\r]r^r_itemrwrwrxrs   cCs2tdkrtgStjr$d}t|dt_tgS)r}r&supported only starting from FreeBSD 8T)cpu_count_logicalr|r __called__NotImplementedError)msgrwrwrxr s FcCstS)z0Return the number of logical CPUs in the system.)rprrwrwrwrxrsrcCstdkrdSdS)Nr)rrwrwrwrxcpu_count_coressrcCsxd}t}|dk rb|d}|dkrb|d|d}t|}zt|dpRd}W5|X|sttdkrtdS|S)z-Return the number of CPU cores in the system.Nz r%zgroup/children/group/cpur) rpZ cpu_topologyrfindr fromstringclearlenfindallr)rsindexrootrwrwrxr$s    c Cstrt\}}}}}nptrnt\}}}}}}}tdd*}|D]}|drBt|d}qBW5QRXntrt\}}}}}}}t ||||S)z*Return various CPU stats as a named tuple.z /proc/statrnsintrr) r rp cpu_statsr rqrrrsrtr rZ scpustats) ZctxswZintrsZ soft_intrsZsyscallsZ_trapsZ_faultsZ_forksrurvrwrwrxr?s   rc Csg}t}t|D]}zt|\}}Wntk r@YqYnX|rz t|dddd}Wnttfk rd}YnXz t|dddd}Wnttfk rd}YnX| 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/rN) rrangerpcpu_freqrrsrt IndexError ValueErrorr~rscpufreq)rnum_cpuscpucurrentZavailable_freqZmin_freqZmax_freqrwrwrxras$      rcCstt}t|ddgS)Ng)floatrprrr)currrwrwrxr{s c Cs@g}t}|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. )rpdisk_partitionsrZ sdiskpartr~) allretlistZ partitions partitionZdeviceZ mountpointZfstypeoptsntuplerwrwrxrs  rc Cst}i}|D]}z&t|}t|}t|\}}Wn0tk rl}z|jtjkr\W5d}~XYqXt t drt |}d |}d|k} t | ||||||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).N NicDuplex,running)net_io_counterskeys cext_posixZ net_if_mtuZ net_if_flagsZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrrrjoinZ snicstats) namesrrMZmtuflagsZduplexspeederrZ output_flagsZisuprwrwrx net_if_statss,        rc Cs|tjkr*td|dddtDft|\}}t}trPtd||}ntrbtd|}n t||}|D]6}|\}}}} } } } t |||| | | t | } | | qrt |S)z System-wide network connections.+invalid %r kind argument; choose between %s, cSsg|] }t|qSrwrepr.0xrwrwrx sz#net_connections..r) rrrrsetr rpnet_connectionsr r TCP_STATUSESaddlist)kindfamiliestypesrrawlistrfdfamtypeladdrraddrr6pidntrwrwrxrs6    rcCsdzt\}}}Wntk r(YdSX|dk}|r>tj}n|dkrNtj}n|d}t|||S)zReturn battery info.Nrr<)rpsensors_batteryrrZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rQZminsleftZ power_pluggedZsecsleftrwrwrxrsrc Csvtt}t}t|D]Z}z@t|\}}|dkr6d}d|}|dt||||Wqt k rnYqXq|S)z?Return CPU cores temperatures if available, else an empty dict.rNzCore %sZcoretemp) rrrrrpZsensors_cpu_temperaturer~rZshwtempr)rrrrhighrMrwrwrxsensors_temperaturess rcCstS)z:The system boot time expressed in seconds since the epoch.)rp boot_timerwrwrwrxrsrc Csfg}t}|D]P}|\}}}}}|dkr6ts2td}|dkr@qt||pLd|||}||q|S)z:Return currently connected users as a list of namedtuples.rN~)rpusersr AssertionErrorrZsuserr~) rrrr[ttyhostnameZtstamprrrwrwrxrs rcCsDztdWn*tk r&YdStk r:YdSXdSdS)NrFT)ProcessrMrr rwrwrwrx _pid_0_existssrcCs*t}tr&d|kr&tr&|dd|S)z7Returns a list of PIDs currently running on the system.r)rppidsr rinsert)rrwrwrxr's rcCs t|}|s|tkSdSdS)NTr pid_existsrrexistsrwrwrxr3s  rcCs t|}|sdS|tkSdS)NFrrrwrwrxr>s cCs@z$t|td}t|tjkWStk r:YdSXdS)Nr6F)rpproc_oneshot_infokinfo_proc_map PROC_STATUSESgetr STATUS_ZOMBIEr)rstrwrwrx is_zombieLs rcstfdd}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. csz|f||WStk rRt|jr@t|j|j|jnt|j|jYn\tk rrt|j|jYn<t k r|jdkrdt krt|j|jnYnXdS)Nr) rrrr_name_ppidrrr rr)selfargskwargsfunrwrxwrapperYs   z wrap_exceptions..wrapper) functoolswraps)rrrwrrxwrap_exceptionsTsrc cstz dVWndttfk rNt|jrd?Z%e$d>d@Z&dAdBZ'e(redCdDZ)ne'Z)e*redEdFZ+ne'Z+eredGdHZ,edIdJZ-edKdLZ.edQdMdNZ/d1S)Rrz1Wrapper class around underlying C implementation._cacherrrcCs||_d|_d|_dSN)rrr)rrrwrwrx__init__szProcess.__init__cCst|jdS)z+Raise NSP if the process disappeared on us.N)rp proc_namerrrwrwrx _assert_aliveszProcess._assert_alivecCs$t|j}t|ttks t|S)z;Retrieves multiple process info in one shot as a raw tuple.)rprrrrrrrrwrwrxoneshots zProcess.oneshotcCs|j|dSr)rZcache_activaterrwrwrx oneshot_enterszProcess.oneshot_entercCs|j|dSr)rZcache_deactivaterrwrwrx oneshot_exitszProcess.oneshot_exitcCs(|td}|dk r|St|jS)NrM)rrrprr)rrMrwrwrxrMsz Process.namec Cstr|jdkrdSt|jStr^|jdkr0dSt|td|jW5QRSQRXn |}|rzt |dpxdSdSdS)Nrz /proc/%s/exe) r rrpZproc_exer rosreadlinkcmdliner)rrrwrwrxexes    $z Process.exec Cstr|jdkrgStrzt|jWStk r}zh|jtjkrt|jr`t |j|j |j qt |js~t |j|j |j qtd|gWY SnW5d}~XYqXn t|jSdS)Nrz'ignoring %r and returning an empty list)r rr rpZ proc_cmdlinerrEINVALrrrrrrr)rrrwrwrxrs    zProcess.cmdlinecCs t|jSr)rpZ proc_environrrrwrwrxenvironszProcess.environcCs>|td}t}z ||WStk r8YdSXdS)Nr=)rrrZget_terminal_mapKeyError)rZtty_nrZtmaprwrwrxterminals  zProcess.terminalcCs|td|_|jS)Nr5)rrrrrwrwrxr5sz Process.ppidcCs.|}t|td|td|tdS)Nr7r8r9)rrZpuidsrrZrawtuplerwrwrxuidss    z Process.uidscCs.|}t|td|td|tdS)Nr:r;r<)rrZpgidsrrrwrwrxgidss    z Process.gidscCs8|}t|td|td|td|tdS)NrCrDrErF)rrrdrrrwrwrxr|s    zProcess.cpu_timescCs|tdS)NrLrrrrwrwrxcpu_numszProcess.cpu_numcCs@|}t|td|td|td|td|tdS)NrGrHrIrJrK)rr`rrrwrwrx memory_info s     zProcess.memory_infocCs|tdS)Nr>rrrwrwrxr>szProcess.create_timecCs trt|jSt|SdSr)HAS_PROC_NUM_THREADSrprrrthreadsrrwrwrx num_threadss zProcess.num_threadscCs$|}t|td|tdS)Nr?r@)rrZpctxswrrrwrwrxnum_ctx_switches#s   zProcess.num_ctx_switchescCsHt|j}g}|D]"\}}}t|||}||qtrD||Sr)rpZ proc_threadsrrZpthreadr~r r)rrrZ thread_idutimeZstimerrwrwrxr +s  zProcess.threadsinetc Cs|tkr(td|dddtDft|\}}g}trLt|j|}n&trbt|j||}nt|j||}|D]P}|dd\}}} } } } t r||ksv| |krqvt ||| | | | t } | | qv| |S)NrrcSsg|] }t|qSrwrrrwrwrxr<sz+Process.net_connections..r")rrrr rprrr Zproc_net_connectionsr rrr~r)rrrrrrrrrrrrr6rrwrwrxr7s<  zProcess.net_connectionsNcCst|j||jSr)rZwait_pidrr)rtimeoutrwrwrxwaitUsz Process.waitcCs t|jSr)r getpriorityrrrwrwrxnice_getYszProcess.nice_getcCst|j|Sr)r setpriorityr)rvaluerwrwrxnice_set]szProcess.nice_setcCs|td}t|dS)Nr6?)rrrr)rcoderwrwrxr6aszProcess.statuscCs(|}t|td|tdddS)NrArBr)rrZpiorrrwrwrx io_countersgs  zProcess.io_counterscCs:tr|jdkrdStstr&t|jSttr0dnddS)z)Return process current working directory.rrrN)r rr HAS_PROC_OPEN_FILESrpZproc_cwdrr rrwrwrxcwdqs  z Process.cwdmmaprhrjcCstdSr)rrrwrwrx_not_implementedszProcess._not_implementedcCst|j}dd|DS)z8Return files opened by process as a list of namedtuples.cSsg|]\}}t||qSrw)rZ popenfile)rpathrrwrwrxrsz&Process.open_files..)rprr)rrrwrwrx open_filess zProcess.open_filescCst|j}tr||S)z=Return the number of file descriptors opened by this process.)rprrr rrrwrwrxnum_fdss zProcess.num_fdscCs t|jSr)rpZproc_cpu_affinity_getrrrwrwrxcpu_affinity_getszProcess.cpu_affinity_getc Cstttt}|D]}||krtd||fqzt|j|WnXtk r}z:|j t j t j hkr|D]}||krntd||fqnW5d}~XYnXdS)Nz#invalid CPU #%i (choose between %s)) tuplerrrrrpZproc_cpu_affinity_setrrrrZEDEADLK)rZcpusZallcpusrrrwrwrxcpu_affinity_sets$ zProcess.cpu_affinity_setcCs t|jSr)rpZproc_memory_mapsrrrwrwrx memory_mapsszProcess.memory_mapscCsP|dkrt|j|St|dkr2tdt||\}}t|j|||SdS)Nrz4second argument must be a (soft, hard) tuple, got %s)rpZproc_getrlimitrrrrZproc_setrlimit)rresourceZlimitsZsofthardrwrwrxrlimits zProcess.rlimit)r)N)N)0__name__ __module__ __qualname____doc__ __slots__rrrrrrrrMrrrrr5rrr|r rrZmemory_full_infor>r r r rrrrr6rrrZnt_mmap_groupedZ nt_mmap_extrrrHAS_PROC_NUM_FDSrr r"r#r&rwrwrwrxrs                             r)F)|r* contextlibrrr collectionsrrZ xml.etreerrrrrrpr rr r r r rrrrrrrrZ_compatrrrrZ__extra__all__ZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDZSZOMBrZSWAITZSTATUS_WAITINGZSLOCKZ STATUS_LOCKEDrZSDEADZ STATUS_WAKINGZSONPROCZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZTCPS_SYN_RECEIVEDZ 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_NONEZ CONN_NONErZ getpagesizePAGESIZEZAF_LINKrZHAS_PER_CPU_TIMESr rr,dictrrNrZr`Zpfullmemrdrgrirkryr{r|rrrrrrr disk_usageZdisk_io_countersrZ net_if_addrsrrrrrrrrrrrcontextmanagerrrrwrwrwrxs                             $    /