- 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>
207 lines
5.3 KiB
Python
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)
|