hoss-agent 1.0.10 → 1.0.11

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: 1f6e25b94d999ae0da999fb7de8ca429445a27a7d87a72be82da4bfc4a367ab8
4
- data.tar.gz: 6e3b46812e39dde84acd627649f2557da0019b9a406791d35c61da77ecb781b7
3
+ metadata.gz: f1317a4f764c2af70fb5c2637637d3f9afc06e50c0d8b5a7a06ab3eef83b995b
4
+ data.tar.gz: 16f7a332cf59692b9fdc2fc09b1a021f0ab755451308b2444ccf5e55006fb1a2
5
5
  SHA512:
6
- metadata.gz: 9a9e8e511a25e1580b32bfd63aed336be1c2a804a70d580bb36e612d72cf79f25cdeb76a16fd2d5ba6b1f60cfb2e51e15a6dd14fa83387205eb3234c3d4952e9
7
- data.tar.gz: cd7c026248bd252cb8a8dfc53e72234281bc7cc1a3ea9c58e5f446ea78cc3341664e760000728c78ce2f6a7ba252b8b9eb3b44ee78a0d6a07f25cd54bcc26f13
6
+ metadata.gz: 1bf307cabbf220bfb3a8ed8423c7ac0971e75e09939b7b03a4d6d7b5417bf40eae7495230df57980ff1218be07c2b1294c4bad201898189edb01078c98bc892b
7
+ data.tar.gz: df81ae88e4390fa7e860b470f19d22175d908dd1739ade15e41842aa2b1142be7303655233c38e7fe865df8d57ab386aae688e675e851614f8ef0bac6ed1c643
@@ -39,61 +39,72 @@ module Hoss
39
39
  alias run_request_without_apm run_request
40
40
 
41
41
  def run_request(method, url, body, headers, &block)
42
+ result = nil
43
+ error_in_request = false
44
+ error_in_block = false
42
45
  begin
43
46
  Hoss.with_event do |event|
44
47
  Hoss::Spies::FaradaySpy.without_net_http do
48
+ uri = URI(build_url(url))
45
49
  begin
46
- uri = URI(build_url(url))
47
50
  result = run_request_without_apm(method, url, body, headers) do |req|
48
51
  if block_given?
49
52
  yield req
50
- new_path = req.path
51
- new_query = URI.encode_www_form(req.params)
52
- if uri.path != new_path || uri.query != new_query
53
- test_uri = uri
54
- test_uri.query = nil
55
- begin
56
- test_uri.path = new_path
57
- rescue Exception => e
53
+ begin
54
+ new_path = req.path
55
+ new_query = URI.encode_www_form(req.params)
56
+ if uri.path != new_path || uri.query != new_query
57
+ test_uri = uri
58
+ test_uri.query = nil
59
+ begin
60
+ test_uri.path = new_path
61
+ rescue Exception => e
62
+ end
63
+ # The original url can be set to path if Faraday.get used
64
+ if test_uri.to_s != uri.to_s
65
+ uri.path = new_path
66
+ end
67
+ uri.query = new_query
58
68
  end
59
- # The original url can be set to path if Faraday.get used
60
- if test_uri.to_s != uri.to_s
61
- uri.path = new_path
62
- end
63
- uri.query = new_query
69
+ rescue
70
+ error_in_block = true
71
+ raise
64
72
  end
65
73
  end
66
- event.request.method = method.to_s.upcase
67
- event.request.url = uri.to_s
68
- event.request.received_at = DateTime.now.strftime('%Q').to_i
69
- event.request.headers['host'] = uri.hostname
70
- req.headers.each {|n,v| event.request.headers[n] = v}
71
- event.request.url = uri.to_s
72
- event.request.body = req.body
73
- end
74
-
75
- if result
76
- event.response = Hoss::Event::Response.new
77
- event.response.received_at = DateTime.now.strftime('%Q').to_i
78
- event.response.status_code = result.status.to_i
79
- result.headers.each {|n,v| event.response.headers[n] = v}
80
- event.response.body = result.body
81
- end
82
-
83
- result
84
- rescue Exception => e
85
- if e.respond_to?(:wrapped_exception) && e.wrapped_exception.is_a?(Net::OpenTimeout)
86
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
87
- else
88
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
74
+ begin
75
+ event.request.method = method.to_s.upcase
76
+ event.request.url = uri.to_s
77
+ event.request.received_at = DateTime.now.strftime('%Q').to_i
78
+ event.request.headers['host'] = uri.hostname
79
+ req.headers.each {|n,v| event.request.headers[n] = v}
80
+ event.request.url = uri.to_s
81
+ event.request.body = req.body
82
+ rescue
83
+ error_in_block = true
84
+ raise
85
+ end
89
86
  end
87
+ rescue
88
+ error_in_request = true
89
+ event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
90
90
  event.error.received_at = DateTime.now.strftime('%Q').to_i
91
91
  raise
92
92
  end
93
+ if result
94
+ event.response = Hoss::Event::Response.new
95
+ event.response.received_at = DateTime.now.strftime('%Q').to_i
96
+ event.response.status_code = result.status.to_i
97
+ result.headers.each {|n,v| event.response.headers[n] = v}
98
+ event.response.body = result.body
99
+ end
100
+ result
93
101
  end
94
102
  end
95
- rescue
96
- run_request_without_apm(method, url, body, headers, &block)
103
+ rescue Exception => e
104
+ raise if error_in_request && !error_in_block
105
+ puts format('Hoss Error: %s %s', e.inspect, e.backtrace)
106
+ return result unless result.nil?
107
+ return run_request_without_apm(method, url, body, headers, &block)
97
108
  end
98
109
  end
99
110
  end
@@ -41,40 +41,47 @@ module Hoss
41
41
  alias perform_without_apm perform
42
42
 
43
43
  def perform(req, options)
44
- if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true'
45
- return perform_without_apm(req, options)
46
- end
44
+ result = nil
45
+ error_in_request = false
46
+ begin
47
+ if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true'
48
+ return perform_without_apm(req, options)
49
+ end
47
50
 
48
- Hoss.with_event do |event|
49
- result = nil
50
- begin
51
+ Hoss.with_event do |event|
51
52
  event.request.headers['host'] = req.uri.host
52
53
  req.headers.each {|n,v| event.request.headers[n] = v}
53
54
  event.request.method = req.verb.to_s.upcase
54
55
  event.request.url = req.uri.to_s
55
56
  event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body)
56
57
  event.request.received_at = DateTime.now.strftime('%Q').to_i
58
+ begin
57
59
  result = perform_without_apm(req, options)
58
- if result
59
- event.response = Hoss::Event::Response.new
60
- event.response.received_at = DateTime.now.strftime('%Q').to_i
61
- event.response.status_code = result.code.to_i
62
- result.headers.each {|n,v| event.response.headers[n] = v}
63
- event.response.body = result.body.to_s
64
- end
65
- result
60
+ rescue HTTP::TimeoutError => e
61
+ error_in_request = true
62
+ event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
63
+ event.error.received_at = DateTime.now.strftime('%Q').to_i
64
+ raise
65
+ rescue Exception => e
66
+ error_in_request = true
67
+ event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
68
+ event.error.received_at = DateTime.now.strftime('%Q').to_i
69
+ raise
66
70
  end
67
- rescue HTTP::TimeoutError => e
68
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
69
- event.error.received_at = DateTime.now.strftime('%Q').to_i
70
- raise
71
- rescue HTTP::Error => e
72
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
73
- event.error.received_at = DateTime.now.strftime('%Q').to_i
74
- raise
75
- rescue Exception => e
76
- return result unless result.nil?
77
- return perform_without_apm(req, options)
71
+ if result
72
+ event.response = Hoss::Event::Response.new
73
+ event.response.received_at = DateTime.now.strftime('%Q').to_i
74
+ event.response.status_code = result.code.to_i
75
+ result.headers.each {|n,v| event.response.headers[n] = v}
76
+ event.response.body = result.body.to_s
77
+ end
78
+ result
79
+ end
80
+ rescue Exception => e
81
+ raise if error_in_request
82
+ puts format('Hoss Error: %s %s', e.inspect, e.backtrace)
83
+ return result unless result.nil?
84
+ return perform_without_apm(req, options)
78
85
  end
79
86
  end
80
87
  end
@@ -52,22 +52,24 @@ module Hoss
52
52
  alias request_without_apm request
53
53
 
54
54
  def request(req, body = nil, &block)
55
- if req['HOSS-SKIP-INSTRUMENTATION'] == 'true' || Hoss::Spies::NetHTTPSpy.disabled?
56
- return request_without_apm(req, body, &block)
57
- end
58
-
55
+ result = nil
56
+ error_in_request = false
59
57
  begin
58
+ if req['HOSS-SKIP-INSTRUMENTATION'] == 'true' || Hoss::Spies::NetHTTPSpy.disabled?
59
+ return request_without_apm(req, body, &block)
60
+ end
61
+
60
62
  host = req['host']&.split(':')&.first || address
61
63
  method = req.method.to_s.upcase
62
64
  path, query = req.path.split('?')
63
-
65
+
64
66
  url = use_ssl? ? +'https://' : +'http://'
65
67
  url << host
66
68
  url << ":#{port}" if port
67
69
  url << path
68
70
  url << "?#{query}" if query
69
71
  uri = URI(url)
70
-
72
+
71
73
  Hoss.with_event do |event|
72
74
  # Record request
73
75
  event.request.headers['host'] = uri.hostname
@@ -76,8 +78,14 @@ module Hoss
76
78
  event.request.url = uri.to_s
77
79
  event.request.body = req.body
78
80
  event.request.received_at = DateTime.now.strftime('%Q').to_i
79
-
80
- result = request_without_apm(req, body, &block)
81
+
82
+ begin
83
+ result = request_without_apm(req, body, &block)
84
+ rescue
85
+ error_in_request = true
86
+ raise
87
+ end
88
+
81
89
  if result
82
90
  event.response = Hoss::Event::Response.new
83
91
  event.response.received_at = DateTime.now.strftime('%Q').to_i
@@ -85,9 +93,13 @@ module Hoss
85
93
  result.each_header {|n,v| event.response.headers[n] = v}
86
94
  event.response.body = result.body
87
95
  end
96
+
88
97
  result
89
98
  end
90
- rescue
99
+ rescue Exception => e
100
+ raise if error_in_request
101
+ puts format('Hoss Error: %s %s', e.inspect, e.backtrace)
102
+ return result unless result.nil?
91
103
  return request_without_apm(req, body, &block)
92
104
  end
93
105
  end
@@ -18,5 +18,5 @@
18
18
  # frozen_string_literal: true
19
19
 
20
20
  module Hoss
21
- VERSION = '1.0.10'
21
+ VERSION = '1.0.11'
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoss-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Cooper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-21 00:00:00.000000000 Z
11
+ date: 2020-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby