summaryrefslogtreecommitdiff
path: root/lib/throttled_api_request.rb
diff options
context:
space:
mode:
authorguntasgrewal <guntasgrewal@gmail.com>2014-04-26 23:42:56 -0400
committerguntasgrewal <guntasgrewal@gmail.com>2014-04-26 23:42:56 -0400
commit9dd899559e4533c61089c3f9429574d2de20925e (patch)
tree4b9fda45ad70a1b8898cfa4c695dc69e51abfec8 /lib/throttled_api_request.rb
parent506486a6a38fc73b49dd35077cfaafbdf891c664 (diff)
parentf320bb3bad4f2c3445714f0b45c3a61857203d3f (diff)
Merge branch 'master' of https://github.com/LukeShu/leaguer
Diffstat (limited to 'lib/throttled_api_request.rb')
-rw-r--r--lib/throttled_api_request.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/throttled_api_request.rb b/lib/throttled_api_request.rb
new file mode 100644
index 0000000..3f30c56
--- /dev/null
+++ b/lib/throttled_api_request.rb
@@ -0,0 +1,25 @@
+class ThrottledApiRequest < Struct.new(:api_name, :unit_time, :requests_per)
+ def before(job)
+ loop do
+ sleep_for = -1
+ ActiveRecord::Base.transaction do
+ ApiRequests.create(:api_name => self.api_name)
+ recent_requests = ApiRequets.
+ where(:api_name => self.api_name).
+ where("updated_at > ?", Time.now.utc - self.unit_time).
+ order(:updated_at)
+ if (recent_requests.count > self.requests_per)
+ sleep_for = Time.now.utc - recent_requests[recent_requests.count-self.requests_per].updated_at
+ raise ActiveRecord::Rollback
+ else
+ sleep_for = -1
+ end
+ end
+ if sleep_for != -1
+ sleep(sleep_for)
+ else
+ break
+ end
+ end
+ end
+end