hoss-agent 1.0.4 → 1.0.9

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: 8dd2239031e74d5f25fafa6f441f51b3e0d58b9bc751fd71969991fa0761e261
4
- data.tar.gz: db69f9d259c944bfbc935ab0967d20e39403fbaa86169188c597bcc9fff31fcb
3
+ metadata.gz: eb17fe11c7d97d41c4cb2c5a701286233ea53255092a89a3924793e5d2a6a3c4
4
+ data.tar.gz: babeee044660be9fcb0f6c4d8a26f6204abfb2f539fa83497bac97d1b461a54b
5
5
  SHA512:
6
- metadata.gz: a05a2e06817b1535ad21b76c0a72ca7bcf148ab3cfce2aeb5e9f96052d4cc3be9e8d6eb802cb270fe65ab08ace0befe92f446236d4ae468428923c9f9716b821
7
- data.tar.gz: 50b283758201a779aa3648cb8f7928682a8fbfd0cb53d8280d89d65956064bed5e4cb4225875d4c2efa3e124848011a1a12c2cef10eee98bc524e143a5d755d5
6
+ metadata.gz: 70b395a9f4e36e3677bbe82148ff0a3ad13844c1a281184148ed22b5f8204414a6e22e0d27f98addeb723e68da4bcf89f97ab3da0248c6bc967baae48691b65e
7
+ data.tar.gz: d05143b093eab36c8f034fe9e05eae9b863b4fca370f1b7c8e04d28d3eba8a69c770f4c0ef137fedde869761401c7617a74f998caa2e91fc559ae707c44550ac
@@ -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',
@@ -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
- warn '[HOSS] No API Key provided' unless self.api_key
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
 
@@ -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
- Hoss.with_event do |event|
43
- Hoss::Spies::FaradaySpy.without_net_http do
44
- begin
45
- uri = URI(build_url(url))
46
- result = run_request_without_apm(method, url, body, headers) do |req|
47
- if block_given?
48
- yield req
49
- new_path = req.path
50
- new_query = URI.encode_www_form(req.params)
51
- if uri.path != new_path || uri.query != new_query
52
- test_uri = uri
53
- test_uri.query = nil
54
- begin
55
- test_uri.path = new_path
56
- rescue Exception => e
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
- if result
75
- event.response = Hoss::Event::Response.new
76
- event.response.received_at = DateTime.now.strftime('%Q').to_i
77
- event.response.status_code = result.status.to_i
78
- result.headers.each {|n,v| event.response.headers[n] = v}
79
- event.response.body = result.body
80
- end
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
- result
83
- rescue Exception => e
84
- if e.wrapped_exception.is_a? Net::OpenTimeout
85
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
86
- else
87
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
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
@@ -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
- Hoss.with_event do |event|
48
- event.request.headers['host'] = req.uri.host
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
54
- begin
55
- result = perform_without_apm(req, options)
56
- if result
57
- event.response = Hoss::Event::Response.new
58
- event.response.received_at = DateTime.now.strftime('%Q').to_i
59
- event.response.status_code = result.code.to_i
60
- result.headers.each {|n,v| event.response.headers[n] = v}
61
- event.response.body = result.body.dup.to_s
47
+
48
+ begin
49
+ Hoss.with_event do |event|
50
+ event.request.headers['host'] = req.uri.host
51
+ req.headers.each {|n,v| event.request.headers[n] = v}
52
+ event.request.method = req.verb.to_s.upcase
53
+ event.request.url = req.uri.to_s
54
+ event.request.body = Hoss::Spies::HTTPSpy::copy_request_body(req.body)
55
+ event.request.received_at = DateTime.now.strftime('%Q').to_i
56
+ begin
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
66
+ rescue HTTP::TimeoutError => e
67
+ event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
68
+ event.error.received_at = DateTime.now.strftime('%Q').to_i
69
+ raise
70
+ rescue Exception => e
71
+ event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
72
+ event.error.received_at = DateTime.now.strftime('%Q').to_i
73
+ raise
62
74
  end
63
- result
64
- rescue HTTP::TimeoutError => e
65
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionTimeout)
66
- event.error.received_at = DateTime.now.strftime('%Q').to_i
67
- raise
68
- rescue Exception => e
69
- event.error = Hoss::Event::Error.new(Hoss::Event::Error::ConnectionError)
70
- event.error.received_at = DateTime.now.strftime('%Q').to_i
71
- raise
72
75
  end
76
+ rescue
77
+ return perform_without_apm(req, options)
73
78
  end
74
79
  end
75
80
  end
@@ -56,35 +56,39 @@ module Hoss
56
56
  return request_without_apm(req, body, &block)
57
57
  end
58
58
 
59
- host = req['host']&.split(':')&.first || address
60
- method = req.method.to_s.upcase
61
- path, query = req.path.split('?')
62
-
63
- url = use_ssl? ? +'https://' : +'http://'
64
- url << host
65
- url << ":#{port}" if port
66
- url << path
67
- url << "?#{query}" if query
68
- uri = URI(url)
69
-
70
- Hoss.with_event do |event|
71
- # Record request
72
- event.request.headers['host'] = uri.hostname
73
- req.each_header {|n,v| event.request.headers[n] = v}
74
- event.request.method = method
75
- event.request.url = uri.to_s
76
- event.request.body = req.body
77
- event.request.received_at = DateTime.now.strftime('%Q').to_i
78
-
79
- result = request_without_apm(req, body, &block)
80
- if result
81
- event.response = Hoss::Event::Response.new
82
- event.response.received_at = DateTime.now.strftime('%Q').to_i
83
- event.response.status_code = result.code.to_i
84
- result.each_header {|n,v| event.response.headers[n] = v}
85
- event.response.body = result.body
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
- result
90
+ rescue
91
+ return request_without_apm(req, body, &block)
88
92
  end
89
93
  end
90
94
  end
@@ -61,100 +61,108 @@ module Hoss
61
61
 
62
62
  done = false
63
63
  while (!done && msg = queue.pop)
64
- debug 'working message', msg
64
+ begin
65
+ debug 'working message', msg
65
66
 
66
- # wait if we don't have a config
67
- while config.agentConfig.nil?
68
- sleep 0.1
69
- end
70
-
71
- case msg
72
- when StopMessage
73
- debug 'Stopping worker -- %s', self
74
- done = true
75
- break
76
- else
77
- batch = []
78
- current_batch_size = 0
79
-
80
- # Use this as the first message in the batch
81
- event = msg.filtered ? msg : filter_resource(msg)
82
- unless event.nil?
83
- event_size = resource_size(event)
84
- if current_batch_size + event_size <= @config.batch_size
85
- unless host_blacklisted(event)
86
- current_batch_size += event_size
87
- if event.retries < @config.max_event_retries
88
- batch.push(event)
89
- else
90
- debug "max retries hit for event"
67
+ # wait if we don't have a config
68
+ while config.agentConfig.nil?
69
+ sleep 0.1
70
+ end
71
+
72
+ case msg
73
+ when StopMessage
74
+ debug 'Stopping worker -- %s', self
75
+ done = true
76
+ break
77
+ else
78
+ batch = []
79
+ current_batch_size = 0
80
+
81
+ # Use this as the first message in the batch
82
+ event = msg.filtered ? msg : filter_resource(msg)
83
+ unless event.nil?
84
+ event_size = resource_size(event)
85
+ if current_batch_size + event_size <= @config.batch_size
86
+ unless host_blacklisted(event)
87
+ current_batch_size += event_size
88
+ if event.retries < @config.max_event_retries
89
+ batch.push(event)
90
+ else
91
+ debug "max retries hit for event"
92
+ end
91
93
  end
94
+ else
95
+ debug "Event is too large, body needs to be truncated"
92
96
  end
93
- else
94
- debug "Event is too large, body needs to be truncated"
95
97
  end
96
- end
97
98
 
98
- # Do inner loop reading queue to build report
99
- requeue_messages = []
100
- while current_batch_size < @config.batch_size && !queue.empty?
101
- next_msg = queue.pop
102
- case next_msg
103
- when StopMessage
104
- debug 'Stopping worker -- %s', self
105
- done = true
106
- break
107
- else
108
- event = next_msg.filtered ? next_msg : filter_resource(next_msg) unless
109
- unless event.nil?
110
- event_size = resource_size(event)
111
- if current_batch_size + event_size <= @config.batch_size
112
- unless host_blacklisted(event)
113
- current_batch_size += event_size
114
- if event.retries < @config.max_event_retries
115
- batch.push(event)
116
- else
117
- debug "max retries hit for event"
99
+ # Do inner loop reading queue to build report
100
+ requeue_messages = []
101
+ while current_batch_size < @config.batch_size && !queue.empty?
102
+ next_msg = queue.pop
103
+ case next_msg
104
+ when StopMessage
105
+ debug 'Stopping worker -- %s', self
106
+ done = true
107
+ break
108
+ else
109
+ event = next_msg.filtered ? next_msg : filter_resource(next_msg)
110
+ unless event.nil?
111
+ event_size = resource_size(event)
112
+ if current_batch_size + event_size <= @config.batch_size
113
+ unless host_blacklisted(event)
114
+ current_batch_size += event_size
115
+ if event.retries < @config.max_event_retries
116
+ batch.push(event)
117
+ else
118
+ debug "max retries hit for event"
119
+ end
118
120
  end
121
+ else
122
+ debug "Event too large for this batch, requeue"
123
+ requeue_messages.push(event)
119
124
  end
120
- else
121
- debug "Event too large for this batch, requeue"
122
- requeue_messages.push(event)
123
125
  end
124
126
  end
125
127
  end
126
- end
127
-
128
- if batch.length == 0
129
- debug "batch is empty, breaking"
130
- break
131
- end
132
128
 
133
- debug "Requeue #{requeue_messages.length} messages" if requeue_messages.length > 0
134
- requeue_messages.each {|msg| queue.push(msg, false) }
129
+ if batch.length == 0
130
+ debug "batch is empty, breaking"
131
+ break
132
+ end
135
133
 
136
- report = Report.new
137
- report.events = batch.map {|event| serializers.serialize(event) }
134
+ debug "Requeue #{requeue_messages.length} messages" if requeue_messages.length > 0
135
+ requeue_messages.each {|msg| queue.push(msg, false) }
138
136
 
139
- debug "Finished building report"
140
- data = serializers.serialize(report)
141
- json = JSON.fast_generate(data)
142
- begin
143
- debug json
144
- rescue Exception => e
145
- debug 'unable to print body'
146
- puts json if config.debug
147
- end
148
- begin
149
- connection.write(json)
150
- rescue Exception => e
151
- error format('Failed send report: %s %s', e.inspect, e.backtrace)
152
- batch.each do |m|
153
- m.retries += 1
154
- queue.push(m, false)
137
+ report = Report.new
138
+ report.events = batch.map {|event| serializers.serialize(event) }
139
+
140
+ debug "Finished building report"
141
+ data = serializers.serialize(report)
142
+ json = JSON.fast_generate(data)
143
+ begin
144
+ debug json
145
+ rescue Exception => e
146
+ debug 'unable to print body'
147
+ puts json if config.debug
148
+ end
149
+ begin
150
+ if config.disable_reporting
151
+ debug "Reprting disabled, skipping"
152
+ else
153
+ connection.write(json)
154
+ end
155
+ rescue Exception => e
156
+ error format('Failed send report: %s %s', e.inspect, e.backtrace)
157
+ batch.each do |m|
158
+ m.retries += 1
159
+ queue.push(m, false)
160
+ end
161
+ sleep 1
155
162
  end
156
- sleep 1
157
163
  end
164
+ rescue Exception => e
165
+ debug "error in worker #{e.inspect}"
158
166
  end
159
167
  end
160
168
  rescue Exception => e
@@ -183,6 +191,9 @@ module Hoss
183
191
  else
184
192
  body
185
193
  end
194
+ rescue Exception => e
195
+ debug "unable to decompress body #{e.inspect}"
196
+ return nil
186
197
  end
187
198
 
188
199
  def get_header(headers, name)
@@ -18,5 +18,5 @@
18
18
  # frozen_string_literal: true
19
19
 
20
20
  module Hoss
21
- VERSION = '1.0.4'
21
+ VERSION = '1.0.9'
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.4
4
+ version: 1.0.9
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-17 00:00:00.000000000 Z
11
+ date: 2020-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby