naranya_ecm-sdk 0.0.50 → 0.0.51

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
  SHA1:
3
- metadata.gz: 8170ec1a6a5f1827bed0f85ca6916888f19c0ec9
4
- data.tar.gz: 2e29be22a0f517996581db3e168e5ab0b7fcfd0e
3
+ metadata.gz: c55ea1f4ccd068045f3c56d2acc2bac64a280b25
4
+ data.tar.gz: 77f6be226eea9535161ce14616c042f0f967d65b
5
5
  SHA512:
6
- metadata.gz: d566ec2b336d5d10438c7a228d1101ce2b9cbcaec62d490367d3b70f4d205a9fb11c359d3e5d41ad06c9acb098d75b88e93ad0728c927e585f7d9288318a3157
7
- data.tar.gz: fe81eeaed663214bd0409408d3b25a44849fb63088720412c93c8c8d851bd6e8f6b96e8a96af50fa8825d7f71abef529042726ebc977af3899d1475239c25c92
6
+ metadata.gz: 1a50a5884274b367d8211a088e53061c9312a27814cc475529c6bde3b7a2d7f1ec1f1769649758a0f8e150dc3fafe1f4ec474fed2b05bbb0df62f79ac8312622
7
+ data.tar.gz: bb4073ba62463c9dfea69a5f204ddb334acc28a53920745fa65fcfc4848839147e1224b6660a684dc8f00ffeadba94c033a4ca07b05e201387787cead05156fc
data/Gemfile CHANGED
@@ -15,3 +15,6 @@ gem 'em-synchrony'
15
15
  gem 'em-http-request'
16
16
  gem 'excon'
17
17
  gem 'httpclient'
18
+
19
+ # New Relic RPM:
20
+ gem 'newrelic_rpm'
@@ -1,3 +1,3 @@
1
1
  module NaranyaEcm
2
- VERSION = "0.0.50"
2
+ VERSION = "0.0.51"
3
3
  end
@@ -12,8 +12,8 @@ module NaranyaEcm::Rest
12
12
  end
13
13
 
14
14
  ##
15
- # Captura un response y genera + avienta una excepción.
16
- def self.raise_by_failed_response(response, message = "")
15
+ # Captura un response y genera una excepción.
16
+ def self.build_from_failed_response(response, message = "")
17
17
  klass = case response.status
18
18
  when 401 then AuthorizationRequired
19
19
  when 403 then Forbidden
@@ -21,7 +21,14 @@ module NaranyaEcm::Rest
21
21
  when 422 then UnprocessableEntity
22
22
  else RemoteFailed
23
23
  end
24
- raise klass.new response, "Server responded with code #{response.status}. Message: #{message}"
24
+
25
+ klass.new response, "Server responded with code #{response.status}. Message: '#{message}'"
26
+ end
27
+
28
+ ##
29
+ # Captura un response y avienta una excepción.
30
+ def self.raise_by_failed_response(response, message = "")
31
+ raise build_from_failed_response(response, message)
25
32
  end
26
33
 
27
34
  end
@@ -95,6 +102,15 @@ module NaranyaEcm::Rest
95
102
  end
96
103
 
97
104
  class RemoteFailed < RestError
105
+ def initialize(given_response, msg = "")
106
+ response_env = given_response.env
107
+
108
+ # Override the message:
109
+ msg = "Request '#{response_env.method.upcase} #{response_env.url.path}' failed with HTTP status #{response_env.status}."
110
+ msg += " Request-Body: #{response_env[:request_body]}" if response_env[:request_body].present?
111
+ msg += " Response-Body: #{given_response.body.inspect}" if given_response.respond_to?(:body) && given_response.body.present?
112
+ super(given_response, msg)
113
+ end
98
114
  end
99
115
 
100
116
  end
@@ -66,6 +66,10 @@ module NContent
66
66
 
67
67
  config_accessor(:notification_processing_modules) { [] }
68
68
 
69
+ def new_relic_agent_available?
70
+ defined?(::NewRelic) && defined?(::NewRelic::Agent)
71
+ end
72
+
69
73
  def self.parse_yaml(yaml_path)
70
74
  YAML.load(ERB.new(File.read(yaml_path)).result) if File.exist?(yaml_path)
71
75
  end
@@ -1,4 +1,4 @@
1
-
1
+ require "ncontent/sdk/faraday_middleware/request_body_on_environment"
2
2
  require "ncontent/sdk/faraday_middleware/required_response_format"
3
3
  require "ncontent/sdk/faraday_middleware/response_parser"
4
4
  require "ncontent/sdk/faraday_middleware/rest_api_call_benchmark"
@@ -0,0 +1,25 @@
1
+ module NContent
2
+ module SDK
3
+ module FaradayMiddleware
4
+
5
+ # Adds the required response format to the request parameters, in order for
6
+ # the SDK to work:
7
+ class RequestBodyOnEnvironment < Faraday::Middleware
8
+
9
+ def call(request_env)
10
+
11
+ # Evitar en peticiones a '/oauth/token' y cuando no exista body.
12
+ # Típicamente las peticiones GET no tienen body:
13
+ if request_env.url.path != '/oauth/token' && request_env.respond_to?(:body) && request_env.body.present?
14
+ request_body = request_env.body
15
+ end
16
+
17
+ @app.call(request_env).on_complete do |response_env|
18
+ response_env[:request_body] = request_body if request_body.present?
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,7 @@
1
1
  require 'oauth2'
2
2
  require 'ncontent/sdk/faraday_middleware'
3
3
  require 'singleton'
4
+ require 'cgi'
4
5
 
5
6
  module NContent
6
7
 
@@ -43,7 +44,36 @@ module NContent
43
44
  retry
44
45
  else
45
46
  logger.warn "Not retrying response #{verb.upcase} #{path}."
46
- NaranyaEcm::Rest::RestError.raise_by_failed_response(error.response)
47
+
48
+ # Extract from the OAuth::Error the base Faraday response:
49
+ error_response = error.response.response
50
+
51
+ # Build the error that will be raised:
52
+ error_to_raise = NaranyaEcm::Rest::RestError.build_from_failed_response(error_response)
53
+
54
+ # Send unhandled errors to NewRelic:
55
+ if error_to_raise.is_a?(NaranyaEcm::Rest::RemoteFailed) && config.new_relic_agent_available?
56
+
57
+ ncontent_url = error_response.env.url
58
+
59
+ # Parsear el query string a hash:
60
+ ncontent_request_params = CGI.parse ncontent_url.query.to_s
61
+
62
+ # Agregar al hash de ncontent_request_params el request_body como hash:
63
+ if error_response.env.request_headers['Content-Type'] == 'application/json' && error_response.env[:request_body].present?
64
+ ncontent_request_params.merge! ActiveSupport::JSON.decode(error_response.env[:request_body])
65
+ end
66
+
67
+ ::NewRelic::Agent.notice_error(
68
+ error_to_raise,
69
+ uri: ncontent_url.to_s.split('?').first, # The URL without query string
70
+ metric: "Custom/NContent::SDK::RESTClient/#{verb}",
71
+ request_params: ncontent_request_params
72
+ )
73
+ end
74
+
75
+ raise error_to_raise
76
+
47
77
  end
48
78
  end
49
79
  end
@@ -80,6 +110,8 @@ module NContent
80
110
 
81
111
  faraday.response :logger, logger
82
112
 
113
+ faraday.use NContent::SDK::FaradayMiddleware::RequestBodyOnEnvironment
114
+
83
115
  faraday.use NContent::SDK::FaradayMiddleware::RESTAPICallBenchmark
84
116
 
85
117
  faraday.use NContent::SDK::FaradayMiddleware::ResponseParser
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: naranya_ecm-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.50
4
+ version: 0.0.51
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Quintanilla
@@ -264,6 +264,7 @@ files:
264
264
  - lib/ncontent-sdk.rb
265
265
  - lib/ncontent/sdk/config.rb
266
266
  - lib/ncontent/sdk/faraday_middleware.rb
267
+ - lib/ncontent/sdk/faraday_middleware/request_body_on_environment.rb
267
268
  - lib/ncontent/sdk/faraday_middleware/required_response_format.rb
268
269
  - lib/ncontent/sdk/faraday_middleware/response_parser.rb
269
270
  - lib/ncontent/sdk/faraday_middleware/rest_api_call_benchmark.rb