class GlancesStandalone(object): """This class creates and manages the Glances standalone session.""" def __init__(self, config=None, args=None): self.config = config self.args = args # Quiet mode self._quiet = args.quiet self.refresh_time = args.time # Init stats self.stats = GlancesStats(config=config, args=args) # Modules (plugins and exporters) are loaded at this point # Glances can display the list if asked... if args.modules_list: self.display_modules_list() sys.exit(0) # If process extended stats is disabled by user if not args.enable_process_extended: logger.debug("Extended stats for top process are disabled") glances_processes.disable_extended() else: logger.debug("Extended stats for top process are enabled") glances_processes.enable_extended() # Manage optionnal process filter if args.process_filter is not None: glances_processes.process_filter = args.process_filter if (not WINDOWS) and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() # Initial system informations update self.stats.update() if self.quiet: logger.info("Quiet mode is ON, nothing will be displayed") # In quiet mode, nothing is displayed glances_processes.max_processes = 0 elif args.stdout: logger.info("Stdout mode is ON, following stats will be displayed: {}".format(args.stdout)) # Init screen self.screen = GlancesStdout(config=config, args=args) else: # Default number of processes to displayed is set to 50 glances_processes.max_processes = 50 # Init screen self.screen = GlancesCursesStandalone(config=config, args=args) # Check the latest Glances version self.outdated = Outdated(config=config, args=args) @property def quiet(self): return self._quiet def display_modules_list(self): """Display modules list""" print("Plugins list: {}".format( ', '.join(sorted(self.stats.getPluginsList(enable=False))))) print("Exporters list: {}".format( ', '.join(sorted(self.stats.getExportsList(enable=False))))) def __serve_forever(self): """Main loop for the CLI. return True if we should continue (no exit key has been pressed) """ # Start a counter used to compute the time needed for # update and export the stats counter = Counter() # Update stats self.stats.update() logger.debug('Stats updated in {} seconds'.format(counter.get())) # Export stats counter_export = Counter() self.stats.export(self.stats) logger.debug('Stats exported in {} seconds'.format(counter_export.get())) # Display stats # and wait refresh_time - counter if not self.quiet: # The update function return True if an exit key 'q' or 'ESC' # has been pressed. ret = not self.screen.update(self.stats, duration=self.refresh_time - counter.get()) else: # Nothing is displayed # Break should be done via a signal (CTRL-C) time.sleep(self.refresh_time - counter.get()) ret = True return ret def serve_forever(self): """Wrapper to the serve_forever function.""" loop = True while loop: loop = self.__serve_forever() self.end() def end(self): """End of the standalone CLI.""" if not self.quiet: self.screen.end() # Exit from export modules self.stats.end() # Check Glances version versus PyPI one if self.outdated.is_outdated(): print("You are using Glances version {}, however version {} is available.".format( self.outdated.installed_version(), self.outdated.latest_version())) print("You should consider upgrading using: pip install --upgrade glances")
class GlancesStandalone(object): """This class creates and manages the Glances standalone session.""" def __init__(self, config=None, args=None): self.config = config self.args = args # Quiet mode self._quiet = args.quiet self.refresh_time = args.time # Init stats self.stats = GlancesStats(config=config, args=args) # Modules (plugins and exporters) are loaded at this point # Glances can display the list if asked... if args.modules_list: self.display_modules_list() sys.exit(0) # If process extended stats is disabled by user if not args.enable_process_extended: logger.debug("Extended stats for top process are disabled") glances_processes.disable_extended() else: logger.debug("Extended stats for top process are enabled") glances_processes.enable_extended() # Manage optionnal process filter if args.process_filter is not None: glances_processes.process_filter = args.process_filter if (not WINDOWS) and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() # Initial system informations update self.stats.update() if self.quiet: logger.info("Quiet mode is ON, nothing will be displayed") # In quiet mode, nothing is displayed glances_processes.max_processes = 0 elif args.stdout: logger.info("Stdout mode is ON, following stats will be displayed: {}".format(args.stdout)) # Init screen self.screen = GlancesStdout(config=config, args=args) elif args.stdout_csv: logger.info("Stdout CSV mode is ON, following stats will be displayed: {}".format(args.stdout)) # Init screen self.screen = GlancesStdoutCsv(config=config, args=args) else: # Default number of processes to displayed is set to 50 glances_processes.max_processes = 50 # Init screen self.screen = GlancesCursesStandalone(config=config, args=args) # Check the latest Glances version self.outdated = Outdated(config=config, args=args) @property def quiet(self): return self._quiet def display_modules_list(self): """Display modules list""" print("Plugins list: {}".format( ', '.join(sorted(self.stats.getPluginsList(enable=False))))) print("Exporters list: {}".format( ', '.join(sorted(self.stats.getExportsList(enable=False))))) def __serve_forever(self): """Main loop for the CLI. return True if we should continue (no exit key has been pressed) """ # Start a counter used to compute the time needed for # update and export the stats counter = Counter() # Update stats self.stats.update() logger.debug('Stats updated in {} seconds'.format(counter.get())) # Export stats counter_export = Counter() self.stats.export(self.stats) logger.debug('Stats exported in {} seconds'.format(counter_export.get())) # Patch for issue1326 to avoid < 0 refresh adapted_refresh = self.refresh_time - counter.get() adapted_refresh = adapted_refresh if adapted_refresh > 0 else 0 # Display stats # and wait refresh_time - counter if not self.quiet: # The update function return True if an exit key 'q' or 'ESC' # has been pressed. ret = not self.screen.update(self.stats, duration=adapted_refresh) else: # Nothing is displayed # Break should be done via a signal (CTRL-C) time.sleep(adapted_refresh) ret = True return ret def serve_forever(self): """Wrapper to the serve_forever function.""" loop = True while loop: loop = self.__serve_forever() self.end() def end(self): """End of the standalone CLI.""" if not self.quiet: self.screen.end() # Exit from export modules self.stats.end() # Check Glances version versus PyPI one if self.outdated.is_outdated(): print("You are using Glances version {}, however version {} is available.".format( self.outdated.installed_version(), self.outdated.latest_version())) print("You should consider upgrading using: pip install --upgrade glances")