44package auditlogreceiver
55
66import (
7- "fmt "
7+ "errors "
88 "sync"
99 "time"
1010
1111 "go.uber.org/zap"
1212)
1313
14- type CircuitBreakerState int
14+ type circuitBreakerState int
1515
1616const (
17- CircuitClosed CircuitBreakerState = iota
18- CircuitOpen
19- CircuitHalfOpen
17+ circuitClosed circuitBreakerState = iota
18+ circuitOpen
19+ circuitHalfOpen
2020)
2121
22- type CircuitBreaker struct {
23- state CircuitBreakerState
22+ type circuitBreaker struct {
23+ state circuitBreakerState
2424 consecutiveFails int
2525 lastFailureTime time.Time
2626 mutex sync.RWMutex
2727 logger * zap.Logger
2828 config CircuitBreakerConfig
2929}
3030
31- func NewCircuitBreaker (config CircuitBreakerConfig , logger * zap.Logger ) * CircuitBreaker {
32- return & CircuitBreaker {
33- state : CircuitClosed ,
31+ func newCircuitBreaker (config CircuitBreakerConfig , logger * zap.Logger ) * circuitBreaker {
32+ return & circuitBreaker {
33+ state : circuitClosed ,
3434 config : config ,
3535 logger : logger ,
3636 }
3737}
3838
39- func (cb * CircuitBreaker ) IsOpen () bool {
39+ func (cb * circuitBreaker ) IsOpen () bool {
4040 cb .mutex .RLock ()
4141 defer cb .mutex .RUnlock ()
4242
43- if cb .state == CircuitOpen {
43+ if cb .state == circuitOpen {
4444 openDuration := cb .config .CircuitOpenDuration
4545 if openDuration == 0 {
4646 openDuration = time .Minute
4747 }
4848 if time .Since (cb .lastFailureTime ) >= openDuration {
49- cb .state = CircuitHalfOpen
49+ cb .state = circuitHalfOpen
5050 cb .logger .Info ("Circuit breaker transitioning to half-open state" )
5151 }
52- return cb .state == CircuitOpen
52+ return cb .state == circuitOpen
5353 }
5454 return false
5555}
5656
57- func (cb * CircuitBreaker ) IsHalfOpen () bool {
57+ func (cb * circuitBreaker ) IsHalfOpen () bool {
5858 cb .mutex .RLock ()
5959 defer cb .mutex .RUnlock ()
60- return cb .state == CircuitHalfOpen
60+ return cb .state == circuitHalfOpen
6161}
6262
63- func (cb * CircuitBreaker ) RecordSuccess () {
63+ func (cb * circuitBreaker ) RecordSuccess () {
6464 cb .mutex .Lock ()
6565 defer cb .mutex .Unlock ()
6666
6767 cb .consecutiveFails = 0
6868 previousState := cb .state
69- cb .state = CircuitClosed
69+ cb .state = circuitClosed
7070
71- if previousState == CircuitHalfOpen {
71+ if previousState == circuitHalfOpen {
7272 cb .logger .Info ("Circuit breaker transitioned from half-open to closed due to successful operation" )
7373 } else {
7474 cb .logger .Info ("Circuit breaker closed due to successful operation" )
7575 }
7676}
7777
78- func (cb * CircuitBreaker ) RecordFailure () {
78+ func (cb * circuitBreaker ) RecordFailure () {
7979 cb .mutex .Lock ()
8080 defer cb .mutex .Unlock ()
8181
@@ -87,69 +87,60 @@ func (cb *CircuitBreaker) RecordFailure() {
8787 threshold = 5
8888 }
8989
90- if cb .state == CircuitHalfOpen {
91- cb .state = CircuitOpen
90+ if cb .state == circuitHalfOpen {
91+ cb .state = circuitOpen
9292 cb .logger .Warn ("Circuit breaker reopened due to failure in half-open state" ,
9393 zap .Int ("failures" , cb .consecutiveFails ))
9494 } else if cb .consecutiveFails >= threshold {
95- cb .state = CircuitOpen
95+ cb .state = circuitOpen
9696 cb .logger .Warn ("Circuit breaker opened due to consecutive failures" ,
9797 zap .Int ("failures" , cb .consecutiveFails ))
9898 }
9999}
100100
101- // for debugging/monitoring
102- func (cb * CircuitBreaker ) GetState () CircuitBreakerState {
101+ func (cb * circuitBreaker ) getState () circuitBreakerState {
103102 cb .mutex .RLock ()
104103 defer cb .mutex .RUnlock ()
105104 return cb .state
106105}
107106
108- // for debugging/monitoring
109- func (cb * CircuitBreaker ) GetConsecutiveFailures () int {
110- cb .mutex .RLock ()
111- defer cb .mutex .RUnlock ()
112- return cb .consecutiveFails
113- }
114-
115- func (cb * CircuitBreaker ) ShouldAttemptProcessing () bool {
107+ func (cb * circuitBreaker ) shouldAttemptProcessing () bool {
116108 cb .mutex .RLock ()
117109 defer cb .mutex .RUnlock ()
118110
119- return cb .state == CircuitClosed || cb .state == CircuitHalfOpen
111+ return cb .state == circuitClosed || cb .state == circuitHalfOpen
120112}
121113
122114// CheckAndUpdateState checks if the circuit breaker should transition states
123- func (cb * CircuitBreaker ) CheckAndUpdateState () {
115+ func (cb * circuitBreaker ) checkAndUpdateState () {
124116 cb .mutex .Lock ()
125117 defer cb .mutex .Unlock ()
126118
127- if cb .state == CircuitOpen {
119+ if cb .state == circuitOpen {
128120 openDuration := cb .config .CircuitOpenDuration
129121 if openDuration == 0 {
130122 openDuration = time .Minute
131123 }
132124 if time .Since (cb .lastFailureTime ) >= openDuration {
133- cb .state = CircuitHalfOpen
125+ cb .state = circuitHalfOpen
134126 cb .logger .Info ("Circuit breaker transitioning to half-open state" )
135127 }
136128 }
137129}
138130
139- // CheckCircuitBreakerState checks and updates circuit breaker state, returns true if processing should continue
140- func (cb * CircuitBreaker ) CheckCircuitBreakerState (entryID string ) (bool , error ) {
141- // Check and update circuit breaker state
142- cb .CheckAndUpdateState ()
131+ // checkCircuitBreakerState checks and updates circuit breaker state, returns true if processing should continue
132+ func (cb * circuitBreaker ) checkCircuitBreakerState (entryID string ) (bool , error ) {
133+ cb .checkAndUpdateState ()
143134
144- if ! cb .ShouldAttemptProcessing () {
145- return false , fmt . Errorf ("circuit breaker is open, skipping processing" )
135+ if ! cb .shouldAttemptProcessing () {
136+ return false , errors . New ("circuit breaker is open, skipping processing" )
146137 }
147138
148- // Log the circuit breaker state for debugging
149- state := cb . GetState ()
150- if state == CircuitHalfOpen {
139+ state := cb . getState ()
140+ switch state {
141+ case circuitHalfOpen :
151142 cb .logger .Debug ("Processing log in half-open state to test connectivity" , zap .String ("id" , entryID ))
152- } else if state == CircuitClosed {
143+ case circuitClosed :
153144 cb .logger .Debug ("Processing log in closed state (normal operation)" , zap .String ("id" , entryID ))
154145 }
155146
0 commit comments