sqreen 1.20.4-java → 1.21.0.beta3-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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -24
  3. data/lib/sqreen/condition_evaluator.rb +6 -5
  4. data/lib/sqreen/conditionable.rb +24 -6
  5. data/lib/sqreen/deliveries/batch.rb +8 -1
  6. data/lib/sqreen/ecosystem/dispatch_table.rb +43 -0
  7. data/lib/sqreen/ecosystem/exception_reporting.rb +26 -0
  8. data/lib/sqreen/ecosystem/http/net_http.rb +50 -0
  9. data/lib/sqreen/ecosystem/http/rack_request.rb +39 -0
  10. data/lib/sqreen/ecosystem/loggable.rb +13 -0
  11. data/lib/sqreen/ecosystem/module_api/event_listener.rb +18 -0
  12. data/lib/sqreen/ecosystem/module_api/instrumentation.rb +23 -0
  13. data/lib/sqreen/ecosystem/module_api/message_producer.rb +51 -0
  14. data/lib/sqreen/ecosystem/module_api/signal_producer.rb +24 -0
  15. data/lib/sqreen/ecosystem/module_api/tracing/client_data.rb +31 -0
  16. data/lib/sqreen/ecosystem/module_api/tracing/server_data.rb +27 -0
  17. data/lib/sqreen/ecosystem/module_api/tracing.rb +45 -0
  18. data/lib/sqreen/ecosystem/module_api/tracing_id_generation.rb +16 -0
  19. data/lib/sqreen/ecosystem/module_api/transaction_storage.rb +71 -0
  20. data/lib/sqreen/ecosystem/module_api.rb +30 -0
  21. data/lib/sqreen/ecosystem/module_registry.rb +44 -0
  22. data/lib/sqreen/ecosystem/redis/redis_connection.rb +43 -0
  23. data/lib/sqreen/ecosystem/tracing/modules/client.rb +31 -0
  24. data/lib/sqreen/ecosystem/tracing/modules/server.rb +30 -0
  25. data/lib/sqreen/ecosystem/tracing/sampler.rb +160 -0
  26. data/lib/sqreen/ecosystem/tracing/sampling_configuration.rb +150 -0
  27. data/lib/sqreen/ecosystem/tracing/signals/tracing_client.rb +53 -0
  28. data/lib/sqreen/ecosystem/tracing/signals/tracing_server.rb +53 -0
  29. data/lib/sqreen/ecosystem/tracing_broker.rb +101 -0
  30. data/lib/sqreen/ecosystem/tracing_id_setup.rb +34 -0
  31. data/lib/sqreen/ecosystem/transaction_storage.rb +64 -0
  32. data/lib/sqreen/ecosystem/util/call_writers_from_init.rb +13 -0
  33. data/lib/sqreen/ecosystem.rb +96 -0
  34. data/lib/sqreen/ecosystem_integration/around_callbacks.rb +99 -0
  35. data/lib/sqreen/ecosystem_integration/instrumentation_service.rb +42 -0
  36. data/lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb +58 -0
  37. data/lib/sqreen/ecosystem_integration/signal_consumption.rb +35 -0
  38. data/lib/sqreen/ecosystem_integration.rb +87 -0
  39. data/lib/sqreen/frameworks/generic.rb +15 -1
  40. data/lib/sqreen/graft/call.rb +30 -1
  41. data/lib/sqreen/graft/hook.rb +88 -78
  42. data/lib/sqreen/graft/hook_point.rb +17 -10
  43. data/lib/sqreen/legacy/old_event_submission_strategy.rb +7 -1
  44. data/lib/sqreen/metrics/req_detailed.rb +41 -0
  45. data/lib/sqreen/metrics.rb +1 -0
  46. data/lib/sqreen/remote_command.rb +3 -0
  47. data/lib/sqreen/rules/rule_cb.rb +2 -2
  48. data/lib/sqreen/runner.rb +44 -15
  49. data/lib/sqreen/session.rb +2 -0
  50. data/lib/sqreen/signals/conversions.rb +6 -1
  51. data/lib/sqreen/version.rb +1 -1
  52. data/lib/sqreen/weave/budget.rb +3 -14
  53. data/lib/sqreen/weave/legacy/instrumentation.rb +145 -94
  54. metadata +41 -5
@@ -9,24 +9,14 @@ require 'sqreen/weave'
9
9
  class Sqreen::Weave::Budget
10
10
  include Sqreen::Log::Loggable
11
11
 
12
- def initialize(threshold, ratio = nil)
12
+ def initialize(threshold)
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
23
14
  end
24
15
 
25
16
  attr_reader :threshold
26
- attr_reader :ratio
27
17
 
28
18
  def to_h
29
- { threshold: threshold, ratio: ratio }
19
+ { threshold: threshold }
30
20
  end
31
21
 
32
22
  class << self
@@ -38,9 +28,8 @@ class Sqreen::Weave::Budget
38
28
  return @current = nil if opts.nil? || opts.empty?
39
29
 
40
30
  threshold = opts[:threshold]
41
- ratio = opts[:ratio]
42
31
 
43
- @current = new(threshold, ratio)
32
+ @current = threshold
44
33
  end
45
34
  end
46
35
  end
@@ -11,19 +11,34 @@ 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
14
19
 
15
20
  class Sqreen::Weave::Legacy::Instrumentation
16
21
  attr_accessor :metrics_engine
17
22
 
23
+ HAS_SQ_DETAILED_METRICS = defined?(::SqDetailedMetrics)
24
+ REQ_LVL_2_METRIC = 'request_level_perf'.freeze
25
+
18
26
  def initialize(metrics_engine, opts = {})
19
27
  Sqreen::Weave.logger.debug { "#{self.class.name}#initialize #{metrics_engine}" }
20
28
  @hooks = []
21
29
 
30
+ unless HAS_SQ_DETAILED_METRICS
31
+ Sqreen::Weave.logger.warn { "Detailed metrics are unavailable" }
32
+ end
33
+
22
34
  self.metrics_engine = metrics_engine
23
35
 
24
36
  ### bail out if no metric engine
25
37
  return if metrics_engine.nil?
26
38
 
39
+ # XXX: these metric definitions do not support change of opts
40
+ # due to features updates!
41
+
27
42
  ### init metric to count calls to sqreen
28
43
  metrics_engine.create_metric(
29
44
  'name' => 'sqreen_call_counts',
@@ -90,6 +105,15 @@ class Sqreen::Weave::Legacy::Instrumentation
90
105
  'kind' => 'Binning',
91
106
  'options' => opts[:perf_metric_percent] || { 'base' => 1.3, 'factor' => 1.0 },
92
107
  )
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
93
117
  end
94
118
 
95
119
  # needed by Sqreen::Runner#initialize
@@ -159,11 +183,13 @@ class Sqreen::Weave::Legacy::Instrumentation
159
183
  end
160
184
 
161
185
  metrics_engine = self.metrics_engine
186
+ lvl_2_metric = @lvl_2_metric
187
+ lvl_2_max_reqs = @lvl_2_max_reqs
162
188
 
163
189
  request_hook = Sqreen::Graft::Hook['Sqreen::ShrinkWrap#call', strategy]
164
190
  @hooks << request_hook
165
191
  request_hook.add do
166
- before('wave,meta,request', rank: -100000, mandatory: true) do |_call|
192
+ before('wave,meta,request', rank: -100000, mandatory: true) do |call|
167
193
  next unless Sqreen.instrumentation_ready
168
194
 
169
195
  # shrinkwrap_timer = Sqreen::Graft::Timer.new('weave,shrinkwrap')
@@ -173,25 +199,42 @@ class Sqreen::Weave::Legacy::Instrumentation
173
199
  request_timer.start
174
200
  sqreen_timer = Sqreen::Graft::Timer.new("sqreen")
175
201
  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?
202
+
180
203
  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?
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
182
226
 
227
+ # TODO: Struct
183
228
  Thread.current[:sqreen_http_request] = {
184
229
  request_timer: request_timer,
185
230
  sqreen_timer: sqreen_timer,
186
231
  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,
232
+ time_budget: budget,
191
233
  timed_callbacks: [],
192
234
  timed_hooks: [],
193
235
  timed_level: timed_level,
194
236
  skipped_callbacks: [],
237
+ route: ("#{route_found[:verb]} #{route_found[:path]}" if route_found),
195
238
  # timed_shrinkwrap: shrinkwrap_timer,
196
239
  }
197
240
 
@@ -203,6 +246,9 @@ class Sqreen::Weave::Legacy::Instrumentation
203
246
 
204
247
  next if request.nil?
205
248
 
249
+ timed_level = request[:timed_level]
250
+ req_detailed = SqDetailedMetrics::Request.new if timed_level >= 2
251
+
206
252
  # shrinkwrap_timer = request[:timed_shrinkwrap]
207
253
  # shrinkwrap_timer.start
208
254
 
@@ -210,39 +256,30 @@ class Sqreen::Weave::Legacy::Instrumentation
210
256
  request_timer = request[:request_timer]
211
257
  now = request_timer.stop
212
258
 
213
- if request[:timed_level] >= 1
259
+ if timed_level >= 1
214
260
  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
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)
226
265
 
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
266
+ next unless metric_name
231
267
 
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])
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
236
271
  end
237
272
  end
238
273
 
239
274
  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
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?
246
283
  skipped = request[:skipped_callbacks].map(&:name)
247
284
  Sqreen::Weave.logger.debug { "request callback.skipped.count: #{skipped.count}" } if Sqreen::Weave.logger.debug?
248
285
  timings = request[:timed_callbacks].map(&:to_s)
@@ -253,50 +290,27 @@ class Sqreen::Weave::Legacy::Instrumentation
253
290
  Sqreen::Weave.logger.debug { "request hook.total: #{'%.03fus' % (total * 1_000_000)} hook.count: #{timings.count}" } if Sqreen::Weave.logger.debug?
254
291
  end
255
292
 
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
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
260
296
 
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])
297
+ sqreen_request_duration = sqreen_timer.duration * 1000.0
298
+ metrics_engine.update('sq', now, nil, sqreen_request_duration)
264
299
 
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])
300
+ request_duration = request_timer.duration * 1000.0
301
+ metrics_engine.update('req', now, nil, request_duration)
268
302
 
269
303
  sqreen_request_ratio = (sqreen_request_duration * 100.0) / (request_duration - sqreen_request_duration)
270
304
  metrics_engine.update('pct', now, nil, sqreen_request_ratio)
271
- # Sqreen.observations_queue.push(['pct', nil, sqreen_request_ratio, utc_now])
272
305
  Sqreen::Weave.logger.debug { "request sqreen_timer.ratio: #{'%.03f' % (sqreen_request_ratio / 100.0)}" } if Sqreen::Weave.logger.debug?
273
306
 
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
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
296
312
 
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])
313
+ metrics_engine.update(REQ_LVL_2_METRIC, now, nil, req_detailed)
300
314
  end
301
315
 
302
316
  # shrinkwrap_timer.stop
@@ -355,7 +369,8 @@ class Sqreen::Weave::Legacy::Instrumentation
355
369
  hook = Sqreen::Graft::Hook[hook_point, strategy]
356
370
  hook.add do
357
371
  if callback.pre?
358
- before(rule, rank: priority, mandatory: !callback.overtimeable, flow: block, ignore: ignore) do |call, b|
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|
359
374
  next unless Thread.current[:sqreen_http_request]
360
375
 
361
376
  i = call.instance
@@ -387,8 +402,12 @@ class Sqreen::Weave::Legacy::Instrumentation
387
402
  else
388
403
  b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required."))
389
404
  end
390
- end
405
+ end if block
391
406
 
407
+ if ret && ret[:passed_conditions]
408
+ throw_val ||= b.noop
409
+ throw_val.passed_conditions!
410
+ end
392
411
  next unless throw_val
393
412
  throw_val.break! if ret[:skip_rem_cbs]
394
413
  throw(b, throw_val)
@@ -415,13 +434,21 @@ class Sqreen::Weave::Legacy::Instrumentation
415
434
  end
416
435
  end
417
436
 
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)
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)
425
452
  end
426
453
  end
427
454
 
@@ -447,19 +474,27 @@ class Sqreen::Weave::Legacy::Instrumentation
447
474
 
448
475
  throw(b, b.raise(e)) if ret.nil? || !ret.is_a?(Hash)
449
476
 
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)
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)
463
498
  end
464
499
  end
465
500
  end.install
@@ -494,4 +529,20 @@ class Sqreen::Weave::Legacy::Instrumentation
494
529
  Sqreen::Rules::RunUserActions.new(Sqreen, :auth_track, 1),
495
530
  ]
496
531
  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 = {}
497
548
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqreen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.4
4
+ version: 1.21.0.beta3
5
5
  platform: java
6
6
  authors:
7
7
  - Sqreen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-16 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +123,39 @@ files:
123
123
  - lib/sqreen/dependency/sentry.rb
124
124
  - lib/sqreen/dependency/sinatra.rb
125
125
  - lib/sqreen/deprecation.rb
126
+ - lib/sqreen/ecosystem.rb
127
+ - lib/sqreen/ecosystem/dispatch_table.rb
128
+ - lib/sqreen/ecosystem/exception_reporting.rb
129
+ - lib/sqreen/ecosystem/http/net_http.rb
130
+ - lib/sqreen/ecosystem/http/rack_request.rb
131
+ - lib/sqreen/ecosystem/loggable.rb
132
+ - lib/sqreen/ecosystem/module_api.rb
133
+ - lib/sqreen/ecosystem/module_api/event_listener.rb
134
+ - lib/sqreen/ecosystem/module_api/instrumentation.rb
135
+ - lib/sqreen/ecosystem/module_api/message_producer.rb
136
+ - lib/sqreen/ecosystem/module_api/signal_producer.rb
137
+ - lib/sqreen/ecosystem/module_api/tracing.rb
138
+ - lib/sqreen/ecosystem/module_api/tracing/client_data.rb
139
+ - lib/sqreen/ecosystem/module_api/tracing/server_data.rb
140
+ - lib/sqreen/ecosystem/module_api/tracing_id_generation.rb
141
+ - lib/sqreen/ecosystem/module_api/transaction_storage.rb
142
+ - lib/sqreen/ecosystem/module_registry.rb
143
+ - lib/sqreen/ecosystem/redis/redis_connection.rb
144
+ - lib/sqreen/ecosystem/tracing/modules/client.rb
145
+ - lib/sqreen/ecosystem/tracing/modules/server.rb
146
+ - lib/sqreen/ecosystem/tracing/sampler.rb
147
+ - lib/sqreen/ecosystem/tracing/sampling_configuration.rb
148
+ - lib/sqreen/ecosystem/tracing/signals/tracing_client.rb
149
+ - lib/sqreen/ecosystem/tracing/signals/tracing_server.rb
150
+ - lib/sqreen/ecosystem/tracing_broker.rb
151
+ - lib/sqreen/ecosystem/tracing_id_setup.rb
152
+ - lib/sqreen/ecosystem/transaction_storage.rb
153
+ - lib/sqreen/ecosystem/util/call_writers_from_init.rb
154
+ - lib/sqreen/ecosystem_integration.rb
155
+ - lib/sqreen/ecosystem_integration/around_callbacks.rb
156
+ - lib/sqreen/ecosystem_integration/instrumentation_service.rb
157
+ - lib/sqreen/ecosystem_integration/request_lifecycle_tracking.rb
158
+ - lib/sqreen/ecosystem_integration/signal_consumption.rb
126
159
  - lib/sqreen/endpoint_testing.rb
127
160
  - lib/sqreen/error_handling_middleware.rb
128
161
  - lib/sqreen/event.rb
@@ -175,6 +208,7 @@ files:
175
208
  - lib/sqreen/metrics/base.rb
176
209
  - lib/sqreen/metrics/binning.rb
177
210
  - lib/sqreen/metrics/collect.rb
211
+ - lib/sqreen/metrics/req_detailed.rb
178
212
  - lib/sqreen/metrics/sum.rb
179
213
  - lib/sqreen/metrics_store.rb
180
214
  - lib/sqreen/metrics_store/already_registered_metric.rb
@@ -278,7 +312,9 @@ metadata:
278
312
  changelog_uri: https://docs.sqreen.com/ruby/release-notes/
279
313
  source_code_uri: https://github.com/sqreen/ruby-agent
280
314
  bug_tracker_uri: https://github.com/sqreen/ruby-agent/issues
281
- post_install_message:
315
+ post_install_message: |2
316
+ This is a Sqreen beta release and may not work in all situations.
317
+ Make sure to review CHANGELOG.md for important details.
282
318
  rdoc_options: []
283
319
  require_paths:
284
320
  - lib
@@ -289,9 +325,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
289
325
  version: 1.9.3
290
326
  required_rubygems_version: !ruby/object:Gem::Requirement
291
327
  requirements:
292
- - - ">="
328
+ - - ">"
293
329
  - !ruby/object:Gem::Version
294
- version: '0'
330
+ version: 1.3.1
295
331
  requirements: []
296
332
  rubyforge_project:
297
333
  rubygems_version: 2.6.14.1