diff options
author | nicolargo <nicolas@nicolargo.com> | 2021-01-23 09:08:24 +0100 |
---|---|---|
committer | nicolargo <nicolas@nicolargo.com> | 2021-01-23 09:08:24 +0100 |
commit | 18394fa72dc5b97e58ecb9df36de10cc0545898b (patch) | |
tree | ed195e3fc828e15232f41f4b9486e834e771b8f7 | |
parent | c3ef20c3616d3df2e3a59e4a003b47f61c0e38e0 (diff) |
Optimize plugins space by not displaying 0 stats in Curse interface #1787
-rw-r--r-- | glances/plugins/glances_diskio.py | 12 | ||||
-rw-r--r-- | glances/plugins/glances_network.py | 24 | ||||
-rw-r--r-- | glances/plugins/glances_plugin.py | 48 |
3 files changed, 68 insertions, 16 deletions
diff --git a/glances/plugins/glances_diskio.py b/glances/plugins/glances_diskio.py index 52ddfebc..3fe66543 100644 --- a/glances/plugins/glances_diskio.py +++ b/glances/plugins/glances_diskio.py @@ -23,6 +23,7 @@ from __future__ import unicode_literals from glances.compat import nativestr, n from glances.timer import getTimeSinceLastUpdate from glances.plugins.glances_plugin import GlancesPlugin +from glances.logger import logger import psutil @@ -51,6 +52,9 @@ class Plugin(GlancesPlugin): # We want to display the stat in the curse interface self.display_curse = True + # Hide stats if it has never been != 0 + self.hide_zero = True + self.hide_zero_fields = ['read_bytes', 'write_bytes'] def get_key(self): """Return the key of the list.""" @@ -143,9 +147,12 @@ class Plugin(GlancesPlugin): # Call the father's method super(Plugin, self).update_views() + # Check if the stats should be hidden + self.update_views_hidden() + # Add specifics informations # Alert - for i in self.stats: + for i in self.get_raw(): disk_real_name = i['disk_name'] self.views[i[self.get_key()]]['read_bytes']['decoration'] = self.get_alert(int(i['read_bytes'] // i['time_since_update']), header=disk_real_name + '_rx') @@ -179,6 +186,9 @@ class Plugin(GlancesPlugin): ret.append(self.curse_add_line(msg)) # Disk list (sorted by name) for i in self.sorted_stats(): + # Hide stats if never be different from 0 (issue #1787) + if all([self.get_views(item=i[self.get_key()], key=f, option='hidden') for f in self.hide_zero_fields]): + continue # Is there an alias for the disk name ? disk_real_name = i['disk_name'] disk_name = self.has_alias(i['disk_name']) diff --git a/glances/plugins/glances_network.py b/glances/plugins/glances_network.py index 12388eb0..2adf3653 100644 --- a/glances/plugins/glances_network.py +++ b/glances/plugins/glances_network.py @@ -61,6 +61,9 @@ class Plugin(GlancesPlugin): # We want to display the stat in the curse interface self.display_curse = True + # Hide stats if it has never been != 0 + self.hide_zero = True + self.hide_zero_fields = ['rx', 'tx'] def get_key(self): """Return the key of the list.""" @@ -223,25 +226,17 @@ class Plugin(GlancesPlugin): # Call the father's method super(Plugin, self).update_views() + # Check if the stats should be hidden + self.update_views_hidden() + # Add specifics informations # Alert - for i in self.stats: + for i in self.get_raw(): ifrealname = i['interface_name'].split(':')[0] # Convert rate in bps (to be able to compare to interface speed) bps_rx = int(i['rx'] // i['time_since_update'] * 8) bps_tx = int(i['tx'] // i['time_since_update'] * 8) - # Check if the stats should be hidden - if bps_rx != 0 or bps_tx != 0: - self.views[i[self.get_key( - )]]['rx']['_zero'] = self.views[i[self.get_key()]]['rx']['hidden'] - self.views[i[self.get_key( - )]]['tx']['_zero'] = self.views[i[self.get_key()]]['rx']['hidden'] - self.views[i[self.get_key( - )]]['rx']['hidden'] = self.views[i[self.get_key()]]['rx']['_zero'] and bps_rx == 0 - self.views[i[self.get_key( - )]]['tx']['hidden'] = self.views[i[self.get_key()]]['tx']['_zero'] and bps_tx == 0 - # Decorate the bitrate with the configuration file thresolds alert_rx = self.get_alert(bps_rx, header=ifrealname + '_rx') alert_tx = self.get_alert(bps_tx, header=ifrealname + '_tx') @@ -302,9 +297,8 @@ class Plugin(GlancesPlugin): # Do not display interface in down state (issue #765) if ('is_up' in i) and (i['is_up'] is False): continue - # Hide 0 value (issue #1787) - if self.get_views(item=i[self.get_key()], key='rx', option='hidden') and \ - self.get_views(item=i[self.get_key()], key='tx', option='hidden'): + # Hide stats if never be different from 0 (issue #1787) + if all([self.get_views(item=i[self.get_key()], key=f, option='hidden') for f in self.hide_zero_fields]): continue # Format stats # Is there an alias for the interface name ? diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index 6a3f68c8..5588263d 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -99,6 +99,11 @@ class GlancesPlugin(object): # Init the views self.views = dict() + # Hide stats if all the hide_zero_fields has never been != 0 + # Default is False, always display stats + self.hide_zero = False + self.hide_zero_fields = [] + # Init the stats self.stats_init_value = stats_init_value self.stats = None @@ -422,6 +427,49 @@ class GlancesPlugin(object): "Cannot get item({})=value({}) ({})".format(item, value, e)) return None + def update_views_hidden(self): + """If the self.hide_zero is set then update the hidden field of the view + It will check if all fields values are already be different from 0 + In this case, the hidden field is set to True + + Note: This function should be called by plugin (in the update_views method) + + Example (for network plugin): + __Init__ + self.hide_zero_fields = ['rx', 'tx'] + Update views + ... + self.update_views_hidden() + """ + if not self.hide_zero: + return False + if (isinstance(self.get_raw(), list) and + self.get_raw() is not None and + self.get_key() is not None): + # Stats are stored in a list of dict (ex: NETWORK, FS...) + for i in self.get_raw(): + if any([i[f] for f in self.hide_zero_fields]): + for f in self.hide_zero_fields: + self.views[i[self.get_key( + )]][f]['_zero'] = self.views[i[self.get_key()]][f]['hidden'] + for f in self.hide_zero_fields: + self.views[i[self.get_key( + )]][f]['hidden'] = self.views[i[self.get_key()]][f]['_zero'] and i[f] == 0 + elif isinstance(self.get_raw(), dict) and self.get_raw() is not None: + # + # Warning: This code has never been tested because + # no plugin with dict instance use the hidden function... + # vvvv + # + # Stats are stored in a dict (ex: CPU, LOAD...) + for key in listkeys(self.get_raw()): + if any([self.get_raw()[f] for f in self.hide_zero_fields]): + for f in self.hide_zero_fields: + self.views[f]['_zero'] = self.views[f]['hidden'] + for f in self.hide_zero_fields: + self.views[f]['hidden'] = self.views['_zero'] and self.views[f] == 0 + return True + def update_views(self): """Update the stats views. |