Refactor sorting code

This commit is contained in:
Nicolargo 2014-08-05 19:48:43 +02:00
parent a809268545
commit 77b3a888c0
5 changed files with 42 additions and 25 deletions

View File

@ -87,8 +87,7 @@ class GlancesLogs(object):
else:
# Default sort is...
process_auto_by = 'cpu_percent'
glances_processes.setsortkey(process_auto_by)
glances_processes.setautosortkey(process_auto_by)
return process_auto_by
@ -96,8 +95,8 @@ class GlancesLogs(object):
"""Reset the process_auto_by variable."""
# Default sort is...
process_auto_by = 'cpu_percent'
glances_processes.setsortkey(process_auto_by)
glances_processes.setautosortkey(process_auto_by)
glances_processes.setmanualsortkey(None)
return process_auto_by

View File

@ -44,7 +44,7 @@ class GlancesProcesses(object):
self.io_old = {}
# Init stats
self.processsort = 'cpu_percent'
self.resetsort()
self.processlist = []
self.processcount = {'total': 0, 'running': 0, 'sleeping': 0, 'thread': 0}
@ -219,7 +219,7 @@ class GlancesProcesses(object):
if self.get_max_processes() is not None:
# Sort the internal dict and cut the top N (Return a list of tuple)
# tuple=key (proc), dict (returned by __get_process_stats)
processiter = sorted(processdict.items(), key=lambda x: x[1]['cpu_percent'], reverse=True)
processiter = sorted(processdict.items(), key=lambda x: x[1][self.getsortkey()], reverse=True)
for i in processiter[0:self.get_max_processes()]:
# Already existing mandatory stats
procstat = i[1]
@ -257,13 +257,34 @@ class GlancesProcesses(object):
return self.processlist
def getsortkey(self):
"""Get the current sort key for automatic sort."""
return self.processsort
"""Get the current sort key"""
if self.getmanualsortkey() is not None:
return self.getmanualsortkey()
else:
return self.getautosortkey()
def setsortkey(self, sortedby):
def getmanualsortkey(self):
"""Get the current sort key for manual sort."""
return self.processmanualsort
def getautosortkey(self):
"""Get the current sort key for automatic sort."""
return self.processautosort
def setmanualsortkey(self, sortedby):
"""Set the current sort key for manual sort."""
self.processmanualsort = sortedby
return self.processmanualsort
def setautosortkey(self, sortedby):
"""Set the current sort key for automatic sort."""
self.processsort = sortedby
return self.processsort
self.processautosort = sortedby
return self.processautosort
def resetsort(self):
"""Set the default sort: Auto"""
self.setmanualsortkey(None)
self.setautosortkey('cpu_percent')
def getsortlist(self, sortedby=None):
"""Get the sorted processlist."""

View File

@ -203,6 +203,7 @@ class GlancesCurses(object):
elif self.pressedkey == ord('a'):
# 'a' > Sort processes automatically
self.args.process_sorted_by = 'auto'
glances_processes.resetsort()
elif self.pressedkey == ord('b'):
# 'b' > Switch between bit/s and Byte/s for network IO
# self.net_byteps_tag = not self.net_byteps_tag
@ -210,6 +211,7 @@ class GlancesCurses(object):
elif self.pressedkey == ord('c'):
# 'c' > Sort processes by CPU usage
self.args.process_sorted_by = 'cpu_percent'
glances_processes.setmanualsortkey(self.args.process_sorted_by)
elif self.pressedkey == ord('d'):
# 'd' > Show/hide disk I/O stats
self.args.disable_diskio = not self.args.disable_diskio
@ -225,18 +227,21 @@ class GlancesCurses(object):
elif self.pressedkey == ord('i'):
# 'i' > Sort processes by IO rate (not available on OS X)
self.args.process_sorted_by = 'io_counters'
glances_processes.setmanualsortkey(self.args.process_sorted_by)
elif self.pressedkey == ord('l'):
# 'l' > Show/hide log messages
self.args.disable_log = not self.args.disable_log
elif self.pressedkey == ord('m'):
# 'm' > Sort processes by MEM usage
self.args.process_sorted_by = 'memory_percent'
glances_processes.setmanualsortkey(self.args.process_sorted_by)
elif self.pressedkey == ord('n'):
# 'n' > Show/hide network stats
self.args.disable_network = not self.args.disable_network
elif self.pressedkey == ord('p'):
# 'p' > Sort processes by name
self.args.process_sorted_by = 'name'
glances_processes.setmanualsortkey(self.args.process_sorted_by)
elif self.pressedkey == ord('r'):
# 'r' > Reset history
self.reset_history_tag = not self.reset_history_tag

View File

@ -107,17 +107,13 @@ class Plugin(GlancesPlugin):
ret.append(self.curse_add_line(msg))
# Display sort information
try:
args.process_sorted_by
except AttributeError:
args.process_sorted_by = glances_processes.getsortkey()
if args.process_sorted_by == 'auto':
if glances_processes.getmanualsortkey() is None:
msg = _("sorted automatically")
ret.append(self.curse_add_line(msg))
msg = _(" by {0}").format(glances_processes.getsortkey())
msg = _(" by {0}").format(glances_processes.getautosortkey())
ret.append(self.curse_add_line(msg))
else:
msg = _("sorted by {0}").format(args.process_sorted_by)
msg = _("sorted by {0}").format(glances_processes.getmanualsortkey())
ret.append(self.curse_add_line(msg))
# Return the message with decoration

View File

@ -74,14 +74,10 @@ class Plugin(GlancesPlugin):
return ret
# Compute the sort key
try:
args.process_sorted_by
except AttributeError:
args.process_sorted_by = glances_processes.getsortkey()
if args.process_sorted_by == 'auto':
process_sort_key = glances_processes.getsortkey()
if glances_processes.getmanualsortkey() is None:
process_sort_key = glances_processes.getautosortkey()
else:
process_sort_key = args.process_sorted_by
process_sort_key = glances_processes.getmanualsortkey()
sort_style = 'SORT'
# Header