implement api limiting

This commit is contained in:
albert
2013-03-20 16:35:35 -07:00
parent 7470d189c3
commit 2ac22d07cd
7 changed files with 73 additions and 14 deletions

View File

@@ -164,6 +164,10 @@ class AnonymousUser
def enable_sequential_post_navigation
true
end
def api_hourly_limit
500
end
%w(member banned privileged builder platinum contributor janitor moderator admin).each do |name|
define_method("is_#{name}?") do

View File

@@ -0,0 +1,9 @@
module ApiLimiter
def throttled?(ip_addr)
key = "#{ip_addr}:#{Time.now.hour}"
MEMCACHE.fetch(key, 1.hour, true) {0}
MEMCACHE.incr(key).to_i > CurrentUser.user.api_hourly_limit
end
module_function :throttled?
end

View File

@@ -1,15 +1,11 @@
class Cache
def self.incr(key, expiry = 0)
val = Cache.get(key, expiry)
Cache.put(key, val.to_i + 1)
def self.incr(key)
MEMCACHE.incr(key)
ActiveRecord::Base.logger.debug('MemCache Incr %s' % [key])
end
def self.decr(key, expiry = 0)
val = Cache.get(key, expiry)
if val.to_i > 0
Cache.put(key, val.to_i - 1)
end
def self.decr(key)
MEMCACHE.decr(key)
ActiveRecord::Base.logger.debug('MemCache Decr %s' % [key])
end