Class: A2A::Server::Middleware::RedisStore

Inherits:
Object
  • Object
show all
Defined in:
lib/a2a/server/middleware/rate_limit_middleware.rb

Overview

Redis-backed storage for rate limiting

Instance Method Summary collapse

Constructor Details

#initialize(redis_client) ⇒ RedisStore

Returns a new instance of RedisStore.



339
340
341
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 339

def initialize(redis_client)
  @redis = redis_client
end

Instance Method Details

#get(key) ⇒ Object



343
344
345
346
347
348
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 343

def get(key)
  value = @redis.get(key)
  value ? JSON.parse(value) : nil
rescue JSON::ParserError
  nil
end

#get_list(key) ⇒ Object



372
373
374
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 372

def get_list(key)
  get(key)
end

#increment(key, expires_at: nil) ⇒ Object



361
362
363
364
365
366
367
368
369
370
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 361

def increment(key, expires_at: nil)
  result = @redis.incr(key)

  if expires_at && result == 1
    ttl = (expires_at - Time.now.to_f).ceil
    @redis.expire(key, ttl) if ttl.positive?
  end

  result
end

#set(key, value, expires_at: nil) ⇒ Object



350
351
352
353
354
355
356
357
358
359
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 350

def set(key, value, expires_at: nil)
  json_value = JSON.generate(value)

  if expires_at
    ttl = (expires_at - Time.now.to_f).ceil
    @redis.setex(key, ttl, json_value) if ttl.positive?
  else
    @redis.set(key, json_value)
  end
end

#set_list(key, list, expires_at: nil) ⇒ Object



376
377
378
# File 'lib/a2a/server/middleware/rate_limit_middleware.rb', line 376

def set_list(key, list, expires_at: nil)
  set(key, list, expires_at: expires_at)
end