Class: Lapsoss::Middleware::RateLimiter

Inherits:
Base
  • Object
show all
Defined in:
lib/lapsoss/middleware/rate_limiter.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, max_events: 100, time_window: 60) ⇒ RateLimiter

Returns a new instance of RateLimiter.



6
7
8
9
10
11
12
# File 'lib/lapsoss/middleware/rate_limiter.rb', line 6

def initialize(app, max_events: 100, time_window: 60)
  super(app)
  @max_events = max_events
  @time_window = time_window
  @events = []
  @mutex = Mutex.new
end

Instance Method Details

#call(event, hint = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lapsoss/middleware/rate_limiter.rb', line 14

def call(event, hint = {})
  @mutex.synchronize do
    now = Time.zone.now
    # Remove old events outside time window
    @events.reject! { |timestamp| now - timestamp > @time_window }

    # Check if we're over the limit
    return nil if @events.length >= @max_events

    # Add current event
    @events << now
  end

  @app.call(event, hint)
end