fix(logging): Corriger système de logging avec format unifié et filtrage ANSI
- Réécrire logger.py avec format cohérent: "timestamp | level | component | message" - Ajouter ANSIStripFilter pour nettoyer les codes couleur des logs - Implémenter _clean_component_name() pour éviter les noms de fichiers corrompus - Configurer rotation des fichiers (10MB, 5 backups) - Rendre imports Prometheus optionnels dans __init__.py - Réduire bruit des librairies externes (werkzeug, urllib3, etc.) Corrige les problèmes de fichiers logs corrompus (!0.log, #0.log, %0.log, etc.) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
206
core/monitoring/metrics.py
Normal file
206
core/monitoring/metrics.py
Normal file
@@ -0,0 +1,206 @@
|
||||
"""
|
||||
Métriques Prometheus pour RPA Vision
|
||||
|
||||
Ce module définit toutes les métriques Prometheus utilisées
|
||||
pour monitorer le système RPA.
|
||||
"""
|
||||
|
||||
from prometheus_client import Counter, Histogram, Gauge, Info
|
||||
|
||||
# =============================================================================
|
||||
# Counters - Métriques qui ne font qu'augmenter
|
||||
# =============================================================================
|
||||
|
||||
workflow_executions_total = Counter(
|
||||
'workflow_executions_total',
|
||||
'Total workflow executions',
|
||||
['workflow_id', 'status']
|
||||
)
|
||||
|
||||
log_entries_total = Counter(
|
||||
'log_entries_total',
|
||||
'Total log entries',
|
||||
['level', 'component']
|
||||
)
|
||||
|
||||
chain_executions_total = Counter(
|
||||
'chain_executions_total',
|
||||
'Total chain executions',
|
||||
['chain_id', 'status']
|
||||
)
|
||||
|
||||
trigger_fires_total = Counter(
|
||||
'trigger_fires_total',
|
||||
'Total trigger fires',
|
||||
['trigger_type', 'workflow_id']
|
||||
)
|
||||
|
||||
# =============================================================================
|
||||
# Histograms - Distribution de valeurs
|
||||
# =============================================================================
|
||||
|
||||
workflow_duration_seconds = Histogram(
|
||||
'workflow_duration_seconds',
|
||||
'Workflow execution duration in seconds',
|
||||
['workflow_id'],
|
||||
buckets=(0.1, 0.5, 1.0, 2.5, 5.0, 10.0, 30.0, 60.0, 120.0, 300.0, float('inf'))
|
||||
)
|
||||
|
||||
chain_duration_seconds = Histogram(
|
||||
'chain_duration_seconds',
|
||||
'Chain execution duration in seconds',
|
||||
['chain_id'],
|
||||
buckets=(1.0, 5.0, 10.0, 30.0, 60.0, 120.0, 300.0, 600.0, float('inf'))
|
||||
)
|
||||
|
||||
# =============================================================================
|
||||
# Gauges - Valeurs qui peuvent augmenter ou diminuer
|
||||
# =============================================================================
|
||||
|
||||
active_workflows = Gauge(
|
||||
'active_workflows',
|
||||
'Number of currently active workflows'
|
||||
)
|
||||
|
||||
active_chains = Gauge(
|
||||
'active_chains',
|
||||
'Number of currently active chains'
|
||||
)
|
||||
|
||||
error_rate = Gauge(
|
||||
'error_rate',
|
||||
'Current error rate percentage'
|
||||
)
|
||||
|
||||
enabled_triggers = Gauge(
|
||||
'enabled_triggers',
|
||||
'Number of enabled triggers'
|
||||
)
|
||||
|
||||
# =============================================================================
|
||||
# Info - Informations système
|
||||
# =============================================================================
|
||||
|
||||
system_info = Info(
|
||||
'rpa_system',
|
||||
'RPA system information'
|
||||
)
|
||||
|
||||
# Initialiser les informations système
|
||||
system_info.info({
|
||||
'version': '3.0.0',
|
||||
'component': 'rpa_vision',
|
||||
'monitoring': 'enabled'
|
||||
})
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Fonctions utilitaires
|
||||
# =============================================================================
|
||||
|
||||
def increment_workflow_execution(workflow_id: str, success: bool):
|
||||
"""
|
||||
Incrémente le compteur d'exécution de workflow.
|
||||
|
||||
Args:
|
||||
workflow_id: ID du workflow
|
||||
success: True si succès, False si échec
|
||||
"""
|
||||
status = 'success' if success else 'failure'
|
||||
workflow_executions_total.labels(workflow_id=workflow_id, status=status).inc()
|
||||
|
||||
|
||||
def record_workflow_duration(workflow_id: str, duration: float):
|
||||
"""
|
||||
Enregistre la durée d'exécution d'un workflow.
|
||||
|
||||
Args:
|
||||
workflow_id: ID du workflow
|
||||
duration: Durée en secondes
|
||||
"""
|
||||
workflow_duration_seconds.labels(workflow_id=workflow_id).observe(duration)
|
||||
|
||||
|
||||
def increment_log_entry(level: str, component: str):
|
||||
"""
|
||||
Incrémente le compteur d'entrées de log.
|
||||
|
||||
Args:
|
||||
level: Niveau de log (INFO, WARNING, ERROR, DEBUG)
|
||||
component: Composant source
|
||||
"""
|
||||
log_entries_total.labels(level=level, component=component).inc()
|
||||
|
||||
|
||||
def increment_chain_execution(chain_id: str, success: bool):
|
||||
"""
|
||||
Incrémente le compteur d'exécution de chaîne.
|
||||
|
||||
Args:
|
||||
chain_id: ID de la chaîne
|
||||
success: True si succès, False si échec
|
||||
"""
|
||||
status = 'success' if success else 'failure'
|
||||
chain_executions_total.labels(chain_id=chain_id, status=status).inc()
|
||||
|
||||
|
||||
def record_chain_duration(chain_id: str, duration: float):
|
||||
"""
|
||||
Enregistre la durée d'exécution d'une chaîne.
|
||||
|
||||
Args:
|
||||
chain_id: ID de la chaîne
|
||||
duration: Durée en secondes
|
||||
"""
|
||||
chain_duration_seconds.labels(chain_id=chain_id).observe(duration)
|
||||
|
||||
|
||||
def increment_trigger_fire(trigger_type: str, workflow_id: str):
|
||||
"""
|
||||
Incrémente le compteur de déclenchements.
|
||||
|
||||
Args:
|
||||
trigger_type: Type de trigger (schedule, file, manual)
|
||||
workflow_id: ID du workflow déclenché
|
||||
"""
|
||||
trigger_fires_total.labels(trigger_type=trigger_type, workflow_id=workflow_id).inc()
|
||||
|
||||
|
||||
def set_active_workflows(count: int):
|
||||
"""
|
||||
Met à jour le nombre de workflows actifs.
|
||||
|
||||
Args:
|
||||
count: Nombre de workflows actifs
|
||||
"""
|
||||
active_workflows.set(count)
|
||||
|
||||
|
||||
def set_active_chains(count: int):
|
||||
"""
|
||||
Met à jour le nombre de chaînes actives.
|
||||
|
||||
Args:
|
||||
count: Nombre de chaînes actives
|
||||
"""
|
||||
active_chains.set(count)
|
||||
|
||||
|
||||
def set_error_rate(rate: float):
|
||||
"""
|
||||
Met à jour le taux d'erreur.
|
||||
|
||||
Args:
|
||||
rate: Taux d'erreur en pourcentage (0-100)
|
||||
"""
|
||||
error_rate.set(rate)
|
||||
|
||||
|
||||
def set_enabled_triggers(count: int):
|
||||
"""
|
||||
Met à jour le nombre de triggers activés.
|
||||
|
||||
Args:
|
||||
count: Nombre de triggers activés
|
||||
"""
|
||||
enabled_triggers.set(count)
|
||||
Reference in New Issue
Block a user