YmcAI's picture
ajoute et implementation de la communication etre Satellite
cabb2b8
raw
history blame
5.97 kB
import psutil
import time
from typing import Dict, Any, List
from satellites.base_satellite import VegapunkSatellite
from utils.logger import get_logger
import logging
role = "Gestion des ressources et maintenance système"
fonction = "Gerer les tache repetitive, les resource et les maintenance des systeme"
class York(VegapunkSatellite):
def __init__(self):
super().__init__(name="York", specialty=role)
self.resource_thresholds ={
"cpu": 90,
"memory": 90,
"disk": 90,
"network": 75,
}
self.maintenance_schedule = {}
# logging.basicConfig(filename='york.log', level=logging.INFO)
self.external_apis = {}
from utils.logger import get_logger
def process_task(self, task: Dict[str, Any]) -> Dict[str, Any]:
task_type = task.get("type")
if task_type == "check_resources":
result = self.check_system_resources()
elif task_type == "optimize_performance":
result = self.optimize_system_performance()
elif task_type == "schedule_maintenance":
result = self.schedule_maintenance(task["component"], task["date"])
elif task_type == "perform_maintenance":
result = self.perform_maintenance(task["component"])
else:
result = f"Tâche non reconnue : {task_type}"
self.log_activity(f"Tâche traitée : {task_type}, Résultat : {result}")
return {"result": result}
def check_system_resources(self) -> Dict[str, Any]:
cpu_usage = psutil.cpu_percent()
memory_usage = psutil.virtual_memory().percent
disk_usage = psutil.disk_usage('/').percent
network_usage = psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv
status = {
"cpu": "Normal" if cpu_usage < self.resource_thresholds["cpu"] else "Élevé",
"memory": "Normal" if memory_usage < self.resource_thresholds["memory"] else "Élevé",
"disk": "Normal" if disk_usage < self.resource_thresholds["disk"] else "Élevé",
"network": "Normal" # Simplified for this example
}
return {
"cpu_usage": cpu_usage,
"memory_usage": memory_usage,
"disk_usage": disk_usage,
"network_usage": network_usage,
"status": status
}
def optimize_system_performance(self) -> Dict[str, Any]:
# Simulation d'optimisation du système
optimizations = []
if psutil.cpu_percent() > self.resource_thresholds["cpu"]:
optimizations.append("Réduction de la charge CPU")
if psutil.virtual_memory().percent > self.resource_thresholds["memory"]:
optimizations.append("Libération de mémoire")
if psutil.disk_usage('/').percent > self.resource_thresholds["disk"]:
optimizations.append("Nettoyage de l'espace disque")
return {
"optimizations_performed": optimizations,
"performance_improvement": f"{len(optimizations) * 5}%" # Simulated improvement
}
def schedule_maintenance(self, component: str, date: str) -> Dict[str, Any]:
self.maintenance_schedule[component] = date
return {
"component": component,
"scheduled_date": date,
"status": "Maintenance programmée"
}
def perform_maintenance(self, component: str) -> Dict[str, Any]:
if component in self.maintenance_schedule:
# Simulation de maintenance
time.sleep(2) # Simule le temps de maintenance
del self.maintenance_schedule[component]
return {
"component": component,
"status": "Maintenance effectuée",
"result": "Performances du composant améliorées"
}
else:
return {
"component": component,
"status": "Erreur",
"result": "Aucune maintenance programmée pour ce composant"
}
def log_activity(self, activity: str):
logging.info(activity)
def communicate_with_stellar(self, message: Dict[str, Any]) -> Dict[str, Any]:
self.log_activity(f"Communication avec Stellar : {message}")
return {"status": "Message reçu par Stellar", "details": message}
def update_from_punkrecord(self) -> None:
self.log_activity("Mise à jour depuis PunkRecord")
# Ici, vous pourriez implémenter la logique pour mettre à jour les seuils de ressources ou les plannings de maintenance
def process_communication(self,sender_name:str,message:Dict[str,Any]) ->Dict[str,Any]:
if message.get("type") == "task":
task_result = self.process_task(message.get("task"))
return {"status": "Traitement effectué", "result": task_result}
elif message.get("type") == "resource_thresholds":
self.resource_thresholds = message.get("thresholds")
return {"status": "Seuils de ressources mis à jour", "result": self.resource_thresholds}
elif message.get("type") == "maintenance_schedule":
self.maintenance_schedule = message.get("schedule")
return {"status": "Planning de maintenance mis à jour", "result": self.maintenance_schedule}
elif message.get("type") == "external_api":
api_name = message.get("api_name")
api_config = message.get("api_config")
self.external_apis[api_name] = api_config
return {"status": "API externe ajoutée", "result": api_config}
else:
return {"status": "Message non reconnu", "result": "Aucune action effectuée"}
def receive_communication(self, sender_name: str, message: Dict[str, Any]) -> Dict[str, Any]:
logging.info(f"{self.name} received communication from {sender_name}")
return self.process_communication(sender_name, message)