3 ̪e=I@sdZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZdgZe e dZ!e e dZ"e e dZ#ej$Z%ej&Z&e j'e j(e j)e j*e j+e j,e j-e j,e j.e j/iZ0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:e j;e je j?e j@e jAe jBe jCe jDe jEe jFe jGe jHi ZIeJdddddddd d!ZKed"d#d$gZLeLZMed%d&d'd(d)gZNed*d+d,d-d.d/gZOd0d1ZPd2d3ZQd4d5ZRd6d7ZSd8d9ZTd:d;ZUdszcpu_times..)r3 per_cpu_timesr)zip)retr4r4r5 cpu_times~srBcCstj}dd|DS)z6Return system per-CPU times as a list of named tuples.cSsg|] }t|qSr4)r))r<r=r4r4r5r>sz!per_cpu_times..)r3r?)rAr4r4r5r?sr?c Cs$y tjdStk rdSXdS)z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)ossysconf ValueErrorr4r4r4r5cpu_count_logicals rGcCsvdddg}tj|tjtjd}|j\}}trDdd||fD\}}|jdkr^td||f|jj}t |ptdS) NZlsdevz-Cc processor)stdoutstderrcss|]}|jtjjVqdS)N)decodesysrIencoding)r<r=r4r4r5 sz"cpu_count_cores..rz%r command error %s) subprocessPopenPIPE communicater returncode RuntimeErrorstrip splitlineslen)cmdprIrJZ processorsr4r4r5cpu_count_coress    rZcCs tj\}}}}tj||||S)z*Return various CPU stats as a named tuple.)r3 cpu_statsr scpustats) ctx_switches interruptssoft_interruptssyscallsr4r4r5r[sr[Fc Cslg}tj}xZ|D]R}|\}}}}|dkr.d}|s>t|js>qd}} tj|||||| } |j| qW|S)zReturn system disk partitions.noneN)r3disk_partitions disk_usager.r sdiskpartappend) allretlist partitions partitiondevice mountpointfstypeoptsmaxfilemaxpathntupler4r4r5rcs   rcc Cstj}||kr.td|djdd|Dftj|\}}tj|}g}x`|D]X}|\}} } } } } }| |krpqP| |krzqPt|| | | | | t|dkr|ndd}|j|qPW|S) zReturn socket connections. If pid == -1 return system-wide connections (as opposed to connections opened by one process only). z+invalid %r kind argument; choose between %sz, cSsg|] }t|qSr4)repr)r<r=r4r4r5r>sz#net_connections..rN)pid) r conn_tmaprFjoinr3net_connectionsr TCP_STATUSESrf)kind_pidZcmapfamiliestypesrawlistrAitemfdfamtype_laddrraddrr&rsntr4r4r5rws2  rwcCsttd}tddtD}i}x|D]}tj|}tj|}d}d}tjdd|gtj tj d}|j \} } t rd d | | fD\} } |j dkrt jd | } | d k rt| jd }| jd}dj|} d|k} |j|t}tj| |||| ||<q(W|S)z)Get NIC stats (isup, duplex, speed, mtu).)FullZHalfcSsg|] }|dqS)rr4)r<r=r4r4r5r>sz net_if_stats..rbrz/usr/bin/entstatz-d)rIrJcss|]}|jtjjVqdS)N)rKrLrIrM)r<r=r4r4r5rN sznet_if_stats..z"Running: (\d+) Mbps.*?(\w+) DuplexNrr,running)rr set net_if_addrs cext_posixZ net_if_mtuZ net_if_flagsrOrPrQrRrrSresearchintgrouprvgetr r snicstats)Z duplex_mapnamesrAnamemtuflagsduplexspeedrYrIrJZ re_resultZ output_flagsisupr4r4r5 net_if_statss4          rcCstjS)z:The system boot time expressed in seconds since the epoch.)r3 boot_timer4r4r4r5r"src Cs`g}tj}d}xJ|D]B}|\}}}}}} |s0q||krAszpids..)rDlistdirrr4r4r4r5pids?srcCstjjtjjtt|dS)z&Check for the existence of a unix pid.Zpsinfo)rDpathexistsrvrstr)rsr4r4r5 pid_existsDsrcstjfdd}|S)zCall callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c szy|f||Sttfk rTt|js>t|j|jnt|j|j|jYn"tk rtt |j|jYnXdS)N) rrrrsr _namer _ppidrr )selfargskwargs)funr4r5wrapperNs z wrap_exceptions..wrapper) functoolswraps)rrr4)rr5wrap_exceptionsIsrc@sxeZdZdZdddddgZddZd d Zd d Zee d dZ ee ddZ eddZ eddZ eddZeddZeddZeddZereddZedAd d!Zed"d#Zed$d%Zed&d'Zed(d)Zed*d+Zed,d-Zed.d/Zed0d1Zed2d3ZeZed4d5Zd6d7Z ed8d9Z!ed:d;Z"edBd=d>Z#e$rted?d@Z%d.zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//rzcannot be retrieved)rOrPrrsrQrRrlowerr rrfindallrU startswithrfr popenfiler)rrYrIrJZ procfilesrhrrr4r4r5 open_filess&       zProcess.open_filescCs(|jdkrdSttjd|j|jfS)Nrz%s/%s/fd)rsrWrDrr)rr4r4r5num_fds,s zProcess.num_fdscCstjtj|jS)N)rpctxswr3Zproc_num_ctx_switchesrs)rr4r4r5num_ctx_switches2szProcess.num_ctx_switchesNcCstj|j||jS)N)rZwait_pidrsr)rtimeoutr4r4r5wait6sz Process.waitc CsXytj|j\}}}}Wn.tk rFt|js@t|j|jYnXtj||||S)N) r3rrsOSErrorrr rrpio)rrcZwcrbwbr4r4r5 io_counters<s zProcess.io_counters)r)N)&__name__ __module__ __qualname____doc__ __slots__rrrrrrrrrrrr#r% HAS_THREADSrrrrr rrrBrrrZmemory_full_infor&rrrrHAS_PROC_IO_COUNTERSrr4r4r4r5r`sJ                  r)Frt)rt)drrrrDrrOrL collectionsrrbrrrr3rrrr r r r r rrrr_compatrrrrZ__extra__all__hasattrrZHAS_NET_IO_COUNTERSrZ getpagesizeZ PAGE_SIZEZAF_LINKZSIDL STATUS_IDLEZSZOMB STATUS_ZOMBIEZSACTIVESTATUS_RUNNINGZSSWAPZSSTOPSTATUS_STOPPEDrZTCPS_ESTABLISHEDCONN_ESTABLISHEDZ TCPS_SYN_SENT CONN_SYN_SENTZ TCPS_SYN_RCVD CONN_SYN_RECVZTCPS_FIN_WAIT_1CONN_FIN_WAIT1ZTCPS_FIN_WAIT_2CONN_FIN_WAIT2ZTCPS_TIME_WAITCONN_TIME_WAITZ TCPS_CLOSED CONN_CLOSEZTCPS_CLOSE_WAITCONN_CLOSE_WAITZ TCPS_LAST_ACK CONN_LAST_ACKZ TCPS_LISTEN CONN_LISTENZ TCPS_CLOSING CONN_CLOSINGZPSUTIL_CONN_NONE CONN_NONErxdictrr(Zpfullmemr)r-r6r:rBr?rGrZr[Zdisk_io_countersrdrcrrrwrrrrrrrr4r4r4r5s                              !,