File manager - Edit - /var/www/html/homologBancodetalentos/app/Support/TalentBank/IntegrationCircuitBreaker.php
Back
<?php namespace App\Support\TalentBank; use Illuminate\Support\Facades\Cache; final class IntegrationCircuitBreaker { public static function isOpen(string $integration): bool { $openUntil = (int) Cache::get(self::openUntilKey($integration), 0); return $openUntil > now()->timestamp; } public static function recordFailure(string $integration): void { if (! self::enabled()) { return; } $windowSeconds = (int) config('talent_bank.circuit_breaker.window_seconds', 60); $openSeconds = (int) config('talent_bank.circuit_breaker.open_seconds', 120); $threshold = (int) config('talent_bank.circuit_breaker.failure_threshold', 5); $failures = (int) Cache::get(self::failuresKey($integration), 0); $failures++; Cache::put(self::failuresKey($integration), $failures, now()->addSeconds($windowSeconds)); if ($failures < $threshold) { return; } $openUntil = now()->addSeconds($openSeconds)->timestamp; Cache::put(self::openUntilKey($integration), $openUntil, now()->addSeconds($openSeconds)); Cache::forget(self::failuresKey($integration)); IntegrationLog::warning($integration, 'circuit_breaker_opened', [ 'open_until' => $openUntil, 'failure_threshold' => $threshold, 'open_seconds' => $openSeconds, ]); } public static function recordSuccess(string $integration): void { if (! self::enabled()) { return; } Cache::forget(self::failuresKey($integration)); Cache::forget(self::openUntilKey($integration)); } private static function enabled(): bool { return (bool) config('talent_bank.circuit_breaker.enabled', true); } private static function failuresKey(string $integration): string { return 'tb:circuit-breaker:'.$integration.':failures'; } private static function openUntilKey(string $integration): string { return 'tb:circuit-breaker:'.$integration.':open-until'; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings