Code refactoring - Rename plugin class to <Plugin name>Plugin instead of PluginModel #3169

This commit is contained in:
nicolargo 2025-05-02 09:41:32 +02:00
parent 1e92365c5e
commit 03f23a582d
39 changed files with 73 additions and 53 deletions

View File

@ -6,7 +6,7 @@ This is the Glances plugins folder.
A Glances plugin is a Python module hosted in a folder.
It should implement a Class named PluginModel (inherited from GlancesPluginModel).
It should implement a Class named <plugin name>Plugin inherited from GlancesPluginModel (example for foo plugin: FooPlugin).
This class should be based on the MVC model.
- model: where the stats are updated (update method)

View File

@ -93,7 +93,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class AlertPlugin(GlancesPluginModel):
"""Glances alert plugin.
Only for display.

View File

@ -29,7 +29,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class AmpsPlugin(GlancesPluginModel):
"""Glances AMPs plugin."""
def __init__(self, args=None, config=None):

View File

@ -30,7 +30,7 @@ else:
import_error_tag = False
class PluginModel(GlancesPluginModel):
class CloudPlugin(GlancesPluginModel):
"""Glances' cloud plugin.
The goal of this plugin is to retrieve additional information

View File

@ -68,7 +68,7 @@ fields_description = {
# 'y_unit': 'bit/s'}]
class PluginModel(GlancesPluginModel):
class ConnectionsPlugin(GlancesPluginModel):
"""Glances connections plugin.
stats is a dict

View File

@ -121,7 +121,7 @@ sort_for_human = {
}
class PluginModel(GlancesPluginModel):
class ContainersPlugin(GlancesPluginModel):
"""Glances Docker plugin.
stats is a dict: {'version': {...}, 'containers': [{}, {}]}

View File

@ -23,7 +23,7 @@ physical cores multiplied by the number of threads that can run on each core.',
}
class PluginModel(GlancesPluginModel):
class CorePlugin(GlancesPluginModel):
"""Glances CPU core plugin.
Get stats about CPU core number.

View File

@ -12,7 +12,7 @@ import psutil
from glances.cpu_percent import cpu_percent
from glances.globals import LINUX, SUNOS, WINDOWS, iterkeys
from glances.plugins.core import PluginModel as CorePluginModel
from glances.plugins.core import CorePlugin
from glances.plugins.plugin.model import GlancesPluginModel
# Fields description
@ -134,7 +134,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class CpuPlugin(GlancesPluginModel):
"""Glances CPU plugin.
'stats' is a dictionary that contains the system-wide CPU utilization as a
@ -150,9 +150,9 @@ class PluginModel(GlancesPluginModel):
# We want to display the stat in the curse interface
self.display_curse = True
# Call CorePluginModel in order to display the core number
# Call CorePlugin in order to display the core number
try:
self.nb_log_core = CorePluginModel(args=self.args).update()["log"]
self.nb_log_core = CorePlugin(args=self.args).update()["log"]
except Exception:
self.nb_log_core = 1

View File

@ -51,7 +51,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class DiskioPlugin(GlancesPluginModel):
"""Glances disks I/O plugin.
stats is a list

View File

@ -48,7 +48,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class FoldersPlugin(GlancesPluginModel):
"""Glances folder plugin."""
def __init__(self, args=None, config=None):

View File

@ -88,7 +88,7 @@ snmp_oid['esxi'] = snmp_oid['windows']
items_history_list = [{'name': 'percent', 'description': 'File system usage in percent', 'y_unit': '%'}]
class PluginModel(GlancesPluginModel):
class FsPlugin(GlancesPluginModel):
"""Glances file system plugin.
stats is a list

View File

@ -58,7 +58,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class GpuPlugin(GlancesPluginModel):
"""Glances GPU plugin.
stats is a list of dictionaries with one entry per GPU

View File

@ -19,7 +19,7 @@ from glances.globals import iteritems
from glances.plugins.plugin.model import GlancesPluginModel
class PluginModel(GlancesPluginModel):
class HelpPlugin(GlancesPluginModel):
"""Glances help plugin."""
def __init__(self, args=None, config=None):

View File

@ -62,7 +62,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class IpPlugin(GlancesPluginModel):
"""Glances IP Plugin.
stats is a dict

View File

@ -33,7 +33,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class IrqPlugin(GlancesPluginModel):
"""Glances IRQ plugin.
stats is a list

View File

@ -14,7 +14,7 @@ import psutil
from glances.globals import iteritems
from glances.logger import logger
from glances.plugins.core import PluginModel as CorePluginModel
from glances.plugins.core import CorePlugin
from glances.plugins.plugin.model import GlancesPluginModel
# Fields description
@ -63,7 +63,7 @@ items_history_list = [
nb_log_core = 1
nb_phys_core = 1
try:
core = CorePluginModel().update()
core = CorePlugin().update()
except Exception as e:
logger.warning(f'Error: Can not retrieve the CPU core number (set it to 1) ({e})')
else:
@ -73,7 +73,7 @@ else:
nb_phys_core = core['phys']
class PluginModel(GlancesPluginModel):
class LoadPlugin(GlancesPluginModel):
"""Glances load plugin.
stats is a dict

View File

@ -104,7 +104,7 @@ snmp_oid = {
items_history_list = [{'name': 'percent', 'description': 'RAM memory usage', 'y_unit': '%'}]
class PluginModel(GlancesPluginModel):
class MemPlugin(GlancesPluginModel):
"""Glances' memory plugin.
stats is a dict

View File

@ -51,7 +51,7 @@ snmp_oid = {
items_history_list = [{'name': 'percent', 'description': 'Swap memory usage', 'y_unit': '%'}]
class PluginModel(GlancesPluginModel):
class MemswapPlugin(GlancesPluginModel):
"""Glances swap memory plugin.
stats is a dict

View File

@ -62,7 +62,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class NetworkPlugin(GlancesPluginModel):
"""Glances network plugin.
stats is a list

View File

@ -25,7 +25,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class NowPlugin(GlancesPluginModel):
"""Plugin to get the current date/time.
stats is a dict:

View File

@ -94,7 +94,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class PercpuPlugin(GlancesPluginModel):
"""Glances per-CPU plugin.
'stats' is a list of dictionaries that contain the utilization percentages

View File

@ -67,7 +67,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class PortsPlugin(GlancesPluginModel):
"""Glances ports scanner plugin."""
def __init__(self, args=None, config=None):

View File

@ -49,7 +49,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class ProcesscountPlugin(GlancesPluginModel):
"""Glances process count plugin.
stats is a list

View File

@ -15,7 +15,7 @@ import os
from glances.globals import WINDOWS, key_exist_value_not_none_not_v, replace_special_chars
from glances.logger import logger
from glances.outputs.glances_unicode import unicode_message
from glances.plugins.core import PluginModel as CorePluginModel
from glances.plugins.core import CorePlugin
from glances.plugins.plugin.model import GlancesPluginModel
from glances.processes import glances_processes, sort_stats
@ -111,7 +111,7 @@ def split_cmdline(bare_process_name, cmdline):
return path, cmd, arguments
class PluginModel(GlancesPluginModel):
class ProcesslistPlugin(GlancesPluginModel):
"""Glances' processes plugin.
stats is a list
@ -179,9 +179,9 @@ class PluginModel(GlancesPluginModel):
# Trying to display proc time
self.tag_proc_time = True
# Call CorePluginModel to get the core number (needed when not in IRIX mode / Solaris mode)
# Call CorePlugin to get the core number (needed when not in IRIX mode / Solaris mode)
try:
self.nb_log_core = CorePluginModel(args=self.args).update()["log"]
self.nb_log_core = CorePlugin(args=self.args).update()["log"]
except Exception:
self.nb_log_core = 0

View File

@ -10,7 +10,7 @@
import copy
from glances.plugins.processlist import PluginModel as GlancesProcessListPluginModel
from glances.plugins.processlist import ProcesslistPlugin
from glances.processes import glances_processes
# Fields description
@ -75,7 +75,7 @@ fields_description = {
}
class PluginModel(GlancesProcessListPluginModel):
class ProgramlistPlugin(ProcesslistPlugin):
"""Glances' processes plugin.
stats is a list

View File

@ -13,7 +13,7 @@ from glances import psutil_version_info
from glances.plugins.plugin.model import GlancesPluginModel
class PluginModel(GlancesPluginModel):
class PsutilversionPlugin(GlancesPluginModel):
"""Get the Psutil version.
stats is a string

View File

@ -72,7 +72,7 @@ items_history_list = [
]
class PluginModel(GlancesPluginModel):
class QuicklookPlugin(GlancesPluginModel):
"""Glances quicklook plugin.
'stats' is a dictionary.

View File

@ -22,7 +22,7 @@ else:
import_error_tag = False
class PluginModel(GlancesPluginModel):
class RaidPlugin(GlancesPluginModel):
"""Glances RAID plugin.
stats is a dict (see pymdstat documentation)

View File

@ -18,8 +18,8 @@ from glances.globals import natural_keys, to_fahrenheit
from glances.logger import logger
from glances.outputs.glances_unicode import unicode_message
from glances.plugins.plugin.model import GlancesPluginModel
from glances.plugins.sensors.sensor.glances_batpercent import PluginModel as BatPercentPluginModel
from glances.plugins.sensors.sensor.glances_hddtemp import PluginModel as HddTempPluginModel
from glances.plugins.sensors.sensor.glances_batpercent import BatpercentPlugin
from glances.plugins.sensors.sensor.glances_hddtemp import HddtempPlugin
from glances.timer import Counter
# Define all kind of sensors available in Glances
@ -66,7 +66,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class SensorsPlugin(GlancesPluginModel):
"""Glances sensors plugin.
The stats list includes both sensors and hard disks stats, if any.
@ -90,12 +90,12 @@ class PluginModel(GlancesPluginModel):
# Instance for the HDDTemp Plugin in order to display the hard disks temperatures
start_duration.reset()
hddtemp_plugin = HddTempPluginModel(args=args, config=config)
hddtemp_plugin = HddtempPlugin(args=args, config=config)
logger.debug(f"HDDTemp sensor plugin init duration: {start_duration.get()} seconds")
# Instance for the BatPercent in order to display the batteries capacities
start_duration.reset()
batpercent_plugin = BatPercentPluginModel(args=args, config=config)
batpercent_plugin = BatpercentPlugin(args=args, config=config)
logger.debug(f"Battery sensor plugin init duration: {start_duration.get()} seconds")
self.sensors_grab_map = {}

View File

@ -34,7 +34,7 @@ except Exception as e:
psutil_tag = False
class PluginModel(GlancesPluginModel):
class BatpercentPlugin(GlancesPluginModel):
"""Glances battery capacity plugin.
stats is a list

View File

@ -16,7 +16,7 @@ from glances.logger import logger
from glances.plugins.plugin.model import GlancesPluginModel
class PluginModel(GlancesPluginModel):
class HddtempPlugin(GlancesPluginModel):
"""Glances HDD temperature sensors plugin.
stats is a list

View File

@ -118,7 +118,7 @@ def get_smart_data():
return stats
class PluginModel(GlancesPluginModel):
class SmartPlugin(GlancesPluginModel):
"""Glances' HDD SMART plugin."""
def __init__(self, args=None, config=None, stats_init_value=[]):

View File

@ -108,7 +108,7 @@ def _linux_os_release():
return pretty_name
class PluginModel(GlancesPluginModel):
class SystemPlugin(GlancesPluginModel):
"""Glances' host/system plugin.
stats is a dict

View File

@ -18,7 +18,7 @@ from glances.plugins.plugin.model import GlancesPluginModel
snmp_oid = {'_uptime': '1.3.6.1.2.1.1.3.0'}
class PluginModel(GlancesPluginModel):
class UptimePlugin(GlancesPluginModel):
"""Glances uptime plugin.
stats is date (string)

View File

@ -14,7 +14,7 @@ from glances import __version__ as glances_version
from glances.plugins.plugin.model import GlancesPluginModel
class PluginModel(GlancesPluginModel):
class VersionPlugin(GlancesPluginModel):
"""Get the Glances versions.
stats is a string

View File

@ -92,7 +92,7 @@ sort_for_human = {
}
class PluginModel(GlancesPluginModel):
class VmsPlugin(GlancesPluginModel):
"""Glances Vm plugin.
stats is a dict: {'version': '', 'vms': [{}, {}]}

View File

@ -49,7 +49,7 @@ fields_description = {
}
class PluginModel(GlancesPluginModel):
class WifiPlugin(GlancesPluginModel):
"""Glances Wifi plugin.
Get stats of the current Wifi hotspots.

View File

@ -99,7 +99,19 @@ class GlancesStats:
# Import the plugin
plugin = import_module('glances.plugins.' + plugin_path)
# Init and add the plugin to the dictionary
self._plugins[plugin_path] = plugin.PluginModel(args=args, config=config)
if hasattr(plugin, 'PluginModel'):
# Old fashion way to load the plugin (before Glances 5.0)
# Should be removed in Glances 5.0 - see #3170
self._plugins[plugin_path] = getattr(plugin, 'PluginModel')(args=args, config=config)
logger.warning(
f'The {plugin_path} plugin class name is "PluginModel" and it is deprecated, \
please rename it to "{plugin_path.capitalize()}Plugin"'
)
elif hasattr(plugin, plugin_path.capitalize() + 'Plugin'):
# New fashion way to load the plugin (after Glances 5.0)
self._plugins[plugin_path] = getattr(plugin, plugin_path.capitalize() + 'Plugin')(
args=args, config=config
)
except Exception as e:
# If a plugin can not be loaded, display a critical message
# on the console but do not crash
@ -145,7 +157,8 @@ class GlancesStats:
for fil in pathlib.Path(path).glob('*.py'):
if fil.is_file():
with open(fil) as fd:
if 'PluginModel' in fd.read():
# The first test should be removed in Glances 5.x - see #3170
if 'PluginModel' in fd.read() or plugin.capitalize() + 'Plugin' in fd.read():
_plugin_list.append(plugin)
break

View File

@ -45,7 +45,14 @@ class GlancesStatsClient(GlancesStats):
# for example, the file glances_xxx.py
# generate self._plugins_list["xxx"] = ...
logger.debug(f"Server uses {item} plugin")
self._plugins[item] = plugin.PluginModel(args=self.args)
if hasattr(plugin, 'PluginModel'):
# Old fashion way to load the plugin (before Glances 5.0)
# Should be removed in Glances 5.0 - see #3170
self._plugins[item] = getattr(plugin, 'PluginModel')(args=self.args)
elif hasattr(plugin, item.capitalize() + 'Plugin'):
# New fashion way to load the plugin (after Glances 5.0)
self._plugins[item] = getattr(plugin, item.capitalize() + 'Plugin')(args=self.args)
# Restoring system path
sys.path = sys_path