Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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