def sort_stats(self, sortedby=None): """Return the stats sorted by sortedby variable.""" if sortedby is None: # No need to sort... return self.stats tree = glances_processes.is_tree_enabled() if sortedby == 'io_counters' and not tree: # Specific case for io_counters # Sum of io_r + io_w try: # Sort process by IO rate (sum IO read + IO write) self.stats.sort(key=lambda process: process[sortedby][0] - process[sortedby][2] + process[sortedby][1] - process[sortedby][3], reverse=glances_processes.sort_reverse) except Exception: self.stats.sort(key=operator.itemgetter('cpu_percent'), reverse=glances_processes.sort_reverse) else: # Others sorts if tree: self.stats.set_sorting(sortedby, glances_processes.sort_reverse) else: try: self.stats.sort(key=operator.itemgetter(sortedby), reverse=glances_processes.sort_reverse) except (KeyError, TypeError): self.stats.sort(key=operator.itemgetter('name'), reverse=False) return self.stats
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.sort_key # Header self.__msg_curse_header(ret, process_sort_key, args) # Process list if glances_processes.is_tree_enabled(): ret.extend( self.get_process_tree_curses_data( self.sort_stats(process_sort_key), args, first_level=True, max_node_count=glances_processes.max_processes)) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sort_stats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False if glances_processes.process_filter is not None: self.__msg_curse_sum(ret, args=args) # Return the message with decoration return ret
def sort_stats(self, sortedby=None): """Return the stats sorted by sortedby variable.""" if sortedby is None: # No need to sort... return self.stats tree = glances_processes.is_tree_enabled() if sortedby == 'io_counters' and not tree: # Specific case for io_counters # Sum of io_r + io_w try: # Sort process by IO rate (sum IO read + IO write) self.stats.sort(key=lambda process: process[sortedby][ 0] - process[sortedby][2] + process[sortedby][1] - process[ sortedby][3], reverse=glances_processes.sort_reverse) except Exception: self.stats.sort(key=operator.itemgetter('cpu_percent'), reverse=glances_processes.sort_reverse) else: # Others sorts if tree: self.stats.set_sorting(sortedby, glances_processes.sort_reverse) else: try: self.stats.sort(key=operator.itemgetter(sortedby), reverse=glances_processes.sort_reverse) except (KeyError, TypeError): self.stats.sort(key=operator.itemgetter('name'), reverse=False) return self.stats
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.sort_key # Header self.__msg_curse_header(ret, process_sort_key, args) # Process list if glances_processes.is_tree_enabled(): ret.extend(self.get_process_tree_curses_data( self.sort_stats(process_sort_key), args, first_level=True, max_node_count=glances_processes.max_processes)) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sort_stats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False if glances_processes.process_filter is not None: self.__msg_curse_sum(ret, args=args) # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.getsortkey() sort_style = 'SORT' # Header msg = '{0:>6}'.format(_("CPU%")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("MEM%")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("VIRT")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("RES")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("PID")) ret.append(self.curse_add_line(msg)) msg = ' {0:10}'.format(_("USER")) ret.append(self.curse_add_line(msg)) msg = '{0:>4}'.format(_("NI")) ret.append(self.curse_add_line(msg)) msg = '{0:>2}'.format(_("S")) ret.append(self.curse_add_line(msg)) msg = '{0:>9}'.format(_("TIME+")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)) msg = '{0:>6}'.format(_("IOR/s")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = '{0:>6}'.format(_("IOW/s")) ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = ' {0:8}'.format(_("Command")) ret.append(self.curse_add_line(msg)) # Trying to display proc time self.tag_proc_time = True if glances_processes.is_tree_enabled(): ret.extend(self.get_process_tree_curses_data(self.sortstats(process_sort_key), args, first_level=True, max_node_count=glances_processes.get_max_processes())) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sortstats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.sort_key sort_style = 'SORT' # Header msg = '{0:>6}'.format('CPU%') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT')) msg = '{0:>6}'.format('MEM%') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT')) msg = '{0:>6}'.format('VIRT') ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format('RES') ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format('PID') ret.append(self.curse_add_line(msg)) msg = ' {0:10}'.format('USER') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'username' else 'DEFAULT')) msg = '{0:>4}'.format('NI') ret.append(self.curse_add_line(msg)) msg = '{0:>2}'.format('S') ret.append(self.curse_add_line(msg)) msg = '{0:>10}'.format('TIME+') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)) msg = '{0:>6}'.format('IOR/s') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = '{0:>6}'.format('IOW/s') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = ' {0:8}'.format('Command') ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'name' else 'DEFAULT')) if glances_processes.is_tree_enabled(): ret.extend(self.get_process_tree_curses_data( self.sort_stats(process_sort_key), args, first_level=True, max_node_count=glances_processes.max_processes)) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sort_stats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False # Return the message with decoration return ret
def update(self): """Update processes stats using the input method.""" # Reset stats self.reset() if self.input_method == 'local': # Update stats using the standard system lib # Note: Update is done in the processcount plugin # Just return the processes list if glances_processes.is_tree_enabled(): self.stats = glances_processes.gettree() else: self.stats = glances_processes.getlist() elif self.input_method == 'snmp': # No SNMP grab for processes pass return self.stats
def update(self): """Update processes stats using the input method.""" # Reset stats self.reset() if self.input_method == 'local': # Update stats using the standard system lib # Note: Update is done in the processcount plugin # Just return the processes list if glances_processes.is_tree_enabled(): self.stats = glances_processes.gettree() else: self.stats = glances_processes.getlist() elif self.input_method == 'snmp': # No SNMP grab for processes pass return self.stats
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if args.disable_process: msg = "PROCESSES DISABLED (press 'z' to display)" ret.append(self.curse_add_line(msg)) return ret if not self.stats: return ret # Display the filter (if it exists) if glances_processes.process_filter is not None: msg = 'Processes filter:' ret.append(self.curse_add_line(msg, "TITLE")) msg = ' {0} '.format(glances_processes.process_filter) ret.append(self.curse_add_line(msg, "FILTER")) msg = '(press ENTER to edit)' ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Build the string message # Header msg = 'TASKS' ret.append(self.curse_add_line(msg, "TITLE")) # Compute processes other = self.stats['total'] msg = '{0:>4}'.format(self.stats['total']) ret.append(self.curse_add_line(msg)) if 'thread' in self.stats: msg = ' ({0} thr),'.format(self.stats['thread']) ret.append(self.curse_add_line(msg)) if 'running' in self.stats: other -= self.stats['running'] msg = ' {0} run,'.format(self.stats['running']) ret.append(self.curse_add_line(msg)) if 'sleeping' in self.stats: other -= self.stats['sleeping'] msg = ' {0} slp,'.format(self.stats['sleeping']) ret.append(self.curse_add_line(msg)) msg = ' {0} oth '.format(other) ret.append(self.curse_add_line(msg)) # Display sort information if glances_processes.auto_sort: msg = 'sorted automatically' ret.append(self.curse_add_line(msg)) msg = ' by {0}'.format(glances_processes.sort_key) ret.append(self.curse_add_line(msg)) else: msg = 'sorted by {0}'.format(glances_processes.sort_key) ret.append(self.curse_add_line(msg)) ret[-1]["msg"] += ", %s view" % ("tree" if glances_processes.is_tree_enabled() else "flat") # if args.disable_irix: # ret[-1]["msg"] += " - IRIX off" # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if args.disable_process: msg = _("PROCESSES DISABLED (press 'z' to display)") ret.append(self.curse_add_line(msg)) return ret if self.stats == {}: return ret # Display the filter (if it exists) if glances_processes.get_process_filter() is not None: msg = _("Processes filter:") ret.append(self.curse_add_line(msg, "TITLE")) msg = _(" {0} ").format(glances_processes.get_process_filter()) ret.append(self.curse_add_line(msg, "FILTER")) msg = _("(press ENTER to edit)") ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Build the string message # Header msg = _("TASKS ") ret.append(self.curse_add_line(msg, "TITLE")) # Compute processes other = self.stats['total'] msg = str(self.stats['total']) ret.append(self.curse_add_line(msg)) if 'thread' in self.stats: msg = _(" ({0} thr),").format(self.stats['thread']) ret.append(self.curse_add_line(msg)) if 'running' in self.stats: other -= self.stats['running'] msg = _(" {0} run,").format(self.stats['running']) ret.append(self.curse_add_line(msg)) if 'sleeping' in self.stats: other -= self.stats['sleeping'] msg = _(" {0} slp,").format(self.stats['sleeping']) ret.append(self.curse_add_line(msg)) msg = _(" {0} oth ").format(other) ret.append(self.curse_add_line(msg)) # Display sort information if glances_processes.getmanualsortkey() is None: msg = _("sorted automatically") ret.append(self.curse_add_line(msg)) msg = _(" by {0}").format(glances_processes.getautosortkey()) ret.append(self.curse_add_line(msg)) else: msg = _("sorted by {0}").format(glances_processes.getmanualsortkey()) ret.append(self.curse_add_line(msg)) ret[-1]["msg"] += ", %s view" % ("tree" if glances_processes.is_tree_enabled() else "flat") # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if args.disable_process: msg = _("PROCESSES DISABLED (press 'z' to display)") ret.append(self.curse_add_line(msg)) return ret if self.stats == {}: return ret # Display the filter (if it exists) if glances_processes.get_process_filter() is not None: msg = _("Processes filter:") ret.append(self.curse_add_line(msg, "TITLE")) msg = _(" {0} ").format(glances_processes.get_process_filter()) ret.append(self.curse_add_line(msg, "FILTER")) msg = _("(press ENTER to edit)") ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) # Build the string message # Header msg = _("TASKS ") ret.append(self.curse_add_line(msg, "TITLE")) # Compute processes other = self.stats['total'] msg = str(self.stats['total']) ret.append(self.curse_add_line(msg)) if 'thread' in self.stats: msg = _(" ({0} thr),").format(self.stats['thread']) ret.append(self.curse_add_line(msg)) if 'running' in self.stats: other -= self.stats['running'] msg = _(" {0} run,").format(self.stats['running']) ret.append(self.curse_add_line(msg)) if 'sleeping' in self.stats: other -= self.stats['sleeping'] msg = _(" {0} slp,").format(self.stats['sleeping']) ret.append(self.curse_add_line(msg)) msg = _(" {0} oth ").format(other) ret.append(self.curse_add_line(msg)) # Display sort information if glances_processes.getmanualsortkey() is None: msg = _("sorted automatically") ret.append(self.curse_add_line(msg)) msg = _(" by {0}").format(glances_processes.getautosortkey()) ret.append(self.curse_add_line(msg)) else: msg = _("sorted by {0}").format(glances_processes.getmanualsortkey()) ret.append(self.curse_add_line(msg)) ret[-1]["msg"] += ", %s view" % ("tree" if glances_processes.is_tree_enabled() else "flat") # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.getsortkey() sort_style = 'SORT' # Header msg = '{0:>6}'.format(_("CPU%")) ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("MEM%")) ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT')) msg = '{0:>6}'.format(_("VIRT")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("RES")) ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format(_("PID")) ret.append(self.curse_add_line(msg)) msg = ' {0:10}'.format(_("USER")) ret.append(self.curse_add_line(msg)) msg = '{0:>4}'.format(_("NI")) ret.append(self.curse_add_line(msg)) msg = '{0:>2}'.format(_("S")) ret.append(self.curse_add_line(msg)) msg = '{0:>9}'.format(_("TIME+")) ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)) msg = '{0:>6}'.format(_("IOR/s")) ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = '{0:>6}'.format(_("IOW/s")) ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = ' {0:8}'.format(_("Command")) ret.append(self.curse_add_line(msg)) # Trying to display proc time self.tag_proc_time = True if glances_processes.is_tree_enabled(): ret.extend( self.get_process_tree_curses_data( self.sortstats(process_sort_key), args, first_level=True, max_node_count=glances_processes.get_max_processes())) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sortstats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False # Return the message with decoration return ret
def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message ret = [] # Only process if stats exist and display plugin enable... if not self.stats or args.disable_process: return ret # Compute the sort key process_sort_key = glances_processes.sort_key sort_style = 'SORT' # Header msg = '{0:>6}'.format('CPU%') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'cpu_percent' else 'DEFAULT')) msg = '{0:>6}'.format('MEM%') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'memory_percent' else 'DEFAULT')) msg = '{0:>6}'.format('VIRT') ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format('RES') ret.append(self.curse_add_line(msg, optional=True)) msg = '{0:>6}'.format('PID') ret.append(self.curse_add_line(msg)) msg = ' {0:10}'.format('USER') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'username' else 'DEFAULT')) msg = '{0:>4}'.format('NI') ret.append(self.curse_add_line(msg)) msg = '{0:>2}'.format('S') ret.append(self.curse_add_line(msg)) msg = '{0:>10}'.format('TIME+') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'cpu_times' else 'DEFAULT', optional=True)) msg = '{0:>6}'.format('IOR/s') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = '{0:>6}'.format('IOW/s') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'io_counters' else 'DEFAULT', optional=True, additional=True)) msg = ' {0:8}'.format('Command') ret.append( self.curse_add_line( msg, sort_style if process_sort_key == 'name' else 'DEFAULT')) if glances_processes.is_tree_enabled(): ret.extend( self.get_process_tree_curses_data( self.sort_stats(process_sort_key), args, first_level=True, max_node_count=glances_processes.max_processes)) else: # Loop over processes (sorted by the sort key previously compute) first = True for p in self.sort_stats(process_sort_key): ret.extend(self.get_process_curses_data(p, first, args)) # End of extended stats first = False # Return the message with decoration return ret