U =_{H@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#e$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..)r1 per_cpu_timesr(zipretr2r2r3 cpu_times}sr?cCst}dd|DS)z5Return system per-CPU times as a list of named tuplescSsg|] }t|qSr2)r(r7r2r2r3r:sz!per_cpu_times..)r1r;r=r2r2r3r;sr;cCs(z tdWStk r"YdSXdS)z0Return the number of logical CPUs in the system.SC_NPROCESSORS_ONLNN)ossysconf ValueErrorr2r2r2r3cpu_count_logicals rDcCsrd}tj|dtjtjd}|\}}tr@dd||fD\}}|jdkrZtd||f|}t |ppdS)Nzlsdev -Cc processorT)shellstdoutstderrcSsg|]}|tjjqSr2decodesysrFencodingr7r2r2r3r:sz&cpu_count_physical..rz%r command error %s) subprocessPopenPIPE communicater returncode RuntimeErrorstrip splitlineslen)cmdprFrGZ processorsr2r2r3cpu_count_physicals     rWcCs t\}}}}t||||S)z*Return various CPU stats as a named tuple.)r1 cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsr2r2r3rXsrXFc Cshg}t}|D]R}|\}}}}|dkr,d}|s.raNpid) rZ conn_tmaprCjoinr1net_connectionsr TCP_STATUSESr\)kind_pidZcmapZfamiliestypesrawlistr>itemfdZfamZtype_ZladdrZraddrr%rdntr2r2r3rfs(  rfc Csttd}tddtD}i}|D]}t|\}}d}d}tjdd|gtjtjd}| \} } t rd d| | fD\} } |j dkrt d | } | d k rt| d }| d }||t}t||||||<q&|S)z)Get NIC stats (isup, duplex, speed, mtu).)ZFullZHalfcSsg|] }|dqS)rr2r7r2r2r3r:sz net_if_stats..rYrz/usr/bin/entstatz-drFrGcSsg|]}|tjjqSr2rHr7r2r2r3r:sz"Running: (\d+) Mbps.*?(\w+) DuplexNrr)r r set net_if_addrsr1 net_if_statsrLrMrNrOrrPresearchintgroupgetrrZ snicstats) Z duplex_mapnamesr>nameZisupZmtuZduplexZspeedrVrFrGZ re_resultr2r2r3rrs:      rrcCstS)z:The system boot time expressed in seconds since the epoch.)r1 boot_timer2r2r2r3rzsrzc 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)r1usersrZsuserr\) r^rkr{rlr)ZttyZhostnameZtstampZ user_processrdrnr2r2r3r|s r|cCsddttDS)z7Returns a list of PIDs currently running on the system.cSsg|]}|rt|qSr2)isdigitrur7r2r2r3r:-szpids..)rAlistdirr r2r2r2r3pids+srcCstjtjtt|dS)z&Check for the existence of a unix pid.Zpsinfo)rApathexistsrer strrcr2r2r3 pid_exists0srcstfdd}|S)zCall callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c s|z|f||WSttfk rVt|js@t|j|jnt|j|j|jYn"tk rvt |j|jYnXdSN) rrrrdr_namer_ppidrr)selfargskwargsfunr2r3wrapper9s z wrap_exceptions..wrapper) functoolswraps)rrr2rr3wrap_exceptions5s rc@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%dr2r2r3 connectionsszProcess.connectionscCs t|jSr) cext_posix getpriorityrdrr2r2r3nice_getszProcess.nice_getcCst|j|Sr)r setpriorityrd)rvaluer2r2r3nice_setszProcess.nice_setcCs|td|_|jS)Nr)rrrrr2r2r3rsz Process.ppidcCs"|\}}}}}}t|||SrrrZpuids)rreal effectivesaved_r2r2r3uidssz Process.uidscCs"|\}}}}}}t|||Srr)rrrrrr2r2r3gidssz Process.gidscCst|j|j}tj|Sr)r1Zproc_cpu_timesrdrrZ pcputimes)rr?r2r2r3r?szProcess.cpu_timescCsP|td}|d@d?|d@B}tdD]}t|j|kr.|Sq.dS)Nr&liz /dev/**/*)rrglobrArst_rdev)rZttydevZdevr2r2r3terminals  zProcess.terminalcCsV|j}z td||jf}|dWStk rPtd||jfYdSXdS)Nz %s/%s/cwd/r)rrAreadlinkrdrrr)rZ procfs_pathresultr2r2r3rs z Process.cwdcCs2|}|tdd}|tdd}t||S)Nr ir!)rrr')rr>r r!r2r2r3 memory_infoszProcess.memory_infocCs|td}t|dS)Nr%?)rr PROC_STATUSESrw)rcoder2r2r3r%szProcess.statuscCstjddt|jgtjtjd}|\}}trFdd||fD\}}d|kr`t|j|j t d|}g}|D]J\}}| }| dr|d d}|d krqt|t|t|qt|S) Nz/usr/bin/procfilesz-nrocSsg|]}|tjjqSr2rHr7r2r2r3r:sz&Process.open_files..zno such processz (\d+): S_IFREG.*\s*.*name:(.*)\nz//rzcannot be retrieved)rLrMrrdrNrOrlowerrrrsfindallrR startswithr\rZ popenfileru)rrVrFrGZ procfilesr^rmrr2r2r3 open_filess*        zProcess.open_filescCs(|jdkrdSttd|j|jfS)Nrz%s/%s/fd)rdrTrAr~rrr2r2r3num_fdss zProcess.num_fdscCstjt|jSr)rZpctxswr1Zproc_num_ctx_switchesrdrr2r2r3num_ctx_switchess zProcess.num_ctx_switchesNcCst|j||jSr)rZwait_pidrdr)rZtimeoutr2r2r3waitsz Process.waitcCsXzt|j\}}}}Wn.tk rFt|js@t|j|jYnXt||||Sr) r1rrdOSErrorrrrrZpio)rZrcZwcrbwbr2r2r3 io_counterss zProcess.io_counters)r)N)&__name__ __module__ __qualname____doc__ __slots__rrrrr rrryrrrr"r$ HAS_THREADSrrrrrrrr?rrrZmemory_full_infor%rrrrHAS_PROC_IO_COUNTERSrr2r2r2r3rJsv                       r)F)ra)errrrArsrLrJ collectionsrrYrrrr1rrrr r r r r rrrrZ_compatrrrrZ__extra__all__hasattrrZHAS_NET_IO_COUNTERSrZ getpagesizeZ PAGE_SIZEZAF_LINKZSIDLZ STATUS_IDLEZSZOMBZ STATUS_ZOMBIEZSACTIVEZSTATUS_RUNNINGZSSWAPZSSTOPZSTATUS_STOPPEDrZTCPS_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_NONEZ CONN_NONErgdictrr'Zpfullmemr(r+r4r5r?r;rDrWrXZdisk_io_countersr[rZrqrrfrrrzr|rrrobjectrr2r2r2r3s                            %