Home / File/ limiter_fixed.go — fiber Source File

limiter_fixed.go — fiber Source File

Architecture documentation for limiter_fixed.go, a go file in the fiber codebase. 1 imports, 0 dependents.

File go 1 imports

Entity Profile

Dependency Diagram

graph LR
  bea8bb55_ffd7_d06d_7b0c_90f6889f14c7["limiter_fixed.go"]
  adf3d4e8_4d86_86c1_e6cc_281d7b4104af["fmt"]
  bea8bb55_ffd7_d06d_7b0c_90f6889f14c7 --> adf3d4e8_4d86_86c1_e6cc_281d7b4104af
  style bea8bb55_ffd7_d06d_7b0c_90f6889f14c7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

package limiter

import (
	"fmt"
	"strconv"
	"sync"

	"github.com/gofiber/fiber/v3"
	"github.com/gofiber/utils/v2"
)

// FixedWindow implements a fixed-window rate limiting strategy.
type FixedWindow struct{}

// New creates a new fixed window middleware handler
func (FixedWindow) 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 {
			mux.Unlock()
			return err
// ... (83 more lines)

Types

Dependencies

  • fmt

Frequently Asked Questions

What does limiter_fixed.go do?
limiter_fixed.go is a source file in the fiber codebase, written in go.
What does limiter_fixed.go depend on?
limiter_fixed.go imports 1 module(s): fmt.
Where is limiter_fixed.go in the architecture?
limiter_fixed.go is located at middleware/limiter/limiter_fixed.go (directory: middleware/limiter).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free