zendesk2 1.5.11 → 1.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/lib/zendesk2/client/real.rb +18 -8
- data/lib/zendesk2/rate_limit.rb +36 -0
- data/lib/zendesk2/version.rb +1 -1
- data/lib/zendesk2.rb +1 -0
- data/spec/lib/rate_limit_spec.rb +33 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2704a7e73413c045698c7d7c28204609d114bcf6
|
4
|
+
data.tar.gz: 875403304d611be75c6d2e33ee0611e6d2e026c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ec9a8b932f31698c6b09a81e197ae80593302f1444fa12b2f5f83d440d827eb4d3c125d5c74160d1a6b7593e2c6c2e0d5958bea893f1c64d53780e108550a1e
|
7
|
+
data.tar.gz: 7bd85661df9a778aecd039da44763b0fc0c2d616b23a46b4d6462946bc5b5fd49a5b1eeda71dcd7c6b9e99ae59858ab9eb573d7b48d835f9c20bf9209918313d
|
data/Gemfile
CHANGED
data/lib/zendesk2/client/real.rb
CHANGED
@@ -24,18 +24,28 @@ class Zendesk2::Client < Cistern::Service
|
|
24
24
|
raise "Missing required options: :username" unless @username
|
25
25
|
raise "Missing required options: :password or :token" unless password || @token
|
26
26
|
|
27
|
-
@service = Faraday.new({url: @url}.merge(service_options)) do |
|
27
|
+
@service = Faraday.new({url: @url}.merge(service_options)) do |connection|
|
28
28
|
# response
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
connection.use Faraday::Request::BasicAuthentication, @username, @auth_token
|
30
|
+
connection.use Faraday::Response::RaiseError
|
31
|
+
connection.response :json, content_type: /\bjson/
|
32
32
|
|
33
33
|
# request
|
34
|
-
|
35
|
-
|
34
|
+
connection.request :multipart
|
35
|
+
connection.request :json
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
# idempotency
|
38
|
+
connection.request :retry,
|
39
|
+
:max => 30,
|
40
|
+
:interval => 1,
|
41
|
+
:interval_randomness => 0.2,
|
42
|
+
:backoff_factor => 2
|
43
|
+
|
44
|
+
# rate limit
|
45
|
+
connection.use Zendesk2::RateLimit, logger: @logger
|
46
|
+
|
47
|
+
connection.use Zendesk2::Logger, @logger
|
48
|
+
connection.adapter(*adapter)
|
39
49
|
end
|
40
50
|
end
|
41
51
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
module Zendesk2
|
4
|
+
class RateLimit
|
5
|
+
|
6
|
+
attr_reader :logger
|
7
|
+
|
8
|
+
def initialize(app, options={})
|
9
|
+
@app = app
|
10
|
+
@logger = options[:logger] || ::Logger.new(nil)
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(env)
|
14
|
+
original_env = env.dup
|
15
|
+
response = @app.call(env)
|
16
|
+
|
17
|
+
if response.env[:status] == 429
|
18
|
+
delay = (response.env[:response_headers][:retry_after]).to_f
|
19
|
+
logger.warn "Rate limited! Retrying after #{delay} seconds."
|
20
|
+
|
21
|
+
sleep(delay)
|
22
|
+
|
23
|
+
call(original_env).tap { |r| increment(r, delay) }
|
24
|
+
else
|
25
|
+
response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def increment(response, delay)
|
32
|
+
existing_delay = response.headers[:rate_limits] || 0.0
|
33
|
+
response.headers[:rate_limits] = existing_delay.to_f + delay.to_f
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/zendesk2/version.rb
CHANGED
data/lib/zendesk2.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Zendesk2::RateLimit do
|
4
|
+
class Puppet
|
5
|
+
def self.add_response(response)
|
6
|
+
self.responses.unshift(response)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.responses
|
10
|
+
@responses ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.call(env)
|
14
|
+
self.responses.shift || raise("not response set")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should delay requests for the specified time" do
|
19
|
+
client = Faraday.new do |connection|
|
20
|
+
connection.use Zendesk2::RateLimit
|
21
|
+
connection.adapter :rack, Puppet
|
22
|
+
end
|
23
|
+
|
24
|
+
Puppet.responses << [429, {"Retry-After" => 0.1}, []]
|
25
|
+
Puppet.responses << [429, {"Retry-After" => 0.2}, []]
|
26
|
+
Puppet.responses << [200, {}, ["something"]]
|
27
|
+
|
28
|
+
response = client.get("/")
|
29
|
+
|
30
|
+
expect(response.status).to eq(200)
|
31
|
+
expect(response.headers[:rate_limits].to_s).to match(/^0\.3/) # ugh float math
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zendesk2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
@@ -231,6 +231,7 @@ files:
|
|
231
231
|
- lib/zendesk2/error.rb
|
232
232
|
- lib/zendesk2/logger.rb
|
233
233
|
- lib/zendesk2/paged_collection.rb
|
234
|
+
- lib/zendesk2/rate_limit.rb
|
234
235
|
- lib/zendesk2/searchable.rb
|
235
236
|
- lib/zendesk2/version.rb
|
236
237
|
- spec/categories_spec.rb
|
@@ -240,6 +241,7 @@ files:
|
|
240
241
|
- spec/help_center/categories_spec.rb
|
241
242
|
- spec/help_center/sections_spec.rb
|
242
243
|
- spec/lib/paged_collection_spec.rb
|
244
|
+
- spec/lib/rate_limit_spec.rb
|
243
245
|
- spec/memberships_spec.rb
|
244
246
|
- spec/organizations_spec.rb
|
245
247
|
- spec/shared/zendesk_resource.rb
|
@@ -286,6 +288,7 @@ test_files:
|
|
286
288
|
- spec/help_center/categories_spec.rb
|
287
289
|
- spec/help_center/sections_spec.rb
|
288
290
|
- spec/lib/paged_collection_spec.rb
|
291
|
+
- spec/lib/rate_limit_spec.rb
|
289
292
|
- spec/memberships_spec.rb
|
290
293
|
- spec/organizations_spec.rb
|
291
294
|
- spec/shared/zendesk_resource.rb
|