mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-15 07:49:02 +00:00
Add per project rate limit
This commit is contained in:
40
api/rate.go
Normal file
40
api/rate.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golang.org/x/time/rate"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (api *WebAPI) ReserveSubmit(pid int64) *rate.Reservation {
|
||||
|
||||
limiter, ok := api.SubmitLimiters.Load(pid)
|
||||
if !ok {
|
||||
project := api.Database.GetProject(pid)
|
||||
if project == nil {
|
||||
return &rate.Reservation{}
|
||||
}
|
||||
|
||||
limiter = rate.NewLimiter(project.SubmitRate, 1)
|
||||
api.SubmitLimiters.Store(pid, limiter)
|
||||
}
|
||||
|
||||
return limiter.(*rate.Limiter).ReserveN(time.Now(), 1)
|
||||
}
|
||||
|
||||
func (api *WebAPI) ReserveAssign(pid int64) *rate.Reservation {
|
||||
|
||||
limiter, ok := api.AssignLimiters.Load(pid)
|
||||
if !ok {
|
||||
project := api.Database.GetProject(pid)
|
||||
if project == nil {
|
||||
return &rate.Reservation{}
|
||||
}
|
||||
|
||||
limiter = rate.NewLimiter(project.AssignRate, 1)
|
||||
api.AssignLimiters.Store(pid, limiter)
|
||||
fmt.Printf("Create")
|
||||
}
|
||||
|
||||
return limiter.(*rate.Limiter).ReserveN(time.Now(), 1)
|
||||
}
|
||||
Reference in New Issue
Block a user