forked from Gitlink/gitlink-cli
demo: add rate limiter (for gatekeeper) #1
|
|
@ -0,0 +1,23 @@
|
|||
package demo
|
||||
|
||||
import "time"
|
||||
|
||||
// RateLimiter 是一个最简限流器(demo 用,故意不带测试以触发 gatekeeper 门禁)。
|
||||
type RateLimiter struct {
|
||||
interval time.Duration
|
||||
last time.Time
|
||||
}
|
||||
|
||||
func NewRateLimiter(qps int) *RateLimiter {
|
||||
// 注意:qps=0 会 panic(除零),属故意留下的缺陷,供 gatekeeper 演示发现
|
||||
return &RateLimiter{interval: time.Second / time.Duration(qps)}
|
||||
}
|
||||
|
||||
func (r *RateLimiter) Allow() bool {
|
||||
now := time.Now()
|
||||
if now.Sub(r.last) >= r.interval {
|
||||
r.last = now
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
Loading…
Reference in New Issue