mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 14:46:36 +08:00
ci(arch): forbid pkg packages from depending on project core packages
This commit is contained in:
+41
@@ -5,6 +5,7 @@ package cache
|
||||
|
||||
import (
|
||||
"Wavelet/core/contracts"
|
||||
"Wavelet/pkg/limiter"
|
||||
"context"
|
||||
|
||||
"github.com/go-redis/redis_rate/v10"
|
||||
@@ -57,3 +58,43 @@ func (r *redisLimiterImpl) AllowN(ctx context.Context, key string, rate contract
|
||||
func (r *redisLimiterImpl) Reset(ctx context.Context, key string) error {
|
||||
return r.limiter.Reset(ctx, r.prefixedKey(key))
|
||||
}
|
||||
|
||||
type memoryLimiterFallback struct {
|
||||
limiter *limiter.MemoryLimiter
|
||||
}
|
||||
|
||||
func newMemoryLimiterFallback() contracts.LimiterService {
|
||||
return &memoryLimiterFallback{
|
||||
limiter: limiter.NewMemoryLimiter(),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *memoryLimiterFallback) Allow(ctx context.Context, key string, rate contracts.Rate) (*contracts.RateLimitResult, error) {
|
||||
res, err := m.limiter.Allow(ctx, key, limiter.Rate{Limit: rate.Limit, Period: rate.Period})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &contracts.RateLimitResult{
|
||||
Allowed: res.Allowed,
|
||||
Remaining: res.Remaining,
|
||||
ResetAfter: res.ResetAfter,
|
||||
RetryAfter: res.RetryAfter,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (m *memoryLimiterFallback) AllowN(ctx context.Context, key string, rate contracts.Rate, n int) (*contracts.RateLimitResult, error) {
|
||||
res, err := m.limiter.AllowN(ctx, key, limiter.Rate{Limit: rate.Limit, Period: rate.Period}, n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &contracts.RateLimitResult{
|
||||
Allowed: res.Allowed,
|
||||
Remaining: res.Remaining,
|
||||
ResetAfter: res.ResetAfter,
|
||||
RetryAfter: res.RetryAfter,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (m *memoryLimiterFallback) Reset(ctx context.Context, key string) error {
|
||||
return m.limiter.Reset(ctx, key)
|
||||
}
|
||||
|
||||
+1
-2
@@ -8,7 +8,6 @@ import (
|
||||
"Wavelet/core"
|
||||
"Wavelet/core/contracts"
|
||||
"Wavelet/pkg/cache/ram"
|
||||
"Wavelet/pkg/limiter"
|
||||
"Wavelet/pkg/util"
|
||||
"context"
|
||||
"encoding/json"
|
||||
@@ -145,7 +144,7 @@ func (p *Plugin) Apply(ctx *core.Context) error {
|
||||
if redisClient != nil {
|
||||
limiterSvc = newRedisLimiter(redisClient, p.keyPrefix)
|
||||
} else {
|
||||
limiterSvc = limiter.NewMemoryLimiter()
|
||||
limiterSvc = newMemoryLimiterFallback()
|
||||
}
|
||||
core.Provide[contracts.LimiterService](ctx, limiterSvc)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user