switched to rate.Limiter

This commit is contained in:
2022-03-30 15:32:25 +02:00
parent ac512aec2f
commit acbfb97014
5 changed files with 40 additions and 23 deletions

View File

@@ -15,9 +15,10 @@ import (
"git.harting.dev/csgowtf/csgowtfd/ent/weapon"
"github.com/an0nfunc/go-steamapi"
log "github.com/sirupsen/logrus"
"go.uber.org/ratelimit"
"golang.org/x/time/rate"
"io"
"io/ioutil"
"math"
"net/http"
"net/url"
"path"
@@ -42,9 +43,9 @@ type Conf struct {
Steam struct {
Username string
Password string
AuthCode string `yaml:"auth_code"`
APIKey string `yaml:"api_key"`
RatePerSecond int `yaml:"rate_per_sec"`
AuthCode string `yaml:"auth_code"`
APIKey string `yaml:"api_key"`
RatePerSecond float64 `yaml:"rate_per_sec"`
Sentry string
LoginKey string `yaml:"login_key"`
MaxRetryWait int `yaml:"max_retry_wait"`
@@ -494,7 +495,7 @@ func GetWinLossTieForPlayer(dbPlayer *ent.Player) (wins int, looses int, ties in
return
}
func IsAuthCodeValid(player *ent.Player, apiKey string, shareCode string, authCode string, rl ratelimit.Limiter) (bool, error) {
func IsAuthCodeValid(player *ent.Player, apiKey string, shareCode string, authCode string, rl *rate.Limiter) (bool, error) {
var tMatch *ent.Match
var err error
if shareCode == "" {
@@ -517,7 +518,7 @@ func IsAuthCodeValid(player *ent.Player, apiKey string, shareCode string, authCo
}
}
func GetNewShareCodesForPlayer(player *ent.Player, apiKey string, rl ratelimit.Limiter) ([]string, error) {
func GetNewShareCodesForPlayer(player *ent.Player, apiKey string, rl *rate.Limiter) ([]string, error) {
latestMatch, err := player.QueryMatches().Order(ent.Desc(match.FieldDate)).First(context.Background())
if err != nil {
return nil, err
@@ -555,13 +556,16 @@ func GetNewShareCodesForPlayer(player *ent.Player, apiKey string, rl ratelimit.L
return rCodes, nil
}
func getNextShareCode(lastCode string, apiKey string, authCode string, steamId uint64, rl ratelimit.Limiter) (string, error) {
func getNextShareCode(lastCode string, apiKey string, authCode string, steamId uint64, rl *rate.Limiter) (string, error) {
if lastCode == "" || apiKey == "" || authCode == "" || steamId == 0 {
return "", fmt.Errorf("invalid arguments")
}
if rl != nil {
rl.Take()
err := rl.Wait(context.Background())
if err != nil {
return "", err
}
}
log.Debugf("[SC] STEAMPI with %s", fmt.Sprintf(shareCodeURLEntry, "REDACTED", steamId, "REDACTED", lastCode))
r, err := http.Get(fmt.Sprintf(shareCodeURLEntry, apiKey, steamId, authCode, lastCode))
@@ -603,7 +607,7 @@ func getNextShareCode(lastCode string, apiKey string, authCode string, steamId u
return rJson.Result.Code, nil
}
func Player(db *ent.Client, id interface{}, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
func Player(db *ent.Client, id interface{}, apiKey string, rl *rate.Limiter) (*ent.Player, error) {
switch e := id.(type) {
case uint64:
return PlayerFromSteamID64(db, e, apiKey, rl)
@@ -623,7 +627,7 @@ func Player(db *ent.Client, id interface{}, apiKey string, rl ratelimit.Limiter)
}
}
func PlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
func PlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl *rate.Limiter) (*ent.Player, error) {
if id == "" {
return nil, fmt.Errorf("invalid arguments")
}
@@ -633,7 +637,10 @@ func PlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelimit.
return tPlayer, nil
} else {
if rl != nil {
rl.Take()
err := rl.Wait(context.Background())
if err != nil {
return nil, err
}
}
resp, err := steamapi.ResolveVanityURL(id, apiKey)
if err != nil {
@@ -653,7 +660,7 @@ func PlayerFromVanityURL(db *ent.Client, id string, apiKey string, rl ratelimit.
}
}
func PlayerFromSteamID64(db *ent.Client, steamID uint64, apiKey string, rl ratelimit.Limiter) (*ent.Player, error) {
func PlayerFromSteamID64(db *ent.Client, steamID uint64, apiKey string, rl *rate.Limiter) (*ent.Player, error) {
tPlayer, err := db.Player.Get(context.Background(), steamID)
if err == nil {
return tPlayer, nil
@@ -718,15 +725,20 @@ func TranslateWithDeepL(text string, language string, baseURL string, apiKey str
}
}
func PlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string, rl ratelimit.Limiter) ([]*ent.Player, error) {
func PlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string, rl *rate.Limiter) ([]*ent.Player, error) {
var idsToUpdate []uint64
for _, updatePlayer := range players {
idsToUpdate = append(idsToUpdate, updatePlayer.ID)
}
batches := int(math.Round((float64(len(players)) / 100) + 0.5))
if rl != nil {
rl.Take()
err := rl.WaitN(context.Background(), batches)
if err != nil {
return nil, err
}
}
playerSum, err := steamapi.GetPlayerSummaries(idsToUpdate, apiKey)
if err != nil {
@@ -771,7 +783,10 @@ func PlayerFromSteam(players []*ent.Player, db *ent.Client, apiKey string, rl ra
}
if rl != nil {
rl.Take()
err := rl.WaitN(context.Background(), batches)
if err != nil {
return nil, err
}
}
bans, err := steamapi.GetPlayerBans(idsToUpdate, apiKey)
if err != nil {