o c@sddlmZddlZddlZddlZddlZddlmZddlmZddl m Z Gddde Z Gdd d e Zd d Zdd dZdddZGddde ZGddde ZGddde ZGddde ZdS))datetimeN)getProcessOutputAndValue) encode_values) to_timestampc@seZdZdZdS) CommandErrorz:Raised when an external command returns a non-zero status.N)__name__ __module__ __qualname____doc__r r 8/usr/lib/python3/dist-packages/landscape/lib/sysstats.pyr src@s^eZdZdddZeddZeddZedd Zed d Zed d Z eddZ dS) MemoryStats /proc/meminfocCsi}t|D]}d|vr"|dd\}}|dvr"t|d||<q|dd|_|d|d|d d|_|d d|_|d d|_dS) N:)MemTotalSwapFree SwapTotalMemFreeBuffersCachedrrirrrrr)opensplitint total_memory free_memory total_swap free_swap)selffilenamedatalinekeyvaluer r r __init__s zMemoryStats.__init__cC |j|jSN)rrrr r r used_memory" zMemoryStats.used_memorycCr%r&)rrr'r r r used_swap&r)zMemoryStats.used_swapcCs|jt|jdSNd)rfloatrr'r r r free_memory_percentage*sz"MemoryStats.free_memory_percentagecCs"|jdkrdS|jt|jdSNrgr,)rrr-r'r r r free_swap_percentage.s z MemoryStats.free_swap_percentagecCs d|jSr+)r.r'r r r used_memory_percentage5s z"MemoryStats.used_memory_percentagecCs|jdkrdSd|jSr/)rr0r'r r r used_swap_percentage9s  z MemoryStats.used_swap_percentageN)r) rrr r$propertyr(r*r.r0r1r2r r r r r s      r cCs,ttj}tddg|d}dd}||S)Nwhoz-q)envcSsJ|\}}}|dkrt|d|ddd}|d}tt|S)Nrascii r)rdecodersortedset)args stdout_data stderr_datastatus first_liner r r parse_outputEs  z)get_logged_in_users..parse_output)rosenvironr addCallback)rBresultr@r r r get_logged_in_usersAs  rE /proc/uptimecCsFt|d }|}Wdn1swY|\}}t|S)z This parses a file in /proc/uptime format and returns a floating point version of the first value (the actual uptime). rN)rreadlinerr-) uptime_fileufiler upidler r r get_uptimeOs   rMccsT|durtjdrd}nd}tj|r&tt|D] }t||VqdSdS)Nz/sys/class/thermalz/proc/acpi/thermal_zone)rApathisdirr9listdir ThermalZone)thermal_zone_path zone_namer r r get_thermal_zonesZs  rTc@s eZdZdZdZdZddZdS)rQNc CsJ||_tj|||_tj|jd}tj|rcz?t|-}|}zt|d|_ d|_ d |j |j |_ Wn t yCYnwWdn 1sNwYWdSWdStybYdSwtj|jd}tj|rt|D]-}|dr|dd|_ z|j \}}t||_ ||_ Wqut yYquwqudSdS)Ntempg@@Cz {:.1f} {} temperaturez temperature: )namerArNjoinisfilerrHrstriptemperature_valuetemperature_unitformatrW ValueErrorEnvironmentError startswithr)r base_pathrYtemperature_pathfr!r#unitr r r r$ksH   (       zThermalZone.__init__)rrr rWr]r^r$r r r r rQes  rQc@s$eZdZdZdZddZddZdS) LoginInfoz=Information about a login session gathered from wtmp or utmp.hi32s4s32s256shhiiiiiii20scCst|j|}|d|_|d|_||d|_||d|_||d|_||d|_ |d|_ |d|_ |d |_ t |d |_|d |_dS) Nrr )structunpack RAW_FORMAT login_typepid_strip_and_decode tty_deviceidusernamehostnametermination_status exit_status session_idrutcfromtimestamp entry_timeremote_ip_address)rraw_datainfor r r r$s     zLoginInfo.__init__cCs|ddS)z>Helper method to strip b"" and return a utf-8 decoded string.zutf-8)r\r8)r bytestringr r r rwszLoginInfo._strip_and_decodeN)rrr r rtr$rwr r r r rgs  rgc@s(eZdZdZddZddZddZdS) LoginInfoReaderzwReader parses C{/var/log/wtmp} and/or C{/var/run/utmp} files. @file: Initialize the reader with an open file. cCs||_ttj|_dSr&)_filerrcalcsizergrt_struct_length)rfiler r r r$szLoginInfoReader.__init__ccs |}|s dS|Vq)z2Returns a generator that yields LoginInfo objects.TN) read_next)rrr r r login_infoszLoginInfoReader.login_infocCs,|j|j}|rt||jkrt|SdS)z9Returns login data or None if no login data is available.N)rreadrlenrg)rr r r r rszLoginInfoReader.read_nextN)rrr r r$rrr r r r rs  rc@s2eZdZdZdZ  d ddZddZdd ZdS) BootTimesN /var/log/wtmprcCs||_||_||_dSr&) _filename_boots_newer_than_shutdowns_newer_than)rrboots_newer_thanshutdowns_newer_thanr r r r$s zBootTimes.__init__cCsg}g}t|jdN}t|}|j|_|j|_|D]2}|j drMt |j }|j dkr;||jkr;| |||_q|j dkrM||jkrM| |||_qWd||fS1s[wY||fS)Nrb~rebootshutdown)rrrr _last_bootr_last_shutdownrrxrbrrrzappend)r reboot_timesshutdown_timeslogin_info_filereaderr timestampr r r get_timess.          zBootTimes.get_timescCs$|jdurttt|_|jSr&)rrtimerMr'r r r get_last_boot_times zBootTimes.get_last_boot_time)rrr)rrr rrr$rrr r r r rs  r)rFr&)rrAos.pathrrrtwisted.internet.utilsrlandscape.lib.encodingrlandscape.lib.timestampr Exceptionrobjectr rErMrTrQrgrrr r r r s"    0   %