ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Rc @ sdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZddlmZmZmZddlTddlmZmZmZmZmZdd d d d d gZdZdZejdZejdZy eZ Wn'e!k rjdZ e j#de$nXy eZ%Wn'e!k rdZ%e j#de$nXye j&dZ'Wn'e!k rdZ'e j#de$nXdZ(dZ)dZ*dZ+i dd6dd6dd6dd 6d!d"6d#d$6d%d&6d'd(6d)d*6d+d,6d-d.6Z,ed/d0j-d1d2d3d4d5d6d7d8d9g Z.d:Z/d;Z0e1d<d=Z2e1d>d?Z3e4d@Z5dAZ6dBZ7e8dCZ9ej:Z:dDZ;dEZ<dFZ=dGZ>dHZ?i e@dI6eAdJ6eBdK6eCdL6eDdM6eEdN6eFdO6eFdP6eGdQ6eHdR6ZIdSZJdTeKfdUYZLdS(VsLinux platform implementation.i(tdivisionN(t_psposix(t AccessDeniedt NoSuchProcesstTimeoutExpired(t*(tPY3txrangetlongt namedtupletwrapstIOPRIO_CLASS_NONEtIOPRIO_CLASS_RTtIOPRIO_CLASS_BEtIOPRIO_CLASS_IDLEtphymem_bufferst cached_phymemcC sktdd}zJx7|D]/}|jdrt|jjdSqWtdWd|jXdS(sAReturn the system boot time expressed in seconds since the epoch.s /proc/stattrtbtimeisline 'btime' not foundN(topent startswithtfloattstriptsplitt RuntimeErrortclose(tftline((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_system_boot_time s cC s5ytjdSWnwtk rd}tdd}z|j}Wd|jXx4|D](}|jjdr[|d7}q[q[WnX|dkrtdd}z|j}Wd|jXtj d }x@|D]5}|j d d}|j |r|d7}qqWn|dkr1t d n|S( s'Return the number of CPUs on the systemtSC_NPROCESSORS_ONLNis /proc/cpuinfoRNt processoris /proc/statscpu\dt s&couldn't determine platform's NUM_CPUS( tostsysconft ValueErrorRt readlinesRtlowerRtretcompileRtmatchR(tnumRtlinesRtsearch((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyt _get_num_cpus+s0       t SC_CLK_TCKt SC_PAGE_SIZEs'couldn't determine platform's BOOT_TIMEs&couldn't determine platform's NUM_CPUSis*couldn't determine platform's TOTAL_PHYMEMiiit ESTABLISHEDt01tSYN_SENTt02tSYN_RECVt03t FIN_WAIT1t04t FIN_WAIT2t05t TIME_WAITt06tCLOSEt07t CLOSE_WAITt08tLAST_ACKt09tLISTENt0AtCLOSINGt0BtvmemRttotalt availabletpercenttusedtfreetactivetinactivetbufferstcachedc C stj\}}}}}}d}}}tdd}zx|D]} | jdrwt| jdd}nX| jdrt| jdd}n,| jdrt| jdd}n|dk rE|dk rE|dk rEPqEqEWd} tj| t d }}}Wd|j X|||} ||} t || |d d} t || | | ||||| S( Ns /proc/meminfoRsCached:iisActive:s Inactive:sW'cached', 'active' and 'inactive' memory stats couldn't be determined and were set to 0it_round( t _psutil_linuxt get_sysinfotNoneRRtintRtwarningstwarntRuntimeWarningRt usage_percenttnt_virtmem_info(RERIRLtsharedt_RMRJRKRRtmsgtavailRHRG((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytvirtual_memorys0      c C s4tj\}}}}}}||}t||dd}tdd}d}}zx|D]}|jdrt|jdddd}n3|jd rt|jdddd}n|dk r`|dk r`Pq`q`Wd } tj | t d }}Wd|j Xt ||||||S( NRNis /proc/vmstatRtpswpinRiitpswpoutsK'sin' and 'sout' swap memory stats couldn't be determined and were set to 0i( RORPRVRRQRRRRRSRTRURtnt_swapmeminfo( RYRERIRHRGRtsintsoutRRZ((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyt swap_memorys$   $$ spsutil.virtual_memory().cachedcC s tjS(N(R\RM(((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyRsspsutil.virtual_memory().bufferscC s tjS(N(R\RL(((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyRscC stdd}z|jjd}Wd|jXddddd d d g}d }t|}|d kr|jd |d7}n|dkr|jd|d7}n|dkr|jd|d7}ntddj||fS(s Return a (nt, rindex) tuple depending on the CPU times available on this Linux kernel version which may be: user, nice, system, idle, iowait, irq, softirq [steal, [guest, [guest_nice]]] s /proc/statRiNtusertnicetsystemtidletiowaittirqtsoftirqitsteali tguesti t guest_nicetcputimesR(RtreadlineRRtlentappendR tjoin(Rtvaluestfieldstrindextvlen((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyt_get_cputimes_ntuples"           cC s|tdd}z|jj}Wd|jXt\}}|d|!}g|D]}t|t^qV}||S(sReturn a named tuple representing the following system-wide CPU times: user, nice, system, idle, iowait, irq, softirq [steal, [guest, [guest_nice]]] Last 3 fields may not be available on all Linux kernel versions. s /proc/statRNi(RRnRRRvRt _CLOCK_TICKS(RRrtntRtRstx((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_system_cpu_timess  #cC st\}}g}tdd}z|jxo|D]g}|jdr8|jd|!}g|D]}t|t^qg}||}|j|q8q8W|SWd|jXdS(sfReturn a list of namedtuple representing the CPU times for every CPU available on the system. s /proc/statRtcpuiN( RvRRnRRRRwRpR(RxRttcpusRRRsRytentry((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_system_per_cpu_timess  # c C sg}tdd}z:x3|D]+}|jds|j|jqqWWd|jXg}tj}x~|D]v}|\}}} } |dkrd}n|s|dksv| |krqvqnt||| | } |j| qvW|S(s6Return mounted disk partitions as a list of namedupless/proc/filesystemsRtnodevNtnonet(RRRpRRROtget_disk_partitionst nt_partition( talltphydevsRRtretlistt partitionst partitiontdevicet mountpointtfstypetoptstntuple((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytdisk_partitionss&       c C sg}tj}xl|D]d}|\}}}}}|s@qn|dkrUd}nt||pdd||}|j|qW|S(s:Return currently connected users as a list of namedtuples.s:0.0t localhostN(ROtget_system_userstnt_userRQRp( RtrawlisttitemRctttythostnamettstampt user_processRx((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyR.s    cC s8gtjdD]}|jrt|^q}|S(s7Returns a list of PIDs currently running on the system.s/proc(R tlistdirtisdigitRR(Rytpids((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyt get_pid_listAs4cC s tj|S(s&Check For the existence of a unix pid.(Rt pid_exists(tpid((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyRFsc C s?tdd}z|j}Wd|jXi}x|dD]}|jd}|dkskt||| j}||djj}t|d}t|d}t|d} t|d} t|d} t|d } t|d } t|d }| || || | | |f||W|S( ssReturn network I/O statistics for every network interface installed on the system as a dict of raw tuples. s /proc/net/devRNit:iiii i i (RR#RtfindtAssertionErrorRRRR(RR)tretdictRtcolontnameRst bytes_recvt packets_recvterrintdropint bytes_sentt packets_sentterrouttdropout((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytnetwork_io_countersJs*  c C sd}g}tdd}z|jd}Wd|jXxwt|D]i}|j\}}}}|djr|j|qJ| s|dj| rJ|j|qJqJWi}tdd}z|j}Wd|jXx|D]}|jd \ }}}}}} } } }} } ||krt| |} t| |} t|}t| } t| } t| } || | | | | f||s tmeminfos"rss vms shared text lib data dirtyc C std|j}zLg|jjd D]}t|t^q-\}}}}}}} Wd|jX|j||||||| S(Ns/proc/%s/statmi(RRRnRRRRRt _nt_ext_mem( RRRyRRRXttexttlibtdatatdirty((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_ext_memory_infoJs L RRtsizetpsst shared_cleant shared_dirtyt private_cleant private_dirtyt referencedt anonymoustswaptmmapRs addr perms c # s_dytd|jj}|gfd}|r~x2|D]$\}}|jdd}y|\}}}} } } Wn0tk r|dg\}}}} } } nX| sd} n | j} ||| |d|jdd|jd d|jd d|jd d|jd d|jd d|jdd|jdd|jddf VqSWnjWnt k r.dk rjnt j d} | j t j t jfkrt|j|jn| j t jt jfkr(t|j|jnn#dk rJjnnXjdS(sReturn process's mapped memory regions as a list of nameduples. Fields are explained in 'man proc'; here is an updated (Apr 2012) version: http://goo.gl/fmebo s/proc/%s/smapsc3 si}xoD]g}|jdd}t|dkrXj|fVj|q t|dd||d|@r |^q S(Ni@i(R(Ryti((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytR(ROtget_process_cpu_affinityR(Rt from_bitmasktbitmask((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyR8s cC sd}||}ytj|j|Wntk rtjd}|jtjkrtt t t }x0|D]%}||krt d|qqWnnXdS(NcS sw|std|nd}xQ|D]I}t|ttf sN|dkratd|n|d|O}q&W|S(Nsinvalid argument %rii(R"t isinstanceRRR(tltouttb((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyt to_bitmask s "isinvalid CPU %i( ROtset_process_cpu_affinityRRRRRtEINVALtlisttrangeRoR~R"(RR4R?R:RtallcpusR{((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyR@s    t ioprio_getcC s%tj|j\}}t||S(N(RORERt nt_ionice(RtioclassR4((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_process_ionice"scC s|tdfkr6|r'tdnt}d}n|ttfkr`|dkrd}qn0|tkr|rtdnd}nd}d|kodknstdntj|j||S(Ns*can't specify value with IOPRIO_CLASS_NONEiis*can't specify value with IOPRIO_CLASS_IDLEis0value argument range expected is between 0 and 8( R RQR"R R RROt ioprio_setR(RRGR4((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytset_process_ionice's      cC sztd|j}zUxN|D]F}|jdr|jd}|tkrVt|StddSqWWd|jXdS(Ns/proc/%s/statussState:iit?(RRRRt _status_maptconstantR(RRRtletter((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_process_status;s  cC sg}tjd|j}t}x|D]}d|j|f}tjj|r)ytj|}WnBtk rtj d}|j t j krt }q)nqX|j drt|rt|t|}|j|qq)q)W|rtjd|jn|S(Ns /proc/%s/fds/proc/%s/fd/%sit/s/proc/%s(R RRR(RtislinkRRRRRRR)Rt isfile_strictt nt_openfileRRRpR+(RRtfilesR-tfdtfileRR((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pytget_open_filesHs(  tinetc s<ixtjdjD]g}y tjdj|f}Wntk rYqnX|jdr|dd }|| ("10.0.0.5", 22) "0000000000000000FFFF00000100007F:9E49" -> ("::ffff:127.0.0.1", 40521) The IP address portion is a little or big endian four-byte hexadecimal number; that is, the least significant byte is listed first, so we need to reverse the order of the bytes to convert it to an IP address. The port is represented as a two-byte hexadecimal number. Reference: http://linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html RitasciitlittleNis>4Is<4I((RRRRtencodeRZR[Rt byteordert inet_ntoptbase64t b16decodeR\tstructtpacktunpack(RRbtiptport((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyR] s"+ $ !N(2t__name__t __module__t__doc__t __slots__RRRRRRRR RRtgetpidRRQRRRR RRt_mmap_base_fieldsRqtnt_mmap_groupedt nt_mmap_extRRRR%R&R/R2R5R8R@thasattrRORHRJRORWRxRyRzRRt staticmethodR](((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyRsZ         ?  !  {   (MRt __future__RR RRZRRRR%RSR0ROtpsutilRt psutil._errorRRRtpsutil._commontpsutil._compatRRRR R t__extra__all__RR+R!RwRRt ExceptionRQRTRUtNUM_CPUSRPt TOTAL_PHYMEMR R R RR_RqRWR\Rbt deprecatedRRtmemoizeRvRzR~R(Rtget_disk_usageRRRRRtSTATUS_RUNNINGtSTATUS_SLEEPINGtSTATUS_DISK_SLEEPtSTATUS_STOPPEDtSTATUS_TRACING_STOPt STATUS_ZOMBIEt STATUS_DEADtSTATUS_WAKE_KILLt STATUS_WAKINGRLRtobjectR(((sB/opt/alt/python27/lib64/python2.7/site-packages/psutil/_pslinux.pyts           (   %                   3