sqreen 1.20.4 → 1.21.0.beta1

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +0 -25
  3. data/lib/sqreen/actions/block_user.rb +1 -1
  4. data/lib/sqreen/actions/redirect_ip.rb +1 -1
  5. data/lib/sqreen/actions/redirect_user.rb +1 -1
  6. data/lib/sqreen/condition_evaluator.rb +2 -8
  7. data/lib/sqreen/configuration.rb +1 -1
  8. data/lib/sqreen/deferred_logger.rb +14 -50
  9. data/lib/sqreen/deliveries/batch.rb +8 -1
  10. data/lib/sqreen/ecosystem.rb +80 -0
  11. data/lib/sqreen/ecosystem/dispatch_table.rb +43 -0
  12. data/lib/sqreen/ecosystem/http/net_http.rb +51 -0
  13. data/lib/sqreen/ecosystem/http/rack_request.rb +38 -0
  14. data/lib/sqreen/ecosystem/loggable.rb +13 -0
  15. data/lib/sqreen/ecosystem/module_api.rb +30 -0
  16. data/lib/sqreen/ecosystem/module_api/event_listener.rb +18 -0
  17. data/lib/sqreen/ecosystem/module_api/instrumentation.rb +23 -0
  18. data/lib/sqreen/ecosystem/module_api/signal_producer.rb +26 -0
  19. data/lib/sqreen/ecosystem/module_api/tracing_push_down.rb +34 -0
  20. data/lib/sqreen/ecosystem/module_api/transaction_storage.rb +71 -0
  21. data/lib/sqreen/ecosystem/module_registry.rb +39 -0
  22. data/lib/sqreen/ecosystem/redis/redis_connection.rb +35 -0
  23. data/lib/sqreen/ecosystem/tracing/sampler.rb +160 -0
  24. data/lib/sqreen/ecosystem/tracing/sampling_configuration.rb +150 -0
  25. data/lib/sqreen/ecosystem/tracing/signals/tracing_client.rb +53 -0
  26. data/lib/sqreen/ecosystem/tracing/signals/tracing_server.rb +53 -0
  27. data/lib/sqreen/ecosystem/tracing_id_setup.rb +34 -0
  28. data/lib/sqreen/ecosystem/transaction_storage.rb +64 -0
  29. data/lib/sqreen/ecosystem_integration.rb +70 -0
  30. data/lib/sqreen/ecosystem_integration/around_callbacks.rb +89 -0
  31. data/lib/sqreen/ecosystem_integration/instrumentation_service.rb +38 -0
  32. data/lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb +56 -0
  33. data/lib/sqreen/ecosystem_integration/signal_consumption.rb +35 -0
  34. data/lib/sqreen/encoding_sanitizer.rb +27 -0
  35. data/lib/sqreen/events/request_record.rb +1 -0
  36. data/lib/sqreen/frameworks/generic.rb +15 -10
  37. data/lib/sqreen/frameworks/rails.rb +7 -0
  38. data/lib/sqreen/frameworks/request_recorder.rb +0 -2
  39. data/lib/sqreen/graft/call.rb +23 -72
  40. data/lib/sqreen/graft/callback.rb +1 -1
  41. data/lib/sqreen/graft/hook.rb +85 -187
  42. data/lib/sqreen/graft/hook_point.rb +1 -1
  43. data/lib/sqreen/legacy/instrumentation.rb +10 -22
  44. data/lib/sqreen/legacy/old_event_submission_strategy.rb +8 -3
  45. data/lib/sqreen/log.rb +2 -3
  46. data/lib/sqreen/log/loggable.rb +0 -1
  47. data/lib/sqreen/logger.rb +0 -24
  48. data/lib/sqreen/metrics_store.rb +0 -11
  49. data/lib/sqreen/null_logger.rb +0 -22
  50. data/lib/sqreen/remote_command.rb +3 -1
  51. data/lib/sqreen/rules.rb +4 -8
  52. data/lib/sqreen/rules/blacklist_ips_cb.rb +2 -2
  53. data/lib/sqreen/rules/custom_error_cb.rb +3 -3
  54. data/lib/sqreen/rules/rule_cb.rb +0 -2
  55. data/lib/sqreen/rules/waf_cb.rb +3 -3
  56. data/lib/sqreen/runner.rb +21 -33
  57. data/lib/sqreen/session.rb +2 -0
  58. data/lib/sqreen/signals/conversions.rb +6 -1
  59. data/lib/sqreen/version.rb +1 -1
  60. data/lib/sqreen/weave/legacy/instrumentation.rb +103 -194
  61. data/lib/sqreen/worker.rb +2 -6
  62. metadata +35 -10
  63. data/lib/sqreen/deprecation.rb +0 -38
  64. data/lib/sqreen/weave/budget.rb +0 -46
@@ -249,8 +249,10 @@ module Sqreen
249
249
  end
250
250
  Sqreen.log.info 'Login success.'
251
251
  @session_id = res['session_id']
252
+
252
253
  Kit::Configuration.session_key = @session_id
253
254
  Kit.reset
255
+
254
256
  Sqreen.log.debug { "received session_id #{@session_id}" }
255
257
  Sqreen.logged_in = true
256
258
  res
@@ -118,6 +118,7 @@ module Sqreen
118
118
  signals += req_rec.processed_sdk_calls
119
119
  .select { |h| h[:name] == :track }
120
120
  .map { |h| convert_track(h) }
121
+ signals += (observed[:signals] || [])
121
122
 
122
123
  trace = Kit::Signals::Specialized::HttpTrace.new(
123
124
  actor: Kit::Signals::Actor.new(
@@ -137,7 +138,7 @@ module Sqreen
137
138
  trace
138
139
  end
139
140
 
140
- # @param [Array<Sqreen::Kit::Signals::Signal|Sqreen::Kit::Signals::Trace>] batch
141
+ # @return [Array<Sqreen::Kit::Signals::Signal|Sqreen::Kit::Signals::Trace>]
141
142
  def convert_batch(batch)
142
143
  batch.map do |evt|
143
144
  case evt
@@ -147,6 +148,10 @@ module Sqreen
147
148
  convert_metric_sample(evt)
148
149
  when RequestRecord
149
150
  convert_req_record(evt)
151
+ when Sqreen::Kit::Signals::Signal
152
+ evt
153
+ when Sqreen::Kit::Signals::Trace
154
+ evt
150
155
  else
151
156
  raise NotImplementedError, "Unknown type of event in batch: #{evt}"
152
157
  end
@@ -4,5 +4,5 @@
4
4
  # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
5
 
6
6
  module Sqreen
7
- VERSION = '1.20.4'.freeze
7
+ VERSION = '1.21.0.beta1'.freeze
8
8
  end
@@ -4,13 +4,10 @@
4
4
  # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
5
 
6
6
  require 'sqreen/weave/legacy'
7
- require 'sqreen/weave/budget'
8
- require 'sqreen/graft/hook'
9
7
  require 'sqreen/graft/hook_point'
10
8
  require 'sqreen/call_countable'
11
9
  require 'sqreen/rules'
12
10
  require 'sqreen/rules/record_request_context'
13
- require 'sqreen/sqreen_signed_verifier'
14
11
 
15
12
  class Sqreen::Weave::Legacy::Instrumentation
16
13
  attr_accessor :metrics_engine
@@ -63,27 +60,6 @@ class Sqreen::Weave::Legacy::Instrumentation
63
60
  'options' => opts[:perf_metric_percent] || { 'base' => 1.3, 'factor' => 1.0 },
64
61
  )
65
62
 
66
- metrics_engine.create_metric(
67
- 'name' => 'req.sq.hook.overhead',
68
- 'period' => 60,
69
- 'kind' => 'Binning',
70
- 'options' => { 'base' => 2.0, 'factor' => 0.1 },
71
- )
72
-
73
- metrics_engine.create_metric(
74
- 'name' => 'sq.hook.overhead',
75
- 'period' => 60,
76
- 'kind' => 'Binning',
77
- 'options' => { 'base' => 2.0, 'factor' => 0.1 },
78
- )
79
-
80
- metrics_engine.create_metric(
81
- 'name' => 'sq.shrinkwrap',
82
- 'period' => 60,
83
- 'kind' => 'Binning',
84
- 'options' => { 'base' => 2.0, 'factor' => 0.1 },
85
- )
86
-
87
63
  Sqreen.thread_cpu_time? && metrics_engine.create_metric(
88
64
  'name' => 'sq_thread_cpu_pct',
89
65
  'period' => opts[:period] || 60,
@@ -108,15 +84,6 @@ class Sqreen::Weave::Legacy::Instrumentation
108
84
 
109
85
  ### set up rule signature verifier
110
86
  verifier = nil
111
- if Sqreen.features['rules_signature'] &&
112
- Sqreen.config_get(:rules_verify_signature) == true &&
113
- !defined?(::JRUBY_VERSION)
114
- verifier = Sqreen::SqreenSignedVerifier.new
115
- Sqreen::Weave.logger.debug('Rules signature enabled')
116
- else
117
- Sqreen::Weave.logger.debug('Rules signature disabled')
118
- end
119
-
120
87
  ### force clean instrumentation callback list
121
88
  @hooks = []
122
89
  ### for each rule description
@@ -127,25 +94,6 @@ class Sqreen::Weave::Legacy::Instrumentation
127
94
  next unless rule_callback
128
95
  ### attach framework to callback
129
96
  rule_callback.framework = framework
130
- ## create metric
131
- Sqreen::Weave.logger.debug { "Adding rule metric: #{rule_callback}" }
132
- [:pre, :post, :failing].each do |whence|
133
- next unless rule_callback.send(:"#{whence}?")
134
- metric_name = "sq.#{rule['name']}.#{whence}"
135
- metrics_engine.create_metric(
136
- 'name' => metric_name,
137
- 'period' => 60,
138
- 'kind' => 'Binning',
139
- 'options' => { 'base' => 2.0, 'factor' => 0.1 },
140
- )
141
- metric_name = "req.sq.#{rule['name']}.#{whence}"
142
- metrics_engine.create_metric(
143
- 'name' => metric_name,
144
- 'period' => 60,
145
- 'kind' => 'Binning',
146
- 'options' => { 'base' => 2.0, 'factor' => 0.1 },
147
- )
148
- end
149
97
  ### install callback, observing priority
150
98
  Sqreen::Weave.logger.debug { "Adding rule callback: #{rule_callback}" }
151
99
  @hooks << add_callback("weave,rule=#{rule['name']}", rule_callback, strategy)
@@ -159,43 +107,30 @@ class Sqreen::Weave::Legacy::Instrumentation
159
107
  end
160
108
 
161
109
  metrics_engine = self.metrics_engine
162
-
163
110
  request_hook = Sqreen::Graft::Hook['Sqreen::ShrinkWrap#call', strategy]
164
111
  @hooks << request_hook
165
112
  request_hook.add do
166
113
  before('wave,meta,request', rank: -100000, mandatory: true) do |_call|
167
114
  next unless Sqreen.instrumentation_ready
168
115
 
169
- # shrinkwrap_timer = Sqreen::Graft::Timer.new('weave,shrinkwrap')
170
- # shrinkwrap_timer.start
171
-
172
- request_timer = Sqreen::Graft::Timer.new("request")
173
- request_timer.start
174
- sqreen_timer = Sqreen::Graft::Timer.new("sqreen")
175
- budget = Sqreen::Weave::Budget.current
176
- request_budget_threshold = budget.threshold if budget
177
- request_budget_ratio = budget.ratio if budget
178
- request_budget_is_dynamic = !request_budget_ratio.nil?
179
- request_budget = !request_budget_threshold.nil?
180
- timed_level = (Sqreen.features['perf_level'] || 1).to_i
181
- Sqreen::Weave.logger.debug { "request budget: #{budget.to_h} timed.level: #{timed_level}" } if Sqreen::Weave.logger.debug?
182
-
116
+ uuid = SecureRandom.uuid
117
+ now = Sqreen::Graft::Timer.read
183
118
  Thread.current[:sqreen_http_request] = {
184
- request_timer: request_timer,
185
- sqreen_timer: sqreen_timer,
119
+ uuid: uuid,
120
+ start_time: now,
121
+ time_budget: Sqreen.performance_budget,
186
122
  time_budget_expended: false,
187
- time_budget_threshold: request_budget_threshold,
188
- time_budget_dynamic: request_budget_is_dynamic,
189
- time_budget_ratio: request_budget_ratio,
190
- time_budget: request_budget,
123
+ timer: Sqreen::Graft::Timer.new("request_#{uuid}"),
191
124
  timed_callbacks: [],
192
125
  timed_hooks: [],
193
- timed_level: timed_level,
126
+ timed_hooks_before: [],
127
+ timed_hooks_after: [],
128
+ timed_hooks_raised: [],
129
+ timed_hooks_ensured: [],
194
130
  skipped_callbacks: [],
195
- # timed_shrinkwrap: shrinkwrap_timer,
196
131
  }
197
132
 
198
- # shrinkwrap_timer.stop
133
+ Sqreen::Weave.logger.debug { "request.uuid: #{uuid}" }
199
134
  end
200
135
 
201
136
  ensured('weave,meta,request', rank: 100000, mandatory: true) do |_call|
@@ -203,118 +138,105 @@ class Sqreen::Weave::Legacy::Instrumentation
203
138
 
204
139
  next if request.nil?
205
140
 
206
- # shrinkwrap_timer = request[:timed_shrinkwrap]
207
- # shrinkwrap_timer.start
208
-
209
141
  Thread.current[:sqreen_http_request] = nil
210
- request_timer = request[:request_timer]
211
- now = request_timer.stop
212
-
213
- if request[:timed_level] >= 1
214
- request[:timed_callbacks].each do |timer|
215
- duration = timer.duration
216
-
217
- timer.tag =~ /weave,rule=(.*)$/ && rule = $1
218
- next unless rule
219
-
220
- whence = case timer.tag
221
- when /@before/ then 'pre'
222
- when /@after/ then 'post'
223
- when /@raised/ then 'failing'
224
- end
225
- next unless whence
226
-
227
- metric_name = "sq.#{rule}.#{whence}"
228
- metrics_engine.update(metric_name, now, nil, duration * 1000)
229
- # Sqreen.observations_queue.push([metric_name, nil, duration * 1000, utc_now])
230
- end
231
-
232
- request[:timed_hooks].each do |timer|
233
- duration = timer.duration
234
- metrics_engine.update('sq.hook.overhead', now, nil, duration * 1000)
235
- # Sqreen.observations_queue.push(['sq.hook.overhead', nil, duration * 1000, utc_now])
142
+ now = Sqreen::Graft::Timer.read
143
+ utc_now = Time.now.utc
144
+
145
+ request[:timed_callbacks].each do |timer|
146
+ duration = timer.duration
147
+ # stop = now
148
+ # start = now - duration
149
+ timer.tag =~ /weave,rule=(.*)$/ && rule = $1
150
+ timer.tag =~ /@before/ && whence = 'pre'
151
+ timer.tag =~ /@after/ && whence = 'post'
152
+ timer.tag =~ /@raised/ && whence = 'failing'
153
+
154
+ next unless rule && whence
155
+
156
+ # Sqreen::PerformanceNotifications.notify(rule, whence, start, stop)
157
+ # => BinnedMetrics
158
+ metric_name = "sq.#{rule}.#{whence}"
159
+ unless metrics_engine.metric?(metric_name)
160
+ metrics_engine.create_metric(
161
+ 'name' => metric_name,
162
+ 'period' => 60,
163
+ 'kind' => 'Binning',
164
+ 'options' => { 'base' => 2.0, 'factor' => 0.1 },
165
+ )
236
166
  end
167
+ metrics_engine.update(metric_name, now, nil, duration * 1000)
237
168
  end
238
169
 
239
- sqreen_timer = request[:sqreen_timer]
240
- total = sqreen_timer.duration
241
- Sqreen::Weave.logger.debug { "request sqreen_timer.total: #{'%.03fus' % (total * 1_000_000)}" } if Sqreen::Weave.logger.debug?
242
- total = request_timer.duration
243
- Sqreen::Weave.logger.debug { "request request_timer.total: #{'%.03fus' % (total * 1_000_000)}" } if Sqreen::Weave.logger.debug?
244
-
245
- if request[:timed_level] >= 2
246
- skipped = request[:skipped_callbacks].map(&:name)
247
- Sqreen::Weave.logger.debug { "request callback.skipped.count: #{skipped.count}" } if Sqreen::Weave.logger.debug?
248
- timings = request[:timed_callbacks].map(&:to_s)
249
- total = request[:timed_callbacks].sum(&:duration)
250
- Sqreen::Weave.logger.debug { "request callback.total: #{'%.03fus' % (total * 1_000_000)} callback.count: #{timings.count}" } if Sqreen::Weave.logger.debug?
251
- timings = request[:timed_hooks].map(&:to_s)
252
- total = request[:timed_hooks].sum(&:duration)
253
- Sqreen::Weave.logger.debug { "request hook.total: #{'%.03fus' % (total * 1_000_000)} hook.count: #{timings.count}" } if Sqreen::Weave.logger.debug?
170
+ metric_name = 'sq.hooks_pre.pre'
171
+ duration = request[:timed_hooks_before].sum(&:duration)
172
+ unless metrics_engine.metric?(metric_name)
173
+ metrics_engine.create_metric(
174
+ 'name' => metric_name,
175
+ 'period' => 60,
176
+ 'kind' => 'Binning',
177
+ 'options' => { 'base' => 2.0, 'factor' => 0.1 },
178
+ )
179
+ end
180
+ metrics_engine.update(metric_name, now, nil, duration * 1000)
181
+
182
+ metric_name = 'sq.hooks_post.post'
183
+ duration = request[:timed_hooks_after].sum(&:duration)
184
+ unless metrics_engine.metric?(metric_name)
185
+ metrics_engine.create_metric(
186
+ 'name' => metric_name,
187
+ 'period' => 60,
188
+ 'kind' => 'Binning',
189
+ 'options' => { 'base' => 2.0, 'factor' => 0.1 },
190
+ )
254
191
  end
192
+ metrics_engine.update(metric_name, now, nil, duration * 1000)
193
+
194
+ metric_name = 'sq.hooks_failing.failing'
195
+ duration = request[:timed_hooks_raised].sum(&:duration)
196
+ unless metrics_engine.metric?(metric_name)
197
+ metrics_engine.create_metric(
198
+ 'name' => metric_name,
199
+ 'period' => 60,
200
+ 'kind' => 'Binning',
201
+ 'options' => { 'base' => 2.0, 'factor' => 0.1 },
202
+ )
203
+ end
204
+ metrics_engine.update(metric_name, now, nil, duration * 1000)
205
+
206
+ skipped = request[:skipped_callbacks].map(&:name)
207
+ Sqreen::Weave.logger.debug { "request:#{request[:uuid]} callback.skipped.size: #{skipped.count} callback.skipped: [#{skipped.join(', ')}]" }
208
+ timer = request[:timer]
209
+ total = timer.duration
210
+ Sqreen::Weave.logger.debug { "request:#{request[:uuid]} timer.total: #{'%.03fus' % (total * 1_000_000)} timer.size: #{timer.size}" }
211
+ timings = request[:timed_callbacks].map(&:to_s)
212
+ total = request[:timed_callbacks].sum(&:duration)
213
+ Sqreen::Weave.logger.debug { "request:#{request[:uuid]} callback.total: #{'%.03fus' % (total * 1_000_000)} callback.timings: [#{timings.join(', ')}]" }
214
+ timings = request[:timed_hooks].map(&:to_s)
215
+ total = request[:timed_hooks].sum(&:duration)
216
+ Sqreen::Weave.logger.debug { "request:#{request[:uuid]} hook.total: #{'%.03fus' % (total * 1_000_000)} hook.timings: [#{timings.join(', ')}]" }
255
217
 
256
218
  skipped = request[:skipped_callbacks].map(&:name)
257
219
  skipped_rule_name = skipped.first && skipped.first =~ /weave,rule=(.*)$/ && $1
258
- metrics_engine.update('request_overtime', now, skipped_rule_name, 1) if skipped_rule_name
259
- # Sqreen.observations_queue.push(['request_overtime', skipped_rule_name, 1, utc_now]) if skipped_rule_name
220
+ Sqreen.observations_queue.push(['request_overtime', skipped_rule_name, 1, utc_now]) if skipped_rule_name
260
221
 
261
- sqreen_request_duration = sqreen_timer.duration
262
- metrics_engine.update('sq', now, nil, sqreen_request_duration * 1000)
263
- # Sqreen.observations_queue.push(['sq', nil, sqreen_request_duration * 1000, utc_now])
222
+ sqreen_request_duration = total
223
+ Sqreen.observations_queue.push(['sq', nil, sqreen_request_duration * 1000, utc_now])
264
224
 
265
- request_duration = request_timer.duration
266
- metrics_engine.update('req', now, nil, request_duration * 1000)
267
- # Sqreen.observations_queue.push(['req', nil, request_duration * 1000, utc_now])
225
+ request_duration = now - request[:start_time]
226
+ Sqreen.observations_queue.push(['req', nil, request_duration * 1000, utc_now])
268
227
 
269
228
  sqreen_request_ratio = (sqreen_request_duration * 100.0) / (request_duration - sqreen_request_duration)
270
- metrics_engine.update('pct', now, nil, sqreen_request_ratio)
271
- # Sqreen.observations_queue.push(['pct', nil, sqreen_request_ratio, utc_now])
272
- Sqreen::Weave.logger.debug { "request sqreen_timer.ratio: #{'%.03f' % (sqreen_request_ratio / 100.0)}" } if Sqreen::Weave.logger.debug?
273
-
274
- if request[:timed_level] >= 2
275
- tallies = Hash.new(0.0)
276
- request[:timed_callbacks].each do |timer|
277
- duration = timer.duration
278
-
279
- timer.tag =~ /weave,rule=(.*)$/ && rule = $1
280
- next unless rule
281
-
282
- whence = case timer.tag
283
- when /@before/ then 'pre'
284
- when /@after/ then 'post'
285
- when /@raised/ then 'failing'
286
- end
287
- next unless whence
288
-
289
- metric_name = "req.sq.#{rule}.#{whence}"
290
- tallies[metric_name] += duration
291
- end
292
- tallies.each do |metric_name, duration|
293
- metrics_engine.update(metric_name, now, nil, duration * 1000)
294
- # Sqreen.observations_queue.push([metric_name, nil, duration * 1000, utc_now])
295
- end
296
-
297
- duration = request[:timed_hooks].sum(&:duration)
298
- metrics_engine.update('req.sq.hook.overhead', now, nil, duration * 1000)
299
- # Sqreen.observations_queue.push(['req.sq.hook.overhead', nil, duration * 1000, utc_now])
300
- end
301
-
302
- # shrinkwrap_timer.stop
303
-
304
- # duration = shrinkwrap_timer.duration
305
- # metrics_engine.update('sq.shrinkwrap', now, nil, duration * 1000)
229
+ Sqreen.observations_queue.push(['pct', nil, sqreen_request_ratio, utc_now])
306
230
  end
307
231
  end.install
308
232
 
309
233
  ### globally declare instrumentation ready
310
234
  Sqreen.instrumentation_ready = true
311
- Sqreen::Weave.logger.info { "Instrumentation activated" }
312
235
  end
313
236
 
314
237
  # needed by Sqreen::Runner
315
238
  def remove_all_callbacks
316
239
  Sqreen.instrumentation_ready = false
317
- Sqreen::Weave.logger.info { "Instrumentation deactivated" }
318
240
 
319
241
  loop do
320
242
  hook = @hooks.pop
@@ -331,15 +253,6 @@ class Sqreen::Weave::Legacy::Instrumentation
331
253
  klass = callback.klass
332
254
  method = callback.method
333
255
 
334
- if (call_count = ENV['SQREEN_DEBUG_CALL_COUNT'])
335
- call_count = JSON.parse(call_count)
336
- if callback.respond_to?(:rule_name) && call_count.key?(callback.rule_name)
337
- count = call_count[callback.rule_name]
338
- Sqreen::Weave.logger.debug { "override rule: #{callback.rule_name} call_count: #{count.inspect}" }
339
- callback.instance_eval { @call_count_interval = call_count[callback.rule_name] }
340
- end
341
- end
342
-
343
256
  if Sqreen::Graft::HookPoint.new("#{klass}.#{method}").exist?
344
257
  hook_point = "#{klass}.#{method}"
345
258
  elsif Sqreen::Graft::HookPoint.new("#{klass}##{method}").exist?
@@ -362,6 +275,7 @@ class Sqreen::Weave::Legacy::Instrumentation
362
275
  a = call.args
363
276
  r = call.remaining
364
277
 
278
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#pre instance=#{i}" }
365
279
  begin
366
280
  ret = callback.pre(i, a, r)
367
281
  rescue StandardError => e
@@ -372,26 +286,17 @@ class Sqreen::Weave::Legacy::Instrumentation
372
286
  Sqreen::RemoteException.record(e)
373
287
  end
374
288
  end
289
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#pre instance=#{i} => return=#{ret.inspect}" }
375
290
 
376
- next if ret.nil? || !ret.is_a?(Hash)
377
-
378
- throw_val =
379
- case ret[:status]
380
- when :skip, 'skip'
381
- b.return(ret[:new_return_value]).break! if ret.key?(:new_return_value)
382
- when :modify_args, 'modify_args'
383
- b.args(ret[:args])
384
- when :raise, 'raise'
385
- if ret.key?(:exception)
386
- b.raise(ret[:exception])
387
- else
388
- b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
389
- end
390
- end
391
-
392
- next unless throw_val
393
- throw_val.break! if ret[:skip_rem_cbs]
394
- throw(b, throw_val)
291
+ case ret[:status]
292
+ when :skip, 'skip'
293
+ throw(b, b.return(ret[:new_return_value]).break!) if ret.key?(:new_return_value)
294
+ when :modify_args, 'modify_args'
295
+ throw(b, b.args(ret[:args]))
296
+ when :raise, 'raise'
297
+ throw(b, b.raise(ret[:exception])) if ret.key?(:exception)
298
+ throw(b, b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required.")))
299
+ end unless ret.nil? || !ret.is_a?(Hash)
395
300
  end
396
301
  end
397
302
 
@@ -404,6 +309,7 @@ class Sqreen::Weave::Legacy::Instrumentation
404
309
  a = call.args
405
310
  r = call.remaining
406
311
 
312
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#post instance=#{i}" }
407
313
  begin
408
314
  ret = callback.post(v, i, a, r)
409
315
  rescue StandardError => e
@@ -414,6 +320,7 @@ class Sqreen::Weave::Legacy::Instrumentation
414
320
  Sqreen::RemoteException.record(e)
415
321
  end
416
322
  end
323
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#post instance=#{i} => return=#{ret.inspect}" }
417
324
 
418
325
  case ret[:status]
419
326
  when :override, 'override'
@@ -434,6 +341,7 @@ class Sqreen::Weave::Legacy::Instrumentation
434
341
  a = call.args
435
342
  r = call.remaining
436
343
 
344
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#failing instance=#{i}" }
437
345
  begin
438
346
  ret = callback.failing(e, i, a, r)
439
347
  rescue StandardError => e
@@ -444,6 +352,7 @@ class Sqreen::Weave::Legacy::Instrumentation
444
352
  Sqreen::RemoteException.record(e)
445
353
  end
446
354
  end
355
+ Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#failing instance=#{i} => return=#{ret.inspect}" }
447
356
 
448
357
  throw(b, b.raise(e)) if ret.nil? || !ret.is_a?(Hash)
449
358