i18n-backend-http 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/i18n/backend/http.rb +33 -2
- data/lib/i18n/backend/http/etag_http_client.rb +1 -1
- data/lib/i18n/backend/http/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8560707e20d17044c7ab9dd52186e50660962e2e
|
4
|
+
data.tar.gz: 262db68db3e531ff89c696c1c16a7f274256a8bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e97e8e5040e1c158c3f22c4215d9869a4400a85f087c124563a9dfcb2adbfbad1fc944e7bb8f0482d053d78699fd5d96dc71dd4a8bb0d35b4cbbc98e5385543
|
7
|
+
data.tar.gz: 4369413f30ad285cd37f42f0068ce9ace672f7efa912c01067a41d17283b56379c2d79896f5ca3a3f8af964ce551dd9fc45643eca63115e090e3a61767b90b7e
|
data/lib/i18n/backend/http.rb
CHANGED
@@ -11,11 +11,15 @@ module I18n
|
|
11
11
|
class Http
|
12
12
|
include ::I18n::Backend::Base
|
13
13
|
FAILED_GET = {}.freeze
|
14
|
+
STATS_NAMESPACE = 'i18n-backend-http'.freeze
|
15
|
+
ALLOWED_STATS = Set[:download_fail, :open_retry, :read_retry].freeze
|
14
16
|
|
15
17
|
def initialize(options)
|
16
18
|
@options = {
|
17
19
|
http_open_timeout: 1,
|
18
20
|
http_read_timeout: 1,
|
21
|
+
http_open_retries: 0,
|
22
|
+
http_read_retries: 0,
|
19
23
|
polling_interval: 10*60,
|
20
24
|
cache: nil,
|
21
25
|
poll: true,
|
@@ -104,9 +108,14 @@ module I18n
|
|
104
108
|
end
|
105
109
|
|
106
110
|
def download_translations(locale, etag:)
|
107
|
-
|
108
|
-
|
111
|
+
download_path = path(locale)
|
112
|
+
|
113
|
+
with_retry do
|
114
|
+
result, new_etag = @http_client.download(download_path, etag: etag)
|
115
|
+
[parse_response(result), new_etag] if result
|
116
|
+
end
|
109
117
|
rescue => e
|
118
|
+
record(:download_fail, tags: ["exception:#{e.class}", "path:#{download_path}"])
|
110
119
|
@options.fetch(:exception_handler).call(e)
|
111
120
|
[self.class::FAILED_GET, nil]
|
112
121
|
end
|
@@ -123,6 +132,28 @@ module I18n
|
|
123
132
|
def lookup_key(translations, key)
|
124
133
|
translations[key]
|
125
134
|
end
|
135
|
+
|
136
|
+
def with_retry
|
137
|
+
open_tries ||= 0
|
138
|
+
read_tries ||= 0
|
139
|
+
yield
|
140
|
+
rescue Faraday::ConnectionFailed => e
|
141
|
+
raise unless e.instance_variable_get(:@wrapped_exception).is_a?(Net::OpenTimeout)
|
142
|
+
raise if (open_tries += 1) > @options[:http_open_retries]
|
143
|
+
record :open_retry
|
144
|
+
retry
|
145
|
+
rescue Faraday::TimeoutError => e
|
146
|
+
raise unless e.instance_variable_get(:@wrapped_exception).is_a?(Net::ReadTimeout)
|
147
|
+
raise if (read_tries += 1) > @options[:http_read_retries]
|
148
|
+
record :read_retry
|
149
|
+
retry
|
150
|
+
end
|
151
|
+
|
152
|
+
def record(event, options = {})
|
153
|
+
return unless statsd = @options[:statsd_client]
|
154
|
+
raise "Unknown statsd event type to record" unless ALLOWED_STATS.include?(event)
|
155
|
+
statsd.increment("#{STATS_NAMESPACE}.#{event}", tags: options[:tags])
|
156
|
+
end
|
126
157
|
end
|
127
158
|
end
|
128
159
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-backend-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: byebug
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
description:
|
168
182
|
email: michael@grosser.it
|
169
183
|
executables: []
|