feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
@@ -0,0 +1,34 @@
import time
class CircuitBreaker:
def __init__(self, failure_threshold: int = 3, recovery_timeout: int = 10) -> None:
self.failure_threshold = failure_threshold
self.recovery_timeout = recovery_timeout
self.failure_count = 0
self.last_failure_time = None
self.state = "CLOSED" # OPEN, CLOSED, HALF-OPEN
def call(self, function, *args, **kwargs):
if self.state == "OPEN" and self.last_failure_time is not None:
if time.time() - self.last_failure_time >= self.recovery_timeout:
self.state = "HALF-OPEN"
else:
raise Exception("Circuit is open")
try:
result = function(*args, **kwargs)
self.on_success()
return result
except Exception as error:
self.on_failure()
raise error
def on_success(self):
self.failure_count = 0
self.state = "CLOSED"
def on_failure(self):
self.failure_count += 1
self.last_failure_time = time.time()
if self.failure_count >= self.failure_threshold:
self.state = "OPEN"