initial commit
This commit is contained in:
151
output/Pc-monitor/_internal/plugins/base.py
Normal file
151
output/Pc-monitor/_internal/plugins/base.py
Normal file
@@ -0,0 +1,151 @@
|
||||
"""
|
||||
Classe de base pour tous les plugins de monitoring
|
||||
"""
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional, List, Dict, Any
|
||||
|
||||
|
||||
class BasePlugin(ABC):
|
||||
"""Classe abstraite définissant l'interface des plugins"""
|
||||
|
||||
def __init__(self, config: dict):
|
||||
"""
|
||||
Initialise le plugin avec sa configuration
|
||||
|
||||
Args:
|
||||
config: Configuration du plugin (host, port, etc.)
|
||||
"""
|
||||
self.host = config.get('host', '127.0.0.1')
|
||||
self.port = config.get('port', self.get_default_port())
|
||||
self.config = config
|
||||
|
||||
@abstractmethod
|
||||
def get_id(self) -> str:
|
||||
"""Retourne l'identifiant unique du plugin"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_name(self) -> str:
|
||||
"""Retourne le nom affichable du plugin"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_default_port(self) -> int:
|
||||
"""Retourne le port par défaut"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def test_connection(self) -> Dict[str, Any]:
|
||||
"""
|
||||
Teste la connexion au logiciel de monitoring
|
||||
|
||||
Returns:
|
||||
dict avec 'success' (bool), 'message' (str), et optionnellement 'version'
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_data(self) -> Optional[dict]:
|
||||
"""
|
||||
Récupère les données brutes du logiciel de monitoring
|
||||
|
||||
Returns:
|
||||
Données brutes ou None si erreur
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_hierarchy(self) -> List[dict]:
|
||||
"""
|
||||
Récupère la hiérarchie des capteurs (pour l'admin)
|
||||
|
||||
Returns:
|
||||
Liste de hardware avec leurs capteurs
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def parse_sensors(self, data: dict) -> List[dict]:
|
||||
"""
|
||||
Parse les données brutes en liste standardisée de capteurs
|
||||
|
||||
Args:
|
||||
data: Données brutes du logiciel
|
||||
|
||||
Returns:
|
||||
Liste de capteurs au format standardisé:
|
||||
[
|
||||
{
|
||||
'id': str, # Identifiant unique
|
||||
'name': str, # Nom du capteur
|
||||
'value': str, # Valeur formatée (ex: "45 °C")
|
||||
'raw_value': float, # Valeur numérique
|
||||
'type': str, # Type (temperature, load, voltage, etc.)
|
||||
'unit': str, # Unité (°C, %, MHz, etc.)
|
||||
'hardware': str, # Nom du hardware parent
|
||||
'hardware_type': str # Type de hardware (CPU, GPU, etc.)
|
||||
},
|
||||
...
|
||||
]
|
||||
"""
|
||||
pass
|
||||
|
||||
def get_base_url(self) -> str:
|
||||
"""Retourne l'URL de base pour les requêtes"""
|
||||
return f"http://{self.host}:{self.port}"
|
||||
|
||||
def get_sensor_type(self, unit: str, name: str = '') -> str:
|
||||
"""
|
||||
Détermine le type de capteur à partir de l'unité et du nom
|
||||
|
||||
Args:
|
||||
unit: Unité du capteur
|
||||
name: Nom du capteur (pour affiner la détection)
|
||||
|
||||
Returns:
|
||||
Type standardisé du capteur
|
||||
"""
|
||||
unit_lower = unit.lower() if unit else ''
|
||||
name_lower = name.lower() if name else ''
|
||||
|
||||
# Détection par unité
|
||||
if '°c' in unit_lower or '°f' in unit_lower:
|
||||
return 'temperature'
|
||||
elif '%' in unit_lower:
|
||||
if 'load' in name_lower or 'usage' in name_lower:
|
||||
return 'load'
|
||||
return 'percentage'
|
||||
elif 'mhz' in unit_lower or 'ghz' in unit_lower:
|
||||
return 'frequency'
|
||||
elif 'rpm' in unit_lower:
|
||||
return 'fan'
|
||||
elif 'w' in unit_lower and 'wh' not in unit_lower:
|
||||
return 'power'
|
||||
elif 'v' in unit_lower and 'mv' not in unit_lower:
|
||||
return 'voltage'
|
||||
elif 'mv' in unit_lower:
|
||||
return 'voltage'
|
||||
elif 'mb' in unit_lower or 'gb' in unit_lower or 'kb' in unit_lower:
|
||||
return 'data'
|
||||
elif 'mb/s' in unit_lower or 'kb/s' in unit_lower or 'gb/s' in unit_lower:
|
||||
return 'throughput'
|
||||
elif 'a' in unit_lower:
|
||||
return 'current'
|
||||
elif 'wh' in unit_lower:
|
||||
return 'energy'
|
||||
|
||||
# Détection par nom si unité non reconnue
|
||||
if 'temp' in name_lower or 'temperature' in name_lower:
|
||||
return 'temperature'
|
||||
elif 'fan' in name_lower:
|
||||
return 'fan'
|
||||
elif 'clock' in name_lower or 'freq' in name_lower:
|
||||
return 'frequency'
|
||||
elif 'load' in name_lower or 'usage' in name_lower:
|
||||
return 'load'
|
||||
elif 'power' in name_lower:
|
||||
return 'power'
|
||||
elif 'voltage' in name_lower or 'vcore' in name_lower:
|
||||
return 'voltage'
|
||||
|
||||
return 'generic'
|
||||
Reference in New Issue
Block a user