104 lines
3.2 KiB
Python
104 lines
3.2 KiB
Python
"""
|
|
Scheduler APScheduler pour les scans réseau périodiques
|
|
"""
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
from apscheduler.triggers.interval import IntervalTrigger
|
|
from datetime import datetime, timedelta
|
|
from typing import Optional, Callable
|
|
import asyncio
|
|
|
|
|
|
class ScanScheduler:
|
|
"""Gestionnaire de tâches planifiées pour les scans"""
|
|
|
|
def __init__(self):
|
|
"""Initialise le scheduler"""
|
|
self.scheduler = AsyncIOScheduler()
|
|
self.is_running = False
|
|
|
|
def start(self):
|
|
"""Démarre le scheduler"""
|
|
if not self.is_running:
|
|
self.scheduler.start()
|
|
self.is_running = True
|
|
print(f"[{datetime.now()}] Scheduler démarré")
|
|
|
|
def stop(self):
|
|
"""Arrête le scheduler"""
|
|
if self.is_running:
|
|
self.scheduler.shutdown()
|
|
self.is_running = False
|
|
print(f"[{datetime.now()}] Scheduler arrêté")
|
|
|
|
def add_ping_scan_job(self, scan_function: Callable, interval_seconds: int = 60):
|
|
"""
|
|
Ajoute une tâche de scan ping périodique
|
|
|
|
Args:
|
|
scan_function: Fonction async à exécuter
|
|
interval_seconds: Intervalle en secondes
|
|
"""
|
|
self.scheduler.add_job(
|
|
scan_function,
|
|
trigger=IntervalTrigger(seconds=interval_seconds),
|
|
id='ping_scan',
|
|
name='Scan Ping périodique',
|
|
replace_existing=True
|
|
)
|
|
print(f"Tâche ping_scan configurée: toutes les {interval_seconds}s")
|
|
|
|
def add_port_scan_job(self, scan_function: Callable, interval_seconds: int = 300):
|
|
"""
|
|
Ajoute une tâche de scan de ports périodique
|
|
|
|
Args:
|
|
scan_function: Fonction async à exécuter
|
|
interval_seconds: Intervalle en secondes
|
|
"""
|
|
self.scheduler.add_job(
|
|
scan_function,
|
|
trigger=IntervalTrigger(seconds=interval_seconds),
|
|
id='port_scan',
|
|
name='Scan ports périodique',
|
|
replace_existing=True
|
|
)
|
|
print(f"Tâche port_scan configurée: toutes les {interval_seconds}s")
|
|
|
|
def add_cleanup_job(self, cleanup_function: Callable, interval_hours: int = 1):
|
|
"""
|
|
Ajoute une tâche de nettoyage de l'historique
|
|
|
|
Args:
|
|
cleanup_function: Fonction async de nettoyage
|
|
interval_hours: Intervalle en heures
|
|
"""
|
|
self.scheduler.add_job(
|
|
cleanup_function,
|
|
trigger=IntervalTrigger(hours=interval_hours),
|
|
id='history_cleanup',
|
|
name='Nettoyage historique',
|
|
replace_existing=True
|
|
)
|
|
print(f"Tâche cleanup configurée: toutes les {interval_hours}h")
|
|
|
|
def remove_job(self, job_id: str):
|
|
"""
|
|
Supprime une tâche planifiée
|
|
|
|
Args:
|
|
job_id: ID de la tâche
|
|
"""
|
|
try:
|
|
self.scheduler.remove_job(job_id)
|
|
print(f"Tâche {job_id} supprimée")
|
|
except Exception as e:
|
|
print(f"Erreur suppression tâche {job_id}: {e}")
|
|
|
|
def get_jobs(self):
|
|
"""Retourne la liste des tâches planifiées"""
|
|
return self.scheduler.get_jobs()
|
|
|
|
|
|
# Instance globale du scheduler
|
|
scan_scheduler = ScanScheduler()
|