package metrics import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/sony/gobreaker" ) var ( // circuitBreakerState indique l'état actuel du circuit breaker (0=closed, 1=half-open, 2=open) // MOD-P2-007: Métrique pour suivre l'état du circuit breaker circuitBreakerState = promauto.NewGaugeVec( prometheus.GaugeOpts{ Name: "veza_circuit_breaker_state", Help: "Current state of the circuit breaker (0=closed, 1=half-open, 2=open)", }, []string{"circuit_breaker_name"}, ) // circuitBreakerRequestsTotal compte le nombre total de requêtes // MOD-P2-007: Métrique pour compter les requêtes circuitBreakerRequestsTotal = promauto.NewCounterVec( prometheus.CounterOpts{ Name: "veza_circuit_breaker_requests_total", Help: "Total number of requests through the circuit breaker", }, []string{"circuit_breaker_name", "result"}, // result: success, failure, rejected ) // circuitBreakerFailuresTotal compte le nombre total d'échecs // MOD-P2-007: Métrique pour compter les échecs circuitBreakerFailuresTotal = promauto.NewCounterVec( prometheus.CounterOpts{ Name: "veza_circuit_breaker_failures_total", Help: "Total number of failures through the circuit breaker", }, []string{"circuit_breaker_name"}, ) // circuitBreakerConsecutiveFailures indique le nombre d'échecs consécutifs // MOD-P2-007: Métrique pour suivre les échecs consécutifs circuitBreakerConsecutiveFailures = promauto.NewGaugeVec( prometheus.GaugeOpts{ Name: "veza_circuit_breaker_consecutive_failures", Help: "Number of consecutive failures", }, []string{"circuit_breaker_name"}, ) ) // UpdateCircuitBreakerMetrics met à jour les métriques Prometheus pour un circuit breaker // MOD-P2-007: Expose les métriques du circuit breaker via Prometheus func UpdateCircuitBreakerMetrics(name string, counts gobreaker.Counts, state gobreaker.State) { // État du circuit breaker (0=closed, 1=half-open, 2=open) stateValue := 0.0 switch state { case gobreaker.StateClosed: stateValue = 0.0 case gobreaker.StateHalfOpen: stateValue = 1.0 case gobreaker.StateOpen: stateValue = 2.0 } circuitBreakerState.WithLabelValues(name).Set(stateValue) // Échecs consécutifs circuitBreakerConsecutiveFailures.WithLabelValues(name).Set(float64(counts.ConsecutiveFailures)) // Total des échecs circuitBreakerFailuresTotal.WithLabelValues(name).Add(float64(counts.TotalFailures - counts.ConsecutiveFailures)) } // RecordCircuitBreakerRequest enregistre une requête dans les métriques // MOD-P2-007: Enregistre le résultat d'une requête (success, failure, rejected) func RecordCircuitBreakerRequest(name string, result string) { circuitBreakerRequestsTotal.WithLabelValues(name, result).Inc() }