miasma 0.3.4 → 0.3.6

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 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'