mirror of
https://github.com/powerline/powerline.git
synced 2025-07-29 16:55:07 +02:00
Make psutil.BOOT_TIME fallback for /proc/uptime
Method used with psutil.BOOT_TIME is subject to changes when clock_settime changes time, /proc/uptime is not.
This commit is contained in:
parent
f8db46b406
commit
93e41bf2c4
@ -202,33 +202,6 @@ def external_ip(query_url='http://ipv4.icanhazip.com/'):
|
|||||||
return [{'contents': _external_ip(query_url=query_url), 'divider_highlight_group': 'background:divider'}]
|
return [{'contents': _external_ip(query_url=query_url), 'divider_highlight_group': 'background:divider'}]
|
||||||
|
|
||||||
|
|
||||||
@add_divider_highlight_group('background:divider')
|
|
||||||
def uptime(format='{days:02d}d {hours:02d}h {minutes:02d}m'):
|
|
||||||
'''Return system uptime.
|
|
||||||
|
|
||||||
Uses the ``psutil`` module if available for multi-platform compatibility,
|
|
||||||
falls back to reading :file:`/proc/uptime`.
|
|
||||||
|
|
||||||
:param str format:
|
|
||||||
format string, will be passed ``days``, ``hours`` and ``minutes`` as arguments
|
|
||||||
|
|
||||||
Divider highlight group used: ``background:divider``.
|
|
||||||
'''
|
|
||||||
try:
|
|
||||||
import psutil
|
|
||||||
seconds = int((datetime.now() - datetime.fromtimestamp(psutil.BOOT_TIME)).total_seconds())
|
|
||||||
except ImportError:
|
|
||||||
try:
|
|
||||||
with open('/proc/uptime', 'r') as f:
|
|
||||||
seconds = int(float(f.readline().split()[0]))
|
|
||||||
except IOError:
|
|
||||||
return None
|
|
||||||
minutes, seconds = divmod(seconds, 60)
|
|
||||||
hours, minutes = divmod(minutes, 60)
|
|
||||||
days, hours = divmod(hours, 24)
|
|
||||||
return format.format(days=int(days), hours=hours, minutes=minutes)
|
|
||||||
|
|
||||||
|
|
||||||
# Weather condition code descriptions available at
|
# Weather condition code descriptions available at
|
||||||
# http://developer.yahoo.com/weather/#codes
|
# http://developer.yahoo.com/weather/#codes
|
||||||
weather_conditions_codes = (
|
weather_conditions_codes = (
|
||||||
@ -397,7 +370,11 @@ def system_load(format='{avg:.1f}', threshold_good=1, threshold_bad=2):
|
|||||||
|
|
||||||
Highlight groups used: ``system_load_good`` or ``system_load``, ``system_load_bad`` or ``system_load``, ``system_load_ugly`` or ``system_load``. It is recommended to define all highlight groups.
|
Highlight groups used: ``system_load_good`` or ``system_load``, ``system_load_bad`` or ``system_load``, ``system_load_ugly`` or ``system_load``. It is recommended to define all highlight groups.
|
||||||
'''
|
'''
|
||||||
cpu_num = cpu_count()
|
global cpu_count
|
||||||
|
try:
|
||||||
|
cpu_num = cpu_count()
|
||||||
|
except NotImplementedError:
|
||||||
|
return None
|
||||||
ret = []
|
ret = []
|
||||||
for avg in os.getloadavg():
|
for avg in os.getloadavg():
|
||||||
normalized = avg / cpu_num
|
normalized = avg / cpu_num
|
||||||
@ -435,6 +412,40 @@ def cpu_load_percent(measure_interval=.5):
|
|||||||
return '{0}%'.format(cpu_percent)
|
return '{0}%'.format(cpu_percent)
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists('/proc/uptime'):
|
||||||
|
def _get_uptime():
|
||||||
|
with open('/proc/uptime', 'r') as f:
|
||||||
|
return int(float(f.readline().split()[0]))
|
||||||
|
elif 'psutil' in globals():
|
||||||
|
from time import time
|
||||||
|
def _get_uptime():
|
||||||
|
# psutil.BOOT_TIME is not subject to clock adjustments, but time() is.
|
||||||
|
# Thus it is a fallback to /proc/uptime reading and not the reverse.
|
||||||
|
return int(time() - psutil.BOOT_TIME)
|
||||||
|
else:
|
||||||
|
def _get_uptime():
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
@add_divider_highlight_group('background:divider')
|
||||||
|
def uptime(format='{days:02d}d {hours:02d}h {minutes:02d}m'):
|
||||||
|
'''Return system uptime.
|
||||||
|
|
||||||
|
:param str format:
|
||||||
|
format string, will be passed ``days``, ``hours`` and ``minutes`` as arguments
|
||||||
|
|
||||||
|
Divider highlight group used: ``background:divider``.
|
||||||
|
'''
|
||||||
|
try:
|
||||||
|
seconds = _get_uptime()
|
||||||
|
except IOError, NotImplementedError:
|
||||||
|
return None
|
||||||
|
minutes, seconds = divmod(seconds, 60)
|
||||||
|
hours, minutes = divmod(minutes, 60)
|
||||||
|
days, hours = divmod(hours, 24)
|
||||||
|
return format.format(days=int(days), hours=hours, minutes=minutes)
|
||||||
|
|
||||||
|
|
||||||
@add_divider_highlight_group('background:divider')
|
@add_divider_highlight_group('background:divider')
|
||||||
def network_load(interface='eth0', measure_interval=1, suffix='B/s', si_prefix=False):
|
def network_load(interface='eth0', measure_interval=1, suffix='B/s', si_prefix=False):
|
||||||
'''Return the network load.
|
'''Return the network load.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user