Add rate limiter
This commit is contained in:
@@ -17,19 +17,27 @@ import (
|
||||
)
|
||||
|
||||
type RealDebrid struct {
|
||||
UnrestrictMap cmap.ConcurrentMap[string, cmap.ConcurrentMap[string, *Download]]
|
||||
TokenManager *DownloadTokenManager
|
||||
torrentsCache []Torrent
|
||||
verifiedLinks cmap.ConcurrentMap[string, int64]
|
||||
apiClient *zurghttp.HTTPClient
|
||||
unrestrictClient *zurghttp.HTTPClient
|
||||
downloadClient *zurghttp.HTTPClient
|
||||
workerPool *ants.Pool
|
||||
cfg config.ConfigInterface
|
||||
log *logutil.Logger
|
||||
UnrestrictMap cmap.ConcurrentMap[string, cmap.ConcurrentMap[string, *Download]]
|
||||
TokenManager *DownloadTokenManager
|
||||
torrentsCache []Torrent
|
||||
verifiedLinks cmap.ConcurrentMap[string, int64]
|
||||
apiClient *zurghttp.HTTPClient
|
||||
unrestrictClient *zurghttp.HTTPClient
|
||||
downloadClient *zurghttp.HTTPClient
|
||||
workerPool *ants.Pool
|
||||
torrentsRateLimiter *zurghttp.RateLimiter
|
||||
cfg config.ConfigInterface
|
||||
log *logutil.Logger
|
||||
}
|
||||
|
||||
func NewRealDebrid(apiClient, unrestrictClient, downloadClient *zurghttp.HTTPClient, workerPool *ants.Pool, cfg config.ConfigInterface, log *logutil.Logger) *RealDebrid {
|
||||
func NewRealDebrid(apiClient,
|
||||
unrestrictClient,
|
||||
downloadClient *zurghttp.HTTPClient,
|
||||
workerPool *ants.Pool,
|
||||
torrentsRateLimiter *zurghttp.RateLimiter,
|
||||
cfg config.ConfigInterface,
|
||||
log *logutil.Logger,
|
||||
) *RealDebrid {
|
||||
mainToken := cfg.GetToken()
|
||||
downloadTokens := cfg.GetDownloadTokens()
|
||||
if !strings.Contains(strings.Join(downloadTokens, ","), mainToken) {
|
||||
@@ -37,16 +45,17 @@ func NewRealDebrid(apiClient, unrestrictClient, downloadClient *zurghttp.HTTPCli
|
||||
}
|
||||
|
||||
rd := &RealDebrid{
|
||||
UnrestrictMap: cmap.New[cmap.ConcurrentMap[string, *Download]](),
|
||||
TokenManager: NewDownloadTokenManager(downloadTokens, log),
|
||||
torrentsCache: []Torrent{},
|
||||
verifiedLinks: cmap.New[int64](),
|
||||
apiClient: apiClient,
|
||||
unrestrictClient: unrestrictClient,
|
||||
downloadClient: downloadClient,
|
||||
workerPool: workerPool,
|
||||
cfg: cfg,
|
||||
log: log,
|
||||
UnrestrictMap: cmap.New[cmap.ConcurrentMap[string, *Download]](),
|
||||
TokenManager: NewDownloadTokenManager(downloadTokens, log),
|
||||
torrentsCache: []Torrent{},
|
||||
verifiedLinks: cmap.New[int64](),
|
||||
apiClient: apiClient,
|
||||
unrestrictClient: unrestrictClient,
|
||||
downloadClient: downloadClient,
|
||||
workerPool: workerPool,
|
||||
torrentsRateLimiter: torrentsRateLimiter,
|
||||
cfg: cfg,
|
||||
log: log,
|
||||
}
|
||||
|
||||
for _, token := range downloadTokens {
|
||||
|
||||
@@ -29,7 +29,7 @@ func (rd *RealDebrid) GetTorrents(onlyOne bool) ([]Torrent, int, error) {
|
||||
|
||||
allTorrents := []Torrent{}
|
||||
page := 1
|
||||
pageSize := 250
|
||||
pageSize := 500
|
||||
|
||||
maxPages := (totalElements + pageSize - 1) / pageSize
|
||||
rd.log.Debugf("Torrents total count is %d", totalElements)
|
||||
@@ -127,6 +127,8 @@ func (rd *RealDebrid) fetchPageOfTorrents(page, limit int) fetchTorrentsResult {
|
||||
}
|
||||
}
|
||||
|
||||
rd.torrentsRateLimiter.Wait()
|
||||
|
||||
resp, err := rd.apiClient.Do(req)
|
||||
if err != nil {
|
||||
rd.log.Errorf("Error when executing the get torrents request: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user