sqreen 1.21.0.beta3-java → 1.21.0-java

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -15
  3. data/lib/sqreen/condition_evaluator.rb +5 -6
  4. data/lib/sqreen/conditionable.rb +6 -24
  5. data/lib/sqreen/ecosystem.rb +29 -2
  6. data/lib/sqreen/ecosystem/databases/database_connection_data.rb +23 -0
  7. data/lib/sqreen/ecosystem/databases/mongo.rb +39 -0
  8. data/lib/sqreen/ecosystem/databases/mysql.rb +54 -0
  9. data/lib/sqreen/ecosystem/databases/postgres.rb +51 -0
  10. data/lib/sqreen/ecosystem/databases/redis.rb +36 -0
  11. data/lib/sqreen/ecosystem/exception_reporting.rb +4 -2
  12. data/lib/sqreen/ecosystem/messaging/bunny.rb +61 -0
  13. data/lib/sqreen/ecosystem/messaging/kafka.rb +70 -0
  14. data/lib/sqreen/ecosystem/messaging/kinesis.rb +66 -0
  15. data/lib/sqreen/ecosystem/messaging/sqs.rb +68 -0
  16. data/lib/sqreen/ecosystem/module_api/message_producer.rb +9 -3
  17. data/lib/sqreen/ecosystem/module_api/tracing/consumer_data.rb +13 -0
  18. data/lib/sqreen/ecosystem/module_api/tracing/messaging_data.rb +35 -0
  19. data/lib/sqreen/ecosystem/module_api/tracing/producer_data.rb +13 -0
  20. data/lib/sqreen/ecosystem/module_registry.rb +5 -1
  21. data/lib/sqreen/ecosystem/tracing/modules/client.rb +7 -3
  22. data/lib/sqreen/ecosystem/tracing/modules/consumer.rb +35 -0
  23. data/lib/sqreen/ecosystem/tracing/modules/determine_ip.rb +28 -0
  24. data/lib/sqreen/ecosystem/tracing/modules/producer.rb +35 -0
  25. data/lib/sqreen/ecosystem/tracing/signals/tracing_consumer.rb +56 -0
  26. data/lib/sqreen/ecosystem/tracing/signals/tracing_producer.rb +56 -0
  27. data/lib/sqreen/ecosystem_integration.rb +1 -7
  28. data/lib/sqreen/ecosystem_integration/around_callbacks.rb +10 -20
  29. data/lib/sqreen/ecosystem_integration/instrumentation_service.rb +4 -8
  30. data/lib/sqreen/graft/call.rb +1 -21
  31. data/lib/sqreen/graft/hook.rb +75 -83
  32. data/lib/sqreen/kit/signals/specialized/sqreen_exception.rb +2 -0
  33. data/lib/sqreen/metrics.rb +0 -1
  34. data/lib/sqreen/rules/custom_error_cb.rb +1 -1
  35. data/lib/sqreen/rules/rule_cb.rb +2 -2
  36. data/lib/sqreen/runner.rb +12 -27
  37. data/lib/sqreen/version.rb +1 -1
  38. data/lib/sqreen/weave/budget.rb +14 -3
  39. data/lib/sqreen/weave/legacy/instrumentation.rb +94 -145
  40. metadata +22 -9
  41. data/lib/sqreen/ecosystem/redis/redis_connection.rb +0 -43
  42. data/lib/sqreen/metrics/req_detailed.rb +0 -41
@@ -3,6 +3,7 @@
3
3
  # Copyright (c) 2015 Sqreen. All Rights Reserved.
4
4
  # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
5
 
6
+ require 'sqreen/kit/configuration'
6
7
  require 'sqreen/kit/signals/point'
7
8
  require 'sqreen/kit/signals/dto_helper'
8
9
 
@@ -38,6 +39,7 @@ class Sqreen::Kit::Signals::Specialized::SqreenException < Sqreen::Kit::Signals:
38
39
  self.payload_schema = PAYLOAD_SCHEMA_VERSION
39
40
  self.signal_name = 'sq.agent.exception'
40
41
  self.time = values[:time] || Time.now
42
+ self.source = values[:source] || Sqreen::Kit::Configuration.default_source
41
43
  super
42
44
  end
43
45
 
@@ -7,4 +7,3 @@ require 'sqreen/metrics/collect'
7
7
  require 'sqreen/metrics/average'
8
8
  require 'sqreen/metrics/sum'
9
9
  require 'sqreen/metrics/binning'
10
- require 'sqreen/metrics/req_detailed'
@@ -55,7 +55,7 @@ module Sqreen
55
55
  end
56
56
 
57
57
  def respond_page
58
- @page ||= File.read(File.join(File.dirname(__FILE__), '../attack_detected.html'))
58
+ @page ||= File.open(File.join(File.dirname(__FILE__), '../attack_detected.html'), 'rb', &:read)
59
59
  headers = {
60
60
  'Content-Type' => 'text/html',
61
61
  'Content-Length' => @page.size.to_s,
@@ -90,9 +90,9 @@ module Sqreen
90
90
  framework.observe(:sqreen_exceptions, payload)
91
91
  end
92
92
 
93
- # Recommend taking an action (optionally adding more data/context)
93
+ # Recommend taking an action (optionnally adding more data/context)
94
94
  #
95
- # This will format the requested action and optionally
95
+ # This will format the requested action and optionnally
96
96
  # override it if it should not be taken (should not block for example)
97
97
  def advise_action(action, additional_data = {})
98
98
  return if action.nil? && additional_data.empty?
@@ -141,12 +141,7 @@ module Sqreen
141
141
  end
142
142
 
143
143
  if @configuration.get(:weave) || needs_weave.call
144
- # XXX: don't get updated
145
- opts = {
146
- perf_req_metrics_max_reqs: Sqreen.features['perf_req_metrics_max_reqs'],
147
- perf_req_metrics_period: Sqreen.features['perf_req_metrics_period'],
148
- }
149
- @instrumenter = Sqreen::Weave::Legacy::Instrumentation.new(metrics_engine, opts)
144
+ @instrumenter = Sqreen::Weave::Legacy::Instrumentation.new(metrics_engine)
150
145
  else
151
146
  @instrumenter = Sqreen::Legacy::Instrumentation.new(metrics_engine)
152
147
  end
@@ -172,9 +167,7 @@ module Sqreen
172
167
  end
173
168
  self.features = wanted_features
174
169
 
175
- @ecosystem_integration = EcosystemIntegration.new(framework,
176
- Sqreen.queue,
177
- create_binning_metric_proc)
170
+ @ecosystem_integration = EcosystemIntegration.new(framework, Sqreen.queue)
178
171
  framework.req_start_cb = @ecosystem_integration.method(:request_start)
179
172
  framework.req_end_cb = @ecosystem_integration.method(:request_end)
180
173
 
@@ -281,7 +274,7 @@ module Sqreen
281
274
 
282
275
  # XXX: ecosystem instrumentation should likely be deferred
283
276
  # the same way the rest might be
284
- @ecosystem_integration.init unless Sqreen.features['disable_ecosystem']
277
+ @ecosystem_integration.init
285
278
  rulespack_id.to_s
286
279
  end
287
280
 
@@ -406,8 +399,15 @@ module Sqreen
406
399
  prev = Sqreen::Weave::Budget.current
407
400
  prev = prev.to_h if prev
408
401
 
409
- budget_s = budget.to_f / 1000.0 if budget
410
- Sqreen::Weave::Budget.update(threshold: budget_s)
402
+ budget_s = budget.to_f / 1000 if budget
403
+
404
+ feature = features['performance_budget']
405
+ if feature
406
+ budget_s = feature['threshold'] if feature.key?('threshold')
407
+ ratio = feature['ratio'] if feature.key?('ratio')
408
+ end
409
+
410
+ Sqreen::Weave::Budget.update(threshold: budget_s, ratio: ratio)
411
411
  else
412
412
  prev = Sqreen.performance_budget
413
413
  Sqreen.update_performance_budget(budget)
@@ -555,21 +555,6 @@ module Sqreen
555
555
 
556
556
  private
557
557
 
558
- def create_binning_metric_proc
559
- lambda do |metric_name|
560
- return if @metrics_engine.metric?(metric_name)
561
- metrics_engine.create_metric(
562
- 'name' => metric_name,
563
- 'kind' => 'Binning',
564
- 'period' => Sqreen.features['performance_metrics_period'] || 60,
565
- 'options' => {
566
- 'base' => Sqreen.features['perf_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_BASE,
567
- 'factor' => Sqreen.features['perf_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_UNIT,
568
- },
569
- )
570
- end
571
- end
572
-
573
558
  def post_endpoint_testing_msgs(chosen_endpoints)
574
559
  chosen_endpoints.messages.each do |msg|
575
560
  session.post_agent_message(@framework, msg)
@@ -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.21.0.beta3'.freeze
7
+ VERSION = '1.21.0'.freeze
8
8
  end
@@ -9,14 +9,24 @@ require 'sqreen/weave'
9
9
  class Sqreen::Weave::Budget
10
10
  include Sqreen::Log::Loggable
11
11
 
12
- def initialize(threshold)
12
+ def initialize(threshold, ratio = nil)
13
13
  @threshold = threshold
14
+ @ratio = ratio
15
+ end
16
+
17
+ def static?
18
+ threshold && !ratio
19
+ end
20
+
21
+ def dynamic?
22
+ threshold && ratio
14
23
  end
15
24
 
16
25
  attr_reader :threshold
26
+ attr_reader :ratio
17
27
 
18
28
  def to_h
19
- { threshold: threshold }
29
+ { threshold: threshold, ratio: ratio }
20
30
  end
21
31
 
22
32
  class << self
@@ -28,8 +38,9 @@ class Sqreen::Weave::Budget
28
38
  return @current = nil if opts.nil? || opts.empty?
29
39
 
30
40
  threshold = opts[:threshold]
41
+ ratio = opts[:ratio]
31
42
 
32
- @current = threshold
43
+ @current = new(threshold, ratio)
33
44
  end
34
45
  end
35
46
  end
@@ -11,34 +11,19 @@ require 'sqreen/call_countable'
11
11
  require 'sqreen/rules'
12
12
  require 'sqreen/rules/record_request_context'
13
13
  require 'sqreen/sqreen_signed_verifier'
14
- require 'rack/request'
15
- begin
16
- require 'sq_detailed_metrics'
17
- rescue LoadError => _e # rubocop:disable Lint/HandleExceptions
18
- end
19
14
 
20
15
  class Sqreen::Weave::Legacy::Instrumentation
21
16
  attr_accessor :metrics_engine
22
17
 
23
- HAS_SQ_DETAILED_METRICS = defined?(::SqDetailedMetrics)
24
- REQ_LVL_2_METRIC = 'request_level_perf'.freeze
25
-
26
18
  def initialize(metrics_engine, opts = {})
27
19
  Sqreen::Weave.logger.debug { "#{self.class.name}#initialize #{metrics_engine}" }
28
20
  @hooks = []
29
21
 
30
- unless HAS_SQ_DETAILED_METRICS
31
- Sqreen::Weave.logger.warn { "Detailed metrics are unavailable" }
32
- end
33
-
34
22
  self.metrics_engine = metrics_engine
35
23
 
36
24
  ### bail out if no metric engine
37
25
  return if metrics_engine.nil?
38
26
 
39
- # XXX: these metric definitions do not support change of opts
40
- # due to features updates!
41
-
42
27
  ### init metric to count calls to sqreen
43
28
  metrics_engine.create_metric(
44
29
  'name' => 'sqreen_call_counts',
@@ -105,15 +90,6 @@ class Sqreen::Weave::Legacy::Instrumentation
105
90
  'kind' => 'Binning',
106
91
  'options' => opts[:perf_metric_percent] || { 'base' => 1.3, 'factor' => 1.0 },
107
92
  )
108
-
109
- if HAS_SQ_DETAILED_METRICS # rubocop:disable Style/GuardClause
110
- @lvl_2_metric = metrics_engine.create_metric(
111
- 'name' => REQ_LVL_2_METRIC,
112
- 'period' => opts[:perf_req_metrics_period] || 60,
113
- 'kind' => 'ReqDetailed',
114
- )
115
- @lvl_2_max_reqs = opts[:perf_req_metrics_max_reqs] || 100
116
- end
117
93
  end
118
94
 
119
95
  # needed by Sqreen::Runner#initialize
@@ -183,13 +159,11 @@ class Sqreen::Weave::Legacy::Instrumentation
183
159
  end
184
160
 
185
161
  metrics_engine = self.metrics_engine
186
- lvl_2_metric = @lvl_2_metric
187
- lvl_2_max_reqs = @lvl_2_max_reqs
188
162
 
189
163
  request_hook = Sqreen::Graft::Hook['Sqreen::ShrinkWrap#call', strategy]
190
164
  @hooks << request_hook
191
165
  request_hook.add do
192
- before('wave,meta,request', rank: -100000, mandatory: true) do |call|
166
+ before('wave,meta,request', rank: -100000, mandatory: true) do |_call|
193
167
  next unless Sqreen.instrumentation_ready
194
168
 
195
169
  # shrinkwrap_timer = Sqreen::Graft::Timer.new('weave,shrinkwrap')
@@ -199,42 +173,25 @@ class Sqreen::Weave::Legacy::Instrumentation
199
173
  request_timer.start
200
174
  sqreen_timer = Sqreen::Graft::Timer.new("sqreen")
201
175
  budget = Sqreen::Weave::Budget.current
202
-
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?
203
180
  timed_level = (Sqreen.features['perf_level'] || 1).to_i
204
- timed_level = 1 if !HAS_SQ_DETAILED_METRICS && timed_level == 2
205
- if timed_level == 2 && lvl_2_metric.num_requests >= lvl_2_max_reqs
206
- timed_level = 1
207
- Sqreen::Weave.logger.debug { "Reducing timed level to 1 (#{lvl_2_metric.num_requests} reqs accumulated)" }
208
- end
209
-
210
- Sqreen::Weave.logger.debug { "request budget: #{budget} timed.level: #{timed_level}" } if Sqreen::Weave.logger.debug?
211
-
212
- route_found = nil
213
- if timed_level >= 2
214
- rack_env, = call.args
215
- rack_request = Rack::Request.new(rack_env) if rack_env
216
-
217
- # TODO: Rails engines
218
- # TODO: Struct
219
- # TODO: Sinatra
220
- # TODO: Rack?
221
- Rails.application.routes.router.recognize(rack_request) do |route, params|
222
- route = ActionDispatch::Routing::RouteWrapper.new(route)
223
- route_found = { name: route.name, verb: route.verb, path: route.path, reqs: route.reqs, params: params }
224
- end if defined?(Rails) && Rails.application && defined?(ActionDispatch::Routing::RouteWrapper)
225
- end
181
+ Sqreen::Weave.logger.debug { "request budget: #{budget.to_h} timed.level: #{timed_level}" } if Sqreen::Weave.logger.debug?
226
182
 
227
- # TODO: Struct
228
183
  Thread.current[:sqreen_http_request] = {
229
184
  request_timer: request_timer,
230
185
  sqreen_timer: sqreen_timer,
231
186
  time_budget_expended: false,
232
- time_budget: budget,
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,
233
191
  timed_callbacks: [],
234
192
  timed_hooks: [],
235
193
  timed_level: timed_level,
236
194
  skipped_callbacks: [],
237
- route: ("#{route_found[:verb]} #{route_found[:path]}" if route_found),
238
195
  # timed_shrinkwrap: shrinkwrap_timer,
239
196
  }
240
197
 
@@ -246,9 +203,6 @@ class Sqreen::Weave::Legacy::Instrumentation
246
203
 
247
204
  next if request.nil?
248
205
 
249
- timed_level = request[:timed_level]
250
- req_detailed = SqDetailedMetrics::Request.new if timed_level >= 2
251
-
252
206
  # shrinkwrap_timer = request[:timed_shrinkwrap]
253
207
  # shrinkwrap_timer.start
254
208
 
@@ -256,30 +210,39 @@ class Sqreen::Weave::Legacy::Instrumentation
256
210
  request_timer = request[:request_timer]
257
211
  now = request_timer.stop
258
212
 
259
- if timed_level >= 1
213
+ if request[:timed_level] >= 1
260
214
  request[:timed_callbacks].each do |timer|
261
- duration_ms = timer.duration * 1000.0
262
- # XXX: the timer tag should have this structured data;
263
- # it would be better than recomputing this for every measurement
264
- metric_name = ::Sqreen::Weave::Legacy::Instrumentation.tag_to_metric_name(timer.tag)
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
265
226
 
266
- next unless metric_name
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
267
231
 
268
- metrics_engine.update(metric_name, now, nil, duration_ms)
269
- duration_ms *= -1.0 if timer.conditions_passed
270
- req_detailed.add_measurement metric_name, duration_ms if req_detailed
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])
271
236
  end
272
237
  end
273
238
 
274
239
  sqreen_timer = request[:sqreen_timer]
275
- Sqreen::Weave.logger.debug do
276
- "request sqreen_timer.total: #{'%.03fus' % (sqreen_timer.duration * 1_000_000)}"
277
- end if Sqreen::Weave.logger.debug?
278
- Sqreen::Weave.logger.debug do
279
- "request request_timer.total: #{'%.03fus' % (request_timer.duration * 1_000_000)}"
280
- end if Sqreen::Weave.logger.debug?
281
-
282
- if timed_level >= 1 && Sqreen::Weave.logger.debug?
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
283
246
  skipped = request[:skipped_callbacks].map(&:name)
284
247
  Sqreen::Weave.logger.debug { "request callback.skipped.count: #{skipped.count}" } if Sqreen::Weave.logger.debug?
285
248
  timings = request[:timed_callbacks].map(&:to_s)
@@ -290,27 +253,50 @@ class Sqreen::Weave::Legacy::Instrumentation
290
253
  Sqreen::Weave.logger.debug { "request hook.total: #{'%.03fus' % (total * 1_000_000)} hook.count: #{timings.count}" } if Sqreen::Weave.logger.debug?
291
254
  end
292
255
 
293
- overtime_cb = ::Sqreen::Weave::Legacy::Instrumentation.tag_to_metric_name(request[:overtime_cb]) \
294
- if request[:overtime_cb]
295
- metrics_engine.update('request_overtime', now, overtime_cb, 1) if overtime_cb
256
+ skipped = request[:skipped_callbacks].map(&:name)
257
+ 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
296
260
 
297
- sqreen_request_duration = sqreen_timer.duration * 1000.0
298
- metrics_engine.update('sq', now, nil, sqreen_request_duration)
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])
299
264
 
300
- request_duration = request_timer.duration * 1000.0
301
- metrics_engine.update('req', now, nil, request_duration)
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])
302
268
 
303
269
  sqreen_request_ratio = (sqreen_request_duration * 100.0) / (request_duration - sqreen_request_duration)
304
270
  metrics_engine.update('pct', now, nil, sqreen_request_ratio)
271
+ # Sqreen.observations_queue.push(['pct', nil, sqreen_request_ratio, utc_now])
305
272
  Sqreen::Weave.logger.debug { "request sqreen_timer.ratio: #{'%.03f' % (sqreen_request_ratio / 100.0)}" } if Sqreen::Weave.logger.debug?
306
273
 
307
- if req_detailed
308
- req_detailed.route = request[:route]
309
- req_detailed.overtime_cb = overtime_cb if overtime_cb
310
- req_detailed.add_measurement 'sq', sqreen_request_duration
311
- req_detailed.add_measurement 'req', request_duration
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
312
296
 
313
- metrics_engine.update(REQ_LVL_2_METRIC, now, nil, req_detailed)
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])
314
300
  end
315
301
 
316
302
  # shrinkwrap_timer.stop
@@ -369,8 +355,7 @@ class Sqreen::Weave::Legacy::Instrumentation
369
355
  hook = Sqreen::Graft::Hook[hook_point, strategy]
370
356
  hook.add do
371
357
  if callback.pre?
372
- use_flow = block || callback.is_a?(::Sqreen::Conditionable)
373
- before(rule, rank: priority, mandatory: !callback.overtimeable, flow: use_flow, ignore: ignore) do |call, b|
358
+ before(rule, rank: priority, mandatory: !callback.overtimeable, flow: block, ignore: ignore) do |call, b|
374
359
  next unless Thread.current[:sqreen_http_request]
375
360
 
376
361
  i = call.instance
@@ -402,12 +387,8 @@ class Sqreen::Weave::Legacy::Instrumentation
402
387
  else
403
388
  b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
404
389
  end
405
- end if block
390
+ end
406
391
 
407
- if ret && ret[:passed_conditions]
408
- throw_val ||= b.noop
409
- throw_val.passed_conditions!
410
- end
411
392
  next unless throw_val
412
393
  throw_val.break! if ret[:skip_rem_cbs]
413
394
  throw(b, throw_val)
@@ -434,21 +415,13 @@ class Sqreen::Weave::Legacy::Instrumentation
434
415
  end
435
416
  end
436
417
 
437
- throw_val =
438
- case ret[:status]
439
- when :override, 'override'
440
- b.return(ret[:new_return_value]) if ret.key?(:new_return_value)
441
- when :raise, 'raise'
442
- b.raise(ret[:exception]) if ret.key?(:exception)
443
- b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
444
- end unless ret.nil? || !ret.is_a?(Hash) || !block
445
-
446
- if ret && ret[:passed_conditions]
447
- throw_val ||= b.noop
448
- throw_val.passed_conditions!
449
- end
450
- next unless throw_val
451
- throw(b, throw_val)
418
+ case ret[:status]
419
+ when :override, 'override'
420
+ throw(b, b.return(ret[:new_return_value])) if ret.key?(:new_return_value)
421
+ when :raise, 'raise'
422
+ throw(b, b.raise(ret[:exception])) if ret.key?(:exception)
423
+ throw(b, b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required.")))
424
+ end unless ret.nil? || !ret.is_a?(Hash)
452
425
  end
453
426
  end
454
427
 
@@ -474,27 +447,19 @@ class Sqreen::Weave::Legacy::Instrumentation
474
447
 
475
448
  throw(b, b.raise(e)) if ret.nil? || !ret.is_a?(Hash)
476
449
 
477
- throw_val =
478
- case ret[:status]
479
- when :override, 'override'
480
- b.return(ret[:new_return_value]) if ret.key?(:new_return_value)
481
- when :retry, 'retry'
482
- b.retry
483
- when :raise, 'raise'
484
- b.raise(ret[:exception]) if ret.key?(:exception)
485
- b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
486
- when :reraise, 'reraise'
487
- b.raise(e)
488
- else
489
- b.raise(e)
490
- end unless ret.nil? || !ret.is_a?(Hash) || !block
491
-
492
- if ret && ret[:passed_conditions]
493
- throw_val ||= b.noop
494
- throw_val.passed_conditions!
495
- end
496
- next unless throw_val
497
- throw(b, throw_val)
450
+ case ret[:status]
451
+ when :override, 'override'
452
+ throw(b, b.return(ret[:new_return_value])) if ret.key?(:new_return_value)
453
+ when :retry, 'retry'
454
+ throw(b, b.retry)
455
+ when :raise, 'raise'
456
+ throw(b, b.raise(ret[:exception])) if ret.key?(:exception)
457
+ throw(b, b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required.")))
458
+ when :reraise, 'reraise'
459
+ throw(b, b.raise(e))
460
+ else
461
+ throw(b, b.raise(e))
462
+ end unless ret.nil? || !ret.is_a?(Hash)
498
463
  end
499
464
  end
500
465
  end.install
@@ -529,20 +494,4 @@ class Sqreen::Weave::Legacy::Instrumentation
529
494
  Sqreen::Rules::RunUserActions.new(Sqreen, :auth_track, 1),
530
495
  ]
531
496
  end
532
-
533
- def self.tag_to_metric_name(tag)
534
- cached = @cache_tag_to_metric[tag]
535
- return cached unless cached.nil?
536
-
537
- tag =~ /weave,rule=(.*)$/ && rule = $1 and # rubocop:disable Style/AndOr
538
- (tag =~ /@before/ && whence = 'pre' or # rubocop:disable Style/AndOr
539
- tag =~ /@after/ && whence = 'post' or # rubocop:disable Style/AndOr
540
- tag =~ /@raised/ && whence = 'failing' or # rubocop:disable Style/AndOr
541
- tag =~ /@ensured/ && whence = 'finally')
542
-
543
- @cache_tag_to_metric[tag] =
544
- rule && whence ? "sq.#{rule}.#{whence}" : false
545
- end
546
-
547
- @cache_tag_to_metric = {}
548
497
  end