Enhance Glances browser color (issue #977)

This commit is contained in:
nicolargo 2017-05-08 22:30:45 +02:00
parent 4ac8368002
commit efaadb4b2a
5 changed files with 37 additions and 16 deletions

View File

@ -114,8 +114,11 @@ class GlancesClientBrowser(object):
# CPU%
cpu_percent = 100 - json.loads(s.getCpu())['idle']
server['cpu_percent'] = '{:.1f}'.format(cpu_percent)
# !!! Not correct because we have to look system and iowait too...
server['cpu_percent_views'] = json.loads(s.getViewsCpu())['user']['decoration']
# MEM%
server['mem_percent'] = json.loads(s.getMem())['percent']
server['mem_percent_views'] = json.loads(s.getViewsMem())['used']['decoration']
# OS (Human Readable name)
server['hr_name'] = json.loads(s.getSystem())['hr_name']
except (socket.error, Fault, KeyError) as e:
@ -140,6 +143,7 @@ class GlancesClientBrowser(object):
# LOAD
load_min5 = json.loads(s.getLoad())['min5']
server['load_min5'] = '{:.2f}'.format(load_min5)
server['load_percent_views'] = json.loads(s.getViewsLoad())['min5']['decoration']
except Exception as e:
logger.warning(
"Error while grabbing stats form {}: {}".format(uri, e))

View File

@ -197,17 +197,17 @@ class GlancesCursesBrowser(_GlancesCurses):
# ================================
# Table of table
# Item description: [stats_id, column name, column size]
# Item description: [stats_id, column name, column size, status_key]
column_def = [
['name', 'Name', 16],
['alias', None, None],
['load_min5', 'LOAD', 6],
['cpu_percent', 'CPU%', 5],
['mem_percent', 'MEM%', 5],
['status', 'STATUS', 9],
['ip', 'IP', 15],
['name', 'Name', 16, 'status'],
['alias', None, None, 'status'],
['load_min5', 'LOAD', 6, 'status'],
['cpu_percent', 'CPU%', 5, 'cpu_percent_views'],
['mem_percent', 'MEM%', 5, 'mem_percent_views'],
['status', 'STATUS', 9, 'status'],
['ip', 'IP', 15, 'status'],
# ['port', 'PORT', 5],
['hr_name', 'OS', 16],
['hr_name', 'OS', 16, 'status'],
]
y = 2
@ -261,9 +261,13 @@ class GlancesCursesBrowser(_GlancesCurses):
xc += 2
for c in column_def:
if xc < screen_x and y < screen_y and c[1] is not None:
# Get the status key in the list
status = c[3]
if status not in v or v['status'] == 'OFFLINE':
status = 'status'
# Display server stats
self.term_window.addnstr(
y, xc, format(server_stat[c[0]]), c[2], self.colors_list[v['status']])
y, xc, format(server_stat[c[0]]), c[2], self.colors_list[v[status]])
xc += c[2] + self.space_between_column
cpt += 1
# Next line, next server...

View File

@ -447,15 +447,17 @@ class GlancesPlugin(object):
item_views = self.views[item]
if key is None:
return item_views
ret = item_views
else:
if option is None:
return item_views[key]
ret = item_views[key]
else:
if option in item_views[key]:
return item_views[key][option]
ret = item_views[key][option]
else:
return 'DEFAULT'
ret = 'DEFAULT'
return self._json_dumps(ret)
def load_limits(self, config):
"""Load limits from the configuration file, if it exists."""

View File

@ -124,7 +124,6 @@ class GlancesXMLRPCServer(SimpleXMLRPCServer, object):
"""Main loop"""
while not self.finished:
self.handle_request()
logger.info(self.finished)
class GlancesInstance(object):

View File

@ -54,9 +54,21 @@ class GlancesStats(object):
The goal is to dynamically generate the following methods:
- getPlugname(): return Plugname stat in JSON format
- getViewsPlugname(): return views of the Plugname stat in JSON format
"""
# Check if the attribute starts with 'get'
if item.startswith('get'):
if item.startswith('getViews'):
# Get the plugin name
plugname = item[len('getViews'):].lower()
# Get the plugin instance
plugin = self._plugins[plugname]
if hasattr(plugin, 'get_views'):
# The method get_views exist, return it
return getattr(plugin, 'get_views')
else:
# The method get_views is not found for the plugin
raise AttributeError(item)
elif item.startswith('get'):
# Get the plugin name
plugname = item[len('get'):].lower()
# Get the plugin instance