Files
rpa_vision_v3/core/monitoring/metrics.py
Dom 758e671732 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>
2026-01-19 15:34:34 +01:00

207 lines
5.3 KiB
Python

"""
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)