~eddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z Gdde Z Gdd Zd Zdd Zdd ZGd dZGddZGddZGddZy)N)datetime)getProcessOutputAndValue) encode_values) to_timestampceZdZdZy) CommandErrorz:Raised when an external command returns a non-zero status.N)__name__ __module__ __qualname____doc__8/usr/lib/python3/dist-packages/landscape/lib/sysstats.pyrr sDrrcteZdZd dZedZedZedZedZedZ edZ y) MemoryStatsc$i}t|D]@}d|vs|jdd\}}|dvs"t|jd||<B|ddz|_|d|dz|d zdz|_|d dz|_|d dz|_y) N:)MemTotalSwapFree SwapTotalMemFreeBuffersCachedrrirrrrr)opensplitint total_memory free_memory total_swap free_swap)selffilenamedatalinekeyvalues r__init__zMemoryStats.__init__sN 6Dd{!ZZQ/ U!$EKKM!$4 5DI 6!,4 Od9o -X > {+t3j)T1rc4|j|jz SN)rrr"s r used_memoryzMemoryStats.used_memory(s  4#3#333rc4|j|jz Sr*)r r!r+s r used_swapzMemoryStats.used_swap,s//rcL|jt|jz dzSNd)rfloatrr+s rfree_memory_percentagez"MemoryStats.free_memory_percentage0s#  5):):#;;sBBrcl|jdk(ry|jt|jz dzSNrgr1)r r!r2r+s rfree_swap_percentagez MemoryStats.free_swap_percentage4s. ??a NNU4??%;;sB Brc d|jz Sr0)r3r+s rused_memory_percentagez"MemoryStats.used_memory_percentage;sT0000rc@|jdk(ryd|jz Sr5)r r6r+s rused_swap_percentagez MemoryStats.used_swap_percentage?s" ??a 222 2rN)z /proc/meminfo) r r r r(propertyr,r.r3r6r8r:r rrrrs2,4400CCCC 1133rrczttj}tddg|}d}|j |S)Nwhoz-q)envc|\}}}|dk7rt|jd|jddd}|jd}tt |jS)Nrascii r)rdecodersortedset)args stdout_data stderr_datastatus first_lines r parse_outputz)get_logged_in_users..parse_outputKsk+/( [& Q;{11':; ; &&ua03 &&w/ c***,-..r)rosenvironr addCallback)rLresultrJs rget_logged_in_usersrOGs8BJJ'G %edV AF/   l ++rct|d5}|j}dddj\}}t|S#1swY'xYw)z This parses a file in /proc/uptime format and returns a floating point version of the first value (the actual uptime). rN)rreadlinerr2) uptime_fileufiler$upidles r get_uptimerWVsJ k3  5~~ zz|HB 9  s AA c#K|Ftjjdrd}n$tjjdrd}nd}tt j|D]}t |yw)Nz/sys/class/hwmonz/sys/class/hwmon/*/temp*_inputz/sys/class/thermalz/sys/class/thermal/*/tempz%/proc/acpi/thermal_zone/*/temperature)rKpathisdirrCglob ThermalZone)thermal_zone_pathtemperature_paths rget_thermal_zonesr_ask 77==+ , @  WW]]/ 0 ;  G "499->#?@,*++,sA:A<ceZdZdZdZdZdZy)r\Nctjj||_tjj|j|_ t |5}tjj|dk(rg|D]a}|j ds|ddj|_|jj\}}t||_ ||_ nenc|j}t|jdz |_ d|_ dj|j|j|_dddy#1swYyxYw#tt f$rYywxYw)N temperaturez temperature: g@@Cz {:.1f} {})rKrYdirnamebasenamenamer startswithstriprbrrtemperature_valuetemperature_unitrRformat ValueErrorOSError)r"r^fr%r'units rr(zThermalZone.__init__ss7GGOO$45 GG$$TYY/  &' 177##$45F !"??>:/3BCy/@D,*.*:*:*@*@*BKE458ZD248D1! "::-GD*,/D)'2'9'9..--(D$   "G$   s7 E!9EB3E E!EE!E!!E32E3)r r r rbrjrkr(r rrr\r\msKrr\c eZdZdZdZdZdZy) LoginInfoz=Information about a login session gathered from wtmp or utmp.hi32s4s32s256shhiiiiiii20sctj|j|}|d|_|d|_|j |d|_|j |d|_|j |d|_|j |d|_ |d|_ |d|_ |d |_ tj|d |_|d |_y) Nrr )structunpack RAW_FORMAT login_typepid_strip_and_decode tty_deviceidusernamehostnametermination_status exit_status session_idrutcfromtimestamp entry_timeremote_ip_address)r"raw_datainfos rr(zLoginInfo.__init__s}}T__h7q'700a9((a1..tAw7 ..tAw7 "&q'7q'"33DG<!%brcB|jdjdS)z>Helper method to strip b"" and return a utf-8 decoded string.zutf-8)rirB)r" bytestrings rrzLoginInfo._strip_and_decodes&--g66rN)r r r r rr(rr rrrrrrsG.J *7rrrc"eZdZdZdZdZdZy)LoginInfoReaderzwReader parses C{/var/log/wtmp} and/or C{/var/run/utmp} files. @file: Initialize the reader with an open file. cb||_tjtj|_yr*)_filer~calcsizerrr_struct_length)r"files rr(zLoginInfoReader.__init__s  $ooi.B.BCrc#<K |j}|sy|w)z2Returns a generator that yields LoginInfo objects.N) read_next)r"rs r login_infozLoginInfoReader.login_infos%>>#DJ sc|jj|j}|r#t||jk(r t |Sy)z9Returns login data or None if no login data is available.N)rreadrlenrr)r"r$s rrzLoginInfoReader.read_nexts;zzt223 CI!4!44T? "rN)r r r r r(rrr rrrrs Drrc.eZdZdZdZ ddZdZdZy) BootTimesNc.||_||_||_yr*) _filename_boots_newer_than_shutdowns_newer_than)r"r#boots_newer_thanshutdowns_newer_thans rr(zBootTimes.__init__s "!1%9"rc4g}g}t|jd5}t|}|j|_|j |_|jD]}|jjdst|j}|jdk(r(||jkDr|j|||_k|jdk(s{||j kDs|j|||_ ddd||fS#1swY||fSxYw)Nrb~rebootshutdown)rrrr _last_bootr_last_shutdownrrrhrrrappend)r" reboot_timesshutdown_timeslogin_info_filereaderr timestamps r get_timeszBootTimes.get_timess  $..$ ' 8?$_5F"44DO"&"<"rsm  ;00E9E3333l , ,>77<<**r