moesif_rack 1.4.19 → 2.0.1
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/moesif_rack/app_config.rb +76 -113
- data/lib/moesif_rack/client_ip.rb +61 -102
- data/lib/moesif_rack/governance_rules.rb +480 -0
- data/lib/moesif_rack/moesif_helpers.rb +33 -6
- data/lib/moesif_rack/moesif_middleware.rb +159 -148
- data/lib/moesif_rack/regex_config_helper.rb +96 -104
- data/lib/moesif_rack/update_company.rb +44 -48
- data/lib/moesif_rack/update_user.rb +44 -48
- data/moesif_capture_outgoing/httplog/adapters/net_http.rb +18 -21
- data/moesif_capture_outgoing/httplog/http_log.rb +57 -107
- data/moesif_capture_outgoing/httplog.rb +2 -2
- data/test/config_example.json +1473 -0
- data/test/govrule_example.json +20 -0
- data/test/test_governance_rules.rb +213 -0
- data/test/{moesif_rack_test.rb → test_moesif_rack.rb} +18 -16
- metadata +30 -6
@@ -5,21 +5,20 @@ require 'base64'
|
|
5
5
|
require 'zlib'
|
6
6
|
require 'stringio'
|
7
7
|
require 'rack'
|
8
|
-
require_relative './client_ip
|
9
|
-
require_relative './app_config
|
10
|
-
require_relative './update_user
|
11
|
-
require_relative './update_company
|
12
|
-
require_relative './moesif_helpers
|
8
|
+
require_relative './client_ip'
|
9
|
+
require_relative './app_config'
|
10
|
+
require_relative './update_user'
|
11
|
+
require_relative './update_company'
|
12
|
+
require_relative './moesif_helpers'
|
13
|
+
require_relative './governance_rules'
|
13
14
|
|
14
15
|
module MoesifRack
|
15
|
-
|
16
16
|
class MoesifMiddleware
|
17
|
-
def initialize
|
17
|
+
def initialize(app, options = {})
|
18
18
|
@app = app
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@api_client = MoesifApi::MoesifAPIClient.new(options['application_id'])
|
19
|
+
raise 'application_id required for Moesif Middleware' unless options['application_id']
|
20
|
+
|
21
|
+
@api_client = MoesifApi::MoesifAPIClient.new(options['application_id'], 'moesif-rack/2.0.1')
|
23
22
|
@api_controller = @api_client.api
|
24
23
|
|
25
24
|
@api_version = options['api_version']
|
@@ -32,10 +31,7 @@ module MoesifRack
|
|
32
31
|
@debug = options['debug']
|
33
32
|
@app_config = AppConfig.new(@debug)
|
34
33
|
@moesif_helpers = MoesifHelpers.new(@debug)
|
35
|
-
|
36
|
-
@config_etag = nil
|
37
|
-
@last_config_download_time = Time.now.utc
|
38
|
-
@config_dict = Hash.new
|
34
|
+
|
39
35
|
@disable_transaction_id = options['disable_transaction_id'] || false
|
40
36
|
@log_body = options.fetch('log_body', true)
|
41
37
|
@batch_size = options['batch_size'] || 200
|
@@ -43,27 +39,27 @@ module MoesifRack
|
|
43
39
|
@batch_max_time = options['batch_max_time'] || 2
|
44
40
|
@events_queue = Queue.new
|
45
41
|
@event_response_config_etag = nil
|
42
|
+
@governance_manager = GovernanceRules.new(@debug)
|
46
43
|
|
47
44
|
# start the worker and Update the last worker run
|
48
45
|
@last_worker_run = Time.now.utc
|
49
|
-
start_worker
|
46
|
+
start_worker
|
50
47
|
|
51
48
|
begin
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
56
|
-
rescue => exception
|
49
|
+
@app_config.get_config(@api_controller)
|
50
|
+
@governance_manager.load_rules(@api_controller)
|
51
|
+
rescue StandardError => e
|
57
52
|
@moesif_helpers.log_debug 'Error while parsing application configuration on initialization'
|
58
|
-
@moesif_helpers.log_debug
|
53
|
+
@moesif_helpers.log_debug e.to_s
|
59
54
|
end
|
55
|
+
# backwards compatibility for a typo in docs
|
60
56
|
@capture_outoing_requests = options['capture_outoing_requests']
|
61
57
|
@capture_outgoing_requests = options['capture_outgoing_requests']
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
return unless @capture_outoing_requests || @capture_outgoing_requests
|
59
|
+
|
60
|
+
@moesif_helpers.log_debug 'Start Capturing outgoing requests'
|
61
|
+
require_relative '../../moesif_capture_outgoing/httplog'
|
62
|
+
MoesifCaptureOutgoing.start_capture_outgoing(options, @app_config, @events_queue)
|
67
63
|
end
|
68
64
|
|
69
65
|
def update_user(user_profile)
|
@@ -91,17 +87,17 @@ module MoesifRack
|
|
91
87
|
end
|
92
88
|
|
93
89
|
def transform_headers(headers)
|
94
|
-
Hash[headers.map { |k, v| [k.downcase, v]}]
|
90
|
+
Hash[headers.map { |k, v| [k.downcase, v] }]
|
95
91
|
end
|
96
92
|
|
97
93
|
def base64_encode_body(body)
|
98
|
-
|
94
|
+
[Base64.encode64(body), 'base64']
|
99
95
|
end
|
100
96
|
|
101
97
|
def @moesif_helpers.log_debug(message)
|
102
|
-
|
103
|
-
|
104
|
-
|
98
|
+
return unless @debug
|
99
|
+
|
100
|
+
puts("#{Time.now} [Moesif Middleware] PID #{Process.pid} TID #{Thread.current.object_id} #{message}")
|
105
101
|
end
|
106
102
|
|
107
103
|
def parse_multipart(multipart_form_data, content_type)
|
@@ -113,9 +109,10 @@ module MoesifRack
|
|
113
109
|
tempfile = Rack::Multipart::Parser::TEMPFILE_FACTORY
|
114
110
|
bufsize = Rack::Multipart::Parser::BUFSIZE
|
115
111
|
query_parser = Rack::Utils.default_query_parser
|
116
|
-
result = Rack::Multipart::Parser.parse(io, sanitized_multipart_form_data.length, content_type, tempfile, bufsize,
|
112
|
+
result = Rack::Multipart::Parser.parse(io, sanitized_multipart_form_data.length, content_type, tempfile, bufsize,
|
113
|
+
query_parser)
|
117
114
|
|
118
|
-
@moesif_helpers.log_debug(
|
115
|
+
@moesif_helpers.log_debug('multipart parse result')
|
119
116
|
@moesif_helpers.log_debug(result.inspect)
|
120
117
|
|
121
118
|
# this is a hash shold be treated as JSON down the road.
|
@@ -124,67 +121,68 @@ module MoesifRack
|
|
124
121
|
|
125
122
|
def parse_body(body, headers)
|
126
123
|
begin
|
127
|
-
if
|
124
|
+
if body.instance_of?(Hash) || body.instance_of?(Array)
|
128
125
|
parsed_body = body
|
129
126
|
transfer_encoding = 'json'
|
130
127
|
elsif start_with_json(body)
|
131
128
|
parsed_body = JSON.parse(body)
|
132
129
|
transfer_encoding = 'json'
|
133
|
-
elsif headers.key?('content-type') && (
|
130
|
+
elsif headers.key?('content-type') && (headers['content-type'].downcase.include? 'multipart/form-data')
|
134
131
|
parsed_body = parse_multipart(body, headers['content-type'])
|
135
132
|
transfer_encoding = 'json'
|
136
|
-
elsif headers.key?('content-encoding') && (
|
133
|
+
elsif headers.key?('content-encoding') && (headers['content-encoding'].downcase.include? 'gzip')
|
137
134
|
uncompressed_string = decompress_body(body)
|
138
135
|
parsed_body, transfer_encoding = base64_encode_body(uncompressed_string)
|
139
136
|
else
|
140
137
|
parsed_body, transfer_encoding = base64_encode_body(body)
|
141
138
|
end
|
142
|
-
rescue
|
139
|
+
rescue StandardError
|
143
140
|
parsed_body, transfer_encoding = base64_encode_body(body)
|
144
141
|
end
|
145
|
-
|
142
|
+
[parsed_body, transfer_encoding]
|
146
143
|
end
|
147
144
|
|
148
145
|
def start_worker
|
149
|
-
Thread
|
146
|
+
Thread.new do
|
150
147
|
loop do
|
151
148
|
# Update the last worker run, in case the events_queue is empty
|
152
149
|
@last_worker_run = Time.now.utc
|
153
150
|
begin
|
154
|
-
until @events_queue.empty?
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
@moesif_helpers.log_debug(event_api_response.to_s)
|
166
|
-
@moesif_helpers.log_debug("Events successfully sent to Moesif")
|
151
|
+
until @events_queue.empty?
|
152
|
+
# Update the last worker run in case sending events take more than 60 seconds
|
153
|
+
@last_worker_run = Time.now.utc
|
154
|
+
# Populate the batch events from queue
|
155
|
+
batch_events = []
|
156
|
+
batch_events << @events_queue.pop until batch_events.size == @batch_size || @events_queue.empty?
|
157
|
+
@moesif_helpers.log_debug("Sending #{batch_events.size} events to Moesif")
|
158
|
+
event_api_response = @api_controller.create_events_batch(batch_events)
|
159
|
+
@event_response_config_etag = event_api_response[:x_moesif_config_etag]
|
160
|
+
@moesif_helpers.log_debug(event_api_response.to_s)
|
161
|
+
@moesif_helpers.log_debug('Events successfully sent to Moesif')
|
167
162
|
end
|
168
163
|
|
169
|
-
if @events_queue.empty?
|
170
|
-
|
164
|
+
@moesif_helpers.log_debug('No events to read from the queue') if @events_queue.empty?
|
165
|
+
|
166
|
+
if @app_config.should_reload(@event_response_config_etag)
|
167
|
+
@app_config.get_config(@api_controller)
|
168
|
+
@governance_manager.load_rules(@api_controller)
|
171
169
|
end
|
172
170
|
|
173
171
|
sleep @batch_max_time
|
174
172
|
rescue MoesifApi::APIException => e
|
175
173
|
if e.response_code.between?(401, 403)
|
176
|
-
puts
|
174
|
+
puts 'Unathorized accesss sending event to Moesif. Please verify your Application Id.'
|
177
175
|
@moesif_helpers.log_debug(e.to_s)
|
178
176
|
end
|
179
|
-
@moesif_helpers.log_debug("Error sending event to Moesif, with status code #{e.response_code
|
180
|
-
rescue => e
|
177
|
+
@moesif_helpers.log_debug("Error sending event to Moesif, with status code #{e.response_code}")
|
178
|
+
rescue StandardError => e
|
181
179
|
@moesif_helpers.log_debug(e.to_s)
|
182
180
|
end
|
183
181
|
end
|
184
182
|
end
|
185
183
|
end
|
186
184
|
|
187
|
-
def call
|
185
|
+
def call(env)
|
188
186
|
start_time = Time.now.utc.iso8601(3)
|
189
187
|
|
190
188
|
@moesif_helpers.log_debug('Calling Moesif middleware')
|
@@ -192,15 +190,15 @@ module MoesifRack
|
|
192
190
|
status, headers, body = @app.call env
|
193
191
|
end_time = Time.now.utc.iso8601(3)
|
194
192
|
|
195
|
-
|
193
|
+
make_event_model = lambda do
|
196
194
|
req = Rack::Request.new(env)
|
197
195
|
complex_copy = env.dup
|
198
196
|
|
199
197
|
# Filter hash to only have keys of type string
|
200
|
-
complex_copy = complex_copy.select { |k,
|
198
|
+
complex_copy = complex_copy.select { |k, _v| k.is_a? String }
|
201
199
|
|
202
200
|
req_headers = {}
|
203
|
-
complex_copy.select {|k,
|
201
|
+
complex_copy.select { |k, _v| k.start_with?('HTTP_', 'CONTENT_') }.each do |key, val|
|
204
202
|
new_key = key.sub(/^HTTP_/, '')
|
205
203
|
new_key = new_key.sub('_', '-')
|
206
204
|
req_headers[new_key] = val
|
@@ -213,172 +211,187 @@ module MoesifRack
|
|
213
211
|
req_body_transfer_encoding = nil
|
214
212
|
req_body = nil
|
215
213
|
|
216
|
-
if @log_body
|
217
|
-
|
218
|
-
|
219
|
-
end
|
214
|
+
if @log_body && (req_body_string && req_body_string.length != 0)
|
215
|
+
req_body, req_body_transfer_encoding = parse_body(req_body_string,
|
216
|
+
transform_headers(req_headers))
|
220
217
|
end
|
221
218
|
|
222
219
|
rsp_headers = headers.dup
|
223
220
|
|
224
|
-
rsp_body_string = get_response_body(body)
|
221
|
+
rsp_body_string = get_response_body(body)
|
225
222
|
rsp_body_transfer_encoding = nil
|
226
223
|
rsp_body = nil
|
227
224
|
|
228
|
-
if @log_body
|
229
|
-
|
230
|
-
|
231
|
-
end
|
225
|
+
if @log_body && (rsp_body_string && rsp_body_string.length != 0)
|
226
|
+
rsp_body, rsp_body_transfer_encoding = parse_body(rsp_body_string,
|
227
|
+
transform_headers(rsp_headers))
|
232
228
|
end
|
233
229
|
|
234
|
-
event_req = MoesifApi::EventRequestModel.new
|
230
|
+
event_req = MoesifApi::EventRequestModel.new
|
235
231
|
event_req.time = start_time
|
236
232
|
event_req.uri = req.url
|
237
233
|
event_req.verb = req.request_method
|
238
234
|
|
239
|
-
if @api_version
|
240
|
-
event_req.api_version = @api_version
|
241
|
-
end
|
235
|
+
event_req.api_version = @api_version if @api_version
|
242
236
|
|
243
237
|
# Add Transaction Id to the Request Header
|
244
|
-
|
245
|
-
req_trans_id = req_headers[
|
238
|
+
unless @disable_transaction_id
|
239
|
+
req_trans_id = req_headers['X-MOESIF_TRANSACTION_ID']
|
246
240
|
if !req_trans_id.nil?
|
247
241
|
transaction_id = req_trans_id
|
248
|
-
if transaction_id.strip.empty?
|
249
|
-
transaction_id = SecureRandom.uuid
|
250
|
-
end
|
242
|
+
transaction_id = SecureRandom.uuid if transaction_id.strip.empty?
|
251
243
|
else
|
252
244
|
transaction_id = SecureRandom.uuid
|
253
245
|
end
|
254
246
|
# Add Transaction Id to Request Header
|
255
|
-
req_headers[
|
247
|
+
req_headers['X-Moesif-Transaction-Id'] = transaction_id
|
256
248
|
# Filter out the old key as HTTP Headers case are not preserved
|
257
|
-
if req_headers.key?(
|
258
|
-
req_headers = req_headers.except("X-MOESIF_TRANSACTION_ID")
|
259
|
-
end
|
249
|
+
req_headers = req_headers.except('X-MOESIF_TRANSACTION_ID') if req_headers.key?('X-MOESIF_TRANSACTION_ID')
|
260
250
|
end
|
261
251
|
|
262
252
|
# Add Transaction Id to the Response Header
|
263
|
-
|
264
|
-
rsp_headers["X-Moesif-Transaction-Id"] = transaction_id
|
265
|
-
end
|
253
|
+
rsp_headers['X-Moesif-Transaction-Id'] = transaction_id unless transaction_id.nil?
|
266
254
|
|
267
255
|
# Add Transaction Id to the Repsonse Header sent to the client
|
268
|
-
|
269
|
-
headers["X-Moesif-Transaction-Id"] = transaction_id
|
270
|
-
end
|
256
|
+
headers['X-Moesif-Transaction-Id'] = transaction_id unless transaction_id.nil?
|
271
257
|
|
272
258
|
event_req.ip_address = get_client_address(req.env)
|
273
259
|
event_req.headers = req_headers
|
274
260
|
event_req.body = req_body
|
275
261
|
event_req.transfer_encoding = req_body_transfer_encoding
|
276
262
|
|
277
|
-
event_rsp = MoesifApi::EventResponseModel.new
|
263
|
+
event_rsp = MoesifApi::EventResponseModel.new
|
278
264
|
event_rsp.time = end_time
|
279
265
|
event_rsp.status = status
|
280
266
|
event_rsp.headers = rsp_headers
|
281
267
|
event_rsp.body = rsp_body
|
282
268
|
event_rsp.transfer_encoding = rsp_body_transfer_encoding
|
283
269
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
270
|
+
_event_model = MoesifApi::EventModel.new
|
271
|
+
_event_model.request = event_req
|
272
|
+
_event_model.response = event_rsp
|
273
|
+
_event_model.direction = 'Incoming'
|
288
274
|
|
289
275
|
if @identify_user
|
290
|
-
@moesif_helpers.log_debug
|
291
|
-
|
276
|
+
@moesif_helpers.log_debug 'calling identify user proc'
|
277
|
+
_event_model.user_id = @identify_user.call(env, headers, body)
|
292
278
|
end
|
293
279
|
|
294
280
|
if @identify_company
|
295
|
-
@moesif_helpers.log_debug
|
296
|
-
|
281
|
+
@moesif_helpers.log_debug 'calling identify company proc'
|
282
|
+
_event_model.company_id = @identify_company.call(env, headers, body)
|
297
283
|
end
|
298
284
|
|
299
285
|
if @get_metadata
|
300
|
-
@moesif_helpers.log_debug
|
301
|
-
|
286
|
+
@moesif_helpers.log_debug 'calling get_metadata proc'
|
287
|
+
_event_model.metadata = @get_metadata.call(env, headers, body)
|
302
288
|
end
|
303
289
|
|
304
290
|
if @identify_session
|
305
|
-
@moesif_helpers.log_debug
|
306
|
-
|
291
|
+
@moesif_helpers.log_debug 'calling identify session proc'
|
292
|
+
_event_model.session_token = @identify_session.call(env, headers, body)
|
307
293
|
end
|
308
294
|
if @mask_data
|
309
|
-
@moesif_helpers.log_debug
|
310
|
-
|
295
|
+
@moesif_helpers.log_debug 'calling mask_data proc'
|
296
|
+
_event_model = @mask_data.call(_event_model)
|
311
297
|
end
|
312
298
|
|
313
|
-
|
314
|
-
|
299
|
+
return _event_model
|
300
|
+
rescue StandardError => e
|
301
|
+
@moesif_helpers.log_debug 'Error making event model'
|
302
|
+
@moesif_helpers.log_debug e.to_s
|
303
|
+
end
|
304
|
+
|
305
|
+
process_send = lambda do |_event_model|
|
306
|
+
@moesif_helpers.log_debug 'sending data to moesif'
|
307
|
+
@moesif_helpers.log_debug _event_model.to_json
|
308
|
+
|
315
309
|
# Perform the API call through the SDK function
|
316
310
|
begin
|
317
|
-
random_percentage
|
311
|
+
random_percentage = Random.rand(0.00..100.00)
|
318
312
|
|
319
313
|
begin
|
320
|
-
sampling_percentage = @app_config.get_sampling_percentage(
|
314
|
+
sampling_percentage = @app_config.get_sampling_percentage(_event_model, _event_model.user_id,
|
315
|
+
_event_model.company_id)
|
321
316
|
@moesif_helpers.log_debug "Using sample rate #{sampling_percentage}"
|
322
|
-
rescue =>
|
317
|
+
rescue StandardError => e
|
323
318
|
@moesif_helpers.log_debug 'Error while getting sampling percentage, assuming default behavior'
|
324
|
-
@moesif_helpers.log_debug
|
319
|
+
@moesif_helpers.log_debug e.to_s
|
325
320
|
sampling_percentage = 100
|
326
321
|
end
|
327
322
|
|
328
323
|
if sampling_percentage > random_percentage
|
329
|
-
|
324
|
+
_event_model.weight = @app_config.calculate_weight(sampling_percentage)
|
330
325
|
# Add Event to the queue
|
331
326
|
if @events_queue.size >= @event_queue_size
|
332
327
|
@moesif_helpers.log_debug("Skipped Event due to events_queue size [#{@events_queue.size}] is over max #{@event_queue_size} ")
|
333
328
|
else
|
334
|
-
@events_queue <<
|
335
|
-
@moesif_helpers.log_debug(
|
336
|
-
end
|
337
|
-
|
338
|
-
if Time.now.utc > (@last_worker_run + 60)
|
339
|
-
start_worker()
|
329
|
+
@events_queue << _event_model
|
330
|
+
@moesif_helpers.log_debug('Event added to the queue ')
|
340
331
|
end
|
341
332
|
|
342
|
-
if
|
343
|
-
begin
|
344
|
-
new_config = @app_config.get_config(@api_controller)
|
345
|
-
if !new_config.nil?
|
346
|
-
@config, @config_etag, @last_config_download_time = @app_config.parse_configuration(new_config)
|
347
|
-
end
|
348
|
-
|
349
|
-
rescue => exception
|
350
|
-
@moesif_helpers.log_debug 'Error while updating the application configuration'
|
351
|
-
@moesif_helpers.log_debug exception.to_s
|
352
|
-
end
|
353
|
-
end
|
333
|
+
start_worker if Time.now.utc > (@last_worker_run + 60)
|
354
334
|
else
|
355
|
-
@moesif_helpers.log_debug(
|
335
|
+
@moesif_helpers.log_debug('Skipped Event due to sampling percentage: ' + sampling_percentage.to_s + ' and random percentage: ' + random_percentage.to_s)
|
356
336
|
end
|
357
|
-
rescue =>
|
358
|
-
@moesif_helpers.log_debug
|
359
|
-
@moesif_helpers.log_debug
|
337
|
+
rescue StandardError => e
|
338
|
+
@moesif_helpers.log_debug 'Error adding event to the queue '
|
339
|
+
@moesif_helpers.log_debug e.to_s
|
360
340
|
end
|
361
|
-
|
362
341
|
end
|
363
342
|
|
364
343
|
should_skip = false
|
365
344
|
|
366
|
-
if @skip
|
367
|
-
|
368
|
-
|
345
|
+
should_skip = true if @skip && @skip.call(env, headers, body)
|
346
|
+
|
347
|
+
should_govern = @governance_manager.has_rules
|
348
|
+
|
349
|
+
event_model = make_event_model.call if !should_skip || should_govern
|
350
|
+
|
351
|
+
if should_govern
|
352
|
+
# now we can do govern based on
|
353
|
+
# override_response = govern(env, event_model)
|
354
|
+
# return override_response if override_response
|
355
|
+
new_response = @governance_manager.govern_request(@app_config.config, env, event_model, status, headers, body)
|
356
|
+
|
357
|
+
# update the event model
|
358
|
+
if new_response
|
359
|
+
@moesif_helpers.log_debug 'new response back from govern' + new_response.to_json
|
360
|
+
|
361
|
+
# replace headers since it might be non blocking rules that adds headers
|
362
|
+
headers = new_response.fetch(:headers, headers)
|
363
|
+
|
364
|
+
# replace in event_model
|
365
|
+
event_model.response.headers = new_response.fetch(:headers, headers).dup
|
366
|
+
|
367
|
+
blocked_by = new_response.fetch(:block_rule_id, nil)
|
368
|
+
|
369
|
+
unless blocked_by.nil?
|
370
|
+
# we only replace body and status if it is blocked.
|
371
|
+
body = @moesif_helpers.format_replacement_body(new_response.fetch(:body, nil), body)
|
372
|
+
status = new_response.fetch(:status, status)
|
373
|
+
|
374
|
+
# replace the event model.
|
375
|
+
event_model.blocked_by = blocked_by
|
376
|
+
event_model.response.status = new_response.fetch(:status, status)
|
377
|
+
replaced_body = new_response.fetch(:body, event_model.response.body)
|
378
|
+
event_model.response.body = replaced_body
|
379
|
+
# replaced body is always json should not be transfer encoding needed.
|
380
|
+
event_model.response.transfer_encoding = 'json'
|
381
|
+
end
|
369
382
|
end
|
370
383
|
end
|
371
384
|
|
372
385
|
if !should_skip
|
373
386
|
begin
|
374
|
-
process_send.call
|
375
|
-
rescue =>
|
387
|
+
process_send.call(event_model)
|
388
|
+
rescue StandardError => e
|
376
389
|
@moesif_helpers.log_debug 'Error while logging event - '
|
377
|
-
@moesif_helpers.log_debug
|
378
|
-
@moesif_helpers.log_debug
|
390
|
+
@moesif_helpers.log_debug e.to_s
|
391
|
+
@moesif_helpers.log_debug e.backtrace
|
379
392
|
end
|
380
393
|
else
|
381
|
-
|
394
|
+
@moesif_helpers.log_debug 'Skipped Event using should_skip configuration option.'
|
382
395
|
end
|
383
396
|
|
384
397
|
[status, headers, body]
|
@@ -386,12 +399,10 @@ module MoesifRack
|
|
386
399
|
|
387
400
|
def get_response_body(response)
|
388
401
|
body = response.respond_to?(:body) ? response.body : response
|
389
|
-
if
|
390
|
-
|
391
|
-
|
392
|
-
body = body.inject("") { |i, a| i << a } if (body.respond_to?(:each) && body.respond_to?(:inject))
|
402
|
+
return body if body.instance_of?(Hash) || body.instance_of?(Array)
|
403
|
+
|
404
|
+
body = body.inject('') { |i, a| i << a } if body.respond_to?(:each) && body.respond_to?(:inject)
|
393
405
|
body.to_s
|
394
406
|
end
|
395
|
-
|
396
407
|
end
|
397
408
|
end
|