limiter_sliding.go — fiber Source File
Architecture documentation for limiter_sliding.go, a go file in the fiber codebase. 1 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 91ff16cc_5e69_6619_dbd9_17643ce37c22["limiter_sliding.go"] adf3d4e8_4d86_86c1_e6cc_281d7b4104af["fmt"] 91ff16cc_5e69_6619_dbd9_17643ce37c22 --> adf3d4e8_4d86_86c1_e6cc_281d7b4104af style 91ff16cc_5e69_6619_dbd9_17643ce37c22 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
package limiter
import (
"fmt"
"math"
"strconv"
"sync"
"time"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/utils/v2"
)
// SlidingWindow implements the sliding-window rate limiting strategy.
type SlidingWindow struct{}
// New creates a new sliding window middleware handler
func (SlidingWindow) New(cfg *Config) fiber.Handler {
if cfg == nil {
defaultCfg := configDefault()
cfg = &defaultCfg
}
// Limiter variables
mux := &sync.RWMutex{}
// Create manager to simplify storage operations ( see manager.go )
manager := newManager(cfg.Storage, !cfg.DisableValueRedaction)
// Update timestamp every second
utils.StartTimeStampUpdater()
// Return new handler
return func(c fiber.Ctx) error {
// Generate maxRequests from generator, if no generator was provided the default value returned is 5
maxRequests := cfg.MaxFunc(c)
// Don't execute middleware if Next returns true or if the max is 0
if (cfg.Next != nil && cfg.Next(c)) || maxRequests == 0 {
return c.Next()
}
// Generate expiration from generator
expirationDuration := cfg.ExpirationFunc(c)
if expirationDuration <= 0 {
expirationDuration = ConfigDefault.Expiration
}
expiration := uint64(expirationDuration.Seconds())
// Get key from request
key := cfg.KeyGenerator(c)
// Lock entry
mux.Lock()
reqCtx := c.Context()
// Get entry from pool and release when finished
e, err := manager.get(reqCtx, key)
if err != nil {
// ... (170 more lines)
Domain
Subdomains
Types
Dependencies
- fmt
Source
Frequently Asked Questions
What does limiter_sliding.go do?
limiter_sliding.go is a source file in the fiber codebase, written in go. It belongs to the FiberMiddleware domain, Caching subdomain.
What functions are defined in limiter_sliding.go?
limiter_sliding.go defines 4 function(s): bucketForOriginalHit, rotateWindow, secondsToDuration, ttlDuration.
What does limiter_sliding.go depend on?
limiter_sliding.go imports 1 module(s): fmt.
Where is limiter_sliding.go in the architecture?
limiter_sliding.go is located at middleware/limiter/limiter_sliding.go (domain: FiberMiddleware, subdomain: Caching, directory: middleware/limiter).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free