77 lines
2.8 KiB
Go
77 lines
2.8 KiB
Go
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()
|
|
}
|