miasma 0.3.4 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6ec4c699bde261e0e44469339a19cdcb55f58faad4c5ccbde0439321a22da83
4
- data.tar.gz: d1d2c89ce389385c6e5a5a6462e201299e00b0f21da5d17ca9013e1149fe8df6
3
+ metadata.gz: a471e7134e77e97f6033f06d6824da13f855cbc19c168b02c31ea5793357d7c1
4
+ data.tar.gz: 51870ee9bab612af01b632be5316e585a22d508e94c398eb22042c52a96dca9d
5
5
  SHA512:
6
- metadata.gz: 564daaf08564aff07e67fdd1fe0b117ab86dad1fa3a9f17a34baf9774e456fb771ee3351de708e719446fd3a5c316a1b3c8cbcd686de98fa2f1c76dec9a8f8ad
7
- data.tar.gz: 10832fe2f29d56c4096384e2486f2b6e71c9c0c7bd741f315cc6fc3b5a54766f24f45c3a378969df59cedc225381343e274f6b24c2a0b455acf09059c05279e1
6
+ metadata.gz: 543ddacf9eaa53433430bde752406cefa6699ae850e9ee28ed82a23ba4ccd0c373e55f4de2bde3cfca359b54a10422aa2bbe529e7c7a04d063c45f2682a216bd
7
+ data.tar.gz: b4033baa376b004ad9caf250afe703866a18175962c282bead06eec01d1eddf53e4c207e6c93c9b9cbdf43c7c90f9740909c122919a155f194776c3f8a08db0b
@@ -1,3 +1,6 @@
1
+ # v0.3.6
2
+ * Add logging to API
3
+
1
4
  # v0.3.4
2
5
  * Add queue modeling abstracts
3
6
  * Add orchestration stack plan abstracts
@@ -11,9 +11,11 @@ module Miasma
11
11
  # Maximum allowed HTTP request retries (for non-HTTP related errors)
12
12
  MAX_REQUEST_RETRIES = 5
13
13
 
14
+ include Bogo::Logger::Helpers
14
15
  include Miasma::Utils::Lazy
15
16
  include Miasma::Utils::Memoization
16
17
 
18
+ logger_name(:api)
17
19
  always_clean!
18
20
 
19
21
  # Create new API connection
@@ -25,7 +27,8 @@ module Miasma
25
27
  if creds.is_a?(Hash)
26
28
  load_data(creds)
27
29
  else
28
- raise TypeError.new "Expecting `credentials` to be of type `Hash`. Received: `#{creds.class}`"
30
+ raise TypeError, "Expecting `credentials` to be of type `Hash`. " \
31
+ "Received: `#{creds.class}`"
29
32
  end
30
33
  after_setup(creds)
31
34
  connect
@@ -104,9 +107,7 @@ module Miasma
104
107
  end
105
108
  request_args = [].tap do |ary|
106
109
  _endpoint = args.delete(:endpoint) || endpoint
107
- ary.push(
108
- File.join(_endpoint, args[:path].to_s)
109
- )
110
+ ary.push(File.join(_endpoint, args[:path].to_s))
110
111
  options = {}.tap do |opts|
111
112
  [:form, :params, :json, :body].each do |key|
112
113
  opts[key] = args[key] if args[key]
@@ -140,7 +141,8 @@ module Miasma
140
141
  def retryable_request(http_method, &block)
141
142
  Bogo::Retry.build(
142
143
  data.fetch(:retry_type, :exponential),
143
- :max_attempts => retryable_allowed?(http_method) ? data.fetch(:retry_max, MAX_REQUEST_RETRIES) : 0,
144
+ :max_attempts => retryable_allowed?(http_method) ?
145
+ data.fetch(:retry_max, MAX_REQUEST_RETRIES) : 0,
144
146
  :wait_interval => data[:retry_interval],
145
147
  :ui => data[:retry_ui],
146
148
  :auto_run => false,
@@ -174,6 +176,7 @@ module Miasma
174
176
  # override if things need to be done prior to
175
177
  # the actual request (like signature generation)
176
178
  def make_request(connection, http_method, request_args)
179
+ logger.debug("making #{http_method.to_s.upcase} request - #{request_args.inspect}")
177
180
  connection.send(http_method, *request_args)
178
181
  end
179
182
 
@@ -185,16 +188,20 @@ module Miasma
185
188
  def format_response(result, extract_body = true)
186
189
  extracted_headers = Smash[result.headers.map { |k, v| [Utils.snake(k), v] }]
187
190
  if extract_body
191
+ logger.debug("extracting HTTP response body")
188
192
  body_content = result.body.to_s
189
193
  body_content.encode!("UTF-8", "binary",
190
194
  :invalid => :replace,
191
195
  :undef => :replace,
192
196
  :replace => "")
193
197
  if extracted_headers[:content_type].to_s.include?("json")
198
+ logger.debug("unpacking HTTP response body using JSON")
194
199
  extracted_body = from_json(body_content) || body_content
195
200
  elsif extracted_headers[:content_type].to_s.include?("xml")
201
+ logger.debug("unpacking HTTP response body using XML")
196
202
  extracted_body = from_xml(body_content) || body_content
197
203
  else
204
+ logger.debug("unpacking HTTP response body using best effort")
198
205
  extracted_body = from_json(body_content) ||
199
206
  from_xml(body_content) ||
200
207
  body_content
@@ -203,6 +210,7 @@ module Miasma
203
210
  unless extracted_body
204
211
  # @note if body is over 100KB, do not extract
205
212
  if extracted_headers[:content_length].to_i < 102400
213
+ logger.warn("skipping body extraction and formatting due to size")
206
214
  extracted_body = result.body.to_s
207
215
  else
208
216
  extracted_body = result.body
@@ -222,7 +230,10 @@ module Miasma
222
230
  def from_json(string)
223
231
  begin
224
232
  MultiJson.load(string).to_smash
225
- rescue MultiJson::ParseError
233
+ rescue MultiJson::ParseError => err
234
+ logger.error("failed to load JSON string - #{err.class}: #{err}")
235
+ logger.debug("JSON string load failure: #{string.inspect}")
236
+ logger.debug("JSON error - #{err.class}: #{err}\n#{err.backtrace.join("\n")}")
226
237
  nil
227
238
  end
228
239
  end
@@ -234,7 +245,10 @@ module Miasma
234
245
  def from_xml(string)
235
246
  begin
236
247
  MultiXml.parse(string).to_smash
237
- rescue MultiXml::ParseError
248
+ rescue MultiXml::ParseError => err
249
+ logger.error("failed to load XML string - #{err.class}: #{err}")
250
+ logger.debug("XML string load failure: #{string.inspect}")
251
+ logger.debug("XML error - #{err.class}: #{err}\n#{err.backtrace.join("\n")}")
238
252
  nil
239
253
  end
240
254
  end
@@ -1,4 +1,4 @@
1
1
  module Miasma
2
2
  # current library version
3
- VERSION = Gem::Version.new("0.3.4")
3
+ VERSION = Gem::Version.new("0.3.6")
4
4
  end
@@ -10,11 +10,11 @@ Gem::Specification.new do |s|
10
10
  s.description = "Smoggy API"
11
11
  s.license = "Apache 2.0"
12
12
  s.require_path = "lib"
13
- s.add_runtime_dependency "http", ">= 0.8.12", "< 2.0"
13
+ s.add_runtime_dependency "http", ">= 0.8.12", "< 4.0"
14
14
  s.add_runtime_dependency "multi_json"
15
15
  s.add_runtime_dependency "multi_xml"
16
16
  s.add_runtime_dependency "xml-simple"
17
- s.add_runtime_dependency "bogo", ">= 0.2.2", "< 1.0"
17
+ s.add_runtime_dependency "bogo", ">= 0.2.12", "< 1.0"
18
18
  s.add_development_dependency "pry"
19
19
  s.add_development_dependency "minitest"
20
20
  s.add_development_dependency "rspec", "~> 3.5"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miasma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-03 00:00:00.000000000 Z
11
+ date: 2018-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 0.8.12
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '2.0'
22
+ version: '4.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 0.8.12
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '2.0'
32
+ version: '4.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: multi_json
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -78,7 +78,7 @@ dependencies:
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: 0.2.2
81
+ version: 0.2.12
82
82
  - - "<"
83
83
  - !ruby/object:Gem::Version
84
84
  version: '1.0'
@@ -88,7 +88,7 @@ dependencies:
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 0.2.2
91
+ version: 0.2.12
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '1.0'