diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index e309fb2c15fb32583ba8fd2a623ac718e07a67eb..c67662999455e0022edfef7d61cd26c1666c75ea 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -17,13 +17,17 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +""" +Glances CPU plugin +""" # Import system libs # Check for PSUtil already done in the glances_core script from psutil import cpu_times, cpu_times_percent +import time # from ..plugins.glances_plugin import GlancesPlugin -from glances_plugin import GlancesPlugin +from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): @@ -45,88 +49,53 @@ class Plugin(GlancesPlugin): # Enter -1 to diplay bottom self.line_curse = 1 + # Init stats + self.first_call = True + self.stats = {} + def update(self): """ Update CPU stats """ - # Grab CPU using the PSUtil cpu_times_percent method (PSUtil 0.7 or higher) - try: - cputimespercent = cpu_times_percent(interval=0, percpu=False) - except: - return self.update_deprecated() - - self.stats = {} + # Grab CPU using the PSUtil cpu_times_percent method + # !!! the first time this function is called with interval = 0.0 or None + # !!! it will return a meaningless 0.0 value which you are supposed to ignore + cputimespercent = cpu_times_percent(interval=0, percpu=False) + + # Get all possible value for CPU stats + # user + # system + # idle + # nice (UNIX) + # iowait (Linux) + # irq (Linux, FreeBSD) + # softirq (Linux) + # steal (Linux >= 2.6.11) + # The following stats are returned by the API but not displayed in the UI: + # guest (Linux >= 2.6.24) + # guest_nice (Linux >= 3.2.0) + cpu_stats = {} for cpu in ['user', 'system', 'idle', 'nice', - 'iowait', 'irq', 'softirq', 'steal']: + 'iowait', 'irq', 'softirq', 'steal', + 'guest', 'guest_nice']: if hasattr(cputimespercent, cpu): - self.stats[cpu] = getattr(cputimespercent, cpu) - - return self.stats + cpu_stats[cpu] = getattr(cputimespercent, cpu) - def update_deprecated(self): - """ - Update CPU stats - Only used if cpu_times_percent failed - """ - - # Grab CPU using the PSUtil cpu_times method - cputime = cpu_times(percpu=False) - cputime_total = cputime.user + cputime.system + cputime.idle - - # Only available on some OS - if hasattr(cputime, 'nice'): - cputime_total += cputime.nice - if hasattr(cputime, 'iowait'): - cputime_total += cputime.iowait - if hasattr(cputime, 'irq'): - cputime_total += cputime.irq - if hasattr(cputime, 'softirq'): - cputime_total += cputime.softirq - if hasattr(cputime, 'steal'): - cputime_total += cputime.steal - if not hasattr(self, 'cputime_old'): - self.cputime_old = cputime - self.cputime_total_old = cputime_total - self.stats = {} - else: - self.cputime_new = cputime - self.cputime_total_new = cputime_total - try: - percent = 100 / (self.cputime_total_new - - self.cputime_total_old) - self.stats = {'user': (self.cputime_new.user - - self.cputime_old.user) * percent, - 'system': (self.cputime_new.system - - self.cputime_old.system) * percent, - 'idle': (self.cputime_new.idle - - self.cputime_old.idle) * percent} - if hasattr(self.cputime_new, 'nice'): - self.stats['nice'] = (self.cputime_new.nice - - self.cputime_old.nice) * percent - if hasattr(self.cputime_new, 'iowait'): - self.stats['iowait'] = (self.cputime_new.iowait - - self.cputime_old.iowait) * percent - if hasattr(self.cputime_new, 'irq'): - self.stats['irq'] = (self.cputime_new.irq - - self.cputime_old.irq) * percent - if hasattr(self.cputime_new, 'softirq'): - self.stats['softirq'] = (self.cputime_new.softirq - - self.cputime_old.softirq) * percent - if hasattr(self.cputime_new, 'steal'): - self.stats['steal'] = (self.cputime_new.steal - - self.cputime_old.steal) * percent - self.cputime_old = self.cputime_new - self.cputime_total_old = self.cputime_total_new - except Exception: - self.stats = {} + # Set the global variable to the new stats + self.stats = cpu_stats return self.stats def msg_curse(self, args=None): """ - Return the dict to display in the curse interface + Return the list to display in the curse interface """ + + # Only process if stats exist... + if (self.stats == {}): + return [] + # Init the return message ret = [] diff --git a/glances/plugins/glances_system.py b/glances/plugins/glances_system.py index aa99a615d98de9684980237cd10f2405bc369faa..3d9fecb887d36b0125c6162c1dd27316d4276aea 100644 --- a/glances/plugins/glances_system.py +++ b/glances/plugins/glances_system.py @@ -17,13 +17,16 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +""" +Glances system plugin +""" # Import system libs import os import platform # from ..plugins.glances_plugin import GlancesPlugin -from glances_plugin import GlancesPlugin +from glances.plugins.glances_plugin import GlancesPlugin class Plugin(GlancesPlugin): @@ -48,6 +51,7 @@ class Plugin(GlancesPlugin): def update(self): """ Update the host/system info + Return the stats (dict) """ self.stats = {} self.stats['os_name'] = platform.system() @@ -70,6 +74,7 @@ class Plugin(GlancesPlugin): self.stats['os_version'] = ' '.join(os_version[::2]) else: self.stats['os_version'] = "" + return self.stats def msg_curse(self, args=None): """