diff options
author | Nicolargo <nicolas@nicolargo.com> | 2014-12-18 21:23:27 +0100 |
---|---|---|
committer | Nicolargo <nicolas@nicolargo.com> | 2014-12-18 21:23:27 +0100 |
commit | 96d2e841ded2d027dcf6e64179b58d6290367502 (patch) | |
tree | d0b2cbdd18fbb8986e398e1ae4ca9e01c261fa49 | |
parent | 56e35e4b04a26b0bcfb15694a779f8c5ea3042f3 (diff) |
Correct check issue error in client/server mode (issue #459) + exit on check failed + correct another issue on Linux CPU SNMP
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | glances/core/glances_client.py | 49 | ||||
-rw-r--r-- | glances/core/glances_client_browser.py | 7 | ||||
-rw-r--r-- | glances/plugins/glances_cpu.py | 2 |
4 files changed, 31 insertions, 28 deletions
@@ -7,6 +7,7 @@ Version 2.X * Fix incorrect kernel thread detection with --hide-kernel-threads (issue #457) * Handle IOError exception if no /etc/os-release to use Glances on Synology DSM (issue #458) + * Check issue error in client/server mode (issue #459) Version 2.2 =========== diff --git a/glances/core/glances_client.py b/glances/core/glances_client.py index 49fe058c..c09f0cb0 100644 --- a/glances/core/glances_client.py +++ b/glances/core/glances_client.py @@ -61,6 +61,9 @@ class GlancesClient(object): # Client mode: self.set_mode() + # Return to browser or exit + self.return_to_browser = return_to_browser + # Build the URI if args.password != "": uri = 'http://{0}:{1}@{2}:{3}'.format(args.username, args.password, @@ -76,12 +79,15 @@ class GlancesClient(object): try: self.client = ServerProxy(uri, transport=transport) except Exception as e: - msg = "Client couldn't create socket {0}: {1}".format(uri, e) - if not return_to_browser: - logger.critical(msg) - sys.exit(2) - else: - logger.error(msg) + self.log_and_exit("Client couldn't create socket {0}: {1}".format(uri, e)) + + def log_and_exit(self, msg=''): + """Log and (exit)""" + if not self.return_to_browser: + logger.critical(msg) + sys.exit(2) + else: + logger.error(msg) def set_mode(self, mode='glances'): """Set the client mode. @@ -100,7 +106,7 @@ class GlancesClient(object): """ return self.mode - def login(self, return_to_browser=False): + def login(self): """Logon to the server.""" ret = True @@ -115,7 +121,7 @@ class GlancesClient(object): logger.error("Connection to Glances server failed (%s)" % err) self.set_mode('snmp') fallbackmsg = _("Trying fallback to SNMP...") - if not return_to_browser: + if not self.return_to_browser: print(fallbackmsg) else: logger.info(fallbackmsg) @@ -125,22 +131,18 @@ class GlancesClient(object): msg = "Connection to server failed (bad password)" else: msg = "Connection to server failed ({0})".format(err) - if not return_to_browser: - logger.critical(msg) - sys.exit(2) - else: - logger.error(msg) - return False + self.log_and_exit(msg) + return False - if self.get_mode() == 'glances' and version[:3] == client_version[:3]: + if self.get_mode() == 'glances' and version.split('.')[0] == client_version.split('.')[0]: # Init stats self.stats = GlancesStatsClient() self.stats.set_plugins(json.loads(self.client.getAllPlugins())) logger.debug( "Client version: %s / Server version: %s" % (version, client_version)) - else: - logger.error( - "Client and server not compatible: Client version: %s / Server version: %s" % (version, client_version)) + elif self.get_mode() == 'glances': + self.log_and_exit("Client and server not compatible: Client version: %s / Server version: %s" % (version, client_version)) + return False else: self.set_mode('snmp') @@ -154,11 +156,8 @@ class GlancesClient(object): self.stats = GlancesStatsClientSNMP(args=self.args) if not self.stats.check_snmp(): - logger.error("Connection to SNMP server failed") - if not return_to_browser: - sys.exit(2) - else: - return False + self.log_and_exit("Connection to SNMP server failed") + return False if ret: # Load limits from the configuration file @@ -221,7 +220,7 @@ class GlancesClient(object): # Grab success return "SNMP" - def serve_forever(self, return_to_browser=False): + def serve_forever(self): """Main client loop.""" exitkey = False @@ -233,7 +232,7 @@ class GlancesClient(object): # Update the screen exitkey = self.screen.update(self.stats, cs_status=cs_status, - return_to_browser=return_to_browser) + return_to_browser=self.return_to_browser) return self.get_mode() diff --git a/glances/core/glances_client_browser.py b/glances/core/glances_client_browser.py index 2c1bf957..e54c0849 100644 --- a/glances/core/glances_client_browser.py +++ b/glances/core/glances_client_browser.py @@ -180,10 +180,11 @@ class GlancesClientBrowser(object): args_server.username = self.get_servers_list()[self.screen.get_active()]['username'] args_server.password = self.get_servers_list()[self.screen.get_active()]['password'] client = GlancesClient(config=self.config, - args=args_server) + args=args_server, + return_to_browser=True) # Test if client and server are in the same major version - if not client.login(return_to_browser=True): + if not client.login(): self.screen.display_popup(_("Sorry, cannot connect to %s (see log file for additional information)" % v['name'])) # Set the ONLINE status for the selected server @@ -191,7 +192,7 @@ class GlancesClientBrowser(object): else: # Start the client loop # Return connection type: 'glances' or 'snmp' - connection_type = client.serve_forever(return_to_browser=True) + connection_type = client.serve_forever() try: logger.debug("Disconnect Glances client from the %s server" % diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index ee3d8557..87caf47a 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -104,6 +104,7 @@ class Plugin(GlancesPlugin): if self.stats['nb_log_core'] > 0: self.stats['idle'] = self.stats['idle'] / self.stats['nb_log_core'] self.stats['idle'] = 100 - self.stats['idle'] + self.stats['total'] = 100 - self.stats['idle'] else: # Default behavor @@ -119,6 +120,7 @@ class Plugin(GlancesPlugin): # Convert SNMP stats to float for key in list(self.stats.keys()): self.stats[key] = float(self.stats[key]) + self.stats['total'] = 100 - self.stats['idle'] # Update the history list self.update_stats_history() |