mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-03-08 06:43:41 +00:00
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package kiro
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
globalRateLimiter *RateLimiter
|
|
globalRateLimiterOnce sync.Once
|
|
|
|
globalCooldownManager *CooldownManager
|
|
globalCooldownManagerOnce sync.Once
|
|
cooldownStopCh chan struct{}
|
|
)
|
|
|
|
// GetGlobalRateLimiter returns the singleton RateLimiter instance.
|
|
func GetGlobalRateLimiter() *RateLimiter {
|
|
globalRateLimiterOnce.Do(func() {
|
|
globalRateLimiter = NewRateLimiter()
|
|
log.Info("kiro: global RateLimiter initialized")
|
|
})
|
|
return globalRateLimiter
|
|
}
|
|
|
|
// GetGlobalCooldownManager returns the singleton CooldownManager instance.
|
|
func GetGlobalCooldownManager() *CooldownManager {
|
|
globalCooldownManagerOnce.Do(func() {
|
|
globalCooldownManager = NewCooldownManager()
|
|
cooldownStopCh = make(chan struct{})
|
|
go globalCooldownManager.StartCleanupRoutine(5*time.Minute, cooldownStopCh)
|
|
log.Info("kiro: global CooldownManager initialized with cleanup routine")
|
|
})
|
|
return globalCooldownManager
|
|
}
|
|
|
|
// ShutdownRateLimiters stops the cooldown cleanup routine.
|
|
// Should be called during application shutdown.
|
|
func ShutdownRateLimiters() {
|
|
if cooldownStopCh != nil {
|
|
close(cooldownStopCh)
|
|
log.Info("kiro: rate limiter cleanup routine stopped")
|
|
}
|
|
}
|