summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolargo <nicolas@nicolargo.com>2021-09-04 09:39:17 +0200
committernicolargo <nicolas@nicolargo.com>2021-09-04 09:39:17 +0200
commit64eab612a32ec9ad008db47e330b8b2ed5c82688 (patch)
treec8d8e8d23e229a4aa4a124f4fbf2b89ec3ccc935
parentd80a9cf229e84b9e15320b2e90689d7091b87e9f (diff)
Plugin sensors and main plugin OK
-rw-r--r--glances/plugins/alert/__init__.py2
-rw-r--r--glances/plugins/amps/__init__.py2
-rw-r--r--glances/plugins/cloud/__init__.py2
-rw-r--r--glances/plugins/connections/__init__.py2
-rw-r--r--glances/plugins/core/__init__.py2
-rw-r--r--glances/plugins/cpu/__init__.py2
-rw-r--r--glances/plugins/diskio/__init__.py2
-rw-r--r--glances/plugins/folders/__init__.py2
-rw-r--r--glances/plugins/fs/__init__.py2
-rw-r--r--glances/plugins/glances_docker/__init__.py2
-rw-r--r--glances/plugins/glances_sensors.py351
-rw-r--r--glances/plugins/gpu/__init__.py2
-rw-r--r--glances/plugins/help/__init__.py2
-rw-r--r--glances/plugins/ip/__init__.py2
-rw-r--r--glances/plugins/irq/__init__.py2
-rw-r--r--glances/plugins/load/__init__.py2
-rw-r--r--glances/plugins/mem/__init__.py2
-rw-r--r--glances/plugins/memswap/__init__.py2
-rw-r--r--glances/plugins/network/__init__.py2
-rw-r--r--glances/plugins/now/__init__.py2
-rw-r--r--glances/plugins/percpu/__init__.py2
-rw-r--r--glances/plugins/plugin.py (renamed from glances/plugins/glances_plugin.py)0
-rw-r--r--glances/plugins/ports/__init__.py2
-rw-r--r--glances/plugins/processcount/__init__.py2
-rw-r--r--glances/plugins/processlist/__init__.py2
-rw-r--r--glances/plugins/psutilversion/__init__.py2
-rw-r--r--glances/plugins/quicklook/__init__.py2
-rw-r--r--glances/plugins/raid/__init__.py2
-rw-r--r--glances/plugins/sensors/__init__.py351
-rw-r--r--glances/plugins/sensors/sensor/__init__.py0
-rw-r--r--glances/plugins/sensors/sensor/glances_batpercent.py (renamed from glances/plugins/sensors/glances_batpercent.py)2
-rw-r--r--glances/plugins/sensors/sensor/glances_hddtemp.py (renamed from glances/plugins/sensors/glances_hddtemp.py)2
-rw-r--r--glances/plugins/smart/__init__.py2
-rw-r--r--glances/plugins/system/__init__.py2
-rw-r--r--glances/plugins/uptime/__init__.py2
-rw-r--r--glances/plugins/wifi/__init__.py2
-rw-r--r--glances/stats.py3
-rwxr-xr-xunitest.py2
38 files changed, 385 insertions, 386 deletions
diff --git a/glances/plugins/alert/__init__.py b/glances/plugins/alert/__init__.py
index cdf57706..b92646a0 100644
--- a/glances/plugins/alert/__init__.py
+++ b/glances/plugins/alert/__init__.py
@@ -25,7 +25,7 @@ from glances.logger import logger
from glances.events import glances_events
from glances.thresholds import glances_thresholds
# from glances.logger import logger
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
# Static decision tree for the global alert message
# - msg: Message to be displayed (result of the decision tree)
diff --git a/glances/plugins/amps/__init__.py b/glances/plugins/amps/__init__.py
index 0f0fcacb..d33339e7 100644
--- a/glances/plugins/amps/__init__.py
+++ b/glances/plugins/amps/__init__.py
@@ -21,7 +21,7 @@
from glances.globals import iteritems
from glances.amps_list import AmpsList as glancesAmpsList
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
class Plugin(GlancesPlugin):
diff --git a/glances/plugins/cloud/__init__.py b/glances/plugins/cloud/__init__.py
index f62f5413..2743ded8 100644
--- a/glances/plugins/cloud/__init__.py
+++ b/glances/plugins/cloud/__init__.py
@@ -26,7 +26,7 @@ Supported Cloud API:
import threading
from glances.globals import iteritems, to_ascii
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.logger import logger
# Import plugin specific dependency
diff --git a/glances/plugins/connections/__init__.py b/glances/plugins/connections/__init__.py
index ec517e7f..6417fbac 100644
--- a/glances/plugins/connections/__init__.py
+++ b/glances/plugins/connections/__init__.py
@@ -21,7 +21,7 @@
from __future__ import unicode_literals
from glances.logger import logger
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.globals import nativestr
import psutil
diff --git a/glances/plugins/core/__init__.py b/glances/plugins/core/__init__.py
index 5a56ac75..0e309f4e 100644
--- a/glances/plugins/core/__init__.py
+++ b/glances/plugins/core/__init__.py
@@ -19,7 +19,7 @@
"""CPU core plugin."""
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/cpu/__init__.py b/glances/plugins/cpu/__init__.py
index bd1cfa83..8410150c 100644
--- a/glances/plugins/cpu/__init__.py
+++ b/glances/plugins/cpu/__init__.py
@@ -24,7 +24,7 @@ from glances.timer import getTimeSinceLastUpdate
from glances.globals import LINUX, iterkeys
from glances.cpu_percent import cpu_percent
from glances.plugins.core import Plugin as CorePlugin
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/diskio/__init__.py b/glances/plugins/diskio/__init__.py
index 0b101b84..ab2aabf5 100644
--- a/glances/plugins/diskio/__init__.py
+++ b/glances/plugins/diskio/__init__.py
@@ -22,7 +22,7 @@ from __future__ import unicode_literals
from glances.globals import nativestr
from glances.timer import getTimeSinceLastUpdate
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.logger import logger
import psutil
diff --git a/glances/plugins/folders/__init__.py b/glances/plugins/folders/__init__.py
index c267c843..0313ae54 100644
--- a/glances/plugins/folders/__init__.py
+++ b/glances/plugins/folders/__init__.py
@@ -24,7 +24,7 @@ import numbers
from glances.globals import nativestr
from glances.folder_list import FolderList as glancesFolderList
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.logger import logger
diff --git a/glances/plugins/fs/__init__.py b/glances/plugins/fs/__init__.py
index ec954b41..fc5b5c7e 100644
--- a/glances/plugins/fs/__init__.py
+++ b/glances/plugins/fs/__init__.py
@@ -23,7 +23,7 @@ from __future__ import unicode_literals
import operator
from glances.globals import u, nativestr, PermissionError
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/glances_docker/__init__.py b/glances/plugins/glances_docker/__init__.py
index 918b1755..0ecba25f 100644
--- a/glances/plugins/glances_docker/__init__.py
+++ b/glances/plugins/glances_docker/__init__.py
@@ -27,7 +27,7 @@ from copy import deepcopy
from glances.logger import logger
from glances.globals import iterkeys, itervalues, nativestr
from glances.timer import getTimeSinceLastUpdate
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.processes import sort_stats as sort_stats_processes, weighted, glances_processes
# Docker-py library (optional and Linux-only)
diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py
deleted file mode 100644
index e9c5e290..00000000
--- a/glances/plugins/glances_sensors.py
+++ /dev/null
@@ -1,351 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# This file is part of Glances.
-#
-# Copyright (C) 2019 Nicolargo <nicolas@nicolargo.com>
-#
-# Glances is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Glances is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-"""Sensors plugin."""
-
-import psutil
-import warnings
-
-from glances.logger import logger
-from glances.globals import iteritems, to_fahrenheit
-from glances.timer import Counter
-from glances.plugins.sensors.glances_batpercent import Plugin as BatPercentPlugin
-from glances.plugins.sensors.glances_hddtemp import Plugin as HddTempPlugin
-from glances.plugins.glances_plugin import GlancesPlugin
-
-SENSOR_TEMP_UNIT = 'C'
-SENSOR_FAN_UNIT = 'R'
-
-
-class Plugin(GlancesPlugin):
- """Glances sensors plugin.
-
- The stats list includes both sensors and hard disks stats, if any.
- The sensors are already grouped by chip type and then sorted by name.
- The hard disks are already sorted by name.
- """
-
- def __init__(self, args=None, config=None):
- """Init the plugin."""
- super(Plugin, self).__init__(args=args,
- config=config,
- stats_init_value=[])
-
- start_duration = Counter()
-
- # Init the sensor class
- start_duration.reset()
- self.glancesgrabsensors = GlancesGrabSensors()
- logger.debug("Generic sensor plugin init duration: {} seconds".format(start_duration.get()))
-
- # Instance for the HDDTemp Plugin in order to display the hard disks
- # temperatures
- start_duration.reset()
- self.hddtemp_plugin = HddTempPlugin(args=args, config=config)
- logger.debug("HDDTemp sensor plugin init duration: {} seconds".format(start_duration.get()))
-
- # Instance for the BatPercent in order to display the batteries
- # capacities
- start_duration.reset()
- self.batpercent_plugin = BatPercentPlugin(args=args, config=config)
- logger.debug("Battery sensor plugin init duration: {} seconds".format(start_duration.get()))
-
- # We want to display the stat in the curse interface
- self.display_curse = True
-
- # Not necessary to refresh every refresh time
- # By default set to refresh * 2
- if self.get_refresh() == args.time:
- self.set_refresh(self.get_refresh() * 2)
-
- def get_key(self):
- """Return the key of the list."""
- return 'label'
-
- @GlancesPlugin._check_decorator
- @GlancesPlugin._log_result_decorator
- def update(self):
- """Update sensors stats using the input method."""
- # Init new stats
- stats = self.get_init_value()
-
- if self.input_method == 'local':
- # Update stats using the dedicated lib
- stats = []
- # Get the temperature
- try:
- temperature = self.__set_type(self.glancesgrabsensors.get('temperature_core'),
- 'temperature_core')
- except Exception as e:
- logger.error("Cannot grab sensors temperatures (%s)" % e)
- else:
- # Append temperature
- stats.extend(temperature)
- # Get the FAN speed
- try:
- fan_speed = self.__set_type(self.glancesgrabsensors.get('fan_speed'),
- 'fan_speed')
- except Exception as e:
- logger.error("Cannot grab FAN speed (%s)" % e)
- else:
- # Append FAN speed
- stats.extend(fan_speed)
- # Update HDDtemp stats
- try:
- hddtemp = self.__set_type(self.hddtemp_plugin.update(),
- 'temperature_hdd')
- except Exception as e:
- logger.error("Cannot grab HDD temperature (%s)" % e)
- else:
- # Append HDD temperature
- stats.extend(hddtemp)
- # Update batteries stats
- try:
- batpercent = self.__set_type(self.batpercent_plugin.update(),
- 'battery')
- except Exception as e:
- logger.error("Cannot grab battery percent (%s)" % e)
- else:
- # Append Batteries %
- stats.extend(batpercent)
-
- elif self.input_method == 'snmp':
- # Update stats using SNMP
- # No standard:
- # http://www.net-snmp.org/wiki/index.php/Net-SNMP_and_lm-sensors_on_Ubuntu_10.04
-
- pass
-
- # Global change on stats
- self.stats = self.get_init_value()
- for stat in stats:
- # Do not take hide stat into account
- if self.is_hide(stat["label"].lower()):
- continue
- # Set the alias for each stat
- alias = self.has_alias(stat["label"].lower())
- if alias:
- stat["label"] = alias
- # Update the stats
- self.stats.append(stat)
-
- return self.stats
-
- def __set_type(self, stats, sensor_type):
- """Set the plugin type.
-
- 4 types of stats is possible in the sensors plugin:
- - Core temperature: 'temperature_core'
- - Fan speed: 'fan_speed'
- - HDD temperature: 'temperature_hdd'
- - Battery capacity: 'battery'
- """
- for i in stats:
- # Set the sensors type
- i.update({'type': sensor_type})
- # also add the key name
- i.update({'key': self.get_key()})
-
- return stats
-
- def update_views(self):
- """Update stats views."""
- # Call the father's method
- super(Plugin, self).update_views()
-
- # Add specifics informations
- # Alert
- for i in self.stats:
- if not i['value']:
- continue
- # Alert processing
- if i['type'] == 'temperature_core' and not self.is_limit('critical', stat_name=i['type']):
- if i['critical'] is None:
- alert = 'DEFAULT'
- elif i['value'] >= i['critical']:
- alert = 'CRITICAL'
- elif i['warning'] is None:
- alert = 'DEFAULT'
- elif i['value'] >= i['warning']:
- alert = 'WARNING'
- else:
- alert = 'OK'
- elif i['type'] == 'battery':
- alert = self.get_alert(current=100 - i['value'],
- header=i['type'])
- else:
- alert = self.get_alert(current=i['value'],
- header=i['type'])
- # Set the alert in the view
- self.views[i[self.get_key()]]['value']['decoration'] = alert
-
- def msg_curse(self, args=None, max_width=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 self.is_disable():
- return ret
-
- # Max size for the interface name
- name_max_width = max_width - 12
-
- # Header
- msg = '{:{width}}'.format('SENSORS', width=name_max_width)
- ret.append(self.curse_add_line(msg, "TITLE"))
-
- # Stats
- for i in self.stats:
- # Do not display anything if no battery are detected
- if i['type'] == 'battery' and i['value'] == []:
- continue
- # New line
- ret.append(self.curse_new_line())
- msg = '{:{width}}'.format(i["label"][:name_max_width],
- width=name_max_width)
- ret.append(self.curse_add_line(msg))
- if i['value'] in (b'ERR', b'SLP', b'UNK', b'NOS'):
- msg = '{:>13}'.format(i['value'])
- ret.append(self.curse_add_line(
- msg, self.get_views(item=i[self.get_key()],
- key='value',
- option='decoration')))
- else:
- if (args.fahrenheit and i['type'] != 'battery' and
- i['type'] != 'fan_speed'):
- value = to_fahrenheit(i['value'])
- unit = 'F'
- else:
- value = i['value']
- unit = i['unit']
- try:
- msg = '{:>13.0f}{}'.format(value, unit)
- ret.append(self.curse_add_line(
- msg, self.get_views(item=i[self.get_key()],
- key='value',
- option='decoration')))
- except (TypeError, ValueError):
- pass
-
- return ret
-
-
-class GlancesGrabSensors(object):
- """Get sensors stats."""
-
- def __init__(self):
- """Init sensors stats."""
- # Temperatures
- self.init_temp = False
- self.stemps = {}
- try:
- # psutil>=5.1.0, Linux-only
- self.stemps = psutil.sensors_temperatures()
- except AttributeError:
- logger.debug("Cannot grab temperatures. Platform not supported.")
- else:
- self.init_temp = True
- # Solve an issue #1203 concerning a RunTimeError warning message displayed
- # in the curses interface.
- warnings.filterwarnings("ignore")
-
- # Fans
- self.init_fan = False
- self.sfans = {}
- try:
- # psutil>=5.2.0, Linux-only
- self.sfans = psutil.sensors_fans()
- except AttributeError:
- logger.debug("Cannot grab fans speed. Platform not supported.")
- else:
- self.init_fan = True
-
- # Init the stats
- self.reset()
-
- def reset(self):
- """Reset/init the stats."""
- self.sensors_list = []
-
- def __update__(self):
- """Update the stats."""
- # Reset the list
- self.reset()
-
- if not self.init_temp:
- return self.sensors_list
-
- # Temperatures sensors
- self.sensors_list.extend(self.build_sensors_list(SENSOR_TEMP_UNIT))
-
- # Fans sensors
- self.sensors_list.extend(self.build_sensors_list(SENSOR_FAN_UNIT))
-
- return self.sensors_list
-
- def build_sensors_list(self, type):
- """Build the sensors list depending of the type.
-
- type: SENSOR_TEMP_UNIT or SENSOR_FAN_UNIT
-
- output: a list
- """
- ret = []
- if type == SENSOR_TEMP_UNIT and self.init_temp:
- input_list = self.stemps
- self.stemps = psutil.sensors_temperatures()
- elif type == SENSOR_FAN_UNIT and self.init_fan:
- input_list = self.sfans
- self.sfans = psutil.sensors_fans()
- else:
- return ret
- for chipname, chip in iteritems(input_list):
- i = 1
- for feature in chip:
- sensors_current = {}
- # Sensor name
- if feature.label == '':
- sensors_current['label'] = chipname + ' ' + str(i)
- else:
- sensors_current['label'] = feature.label
- # Sensors value, limit and unit
- sensors_current['value'] = int(getattr(feature, 'current', 0) if getattr(feature, 'current', 0) else 0)
- warning = getattr(feature, 'high', None)
- sensors_current['warning'] = int(warning) if warning is not None else None
- critical = getattr(feature, 'critical', None)
- sensors_current['critical'] = int(critical) if critical is not None else None
- sensors_current['unit'] = type
- # Add sensor to the list
- ret.append(sensors_current)
- i += 1
- return ret
-
- def get(self, sensor_type='temperature_core'):
- """Get sensors list."""
- self.__update__()
- if sensor_type == 'temperature_core':
- ret = [s for s in self.sensors_list if s['unit'] == SENSOR_TEMP_UNIT]
- elif sensor_type == 'fan_speed':
- ret = [s for s in self.sensors_list if s['unit'] == SENSOR_FAN_UNIT]
- else:
- # Unknown type
- logger.debug("Unknown sensor type %s" % sensor_type)
- ret = []
- return ret
diff --git a/glances/plugins/gpu/__init__.py b/glances/plugins/gpu/__init__.py
index e3b3ad13..1aea937e 100644
--- a/glances/plugins/gpu/__init__.py
+++ b/glances/plugins/gpu/__init__.py
@@ -21,7 +21,7 @@
from glances.globals import nativestr, to_fahrenheit
from glances.logger import logger
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
# In Glances 3.1.4 or higher, we use the py3nvml lib (see issue #1523)
try:
diff --git a/glances/plugins/help/__init__.py b/glances/plugins/help/__init__.py
index 3bea6c20..de5ceef6 100644
--- a/glances/plugins/help/__init__.py
+++ b/glances/plugins/help/__init__.py
@@ -24,7 +24,7 @@ Just a stupid plugin to display the help screen.
"""
from glances import __version__, psutil_version
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
class Plugin(GlancesPlugin):
diff --git a/glances/plugins/ip/__init__.py b/glances/plugins/ip/__init__.py
index c13a43c7..cd056685 100644
--- a/glances/plugins/ip/__init__.py
+++ b/glances/plugins/ip/__init__.py
@@ -25,7 +25,7 @@ from json import loads
from glances.globals import iterkeys, urlopen, queue
from glances.logger import logger
from glances.timer import Timer
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
# Import plugin specific dependency
try:
diff --git a/glances/plugins/irq/__init__.py b/glances/plugins/irq/__init__.py
index 7f666df7..3f66b55e 100644
--- a/glances/plugins/irq/__init__.py
+++ b/glances/plugins/irq/__init__.py
@@ -24,7 +24,7 @@ import operator
from glances.globals import LINUX
from glances.timer import getTimeSinceLastUpdate
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
class Plugin(GlancesPlugin):
diff --git a/glances/plugins/load/__init__.py b/glances/plugins/load/__init__.py
index 0e570c5b..f7c3af70 100644
--- a/glances/plugins/load/__init__.py
+++ b/glances/plugins/load/__init__.py
@@ -24,7 +24,7 @@ import psutil
from glances.globals import iteritems
from glances.plugins.core import Plugin as CorePlugin
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.logger import logger
# Fields description
diff --git a/glances/plugins/mem/__init__.py b/glances/plugins/mem/__init__.py
index ef2a334e..97d4f7e4 100644
--- a/glances/plugins/mem/__init__.py
+++ b/glances/plugins/mem/__init__.py
@@ -21,7 +21,7 @@
from glances.logger import logger
from glances.globals import iterkeys
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/memswap/__init__.py b/glances/plugins/memswap/__init__.py
index 6784a431..309436c7 100644
--- a/glances/plugins/memswap/__init__.py
+++ b/glances/plugins/memswap/__init__.py
@@ -21,7 +21,7 @@
from glances.globals import iterkeys
from glances.timer import getTimeSinceLastUpdate
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
import psutil
diff --git a/glances/plugins/network/__init__.py b/glances/plugins/network/__init__.py
index 1fe2c74b..eb61f447 100644
--- a/glances/plugins/network/__init__.py
+++ b/glances/plugins/network/__init__.py
@@ -23,7 +23,7 @@ from __future__ import unicode_literals
import base64
from glances.timer import getTimeSinceLastUpdate
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
from glances.logger import logger
import psutil
diff --git a/glances/plugins/now/__init__.py b/glances/plugins/now/__init__.py
index f3bbe918..47d2549e 100644
--- a/glances/plugins/now/__init__.py
+++ b/glances/plugins/now/__init__.py
@@ -20,7 +20,7 @@
"""Now (current date) plugin."""
from time import tzname, strftime
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
class Plugin(GlancesPlugin):
diff --git a/glances/plugins/percpu/__init__.py b/glances/plugins/percpu/__init__.py
index f16fb9e3..4f5bddef 100644
--- a/glances/plugins/percpu/__init__.py
+++ b/glances/plugins/percpu/__init__.py
@@ -20,7 +20,7 @@
"""Per-CPU plugin."""
from glances.cpu_percent import cpu_percent
-from glances.plugins.glances_plugin import GlancesPlugin
+from glances.plugins.plugin import GlancesPlugin
# Define the history items list
items_history_list = [{'name': 'user',
diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/plugin.py
index 8ef718b3..8ef718b3 100644
--- a/