kinetic_sdk 0.1.1 → 1.0.0
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 +5 -5
- data/.yardoc-includes/yard-helpers.rb +14 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +41 -0
- data/GettingStarted.md +6 -12
- data/README.md +85 -37
- data/Rakefile +13 -0
- data/kinetic_sdk.gemspec +33 -0
- data/lib/kinetic_sdk/agent/agent-sdk.rb +90 -0
- data/lib/kinetic_sdk/agent/lib/bridges.rb +92 -0
- data/lib/kinetic_sdk/agent/lib/filestores.rb +91 -0
- data/lib/kinetic_sdk/agent/lib/handler.rb +91 -0
- data/lib/kinetic_sdk/bridgehub/bridgehub-sdk.rb +11 -3
- data/lib/kinetic_sdk/bridgehub/lib/access_keys.rb +5 -5
- data/lib/kinetic_sdk/bridgehub/lib/bridge.rb +5 -5
- data/lib/kinetic_sdk/{request_ce/request-ce-sdk.rb → core/core-sdk.rb} +30 -16
- data/lib/kinetic_sdk/core/lib/attribute_definitions.rb +500 -0
- data/lib/kinetic_sdk/core/lib/bridges.rb +141 -0
- data/lib/kinetic_sdk/{request_ce → core}/lib/categories.rb +3 -3
- data/lib/kinetic_sdk/{request_ce → core}/lib/datastore_form.rb +8 -8
- data/lib/kinetic_sdk/{request_ce → core}/lib/datastore_submissions.rb +20 -9
- data/lib/kinetic_sdk/{request_ce → core}/lib/form.rb +7 -7
- data/lib/kinetic_sdk/{request_ce → core}/lib/form_types.rb +4 -4
- data/lib/kinetic_sdk/{request_ce → core}/lib/jwt.rb +4 -4
- data/lib/kinetic_sdk/{request_ce → core}/lib/kapp.rb +7 -7
- data/lib/kinetic_sdk/{request_ce → core}/lib/meta.rb +3 -3
- data/lib/kinetic_sdk/{request_ce → core}/lib/oauth.rb +4 -4
- data/lib/kinetic_sdk/{request_ce → core}/lib/security_policy_definitions.rb +11 -11
- data/lib/kinetic_sdk/core/lib/space.rb +156 -0
- data/lib/kinetic_sdk/{request_ce → core}/lib/submissions.rb +11 -11
- data/lib/kinetic_sdk/{request_ce → core}/lib/system_api.rb +19 -7
- data/lib/kinetic_sdk/{request_ce → core}/lib/teams.rb +9 -9
- data/lib/kinetic_sdk/{request_ce → core}/lib/users.rb +15 -15
- data/lib/kinetic_sdk/{request_ce → core}/lib/webhook_jobs.rb +5 -5
- data/lib/kinetic_sdk/{request_ce → core}/lib/webhooks.rb +9 -9
- data/lib/kinetic_sdk/discussions/discussions-sdk.rb +12 -4
- data/lib/kinetic_sdk/discussions/lib/discussions.rb +8 -8
- data/lib/kinetic_sdk/discussions/lib/invitations.rb +9 -9
- data/lib/kinetic_sdk/discussions/lib/messages.rb +8 -8
- data/lib/kinetic_sdk/discussions/lib/meta.rb +1 -1
- data/lib/kinetic_sdk/discussions/lib/participants.rb +5 -5
- data/lib/kinetic_sdk/discussions/lib/related_items.rb +4 -4
- data/lib/kinetic_sdk/discussions/lib/websockets.rb +9 -9
- data/lib/kinetic_sdk/filehub/filehub-sdk.rb +11 -3
- data/lib/kinetic_sdk/filehub/lib/access_keys.rb +5 -5
- data/lib/kinetic_sdk/filehub/lib/filestores.rb +5 -5
- data/lib/kinetic_sdk/task/lib/access_keys.rb +35 -7
- data/lib/kinetic_sdk/task/lib/categories.rb +30 -17
- data/lib/kinetic_sdk/task/lib/config.rb +14 -14
- data/lib/kinetic_sdk/task/lib/engine.rb +1 -1
- data/lib/kinetic_sdk/task/lib/errors.rb +10 -10
- data/lib/kinetic_sdk/task/lib/export.rb +32 -0
- data/lib/kinetic_sdk/task/lib/groups.rb +23 -10
- data/lib/kinetic_sdk/task/lib/handlers.rb +27 -11
- data/lib/kinetic_sdk/task/lib/health.rb +11 -3
- data/lib/kinetic_sdk/task/lib/license.rb +4 -4
- data/lib/kinetic_sdk/task/lib/policy_rules.rb +25 -12
- data/lib/kinetic_sdk/task/lib/runs.rb +43 -0
- data/lib/kinetic_sdk/task/lib/setup.rb +2 -2
- data/lib/kinetic_sdk/task/lib/sources.rb +39 -8
- data/lib/kinetic_sdk/task/lib/tasks.rb +1 -1
- data/lib/kinetic_sdk/task/lib/trees.rb +84 -28
- data/lib/kinetic_sdk/task/lib/users.rb +6 -6
- data/lib/kinetic_sdk/task/task-sdk.rb +16 -4
- data/lib/kinetic_sdk/utils/kinetic-export-utils.rb +157 -0
- data/lib/kinetic_sdk/utils/kinetic-http.rb +388 -98
- data/lib/kinetic_sdk/utils/logger.rb +82 -46
- data/lib/kinetic_sdk/utils/prettier-xml-formatter.rb +60 -0
- data/lib/kinetic_sdk/version.rb +1 -1
- data/lib/kinetic_sdk.rb +5 -2
- metadata +41 -27
- data/lib/kinetic_sdk/request_ce/lib/attribute_definitions.rb +0 -153
- data/lib/kinetic_sdk/request_ce/lib/bridges.rb +0 -66
- data/lib/kinetic_sdk/request_ce/lib/space.rb +0 -89
@@ -21,20 +21,25 @@ module KineticSdk
|
|
21
21
|
# {KineticSdk::Utils::KineticHttpResponse#response} method.
|
22
22
|
module KineticHttpUtils
|
23
23
|
|
24
|
-
# Include the Logger module
|
25
|
-
include KineticSdk::Utils::Logger
|
26
|
-
|
27
24
|
# Send an HTTP DELETE request
|
28
25
|
#
|
29
26
|
# @param url [String] url to send the request to
|
30
27
|
# @param headers [Hash] hash of headers to send
|
31
|
-
# @param
|
28
|
+
# @param http_options [Hash] hash of http options
|
29
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
30
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
31
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
32
32
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
33
|
-
def delete(url, headers={},
|
33
|
+
def delete(url, headers={}, http_options=@options)
|
34
|
+
# determine the http options
|
35
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
36
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
37
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
38
|
+
|
34
39
|
# parse the URL
|
35
40
|
uri = URI.parse(url)
|
36
41
|
|
37
|
-
debug("DELETE #{uri} #{headers.inspect}")
|
42
|
+
@logger.debug("DELETE #{uri} #{headers.inspect}")
|
38
43
|
|
39
44
|
# build the http object
|
40
45
|
http = build_http(uri)
|
@@ -46,24 +51,45 @@ module KineticSdk
|
|
46
51
|
response = http.request(request)
|
47
52
|
# handle the response
|
48
53
|
case response
|
54
|
+
# handle 302
|
49
55
|
when Net::HTTPRedirection then
|
50
56
|
if redirect_limit == -1
|
51
|
-
info("HTTP response code: #{response.code}") unless
|
57
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
52
58
|
KineticHttpResponse.new(response)
|
53
59
|
elsif redirect_limit == 0
|
54
60
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
55
61
|
else
|
56
|
-
|
62
|
+
delete(response['location'], headers, http_options.merge({
|
63
|
+
:max_redirects => redirect_limit - 1
|
64
|
+
}))
|
65
|
+
end
|
66
|
+
# handle 502, 503, 504
|
67
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
68
|
+
if gateway_retries == -1
|
69
|
+
KineticHttpResponse.new(response)
|
70
|
+
elsif gateway_retries == 0
|
71
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
72
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
73
|
+
else
|
74
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
75
|
+
sleep(gateway_delay)
|
76
|
+
delete(url, headers, http_options.merge({
|
77
|
+
:gateway_retry_limit => gateway_retries - 1
|
78
|
+
}))
|
57
79
|
end
|
58
|
-
when NilClass then
|
59
|
-
info("HTTP response code: 0") unless
|
60
|
-
|
80
|
+
when Net::HTTPUnknownResponse, NilClass then
|
81
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
82
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
83
|
+
KineticHttpResponse.new(e)
|
61
84
|
else
|
62
|
-
info("HTTP response code: #{response.code}") unless
|
85
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
63
86
|
KineticHttpResponse.new(response)
|
64
87
|
end
|
88
|
+
rescue Net::HTTPBadResponse => e
|
89
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
90
|
+
KineticHttpResponse.new(e)
|
65
91
|
rescue StandardError => e
|
66
|
-
info("HTTP
|
92
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
67
93
|
KineticHttpResponse.new(e)
|
68
94
|
end
|
69
95
|
end
|
@@ -73,15 +99,23 @@ module KineticSdk
|
|
73
99
|
# @param url [String] url to send the request to
|
74
100
|
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
75
101
|
# @param headers [Hash] hash of headers to send
|
76
|
-
# @param
|
102
|
+
# @param http_options [Hash] hash of http options
|
103
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
104
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
105
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
77
106
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
78
|
-
def get(url, params={}, headers={},
|
107
|
+
def get(url, params={}, headers={}, http_options=@options)
|
108
|
+
# determine the http options
|
109
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
110
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
111
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
112
|
+
|
79
113
|
# parse the URL
|
80
114
|
uri = URI.parse(url)
|
81
115
|
# add URL parameters
|
82
116
|
uri.query = URI.encode_www_form(params)
|
83
117
|
|
84
|
-
debug("GET #{uri} #{headers.inspect}")
|
118
|
+
@logger.debug("GET #{uri} #{headers.inspect}")
|
85
119
|
|
86
120
|
# build the http object
|
87
121
|
http = build_http(uri)
|
@@ -93,24 +127,45 @@ module KineticSdk
|
|
93
127
|
response = http.request(request)
|
94
128
|
# handle the response
|
95
129
|
case response
|
130
|
+
# handle 302
|
96
131
|
when Net::HTTPRedirection then
|
97
132
|
if redirect_limit == -1
|
98
|
-
info("HTTP response code: #{response.code}") unless
|
133
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
99
134
|
KineticHttpResponse.new(response)
|
100
135
|
elsif redirect_limit == 0
|
101
136
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
102
137
|
else
|
103
|
-
|
138
|
+
get(response['location'], params, headers, http_options.merge({
|
139
|
+
:max_redirects => redirect_limit - 1
|
140
|
+
}))
|
141
|
+
end
|
142
|
+
# handle 502, 503, 504
|
143
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
144
|
+
if gateway_retries == -1
|
145
|
+
KineticHttpResponse.new(response)
|
146
|
+
elsif gateway_retries == 0
|
147
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
148
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
149
|
+
else
|
150
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
151
|
+
sleep(gateway_delay)
|
152
|
+
get(url, params, headers, http_options.merge({
|
153
|
+
:gateway_retry_limit => gateway_retries - 1
|
154
|
+
}))
|
104
155
|
end
|
105
|
-
when NilClass then
|
106
|
-
info("HTTP response code: 0") unless
|
107
|
-
|
156
|
+
when Net::HTTPUnknownResponse, NilClass then
|
157
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
158
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
159
|
+
KineticHttpResponse.new(e)
|
108
160
|
else
|
109
|
-
info("HTTP response code: #{response.code}") unless
|
161
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
110
162
|
KineticHttpResponse.new(response)
|
111
163
|
end
|
164
|
+
rescue Net::HTTPBadResponse => e
|
165
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
166
|
+
KineticHttpResponse.new(e)
|
112
167
|
rescue StandardError => e
|
113
|
-
info("HTTP
|
168
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
114
169
|
KineticHttpResponse.new(e)
|
115
170
|
end
|
116
171
|
end
|
@@ -120,15 +175,23 @@ module KineticSdk
|
|
120
175
|
# @param url [String] url to send the request to
|
121
176
|
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
122
177
|
# @param headers [Hash] hash of headers to send
|
123
|
-
# @param
|
178
|
+
# @param http_options [Hash] hash of http options
|
179
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
180
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
181
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
124
182
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
125
|
-
def head(url, params={}, headers={},
|
183
|
+
def head(url, params={}, headers={}, http_options=@options)
|
184
|
+
# determine the http options
|
185
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
186
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
187
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
188
|
+
|
126
189
|
# parse the URL
|
127
190
|
uri = URI.parse(url)
|
128
191
|
# add URL parameters
|
129
192
|
uri.query = URI.encode_www_form(params)
|
130
193
|
|
131
|
-
debug("HEAD #{uri} #{headers.inspect}")
|
194
|
+
@logger.debug("HEAD #{uri} #{headers.inspect}")
|
132
195
|
|
133
196
|
# build the http object
|
134
197
|
http = build_http(uri)
|
@@ -142,22 +205,42 @@ module KineticSdk
|
|
142
205
|
case response
|
143
206
|
when Net::HTTPRedirection then
|
144
207
|
if redirect_limit == -1
|
145
|
-
info("HTTP response code: #{response.code}") unless
|
208
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
146
209
|
KineticHttpResponse.new(response)
|
147
210
|
elsif redirect_limit == 0
|
148
211
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
149
212
|
else
|
150
|
-
|
213
|
+
head(response['location'], params, headers, http_options.merge({
|
214
|
+
:max_redirects => redirect_limit - 1
|
215
|
+
}))
|
151
216
|
end
|
152
|
-
|
153
|
-
|
154
|
-
|
217
|
+
# handle 502, 503, 504
|
218
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
219
|
+
if gateway_retries == -1
|
220
|
+
KineticHttpResponse.new(response)
|
221
|
+
elsif gateway_retries == 0
|
222
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
223
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
224
|
+
else
|
225
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
226
|
+
sleep(gateway_delay)
|
227
|
+
head(url, params, headers, http_options.merge({
|
228
|
+
:gateway_retry_limit => gateway_retries - 1
|
229
|
+
}))
|
230
|
+
end
|
231
|
+
when Net::HTTPUnknownResponse, NilClass then
|
232
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
233
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
234
|
+
KineticHttpResponse.new(e)
|
155
235
|
else
|
156
|
-
info("HTTP response code: #{response.code}") unless
|
236
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
157
237
|
KineticHttpResponse.new(response)
|
158
238
|
end
|
239
|
+
rescue Net::HTTPBadResponse => e
|
240
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
241
|
+
KineticHttpResponse.new(e)
|
159
242
|
rescue StandardError => e
|
160
|
-
info("HTTP
|
243
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
161
244
|
KineticHttpResponse.new(e)
|
162
245
|
end
|
163
246
|
end
|
@@ -167,13 +250,21 @@ module KineticSdk
|
|
167
250
|
# @param url [String] url to send the request to
|
168
251
|
# @param data [Hash] the payload to send with the request
|
169
252
|
# @param headers [Hash] hash of headers to send
|
170
|
-
# @param
|
253
|
+
# @param http_options [Hash] hash of http options
|
254
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
255
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
256
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
171
257
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
172
|
-
def patch(url, data={}, headers={},
|
258
|
+
def patch(url, data={}, headers={}, http_options=@options)
|
259
|
+
# determine the http options
|
260
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
261
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
262
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
263
|
+
|
173
264
|
# parse the URL
|
174
265
|
uri = URI.parse(url)
|
175
266
|
|
176
|
-
debug("PATCH #{uri} #{headers.inspect}")
|
267
|
+
@logger.debug("PATCH #{uri} #{headers.inspect}")
|
177
268
|
|
178
269
|
# unless the data is already a string, assume JSON and convert to string
|
179
270
|
data = data.to_json unless data.is_a? String
|
@@ -190,22 +281,42 @@ module KineticSdk
|
|
190
281
|
case response
|
191
282
|
when Net::HTTPRedirection then
|
192
283
|
if redirect_limit == -1
|
193
|
-
info("HTTP response code: #{response.code}") unless
|
284
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
194
285
|
KineticHttpResponse.new(response)
|
195
286
|
elsif redirect_limit == 0
|
196
287
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
197
288
|
else
|
198
|
-
|
289
|
+
patch(response['location'], data, headers, http_options.merge({
|
290
|
+
:max_redirects => redirect_limit - 1
|
291
|
+
}))
|
292
|
+
end
|
293
|
+
# handle 502, 503, 504
|
294
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
295
|
+
if gateway_retries == -1
|
296
|
+
KineticHttpResponse.new(response)
|
297
|
+
elsif gateway_retries == 0
|
298
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
299
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
300
|
+
else
|
301
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
302
|
+
sleep(gateway_delay)
|
303
|
+
patch(url, data, headers, http_options.merge({
|
304
|
+
:gateway_retry_limit => gateway_retries - 1
|
305
|
+
}))
|
199
306
|
end
|
200
|
-
when NilClass then
|
201
|
-
info("HTTP response code: 0") unless
|
202
|
-
|
307
|
+
when Net::HTTPUnknownResponse, NilClass then
|
308
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
309
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
310
|
+
KineticHttpResponse.new(e)
|
203
311
|
else
|
204
|
-
info("HTTP response code: #{response.code}") unless
|
312
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
205
313
|
KineticHttpResponse.new(response)
|
206
314
|
end
|
315
|
+
rescue Net::HTTPBadResponse => e
|
316
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
317
|
+
KineticHttpResponse.new(e)
|
207
318
|
rescue StandardError => e
|
208
|
-
info("HTTP
|
319
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
209
320
|
KineticHttpResponse.new(e)
|
210
321
|
end
|
211
322
|
end
|
@@ -215,13 +326,21 @@ module KineticSdk
|
|
215
326
|
# @param url [String] url to send the request to
|
216
327
|
# @param data [Hash] the payload to send with the request
|
217
328
|
# @param headers [Hash] hash of headers to send
|
218
|
-
# @param
|
329
|
+
# @param http_options [Hash] hash of http options
|
330
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
331
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
332
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
219
333
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
220
|
-
def post(url, data={}, headers={},
|
334
|
+
def post(url, data={}, headers={}, http_options=@options)
|
335
|
+
# determine the http options
|
336
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
337
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
338
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
339
|
+
|
221
340
|
# parse the URL
|
222
341
|
uri = URI.parse(url)
|
223
342
|
|
224
|
-
debug("POST #{uri} #{headers.inspect}")
|
343
|
+
@logger.debug("POST #{uri} #{headers.inspect}")
|
225
344
|
|
226
345
|
# unless the data is already a string, assume JSON and convert to string
|
227
346
|
data = data.to_json unless data.is_a? String
|
@@ -238,22 +357,42 @@ module KineticSdk
|
|
238
357
|
case response
|
239
358
|
when Net::HTTPRedirection then
|
240
359
|
if redirect_limit == -1
|
241
|
-
info("HTTP response code: #{response.code}") unless
|
360
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
242
361
|
KineticHttpResponse.new(response)
|
243
362
|
elsif redirect_limit == 0
|
244
363
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
245
364
|
else
|
246
|
-
|
365
|
+
post(response['location'], data, headers, http_options.merge({
|
366
|
+
:max_redirects => redirect_limit - 1
|
367
|
+
}))
|
247
368
|
end
|
248
|
-
|
249
|
-
|
250
|
-
|
369
|
+
# handle 502, 503, 504
|
370
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
371
|
+
if gateway_retries == -1
|
372
|
+
KineticHttpResponse.new(response)
|
373
|
+
elsif gateway_retries == 0
|
374
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
375
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
376
|
+
else
|
377
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
378
|
+
sleep(gateway_delay)
|
379
|
+
post(url, data, headers, http_options.merge({
|
380
|
+
:gateway_retry_limit => gateway_retries - 1
|
381
|
+
}))
|
382
|
+
end
|
383
|
+
when Net::HTTPUnknownResponse, NilClass then
|
384
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
385
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
386
|
+
KineticHttpResponse.new(e)
|
251
387
|
else
|
252
|
-
info("HTTP response code: #{response.code}") unless
|
388
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
253
389
|
KineticHttpResponse.new(response)
|
254
390
|
end
|
391
|
+
rescue Net::HTTPBadResponse => e
|
392
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
393
|
+
KineticHttpResponse.new(e)
|
255
394
|
rescue StandardError => e
|
256
|
-
info("HTTP
|
395
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
257
396
|
KineticHttpResponse.new(e)
|
258
397
|
end
|
259
398
|
end
|
@@ -263,13 +402,21 @@ module KineticSdk
|
|
263
402
|
# @param url [String] url to send the request to
|
264
403
|
# @param data [Hash] payload to send with the request
|
265
404
|
# @param headers [Hash] hash of headers to send
|
266
|
-
# @param
|
405
|
+
# @param http_options [Hash] hash of http options
|
406
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
407
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
408
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
267
409
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
268
|
-
def post_multipart(url, data={}, headers={},
|
410
|
+
def post_multipart(url, data={}, headers={}, http_options=@options)
|
411
|
+
# determine the http options
|
412
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
413
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
414
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
415
|
+
|
269
416
|
# the Content-Type header is handled automoatically by Net::HTTP::Post::Multipart
|
270
417
|
headers.delete_if { |k,v| k.to_s.downcase == "content-type" }
|
271
418
|
|
272
|
-
debug("POST #{url} #{headers.inspect} multi-part form content")
|
419
|
+
@logger.debug("POST #{url} #{headers.inspect} multi-part form content")
|
273
420
|
|
274
421
|
# parse the URL
|
275
422
|
uri = URI.parse(url)
|
@@ -304,22 +451,42 @@ module KineticSdk
|
|
304
451
|
case response
|
305
452
|
when Net::HTTPRedirection then
|
306
453
|
if redirect_limit == -1
|
307
|
-
info("HTTP response code: #{response.code}") unless
|
454
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
308
455
|
KineticHttpResponse.new(response)
|
309
456
|
elsif redirect_limit == 0
|
310
457
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
311
458
|
else
|
312
|
-
|
459
|
+
post_multipart(response['location'], data, headers, http_options.merge({
|
460
|
+
:max_redirects => redirect_limit - 1
|
461
|
+
}))
|
313
462
|
end
|
314
|
-
|
315
|
-
|
316
|
-
|
463
|
+
# handle 502, 503, 504
|
464
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
465
|
+
if gateway_retries == -1
|
466
|
+
KineticHttpResponse.new(response)
|
467
|
+
elsif gateway_retries == 0
|
468
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
469
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
470
|
+
else
|
471
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
472
|
+
sleep(gateway_delay)
|
473
|
+
post_multipart(url, data, headers, http_options.merge({
|
474
|
+
:gateway_retry_limit => gateway_retries - 1
|
475
|
+
}))
|
476
|
+
end
|
477
|
+
when Net::HTTPUnknownResponse, NilClass then
|
478
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
479
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
480
|
+
KineticHttpResponse.new(e)
|
317
481
|
else
|
318
|
-
info("HTTP response code: #{response.code}") unless
|
482
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
319
483
|
KineticHttpResponse.new(response)
|
320
484
|
end
|
485
|
+
rescue Net::HTTPBadResponse => e
|
486
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
487
|
+
KineticHttpResponse.new(e)
|
321
488
|
rescue StandardError => e
|
322
|
-
info("HTTP
|
489
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
323
490
|
KineticHttpResponse.new(e)
|
324
491
|
end
|
325
492
|
end
|
@@ -329,13 +496,21 @@ module KineticSdk
|
|
329
496
|
# @param url [String] url to send the request to
|
330
497
|
# @param data [Hash] payload to send with the request
|
331
498
|
# @param headers [Hash] hash of headers to send
|
332
|
-
# @param
|
499
|
+
# @param http_options [Hash] hash of http options
|
500
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
501
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
502
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
333
503
|
# @return [KineticSdk::Utils::KineticHttpResponse] response
|
334
|
-
def put(url, data={}, headers={},
|
504
|
+
def put(url, data={}, headers={}, http_options=@options)
|
505
|
+
# determine the http options
|
506
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
507
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
508
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
509
|
+
|
335
510
|
# parse the URL
|
336
511
|
uri = URI.parse(url)
|
337
512
|
|
338
|
-
debug("PUT #{uri} #{headers.inspect}")
|
513
|
+
@logger.debug("PUT #{uri} #{headers.inspect}")
|
339
514
|
|
340
515
|
# unless the data is already a string, assume JSON and convert to string
|
341
516
|
data = data.to_json unless data.is_a? String
|
@@ -352,22 +527,42 @@ module KineticSdk
|
|
352
527
|
case response
|
353
528
|
when Net::HTTPRedirection then
|
354
529
|
if redirect_limit == -1
|
355
|
-
info("HTTP response code: #{response.code}") unless
|
530
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
356
531
|
KineticHttpResponse.new(response)
|
357
532
|
elsif redirect_limit == 0
|
358
533
|
raise Net::HTTPFatalError.new("Too many redirects", response)
|
359
534
|
else
|
360
|
-
|
535
|
+
put(response['location'], data, headers, http_options.merge({
|
536
|
+
:max_redirects => redirect_limit - 1
|
537
|
+
}))
|
538
|
+
end
|
539
|
+
# handle 502, 503, 504
|
540
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
541
|
+
if gateway_retries == -1
|
542
|
+
KineticHttpResponse.new(response)
|
543
|
+
elsif gateway_retries == 0
|
544
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
545
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
546
|
+
else
|
547
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
548
|
+
sleep(gateway_delay)
|
549
|
+
put(url, data, headers, http_options.merge({
|
550
|
+
:gateway_retry_limit => gateway_retries - 1
|
551
|
+
}))
|
361
552
|
end
|
362
|
-
when NilClass then
|
363
|
-
info("HTTP response code: 0") unless
|
364
|
-
|
553
|
+
when Net::HTTPUnknownResponse, NilClass then
|
554
|
+
@logger.info("HTTP response code: 0") unless @logger.debug?
|
555
|
+
e = Net::HTTPFatalError.new("Unknown response from server", response)
|
556
|
+
KineticHttpResponse.new(e)
|
365
557
|
else
|
366
|
-
info("HTTP response code: #{response.code}") unless
|
558
|
+
@logger.info("HTTP response code: #{response.code}") unless @logger.debug?
|
367
559
|
KineticHttpResponse.new(response)
|
368
560
|
end
|
561
|
+
rescue Net::HTTPBadResponse => e
|
562
|
+
@logger.info("HTTP bad response: #{e.inspect}") unless @logger.debug?
|
563
|
+
KineticHttpResponse.new(e)
|
369
564
|
rescue StandardError => e
|
370
|
-
info("HTTP
|
565
|
+
@logger.info("HTTP error: #{e.inspect}") unless @logger.debug?
|
371
566
|
KineticHttpResponse.new(e)
|
372
567
|
end
|
373
568
|
end
|
@@ -377,9 +572,17 @@ module KineticSdk
|
|
377
572
|
# @param url [String] url to send the request to
|
378
573
|
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
379
574
|
# @param headers [Hash] hash of headers to send
|
380
|
-
# @param
|
575
|
+
# @param http_options [Hash] hash of http options
|
576
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
577
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
578
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
381
579
|
# @return [String] redirection url, or url if there is no redirection
|
382
|
-
def redirect_url(url, params={}, headers={},
|
580
|
+
def redirect_url(url, params={}, headers={}, http_options=@options)
|
581
|
+
# determine the http options
|
582
|
+
redirect_limit = http_options[:max_redirects] || max_redirects
|
583
|
+
gateway_retries = http_options[:gateway_retry_limit] || gateway_retry_limit
|
584
|
+
gateway_delay = http_options[:gateway_retry_delay] || gateway_retry_delay
|
585
|
+
|
383
586
|
# parse the URL
|
384
587
|
uri = URI.parse(url)
|
385
588
|
# add URL parameters
|
@@ -397,7 +600,23 @@ module KineticSdk
|
|
397
600
|
when Net::HTTPRedirection then
|
398
601
|
if redirect_limit > 0
|
399
602
|
url = response['location']
|
400
|
-
|
603
|
+
head(response['location'], params, headers, http_options.merge({
|
604
|
+
:max_redirects => redirect_limit - 1
|
605
|
+
}))
|
606
|
+
end
|
607
|
+
# handle 502, 503, 504
|
608
|
+
when Net::HTTPBadGateway, Net::HTTPServiceUnavailable, Net::HTTPGatewayTimeOut then
|
609
|
+
if gateway_retries == -1
|
610
|
+
KineticHttpResponse.new(response)
|
611
|
+
elsif gateway_retries == 0
|
612
|
+
@logger.info("HTTP response: #{response.code} #{response.message}") unless @logger.debug?
|
613
|
+
raise Net::HTTPFatalError.new("#{response.code} #{response.message}", response)
|
614
|
+
else
|
615
|
+
@logger.info("#{response.code} #{response.message}, retrying in #{gateway_delay} seconds")
|
616
|
+
sleep(gateway_delay)
|
617
|
+
redirect_url(url, params, headers, http_options.merge({
|
618
|
+
:gateway_retry_limit => gateway_retries - 1
|
619
|
+
}))
|
401
620
|
end
|
402
621
|
end
|
403
622
|
url
|
@@ -411,14 +630,17 @@ module KineticSdk
|
|
411
630
|
# @param url [String] url to send the request to
|
412
631
|
# @param params [Hash] Query parameters that are added to the URL, such as +include+
|
413
632
|
# @param headers [Hash] hash of headers to send
|
414
|
-
# @param
|
415
|
-
|
633
|
+
# @param http_options [Hash] hash of http options
|
634
|
+
# @option http_options [Fixnum] :max_redirects optional - max number of times to redirect
|
635
|
+
# @option http_options [Fixnum] :gateway_retry_limit optional - max number of times to retry a bad gateway
|
636
|
+
# @option http_options [Float] :gateway_retry_delay optional - number of seconds to delay before retrying a bad gateway
|
637
|
+
def stream_download_to_file(file_path, url, params={}, headers={}, http_options=@http_options)
|
416
638
|
# Determine if redirection is involved
|
417
639
|
url = redirect_url(url, params, headers, max_redirects)
|
418
640
|
# parse the URL
|
419
641
|
uri = URI.parse(url)
|
420
642
|
|
421
|
-
debug("Streaming Download #{uri} #{headers.inspect}")
|
643
|
+
@logger.debug("Streaming Download #{uri} #{headers.inspect}")
|
422
644
|
|
423
645
|
# build the http object
|
424
646
|
http = build_http(uri)
|
@@ -439,26 +661,16 @@ module KineticSdk
|
|
439
661
|
end
|
440
662
|
end
|
441
663
|
if response_code == "200"
|
442
|
-
info("Exported file attachment: #{file_name} to #{file_path}")
|
664
|
+
@logger.info("Exported file attachment: #{file_name} to #{file_path}")
|
443
665
|
else
|
444
|
-
|
666
|
+
@logger.error("Failed to export file attachment \"#{file_name}\": #{message}")
|
445
667
|
end
|
446
668
|
rescue StandardError => e
|
447
|
-
|
669
|
+
@logger.error("Failed to export file attachment \"#{file_name}\": (#{e})")
|
448
670
|
ensure
|
449
671
|
file.close()
|
450
672
|
end
|
451
673
|
end
|
452
|
-
|
453
|
-
# alias methods to allow wrapper modules to handle the
|
454
|
-
# response object.
|
455
|
-
alias_method :delete_raw, :delete
|
456
|
-
alias_method :get_raw, :get
|
457
|
-
alias_method :head_raw, :head
|
458
|
-
alias_method :patch_raw, :patch
|
459
|
-
alias_method :post_raw, :post
|
460
|
-
alias_method :post_multipart_raw, :post_multipart
|
461
|
-
alias_method :put_raw, :put
|
462
674
|
|
463
675
|
|
464
676
|
# Encode URI components
|
@@ -499,6 +711,45 @@ module KineticSdk
|
|
499
711
|
limit.nil? ? 5 : limit.to_i
|
500
712
|
end
|
501
713
|
|
714
|
+
# The maximum number of times to retry on a bad gateway response.
|
715
|
+
#
|
716
|
+
# Can be passed in as an option when initializing the SDK
|
717
|
+
# with either the @options[:gateway_retry_limit] or
|
718
|
+
# @options['gateway_retry_limit'] key.
|
719
|
+
#
|
720
|
+
# Expects an integer [Fixnum] value. Setting to -1 will disable retries on
|
721
|
+
# a bad gateway response.
|
722
|
+
#
|
723
|
+
# @return [Fixnum] default -1
|
724
|
+
def gateway_retry_limit
|
725
|
+
limit = @options &&
|
726
|
+
(
|
727
|
+
@options[:gateway_retry_limit] ||
|
728
|
+
@options['gateway_retry_limit']
|
729
|
+
)
|
730
|
+
limit.nil? ? -1 : limit.to_i
|
731
|
+
end
|
732
|
+
|
733
|
+
# The amount of time in seconds to delay before retrying the request when
|
734
|
+
# a bad gateway response is encountered.
|
735
|
+
#
|
736
|
+
# Can be passed in as an option when initializing the SDK
|
737
|
+
# with either the @options[:gateway_retry_delay] or
|
738
|
+
# @options['gateway_retry_delay'] key.
|
739
|
+
#
|
740
|
+
# Expects a double [Float] value.
|
741
|
+
#
|
742
|
+
# @return [Float] default 1.0
|
743
|
+
def gateway_retry_delay
|
744
|
+
delay = @options &&
|
745
|
+
(
|
746
|
+
@options[:gateway_retry_delay] ||
|
747
|
+
@options['gateway_retry_delay']
|
748
|
+
)
|
749
|
+
delay.nil? ? 1.0 : delay.to_f
|
750
|
+
end
|
751
|
+
|
752
|
+
|
502
753
|
private
|
503
754
|
|
504
755
|
# Build the Net::HTTP object.
|
@@ -507,9 +758,10 @@ module KineticSdk
|
|
507
758
|
# @return [Net::HTTP]
|
508
759
|
def build_http(uri)
|
509
760
|
http = Net::HTTP.new(uri.host, uri.port)
|
510
|
-
http.set_debug_output($stdout) if
|
761
|
+
http.set_debug_output($stdout) if @logger.debug?
|
511
762
|
if (uri.scheme == 'https')
|
512
763
|
http.use_ssl = true
|
764
|
+
OpenSSL.debug = @logger.debug?
|
513
765
|
if (@options[:ssl_verify_mode].to_s.strip.downcase == 'peer')
|
514
766
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
515
767
|
http.ca_file = @options[:ssl_ca_file] if @options[:ssl_ca_file]
|
@@ -522,7 +774,7 @@ module KineticSdk
|
|
522
774
|
http
|
523
775
|
end
|
524
776
|
|
525
|
-
end
|
777
|
+
end # KineticSdk::Utils::KineticHttpUtils module
|
526
778
|
|
527
779
|
|
528
780
|
# The KineticHttp class provides functionality to make generic HTTP requests.
|
@@ -539,14 +791,52 @@ module KineticSdk
|
|
539
791
|
#
|
540
792
|
# @param username [String] username for Basic Authentication
|
541
793
|
# @param password [String] password for Basic Authentication
|
542
|
-
|
794
|
+
# @param http_options [Hash] hash of http options
|
795
|
+
# @option http_options [String] :log_level (off) log_level
|
796
|
+
# @option http_options [Fixnum] :max_redirects (5) max number of times to redirect
|
797
|
+
# @option http_options [Fixnum] :gateway_retry_limit (-1) max number of times to retry a bad gateway
|
798
|
+
# @option http_options [Float] :gateway_retry_delay (1.0) number of seconds to delay before retrying a bad gateway
|
799
|
+
# @option http_options [String] :ssl_ca_file (/etc/ca.crt certificate) location of the ca certificate
|
800
|
+
# @option http_options [String] :ssl_verify_mode (none) use `peer` to enable verification
|
801
|
+
def initialize(username=nil, password=nil, http_options={})
|
543
802
|
@username = username
|
544
803
|
@password = password
|
545
|
-
@options =
|
804
|
+
@options = http_options
|
546
805
|
end
|
547
806
|
|
807
|
+
end # KineticSdk::Utils::KineticHttp class
|
808
|
+
|
809
|
+
end # KineticSdk::Utils module
|
810
|
+
|
811
|
+
# The CustomHttp class provides functionality to make generic HTTP requests
|
812
|
+
# utilizing the functionality of the KineticSdk.
|
813
|
+
class CustomHttp
|
814
|
+
include KineticSdk::Utils::KineticHttpUtils
|
815
|
+
attr_accessor :username, :password, :options, :logger
|
816
|
+
|
817
|
+
# Constructor
|
818
|
+
#
|
819
|
+
# @param opts [Hash] options for HTTP requests
|
820
|
+
# @option opts [String] :username (nil) for Basic Authentication
|
821
|
+
# @option opts [String] :password (nil) for Basic Authentication
|
822
|
+
# @option opts [Hash] :options ({}) http options
|
823
|
+
# @option options [String] :log_level (off) log_level
|
824
|
+
# @option options [String] :log_output (STDOUT) log_output
|
825
|
+
# @option options [Fixnum] :max_redirects (5) max number of times to redirect
|
826
|
+
# @option options [Fixnum] :gateway_retry_limit (-1) max number of times to retry a bad gateway
|
827
|
+
# @option options [Float] :gateway_retry_delay (1.0) number of seconds to delay before retrying a bad gateway
|
828
|
+
# @option options [String] :ssl_ca_file (/etc/ca.crt certificate) location of the ca certificate
|
829
|
+
# @option options [String] :ssl_verify_mode (none) use `peer` to enable verification
|
830
|
+
def initialize(opts={})
|
831
|
+
@username = opts[:username]
|
832
|
+
@password = opts[:password]
|
833
|
+
@options = opts.delete(:options) || {}
|
834
|
+
log_level = @options[:log_level] || @options["log_level"]
|
835
|
+
log_output = @options[:log_output] || @options["log_output"]
|
836
|
+
@logger = KineticSdk::Utils::KLogger.new(log_level, log_output)
|
548
837
|
end
|
549
|
-
|
550
838
|
|
551
839
|
end
|
552
|
-
|
840
|
+
|
841
|
+
|
842
|
+
end # KineticSdk module
|