Skip to content

Commit aa61ba3

Browse files
committed
update
1 parent 545a0c1 commit aa61ba3

File tree

8 files changed

+178
-153
lines changed

8 files changed

+178
-153
lines changed

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ require (
3333
github.com/gosimple/slug v1.15.0
3434
github.com/mitchellh/go-homedir v1.1.0
3535
github.com/opentracing/opentracing-go v1.2.0
36+
github.com/redis/go-redis/v9 v9.18.0
3637
github.com/rs/zerolog v1.35.0
3738
github.com/russross/blackfriday v1.6.0
3839
github.com/stretchr/testify v1.11.1
@@ -55,8 +56,10 @@ require (
5556
github.com/admpub/pp v0.0.7 // indirect
5657
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a // indirect
5758
github.com/andybalholm/brotli v1.2.1 // indirect
59+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
5860
github.com/davecgh/go-spew v1.1.1 // indirect
5961
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
62+
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
6063
github.com/francoispqt/gojay v1.2.13 // indirect
6164
github.com/goccy/go-json v0.10.6 // indirect
6265
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
@@ -81,6 +84,7 @@ require (
8184
github.com/pmezard/go-difflib v1.0.0 // indirect
8285
github.com/valyala/bytebufferpool v1.0.0 // indirect
8386
github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da // indirect
87+
go.uber.org/atomic v1.11.0 // indirect
8488
golang.org/x/net v0.52.0 // indirect
8589
golang.org/x/oauth2 v0.36.0 // indirect
8690
golang.org/x/sys v0.42.0 // indirect

go.sum

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,14 @@ github.com/araddon/gou v0.0.0-20190110011759-c797efecbb61 h1:Xz25cuW4REGC5W5UtpM
7373
github.com/araddon/gou v0.0.0-20190110011759-c797efecbb61/go.mod h1:ikc1XA58M+Rx7SEbf0bLJCfBkwayZ8T5jBo5FXK8Uz8=
7474
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
7575
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
76+
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
77+
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
78+
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
79+
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
7680
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
7781
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
82+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
83+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
7884
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
7985
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
8086
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -85,6 +91,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
8591
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8692
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo=
8793
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
94+
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
8895
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
8996
github.com/dustin/go-broadcast v0.0.0-20211018055107-71439988bd91 h1:jAUM3D1KIrJmwx60DKB+a/qqM69yHnu6otDGVa2t0vs=
9097
github.com/dustin/go-broadcast v0.0.0-20211018055107-71439988bd91/go.mod h1:8rK6Kbo1Jd6sK22b24aPVgAm3jlNy1q1ft+lBALdIqA=
@@ -161,6 +168,8 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
161168
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
162169
github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE=
163170
github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
171+
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
172+
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
164173
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
165174
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
166175
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -230,6 +239,8 @@ github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
230239
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
231240
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
232241
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
242+
github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs=
243+
github.com/redis/go-redis/v9 v9.18.0/go.mod h1:k3ufPphLU5YXwNTUcCRXGxUoF1fqxnhFQmscfkCoDA0=
233244
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
234245
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
235246
github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI=
@@ -296,7 +307,11 @@ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3i
296307
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
297308
github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg=
298309
github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
310+
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
311+
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
299312
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
313+
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
314+
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
300315
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
301316
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
302317
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=

middleware/ratelimiter/ratelimiter.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ratelimiter
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"net/http"
@@ -49,15 +50,15 @@ type (
4950
}
5051

5152
abstractLimiter interface {
52-
getLimit(key string, policy ...int) ([]any, error)
53-
removeLimit(key string) error
53+
getLimit(ctx context.Context, key string, policy ...int) ([]any, error)
54+
removeLimit(ctx context.Context, key string) error
5455
}
5556

5657
//RedisClient interface
5758
RedisClient interface {
58-
DeleteKey(string) error
59-
EvalulateSha(string, []string, ...any) (any, error)
60-
LuaScriptLoad(string) (string, error)
59+
DeleteKey(context.Context, string) error
60+
EvalulateSha(context.Context, string, []string, ...any) (any, error)
61+
LuaScriptLoad(context.Context, string) (string, error)
6162
}
6263
)
6364

@@ -108,7 +109,7 @@ func RateLimiterWithConfig(config RateLimiterConfig) echo.MiddlewareFunc {
108109
limiterImp = newMemoryLimiter(&config)
109110
} else {
110111
//setup redis client
111-
limiterImp = newRedisLimiter(&config)
112+
limiterImp = newRedisLimiter(context.Background(), &config)
112113
}
113114

114115
return func(h echo.Handler) echo.Handler {
@@ -125,7 +126,7 @@ func RateLimiterWithConfig(config RateLimiterConfig) echo.MiddlewareFunc {
125126
]
126127
*/
127128
id, policy := config.LimiterKeyGenerator(c)
128-
result, err := limiterImp.Get(id, policy...)
129+
result, err := limiterImp.Get(c, id, policy...)
129130

130131
if err != nil {
131132
if config.SkipRateLimiterInternalError {
@@ -154,15 +155,15 @@ func RateLimiterWithConfig(config RateLimiterConfig) echo.MiddlewareFunc {
154155

155156
// get & remove
156157

157-
func (l *limiter) Get(id string, policy ...int) (Result, error) {
158+
func (l *limiter) Get(ctx context.Context, id string, policy ...int) (Result, error) {
158159
var result Result
159160
key := l.prefix + id
160161

161162
if odd := len(policy) % 2; odd == 1 {
162163
return result, errors.New("ratelimiter: must be paired values")
163164
}
164165

165-
res, err := l.getLimit(key, policy...)
166+
res, err := l.getLimit(ctx, key, policy...)
166167
if err != nil {
167168
return result, err
168169
}
@@ -190,6 +191,6 @@ func (l *limiter) Get(id string, policy ...int) (Result, error) {
190191
}
191192

192193
// Remove remove limiter record for id
193-
func (l *limiter) Remove(id string) error {
194-
return l.removeLimit(l.prefix + id)
194+
func (l *limiter) Remove(ctx context.Context, id string) error {
195+
return l.removeLimit(ctx, l.prefix+id)
195196
}

middleware/ratelimiter/ratelimiter_memory.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ratelimiter
22

33
import (
4+
"context"
45
"errors"
56
"sync"
67
"time"
@@ -46,7 +47,7 @@ func newMemoryLimiter(opts *RateLimiterConfig) *limiter {
4647
}
4748

4849
// abstractLimiter interface
49-
func (m *memoryLimiter) getLimit(key string, policy ...int) ([]any, error) {
50+
func (m *memoryLimiter) getLimit(ctx context.Context, key string, policy ...int) ([]any, error) {
5051
length := len(policy)
5152
var args []int
5253
if length == 0 {
@@ -68,7 +69,7 @@ func (m *memoryLimiter) getLimit(key string, policy ...int) ([]any, error) {
6869
}
6970

7071
// abstractLimiter interface
71-
func (m *memoryLimiter) removeLimit(key string) error {
72+
func (m *memoryLimiter) removeLimit(ctx context.Context, key string) error {
7273
statusKey := "{" + key + "}:S"
7374
m.lock.Lock()
7475
defer m.lock.Unlock()

0 commit comments

Comments
 (0)