summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolargo <nicolas@nicolargo.com>2022-10-02 12:46:23 +0200
committernicolargo <nicolas@nicolargo.com>2022-10-02 12:46:23 +0200
commit94d1e006926bf5f8c91289684329b30b0acfe3c0 (patch)
tree1de8d32f084f42ae27d4ae3ccd630d276ebd02e9
parent16832111eea3d7b85f5d172b0b627bdc1b18200c (diff)
Add sort information on Docker plugin (console mode). Related to #2138
-rw-r--r--glances/plugins/glances_docker.py49
-rw-r--r--glances/plugins/glances_processcount.py14
-rw-r--r--glances/processes.py11
3 files changed, 50 insertions, 24 deletions
diff --git a/glances/plugins/glances_docker.py b/glances/plugins/glances_docker.py
index 19eb6e3b..589d8709 100644
--- a/glances/plugins/glances_docker.py
+++ b/glances/plugins/glances_docker.py
@@ -58,6 +58,16 @@ items_history_list = [{'name': 'cpu_percent', 'description': 'Container CPU cons
# List of key to remove before export
export_exclude_list = ['cpu', 'io', 'memory', 'network']
+# Sort dictionary for human
+sort_for_human = {
+ 'io_counters': 'disk IO',
+ 'cpu_percent': 'CPU consumption',
+ 'memory_usage': 'memory consumption',
+ 'cpu_times': 'uptime',
+ 'name': 'container name',
+ None: 'None',
+}
+
class Plugin(GlancesPlugin):
"""Glances Docker plugin.
@@ -96,6 +106,9 @@ class Plugin(GlancesPlugin):
# value: network stats dict
self.io_old = {}
+ # Sort key
+ self.sort_key = None
+
# Force a first update because we need two update to have the first stat
self.update()
self.refresh_timer.set(0)
@@ -303,7 +316,7 @@ class Plugin(GlancesPlugin):
pass
# Sort and update the stats
- self.stats = sort_stats(stats)
+ self.sort_key, self.stats = sort_docker_stats(stats)
return self.stats
@@ -533,8 +546,10 @@ class Plugin(GlancesPlugin):
ret.append(self.curse_add_line(msg, "TITLE"))
msg = ' {}'.format(len(self.stats['containers']))
ret.append(self.curse_add_line(msg))
- msg = ' (served by Docker {})'.format(self.stats['version']["Version"])
+ msg = ' sorted by {}'.format(sort_for_human[self.sort_key])
ret.append(self.curse_add_line(msg))
+ # msg = ' (served by Docker {})'.format(self.stats['version']["Version"])
+ # ret.append(self.curse_add_line(msg))
ret.append(self.curse_new_line())
# Header
ret.append(self.curse_new_line())
@@ -545,15 +560,15 @@ class Plugin(GlancesPlugin):
len(max(self.stats['containers'], key=lambda x: len(x['name']))['name']),
)
msg = ' {:{width}}'.format('Name', width=name_max_width)
- ret.append(self.curse_add_line(msg))
+ ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'name' else 'DEFAULT'))
msg = '{:>10}'.format('Status')
ret.append(self.curse_add_line(msg))
msg = '{:>10}'.format('Uptime')
ret.append(self.curse_add_line(msg))
msg = '{:>6}'.format('CPU%')
- ret.append(self.curse_add_line(msg))
+ ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'cpu_percent' else 'DEFAULT'))
msg = '{:>7}'.format('MEM')
- ret.append(self.curse_add_line(msg))
+ ret.append(self.curse_add_line(msg, 'SORT' if self.sort_key == 'memory_usage' else 'DEFAULT'))
msg = '/{:<7}'.format('MAX')
ret.append(self.curse_add_line(msg))
msg = '{:>7}'.format('IOR/s')
@@ -700,8 +715,8 @@ class ThreadDockerGrabber(threading.Thread):
time.sleep(0.1)
if self.stopped():
break
- except:
- logger.debug("docker plugin - Exception thrown during run")
+ except Exception as e:
+ logger.debug("docker plugin - Exception thrown during run ({})".format(e))
self.stop()
@property
@@ -724,12 +739,22 @@ class ThreadDockerGrabber(threading.Thread):
return self._stopper.is_set()
-def sort_stats(stats):
+def sort_docker_stats(stats):
# Sort Docker stats using the same function than processes
- sort_by = 'cpu_percent'
+ sort_by = glances_processes.sort_key
sort_by_secondary = 'memory_usage'
- if glances_processes.sort_key.startswith('memory'):
+ if sort_by == 'memory_percent':
sort_by = 'memory_usage'
sort_by_secondary = 'cpu_percent'
- sort_stats_processes(stats['containers'], sorted_by=sort_by, sorted_by_secondary=sort_by_secondary)
- return stats
+ elif sort_by in ['username', 'io_counters', 'cpu_times']:
+ sort_by = 'cpu_percent'
+
+ # Sort docker stats
+ sort_stats_processes(stats['containers'],
+ sorted_by=sort_by,
+ sorted_by_secondary=sort_by_secondary,
+ # Reverse for all but name
+ reverse=glances_processes.sort_key != 'name')
+
+ # Return the main sort key and the sorted stats
+ return sort_by, stats
diff --git a/glances/plugins/glances_processcount.py b/glances/plugins/glances_processcount.py
index eccc4d8c..73e3176d 100644
--- a/glances/plugins/glances_processcount.py
+++ b/glances/plugins/glances_processcount.py
@@ -9,7 +9,7 @@
"""Process count plugin."""
-from glances.processes import glances_processes
+from glances.processes import glances_processes, sort_for_human
from glances.plugins.glances_plugin import GlancesPlugin
# Define the history items list
@@ -27,16 +27,6 @@ class Plugin(GlancesPlugin):
stats is a list
"""
- sort_for_human = {
- 'io_counters': 'disk IO',
- 'cpu_percent': 'CPU consumption',
- 'memory_percent': 'memory consumption',
- 'cpu_times': 'process time',
- 'username': 'user name',
- 'name': 'process name',
- None: 'None',
- }
-
def __init__(self, args=None, config=None):
"""Init the plugin."""
super(Plugin, self).__init__(args=args, config=config, items_history_list=items_history_list)
@@ -133,7 +123,7 @@ class Plugin(GlancesPlugin):
# Display sort information
msg = 'Programs' if self.args.programs else 'Threads'
try:
- sort_human = self.sort_for_human[glances_processes.sort_key]
+ sort_human = sort_for_human[glances_processes.sort_key]
except KeyError:
sort_human = glances_processes.sort_key
if glances_processes.auto_sort:
diff --git a/glances/processes.py b/glances/processes.py
index 007c50b6..acf5bdf8 100644
--- a/glances/processes.py
+++ b/glances/processes.py
@@ -20,6 +20,17 @@ import psutil
# This constant defines the list of available processes sort key
sort_processes_key_list = ['cpu_percent', 'memory_percent', 'username', 'cpu_times', 'io_counters', 'name']
+# Sort dictionary for human
+sort_for_human = {
+ 'io_counters': 'disk IO',
+ 'cpu_percent': 'CPU consumption',
+ 'memory_percent': 'memory consumption',
+ 'cpu_times': 'process time',
+ 'username': 'user name',
+ 'name': 'processs name',
+ None: 'None',
+}
+
class GlancesProcesses(object):
"""Get processed stats using the psutil library."""