hoss-agent 1.0.5 → 1.0.10
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 +4 -4
- data/lib/hoss/agent.rb +4 -0
- data/lib/hoss/config.rb +4 -6
- data/lib/hoss/spies/faraday.rb +47 -43
- data/lib/hoss/spies/http.rb +21 -16
- data/lib/hoss/spies/net_http.rb +32 -28
- data/lib/hoss/transport/serializers/event_serializer.rb +1 -1
- data/lib/hoss/transport/worker.rb +5 -1
- data/lib/hoss/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f6e25b94d999ae0da999fb7de8ca429445a27a7d87a72be82da4bfc4a367ab8
|
4
|
+
data.tar.gz: 6e3b46812e39dde84acd627649f2557da0019b9a406791d35c61da77ecb781b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a9e8e511a25e1580b32bfd63aed336be1c2a804a70d580bb36e612d72cf79f25cdeb76a16fd2d5ba6b1f60cfb2e51e15a6dd14fa83387205eb3234c3d4952e9
|
7
|
+
data.tar.gz: cd7c026248bd252cb8a8dfc53e72234281bc7cc1a3ea9c58e5f446ea78cc3341664e760000728c78ce2f6a7ba252b8b9eb3b44ee78a0d6a07f25cd54bcc26f13
|
data/lib/hoss/agent.rb
CHANGED
@@ -103,6 +103,10 @@ module Hoss
|
|
103
103
|
def_delegator :@central_config, :config
|
104
104
|
|
105
105
|
def start
|
106
|
+
unless config.api_key
|
107
|
+
config.logger.warn "Hoss API Key missing, not starting."
|
108
|
+
return
|
109
|
+
end
|
106
110
|
unless config.disable_start_message?
|
107
111
|
config.logger.info format(
|
108
112
|
'[%s] Starting agent, reporting to %s',
|
data/lib/hoss/config.rb
CHANGED
@@ -41,7 +41,7 @@ module Hoss
|
|
41
41
|
option :remote_config_fetch_interval, type: :int, default: 300
|
42
42
|
option :agentConfig, type: :dict
|
43
43
|
option :debug, type: :boolean, default: ENV['HOSS_DEBUG']
|
44
|
-
|
44
|
+
option :disable_reporting, type: :boolean, default: ENV['HOSS_DISABLE_REPORTING'] == 'true'
|
45
45
|
|
46
46
|
option :central_config, type: :bool, default: true
|
47
47
|
option :capture_body, type: :string, default: 'off'
|
@@ -101,10 +101,6 @@ module Hoss
|
|
101
101
|
assign(load_config_file)
|
102
102
|
assign(env)
|
103
103
|
|
104
|
-
if self.log_level == Logger::DEBUG
|
105
|
-
assign(debug: true)
|
106
|
-
end
|
107
|
-
|
108
104
|
if self.debug == true || self.debug == 'true'
|
109
105
|
assign(
|
110
106
|
log_level: Logger::DEBUG,
|
@@ -113,7 +109,9 @@ module Hoss
|
|
113
109
|
)
|
114
110
|
end
|
115
111
|
|
116
|
-
|
112
|
+
unless self.disable_reporting.nil?
|
113
|
+
self.disable_reporting = self.disable_reporting == 'true' || self.disable_reporting == true
|
114
|
+
end
|
117
115
|
|
118
116
|
yield self if block_given?
|
119
117
|
|
data/lib/hoss/spies/faraday.rb
CHANGED
@@ -39,57 +39,61 @@ module Hoss
|
|
39
39
|
alias run_request_without_apm run_request
|
40
40
|
|
41
41
|
def run_request(method, url, body, headers, &block)
|
42
|
-
|
43
|
-
Hoss
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
42
|
+
begin
|
43
|
+
Hoss.with_event do |event|
|
44
|
+
Hoss::Spies::FaradaySpy.without_net_http do
|
45
|
+
begin
|
46
|
+
uri = URI(build_url(url))
|
47
|
+
result = run_request_without_apm(method, url, body, headers) do |req|
|
48
|
+
if block_given?
|
49
|
+
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
|
58
|
+
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
|
57
64
|
end
|
58
|
-
# The original url can be set to path if Faraday.get used
|
59
|
-
if test_uri.to_s != uri.to_s
|
60
|
-
uri.path = new_path
|
61
|
-
end
|
62
|
-
uri.query = new_query
|
63
65
|
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
|
64
73
|
end
|
65
|
-
event.request.method = method.to_s.upcase
|
66
|
-
event.request.url = uri.to_s
|
67
|
-
event.request.received_at = DateTime.now.strftime('%Q').to_i
|
68
|
-
event.request.headers['host'] = uri.hostname
|
69
|
-
req.headers.each {|n,v| event.request.headers[n] = v}
|
70
|
-
event.request.url = uri.to_s
|
71
|
-
event.request.body = req.body
|
72
|
-
end
|
73
74
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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)
|
89
|
+
end
|
90
|
+
event.error.received_at = DateTime.now.strftime('%Q').to_i
|
91
|
+
raise
|
88
92
|
end
|
89
|
-
event.error.received_at = DateTime.now.strftime('%Q').to_i
|
90
|
-
raise
|
91
93
|
end
|
92
94
|
end
|
95
|
+
rescue
|
96
|
+
run_request_without_apm(method, url, body, headers, &block)
|
93
97
|
end
|
94
98
|
end
|
95
99
|
end
|
data/lib/hoss/spies/http.rb
CHANGED
@@ -44,32 +44,37 @@ module Hoss
|
|
44
44
|
if req.headers['HOSS-SKIP-INSTRUMENTATION'] == 'true'
|
45
45
|
return perform_without_apm(req, options)
|
46
46
|
end
|
47
|
+
|
47
48
|
Hoss.with_event do |event|
|
48
|
-
|
49
|
-
req.headers.each {|n,v| event.request.headers[n] = v}
|
50
|
-
event.request.method = req.verb.to_s.upcase
|
51
|
-
event.request.url = req.uri.to_s
|
52
|
-
event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body)
|
53
|
-
event.request.received_at = DateTime.now.strftime('%Q').to_i
|
49
|
+
result = nil
|
54
50
|
begin
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
51
|
+
event.request.headers['host'] = req.uri.host
|
52
|
+
req.headers.each {|n,v| event.request.headers[n] = v}
|
53
|
+
event.request.method = req.verb.to_s.upcase
|
54
|
+
event.request.url = req.uri.to_s
|
55
|
+
event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body)
|
56
|
+
event.request.received_at = DateTime.now.strftime('%Q').to_i
|
57
|
+
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
|
62
66
|
end
|
63
|
-
result
|
64
67
|
rescue HTTP::TimeoutError => e
|
65
68
|
event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
|
66
69
|
event.error.received_at = DateTime.now.strftime('%Q').to_i
|
67
70
|
raise
|
68
|
-
rescue
|
71
|
+
rescue HTTP::Error => e
|
69
72
|
event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
|
70
73
|
event.error.received_at = DateTime.now.strftime('%Q').to_i
|
71
74
|
raise
|
72
|
-
|
75
|
+
rescue Exception => e
|
76
|
+
return result unless result.nil?
|
77
|
+
return perform_without_apm(req, options)
|
73
78
|
end
|
74
79
|
end
|
75
80
|
end
|
data/lib/hoss/spies/net_http.rb
CHANGED
@@ -56,35 +56,39 @@ module Hoss
|
|
56
56
|
return request_without_apm(req, body, &block)
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
59
|
+
begin
|
60
|
+
host = req['host']&.split(':')&.first || address
|
61
|
+
method = req.method.to_s.upcase
|
62
|
+
path, query = req.path.split('?')
|
63
|
+
|
64
|
+
url = use_ssl? ? +'https://' : +'http://'
|
65
|
+
url << host
|
66
|
+
url << ":#{port}" if port
|
67
|
+
url << path
|
68
|
+
url << "?#{query}" if query
|
69
|
+
uri = URI(url)
|
70
|
+
|
71
|
+
Hoss.with_event do |event|
|
72
|
+
# Record request
|
73
|
+
event.request.headers['host'] = uri.hostname
|
74
|
+
req.each_header {|n,v| event.request.headers[n] = v}
|
75
|
+
event.request.method = method
|
76
|
+
event.request.url = uri.to_s
|
77
|
+
event.request.body = req.body
|
78
|
+
event.request.received_at = DateTime.now.strftime('%Q').to_i
|
79
|
+
|
80
|
+
result = request_without_apm(req, body, &block)
|
81
|
+
if result
|
82
|
+
event.response = Hoss::Event::Response.new
|
83
|
+
event.response.received_at = DateTime.now.strftime('%Q').to_i
|
84
|
+
event.response.status_code = result.code.to_i
|
85
|
+
result.each_header {|n,v| event.response.headers[n] = v}
|
86
|
+
event.response.body = result.body
|
87
|
+
end
|
88
|
+
result
|
86
89
|
end
|
87
|
-
|
90
|
+
rescue
|
91
|
+
return request_without_apm(req, body, &block)
|
88
92
|
end
|
89
93
|
end
|
90
94
|
end
|
@@ -26,8 +26,8 @@ module Hoss
|
|
26
26
|
r = {
|
27
27
|
eventId: event.id,
|
28
28
|
request: build_request(event.request),
|
29
|
-
response: build_response(event.response),
|
30
29
|
}
|
30
|
+
r['response'] = build_response(event.response) if event.response
|
31
31
|
r['error'] = build_error(event.error) if event.error
|
32
32
|
r
|
33
33
|
end
|
@@ -147,7 +147,11 @@ module Hoss
|
|
147
147
|
puts json if config.debug
|
148
148
|
end
|
149
149
|
begin
|
150
|
-
|
150
|
+
if config.disable_reporting
|
151
|
+
debug "Reprting disabled, skipping"
|
152
|
+
else
|
153
|
+
connection.write(json)
|
154
|
+
end
|
151
155
|
rescue Exception => e
|
152
156
|
error format('Failed send report: %s %s', e.inspect, e.backtrace)
|
153
157
|
batch.each do |m|
|
data/lib/hoss/version.rb
CHANGED
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.
|
4
|
+
version: 1.0.10
|
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-
|
11
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|