diff --git a/.gitignore b/.gitignore index 6b2fd86f..16d80c80 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,5 @@ _build node_modules/ bower_components/ -.vscode/ \ No newline at end of file +# visual stdio code +.vscode/ diff --git a/NEWS b/NEWS index 6a18fe47..aa099eeb 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,7 @@ Enhancements and new features: * Sort docker stats #1276 * Prohibit some plug-in data from being exported to influxdb #1368 * Disable plugin from Glances configuration file #1378 + * Curses-browser's server list paging added (thanks to @limfreee) #1385 Bugs corrected: diff --git a/glances/client_browser.py b/glances/client_browser.py index 6a7977cb..53e41e51 100644 --- a/glances/client_browser.py +++ b/glances/client_browser.py @@ -219,12 +219,16 @@ class GlancesClientBrowser(object): # It's done by the GlancesAutoDiscoverListener class (autodiscover.py) # Or define staticaly in the configuration file (module static_list.py) # For each server in the list, grab elementary stats (CPU, LOAD, MEM, OS...) - - while True: + thread_list = {} + while self.screen.is_end == False: logger.debug("Iter through the following server list: {}".format(self.get_servers_list())) for v in self.get_servers_list(): - thread = threading.Thread(target=self.__update_stats, args=[v]) - thread.start() + key = v["key"] + thread = thread_list.get(key, None) + if thread is None or thread.is_alive() == False: + thread = threading.Thread(target=self.__update_stats, args=[v]) + thread_list[key] = thread + thread.start() # Update the screen (list or Glances client) if self.screen.active_server is None: @@ -234,6 +238,10 @@ class GlancesClientBrowser(object): # Display the active server self.__display_server(self.get_servers_list()[self.screen.active_server]) + # exit key pressed + for thread in thread_list.values(): + thread.join() + def serve_forever(self): """Wrapper to the serve_forever function. diff --git a/glances/outputs/glances_curses_browser.py b/glances/outputs/glances_curses_browser.py index 2799a013..8ed35e18 100644 --- a/glances/outputs/glances_curses_browser.py +++ b/glances/outputs/glances_curses_browser.py @@ -61,6 +61,8 @@ class GlancesCursesBrowser(_GlancesCurses): self._page_max = 0 self._page_max_lines = 0 + self.is_end = False + @property def active_server(self): """Return the active server or None if it's the browser list.""" @@ -140,7 +142,8 @@ class GlancesCursesBrowser(_GlancesCurses): # 'ESC'|'q' > Quit self.end() logger.info("Stop Glances client browser") - sys.exit(0) + # sys.exit(0) + self.is_end = True elif self.pressedkey == 10: # 'ENTER' > Run Glances on the selected server self.active_server = self._current_page * self._page_max_lines + self.cursor_position @@ -291,7 +294,6 @@ class GlancesCursesBrowser(_GlancesCurses): start_line = self._page_max_lines * self._current_page end_line = start_line + self.get_pagelines(stats) - current_page = stats[start_line:end_line] # Display table