U =_]y@sdZddlZddlZddlZddlZddlmmZddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlm Z ddlm!Z!ddlm"Z"gZ#erzej$e j%ej&e j'ej(e j)ej*e j+ej,e j-ej.e j/ej0e j1iZ2n~erej$e j%ej(e j)ej*e j+ej3e j-ej,e j-ej&e j4ej5e j'iZ2n:erej$e j%ej(e j)ej*e j+ej,e j-ej&e j4ej5e j'iZ2ej6e j7ej8e j9ej:e j;eje j?ej@e jAejBe jCejDe jEejFe jGejHe jIejJe jKejLe jMi ZNeOZPejQZQeRedZSeRedZTeRedZUeRedZVeWdddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4ZXe d5d6d7d8d9d:d;dd?d@g ZYe dAdBdCdDdEdFgZZe dGdHdIdJdKdLgZ[e[Z\e dMdBdDdNdOgZ]e dPdQZ^e dRdSZ_er^e dTdUdVdWdXdYdZd[gZ`ne dTdUdVdWdXgZ`d\d]Zad^d_Zbd`daZceSrdbdZdndcdZddded_ededfZfeserdgdhZgndidhZgdjdkZhddldmZiejjZjejkZkejlZlejmZmdndoZndpdqZoer$drdsZpdtduZqdvdwZrdxdyZsdzd{Zted|d}Zud~dZvesTer^ddZwnejwZwddZxddZyejzddZ{Gddde|Z}dS)z5FreeBSD, OpenBSD and NetBSD platforms implementation.N) namedtuple) defaultdict)_common)_psposix) _psutil_bsd) _psutil_posix) AccessDenied) conn_tmap)conn_to_ntuple)FREEBSD)memoize)memoize_when_activated)NETBSD) NoSuchProcess)OPENBSD) usage_percent) ZombieProcess)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_timerssvmsmemtextmemdatamemstackcpunumnamesvmemtotalZ availablepercentusedfreeactiveinactivebufferscachedsharedwired scputimesusernicesystemidleirqpmemrErFtextdatastack 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_countZ read_bytesZ write_bytesZ read_timeZ write_timeZ busy_timec Cst}|\}}}}}}}}tr~tddN} | D]B} | drTt| dd}q0| dr0t| dd}q0W5QRX|||} |||} t|| |dd} t|| | | ||||||| S)z&System virtual memory as a namedtuple.z /proc/meminforbsBuffers:ris MemShared:Zround_) cextZ virtual_memropen startswithintsplitrrL)ZmemrMrPrQrRrVrTrSrUflineZavailrOrNrr@/opt/alt/python38/lib64/python3.8/site-packages/psutil/_psbsd.pyvirtual_memorys(       rtcCs4t\}}}}}t||dd}t||||||S)z@System swap memory as (total, used, free, sin, sout) namedtuple.rrj)rkZswap_memrrZsswap)rMrOrPZsinZsoutrNrrrrrs swap_memorysrucCs"t\}}}}}t|||||S)z+Return system per-CPU times as a namedtuple)rk cpu_timesrW)rXrYrZr[r\rrrrrsrvsrvcCs>g}tD],}|\}}}}}t|||||}||q |S)'Return system CPU times as a namedtuple)rkrrWappend)retZcpu_trXrYrZr[r\itemrrrrrsrs   cCs.tdkrtgStjr tddt_tgS)rwr&supported only starting from FreeBSD 8T)cpu_count_logicalrvr __called__NotImplementedErrorrrrrrrrsrs  FcCstS)z0Return the number of logical CPUs in the system.)rkr|rrrrrrrsr|sr|cCstdkrdSdS)Nr)r|rrrrrrrscpu_count_physicalsrcCsxd}t}|dk rb|d}|dkrb|d|d}t|}zt|dpRd}W5|X|sttdkrtdS|S)z1Return the number of physical CPUs in the system.Nz r#zgroup/children/group/cpur) rkZcpu_count_physrfindETZ fromstringclearlenfindallr|)rysindexrootrrrrrsrs    c Cstrt\}}}}}nptrnt\}}}}}}}tdd*}|D]}|drBt|d}qBW5QRXntrt\}}}}}}}t ||||S)z*Return various CPU stats as a named tuple.z /proc/statrisintrr) r rk cpu_statsrrlrmrnrorrZ scpustats) ZctxswZintrsZ soft_intrsZsyscallsZtrapsZfaultsZforksrprqrrrrrsrs   rc CsLg}t}|D]6}|\}}}}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 N)rkdisk_partitionsrZ sdiskpartrx) allretlistZ partitions partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathntuplerrrrrsr?s   rc Cst}i}|D]}z&t|}t|}t|\}}Wn0tk rl}z|jtjkr\W5d}~XYqXt t drt |}t ||||||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).N NicDuplex) net_io_counterskeys cext_posixZ net_if_mtuZnet_if_is_runningZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrrrZ snicstats)namesryrKZmtuZisupZduplexZspeederrrrrrrs net_if_stats\s      rc Cstrtg}tD]`}zt||}Wnttfk r@YqYqX|D]&}t|}|||tj |qFq|S|tj krt d|d ddt Dft |\}}t }trtd}nt}|D]F}|\} } } } } }}| |kr| |krt| | | | | |t|}||qt|S)z System-wide network connections.+invalid %r kind argument; choose between %s, cSsg|] }t|qSrrrepr.0xrrrrrs sz#net_connections..r)rpidsProcess connectionsrrlistrxrZsconnr ValueErrorjoinsetrrknet_connectionsr TCP_STATUSESadd)kindrypidZconsZconnfamiliestypesrawlistrzfdfamtypeladdrraddrr4ntrrrrrsrps<       rcCsdzt\}}}Wntk r(YdSX|dk}|r>tj}n|dkrNtj}n|d}t|||S)zReturn battery info.Nrr<)rksensors_batteryr~rZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)rNZminsleftZ power_pluggedZsecsleftrrrrrsrsrc 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) rrr|rangerkZsensors_cpu_temperaturerxrZshwtempr~)rynum_cpuscpucurrentZhighrKrrrrrssensors_temperaturess 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) r|rrkZ cpu_frequencyr~rnro IndexErrorrrxrZscpufreq)ryrrrZavailable_freqZmin_freqZmax_freqrrrrrscpu_freqs$      rcCstS)z:The system boot time expressed in seconds since the epoch.)rk boot_timerrrrrrrsrsrc Cs^g}t}|D]H}|\}}}}}|dkr.d}|dkr8qt||pDd|||}||q|S)z:Return currently connected users as a list of namedtuples.rN~)rkusersrZsuserrx) rrrzrXZttyZhostnameZtstamprrrrrrrsrs rcCsDztdWn*tk r&YdStk r:YdSXdSdS)NrFT)rrKrr rrrrrrrs _pid_0_existssrcCs*t}tr&d|kr&tr&|dd|S)z7Returns a list of PIDs currently running on the system.r)rkrrrinsert)ryrrrrrsrs rcCs t|}|s|tkSdSdS)zReturn True if pid exists.TN)r pid_existsr)rexistsrrrrrsr s  rcCs:zt|td}|tjkWStk r4YdSXdS)Nr4F)rkproc_oneshot_infokinfo_proc_mapSZOMB Exception)rstrrrrrs is_zombies  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|jnYnXdSNr) rrrr_name_ppidrrr rr)selfargskwargsfunrrrswrapper#s   z wrap_exceptions..wrapper) functoolswraps)rrrrrrswrap_exceptionssrc 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.rrr_cachecCs||_d|_d|_dSN)rrr)rrrrrrrs__init__NszProcess.__init__cCst|jdS)z+Raise NSP if the process disappeared on us.N)rk proc_namerrrrrrrs _assert_aliveSszProcess._assert_alivecCst|j}|S)z;Retrieves multiple process info in one shot as a raw tuple.)rkrrrryrrrrrsoneshotYs zProcess.oneshotcCs|j|dSr)rZcache_activaterrrrrrs oneshot_enteraszProcess.oneshot_entercCs|j|dSr)rZcache_deactivaterrrrrrs oneshot_exitdszProcess.oneshot_exitcCs(|td}|dk r|St|jS)NrK)rrrkrr)rrKrrrrrsrKgsz Process.namec Cstr|jdkrdSt|jStr^|jdkr0dSt|td|jW5QRSQRXn |}|rzt |dpxdSdSdS)Nrz /proc/%s/exe) r rrkZproc_exerrosreadlinkcmdliner)rrrrrrrsexels    $z Process.exec Cstr|jdkrgStrzt|jWStk r}z\|jtjkrt|jr`t |j|j |j qt |js~t |j|j |j qgWY SnW5d}~XYqXn t|jSdSr)rrrrkZ proc_cmdlinerrEINVALrrrrrr)rrrrrrrsrs   zProcess.cmdlinecCs t|jSr)rkZ proc_environrrrrrrrsenvironszProcess.environcCs>|td}t}z ||WStk r8YdSXdS)Nr;)rrrZget_terminal_mapKeyError)rZtty_nrZtmaprrrrrsterminals  zProcess.terminalcCs|td|_|jS)Nr3)rrrrrrrrrsr3sz Process.ppidcCs.|}t|td|td|tdS)Nr5r6r7)rrZpuidsrrZrawtuplerrrrrsuidss    z Process.uidscCs.|}t|td|td|tdS)Nr8r9r:)rrZpgidsrrrrrrrsgidss    z Process.gidscCs8|}t|td|td|td|tdS)NrArBrCrD)rrrarrrrrrrsrvs    zProcess.cpu_timescCs|tdS)NrJrrrrrrrrscpu_numszProcess.cpu_numcCs@|}t|td|td|td|td|tdS)NrErFrGrHrI)rr]rrrrrrrs memory_infos     zProcess.memory_infocCs|tdS)Nr<rrrrrrrsr<szProcess.create_timecCs trt|jSt|SdSr)HAS_PROC_NUM_THREADSrkrrrthreadsrrrrrrs num_threadss zProcess.num_threadscCs$|}t|td|tdS)Nr=r>)rrZpctxswrrrrrrrsnum_ctx_switchess   zProcess.num_ctx_switchescCsHt|j}g}|D]"\}}}t|||}||qtrD||Sr)rkZ proc_threadsrrZpthreadrxrr)rrrZ thread_idutimeZstimerrrrrrsrs  zProcess.threadsinetc Cs |tkr(td|dddtDftrt|\}}g}t|j}|D]D}|\}}} } } } } ||krL| |krLt||| | | | t}| |qL| t |St|\}}t |j||}g}|D]2}|\}}} } } } t||| | | | t}| |qt r| |S)NrrcSsg|] }t|qSrrrrrrrrrsrsz'Process.connections..)r rrrrkrrr rrxrrZproc_connectionsr)rrrrryrrzrrrrrr4rrrrrrrsrs:     zProcess.connectionsNcCst|j||jSr)rZwait_pidrr)rZtimeoutrrrrrswaitsz Process.waitcCs t|jSr)r getpriorityrrrrrrrsnice_getszProcess.nice_getcCst|j|Sr)r setpriorityr)rvaluerrrrrsnice_set#szProcess.nice_setcCs|td}t|dS)Nr4?)rr PROC_STATUSESget)rcoderrrrrsr4'szProcess.statuscCs(|}t|td|tdddS)Nr?r@r)rrZpiorrrrrrrs io_counters-s  zProcess.io_counterscCs>tr|jdkrdStstr*t|jp(dSttr4dnddS)z)Return process current working directory.rNr{r)rrrHAS_PROC_OPEN_FILESrkZproc_cwdr~r rrrrrrscwd6sz Process.cwdZmmaprergcCstdSr)r~rrrrrrs_not_implementedKszProcess._not_implementedcCst|j}dd|DS)z8Return files opened by process as a list of namedtuples.cSsg|]\}}t||qSrr)rZ popenfile)rpathrrrrrrsrUsz&Process.open_files..)rkrr)rrrrrrrs open_filesQs zProcess.open_filescCst|j}tr||S)z=Return the number of file descriptors opened by this process.)rkrrrrrrrrrrsnum_fds\s zProcess.num_fdscCs t|jSr)rkZproc_cpu_affinity_getrrrrrrrscpu_affinity_getjszProcess.cpu_affinity_getc Cstttt}|D]}||krtd||fqzt|j|WnXtk r}z:|j t j t j fkr|D]}||krntd||fqnW5d}~XYnXdS)Nz#invalid CPU #%i (choose between %s)) tuplerrrrrkZproc_cpu_affinity_setrrrrZEDEADLK)rZcpusZallcpusrrrrrrrscpu_affinity_setns&zProcess.cpu_affinity_setcCs t|jSr)rkZproc_memory_mapsrrrrrrrs memory_mapsszProcess.memory_mapscCsP|dkrt|j|St|dkr2tdt||\}}t|j|||SdS)Nrz4second argument must be a (soft, hard) tuple, got %s)rkZproc_getrlimitrrrrZproc_setrlimit)rresourceZlimitsZsoftZhardrrrrrsrlimits zProcess.rlimit)r)N)N)0__name__ __module__ __qualname____doc__ __slots__rrrrrrrrKrrrrr3rrrvr rrZmemory_full_infor<rrrrrrrr4rrrZnt_mmap_groupedZ nt_mmap_extrrr HAS_PROC_NUM_FDSr r rrrrrrrrrrsrIs                  !           r)F)~r contextlibrrrZxml.etree.ElementTreeZetreeZ ElementTreer collectionsrrrrrrrkrrr r r r r rrrrrrZ_compatrrrrZ__extra__all__ZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDrZ STATUS_ZOMBIEZSWAITZSTATUS_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 getpagesizeZPAGESIZEZAF_LINKrZHAS_PER_CPU_TIMESrrrdictrrLrWr]Zpfullmemrardrfrhrtrurvrr}r|rrrZ disk_usageZdisk_io_countersrZ net_if_addrsrrrrrrrrrrrrcontextmanagerrobjectrrrrrrrrss                           #         # (