scout_apm 5.3.8 → 5.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8eb7dc8091eba4caa3dfb078b44636de67c94abc26646c05c14339e77ba0b58a
4
- data.tar.gz: 7e7a596d825cf2c648470f6e867ea2c5cc3eb9112b813b4b4ca4dcf873a2b98c
3
+ metadata.gz: b3dfd72cdc46892ac46a974e4e3947f81ac2ee6580bee96c0cc6ad845ce50ee7
4
+ data.tar.gz: 560fb31452b8c5b526bf77723d121d561096c759640c0266ba894ffe71901d99
5
5
  SHA512:
6
- metadata.gz: 9964722b976e23fc9a629cdb010079f4781e10764226bb8eeb9d6da4439612d20fe21c9fa13f8e1a7fbe8db268ff15005599d102893ee5ed44388ef686874b44
7
- data.tar.gz: 1b9a9a0847c9f688fe34068cd68e0cd9d4bcac0e70eb3a59c507a2671d03aa2ac30bb7a8a1eea9f1df6d9ec5e4a4a713046707fe60702ff06b353df634e5cce2
6
+ metadata.gz: 3958265f12804e22dbb4c75d3b03a6d4ad9f87ff989e5382f8d0b890d55c2c2505828cd4022fa7a965092bb7c0948a12baea760b0d15fd05f5ceef6d1a23f962
7
+ data.tar.gz: cb45c1255f16f299e7a8cc67c93efd21fd7912682c4d4ed2030498be069022f2cf8811a987bbec0c22ff28150d57ff95222ed0771e0c2758bbba057b1805d4a8
@@ -0,0 +1,30 @@
1
+ name: Release Gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ # Directly from https://github.com/rubygems/release-gem/tree/v1
9
+ # Predicated on Tag Ruleset preventing arbitrary tag creation and
10
+ # requiring checks to pass for commit before tag creation
11
+ jobs:
12
+ push:
13
+ name: Push gem to RubyGems.org
14
+ runs-on: ubuntu-latest
15
+
16
+ permissions:
17
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
18
+ contents: write # IMPORTANT: this permission is required for `rake release` to push the release tag
19
+
20
+ steps:
21
+ # Set up
22
+ - uses: actions/checkout@v4
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ bundler-cache: true
27
+ ruby-version: ruby
28
+
29
+ # Release
30
+ - uses: rubygems/release-gem@v1
@@ -7,7 +7,7 @@ jobs:
7
7
  runs-on: ubuntu-latest
8
8
 
9
9
  steps:
10
- - uses: actions/checkout@v3
10
+ - uses: actions/checkout@v4
11
11
  - uses: ruby/setup-ruby@v1
12
12
  with:
13
13
  bundler-cache: true
@@ -19,11 +19,6 @@ jobs:
19
19
  fail-fast: false
20
20
  matrix:
21
21
  include:
22
- - ruby: 2.1
23
- gemfile: gems/rails3.gemfile
24
- - ruby: 2.2
25
- - ruby: 2.3
26
- - ruby: 2.4
27
22
  - ruby: 2.5
28
23
  - ruby: 2.6
29
24
  - ruby: 2.6
@@ -31,9 +26,6 @@ jobs:
31
26
  test_features: "typhoeus"
32
27
  - ruby: 2.6
33
28
  gemfile: gems/octoshark.gemfile
34
- - ruby: 2.6
35
- gemfile: gems/rails3.gemfile
36
- bundler: 1.17.3
37
29
  - ruby: 2.7
38
30
  - ruby: 2.7
39
31
  prepend: true
@@ -52,16 +44,18 @@ jobs:
52
44
  test_features: "sidekiq_install"
53
45
  - ruby: 3.1
54
46
  - ruby: 3.2
47
+ gemfile: gems/sqlite3-v2.gemfile
48
+ - ruby: 3.3
49
+ gemfile: gems/sqlite3-v2.gemfile
55
50
  env:
56
51
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
57
52
  SCOUT_TEST_FEATURES: ${{ matrix.test_features }}
58
53
  SCOUT_USE_PREPEND: ${{ matrix.prepend }}
59
54
 
60
- # https://github.com/ruby/setup-ruby/issues/496
61
- runs-on: ${{ matrix.ruby == '2.2' && 'ubuntu-20.04' || 'ubuntu-latest' }}
55
+ runs-on: ubuntu-latest
62
56
 
63
57
  steps:
64
- - uses: actions/checkout@v3
58
+ - uses: actions/checkout@v4
65
59
  - uses: ruby/setup-ruby@v1
66
60
  with:
67
61
  bundler-cache: true
data/CHANGELOG.markdown CHANGED
@@ -1,5 +1,14 @@
1
1
  # Unreleased
2
2
 
3
+ # 5.5.0
4
+ - Fix undeclared logger in grape instruments (#510)
5
+ - Drop guaranteed support for Rubies <= 2.4
6
+ - Instrument Resque without relying on forking per job (#514)
7
+
8
+ # 5.4.0
9
+ * Add support for GoodJob (#506)
10
+ * Add support for Solid Queue (#508)
11
+
3
12
  # 5.3.8
4
13
  * Avoid inaccurate websocket queue time capturing (#494)
5
14
 
@@ -664,7 +673,7 @@ reusing that version number to avoid confusion.
664
673
 
665
674
  # 1.2.12
666
675
 
667
- * Add uri_reporting option to report bare path (as opposed to fullpath). Default is 'fullpath'; set to 'path' to avoid exposing URL parameters.
676
+ * Add uri_reporting option to report bare path (as opposed to fullpath). Default is 'fullpath'; set to 'path' to avoid exposing URL parameters.
668
677
 
669
678
  # 1.2.11
670
679
 
@@ -0,0 +1,3 @@
1
+ eval_gemfile("../Gemfile")
2
+
3
+ gem "sqlite3", ">= 2.1"
@@ -208,7 +208,7 @@ module ScoutApm
208
208
 
209
209
  @error_service_background_worker = ScoutApm::BackgroundWorker.new(context, ERROR_SEND_FREQUENCY)
210
210
  @error_service_background_worker_thread = Thread.new do
211
- @error_service_background_worker.start {
211
+ @error_service_background_worker.start {
212
212
  periodic_work.run
213
213
  }
214
214
  end
@@ -0,0 +1,49 @@
1
+ module ScoutApm
2
+ module BackgroundJobIntegrations
3
+ class GoodJob
4
+ UNKNOWN_QUEUE_PLACEHOLDER = 'default'.freeze
5
+ attr_reader :logger
6
+
7
+ def name
8
+ :good_job
9
+ end
10
+
11
+ def present?
12
+ defined?(::GoodJob::VERSION)
13
+ end
14
+
15
+ def forking?
16
+ false
17
+ end
18
+
19
+ def install
20
+ ActiveSupport.on_load(:active_job) do
21
+ include ScoutApm::Tracer
22
+
23
+ around_perform do |job, block|
24
+ # I have a sneaking suspicion there is a better way to handle Agent starting
25
+ # Maybe hook into GoodJob lifecycle events?
26
+ req = ScoutApm::RequestManager.lookup
27
+ latency = Time.now - (job.scheduled_at || job.enqueued_at) rescue 0
28
+ req.annotate_request(queue_latency: latency)
29
+
30
+ begin
31
+ req.start_layer ScoutApm::Layer.new("Queue", job.queue_name.presence || UNKNOWN_QUEUE_PLACEHOLDER)
32
+ started_queue = true # Following Convention
33
+ req.start_layer ScoutApm::Layer.new("Job", job.class.name)
34
+ started_job = true # Following Convention
35
+
36
+ block.call
37
+ rescue
38
+ req.error!
39
+ raise
40
+ ensure
41
+ req.stop_layer if started_job
42
+ req.stop_layer if started_queue
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -7,8 +7,7 @@ module ScoutApm
7
7
 
8
8
  def present?
9
9
  defined?(::Resque) &&
10
- ::Resque.respond_to?(:before_first_fork) &&
11
- ::Resque.respond_to?(:after_fork)
10
+ ::Resque.respond_to?(:before_first_fork)
12
11
  end
13
12
 
14
13
  # Lies. This forks really aggressively, but we have to do handling
@@ -19,13 +18,14 @@ module ScoutApm
19
18
  end
20
19
 
21
20
  def install
22
- install_before_fork
23
- install_after_fork
21
+ install_before_first_fork
22
+ install_instruments
24
23
  end
25
24
 
26
- def install_before_fork
25
+ def install_before_first_fork
27
26
  ::Resque.before_first_fork do
28
27
  begin
28
+ # Don't check fork_per_job here in case some workers fork_per_job and some don't.
29
29
  if ScoutApm::Agent.instance.context.config.value('start_resque_server_instrument')
30
30
  ScoutApm::Agent.instance.start
31
31
  ScoutApm::Agent.instance.context.start_remote_server!(bind, port)
@@ -33,31 +33,14 @@ module ScoutApm
33
33
  logger.info("Not starting remote server due to 'start_resque_server_instrument' setting")
34
34
  end
35
35
  rescue Errno::EADDRINUSE
36
- ScoutApm::Agent.instance.context.logger.warn "Error while Installing Resque Instruments, Port #{port} already in use. Set via the `remote_agent_port` configuration option"
36
+ logger.warn "Error while Installing Resque Instruments, Port #{port} already in use. Set via the `remote_agent_port` configuration option"
37
37
  rescue => e
38
- ScoutApm::Agent.instance.context.logger.warn "Error while Installing Resque before_first_fork: #{e.inspect}"
38
+ logger.warn "Error while Installing Resque before_first_fork: #{e.inspect}"
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
- def install_after_fork
44
- ::Resque.after_fork do
45
- begin
46
- ScoutApm::Agent.instance.context.become_remote_client!(bind, port)
47
- inject_job_instrument
48
- rescue => e
49
- ScoutApm::Agent.instance.context.logger.warn "Error while Installing Resque after_fork: #{e.inspect}"
50
- end
51
- end
52
- end
53
-
54
- # Insert ourselves into the point when resque turns a string "TestJob"
55
- # into the class constant TestJob, and insert our instrumentation plugin
56
- # into that constantized class
57
- #
58
- # This automates away any need for the user to insert our instrumentation into
59
- # each of their jobs
60
- def inject_job_instrument
43
+ def install_instruments
61
44
  ::Resque::Job.class_eval do
62
45
  def payload_class_with_scout_instruments
63
46
  klass = payload_class_without_scout_instruments
@@ -80,9 +63,12 @@ module ScoutApm
80
63
  end
81
64
 
82
65
  def config
83
- @config || ScoutApm::Agent.instance.context.config
66
+ @config ||= ScoutApm::Agent.instance.context.config
67
+ end
68
+
69
+ def logger
70
+ @logger ||= ScoutApm::Agent.instance.context.logger
84
71
  end
85
72
  end
86
73
  end
87
74
  end
88
-
@@ -0,0 +1,47 @@
1
+ module ScoutApm
2
+ module BackgroundJobIntegrations
3
+ class SolidQueue
4
+ UNKNOWN_QUEUE_PLACEHOLDER = 'default'.freeze
5
+ attr_reader :logger
6
+
7
+ def name
8
+ :solid_queue
9
+ end
10
+
11
+ def present?
12
+ defined?(::SolidQueue::VERSION)
13
+ end
14
+
15
+ def forking?
16
+ false
17
+ end
18
+
19
+ def install
20
+ ActiveSupport.on_load(:active_job) do
21
+ include ScoutApm::Tracer
22
+
23
+ around_perform do |job, block|
24
+ req = ScoutApm::RequestManager.lookup
25
+ latency = Time.now - (job.scheduled_at || job.enqueued_at) rescue 0
26
+ req.annotate_request(queue_latency: latency)
27
+
28
+ begin
29
+ req.start_layer ScoutApm::Layer.new("Queue", job.queue_name.presence || UNKNOWN_QUEUE_PLACEHOLDER)
30
+ started_queue = true # Following Convention
31
+ req.start_layer ScoutApm::Layer.new("Job", job.class.name)
32
+ started_job = true # Following Convention
33
+
34
+ block.call
35
+ rescue
36
+ req.error!
37
+ raise
38
+ ensure
39
+ req.stop_layer if started_job
40
+ req.stop_layer if started_queue
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -31,6 +31,8 @@ module ScoutApm
31
31
  ScoutApm::BackgroundJobIntegrations::DelayedJob.new,
32
32
  ScoutApm::BackgroundJobIntegrations::Que.new,
33
33
  ScoutApm::BackgroundJobIntegrations::Faktory.new,
34
+ ScoutApm::BackgroundJobIntegrations::GoodJob.new,
35
+ ScoutApm::BackgroundJobIntegrations::SolidQueue.new,
34
36
  ]
35
37
 
36
38
  FRAMEWORK_INTEGRATIONS = [
@@ -53,7 +53,7 @@ module ScoutApm
53
53
  self.options[:path].first,
54
54
  ].compact.map{ |n| n.to_s }.join("/")
55
55
  rescue => e
56
- logger.info("Error getting Grape Endpoint Name. Error: #{e.message}. Options: #{self.options.inspect}")
56
+ ScoutApm::Agent.instance.context.logger.info("Error getting Grape Endpoint Name. Error: #{e.message}. Options: #{self.options.inspect}")
57
57
  name = "Grape/Unknown"
58
58
  end
59
59
 
@@ -1,6 +1,15 @@
1
1
  module ScoutApm
2
2
  module Instruments
3
3
  module Resque
4
+ def before_perform_become_client(*args)
5
+ # Don't become remote client if explicitly disabled or if forking is disabled to force synchronous recording.
6
+ if config.value('start_resque_server_instrument') && forking?
7
+ ScoutApm::Agent.instance.context.become_remote_client!(bind, port)
8
+ else
9
+ logger.debug("Not becoming remote client due to 'start_resque_server_instrument' setting or 'fork_per_job' setting")
10
+ end
11
+ end
12
+
4
13
  def around_perform_with_scout_instruments(*args)
5
14
  job_name = self.to_s
6
15
  queue = find_queue
@@ -17,7 +26,6 @@ module ScoutApm
17
26
  started_queue = true
18
27
  req.start_layer(ScoutApm::Layer.new('Job', job_name))
19
28
  started_job = true
20
-
21
29
  yield
22
30
  rescue => e
23
31
  req.error!
@@ -33,7 +41,28 @@ module ScoutApm
33
41
  return queue if self.respond_to?(:queue)
34
42
  return "unknown"
35
43
  end
44
+
45
+ private
46
+
47
+ def bind
48
+ config.value("remote_agent_host")
49
+ end
50
+
51
+ def port
52
+ config.value("remote_agent_port")
53
+ end
54
+
55
+ def config
56
+ @config ||= ScoutApm::Agent.instance.context.config
57
+ end
58
+
59
+ def logger
60
+ @logger ||= ScoutApm::Agent.instance.context.logger
61
+ end
62
+
63
+ def forking?
64
+ @forking ||= ENV["FORK_PER_JOB"] != "false"
65
+ end
36
66
  end
37
67
  end
38
68
  end
39
-
@@ -12,7 +12,8 @@ module ScoutApm
12
12
  end
13
13
 
14
14
  def run
15
- Bundler.rubygems.all_specs.map {|spec| [spec.name, spec.version.to_s] }
15
+ specs = Bundler.rubygems.public_send(Bundler.rubygems.respond_to?(:installed_specs) ? :installed_specs : :all_specs)
16
+ specs.map { |spec| [spec.name, spec.version.to_s] }
16
17
  rescue => e
17
18
  logger.warn("Couldn't fetch Gem information: #{e.message}")
18
19
  []
@@ -1,3 +1,3 @@
1
1
  module ScoutApm
2
- VERSION = "5.3.8"
2
+ VERSION = "5.5.0"
3
3
  end
data/lib/scout_apm.rb CHANGED
@@ -67,6 +67,8 @@ require 'scout_apm/background_job_integrations/shoryuken'
67
67
  require 'scout_apm/background_job_integrations/sneakers'
68
68
  require 'scout_apm/background_job_integrations/que'
69
69
  require 'scout_apm/background_job_integrations/legacy_sneakers'
70
+ require 'scout_apm/background_job_integrations/good_job'
71
+ require 'scout_apm/background_job_integrations/solid_queue'
70
72
 
71
73
  require 'scout_apm/framework_integrations/rails_2'
72
74
  require 'scout_apm/framework_integrations/rails_3_or_4'
data/scout_apm.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  # tests. Specific versions are pulled in using specific gemfiles, e.g.
35
35
  # `gems/rails3.gemfile`.
36
36
  s.add_development_dependency "activerecord"
37
- s.add_development_dependency "sqlite3"
37
+ s.add_development_dependency "sqlite3", "~> 1.4"
38
38
 
39
39
  s.add_development_dependency "rubocop"
40
40
  s.add_development_dependency "guard"
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.8
4
+ version: 5.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Haynes
8
8
  - Andre Lewis
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-04-03 00:00:00.000000000 Z
11
+ date: 2025-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: minitest
@@ -141,16 +140,16 @@ dependencies:
141
140
  name: sqlite3
142
141
  requirement: !ruby/object:Gem::Requirement
143
142
  requirements:
144
- - - ">="
143
+ - - "~>"
145
144
  - !ruby/object:Gem::Version
146
- version: '0'
145
+ version: '1.4'
147
146
  type: :development
148
147
  prerelease: false
149
148
  version_requirements: !ruby/object:Gem::Requirement
150
149
  requirements:
151
- - - ">="
150
+ - - "~>"
152
151
  - !ruby/object:Gem::Version
153
- version: '0'
152
+ version: '1.4'
154
153
  - !ruby/object:Gem::Dependency
155
154
  name: rubocop
156
155
  requirement: !ruby/object:Gem::Requirement
@@ -216,6 +215,7 @@ extensions:
216
215
  - ext/rusage/extconf.rb
217
216
  extra_rdoc_files: []
218
217
  files:
218
+ - ".github/workflows/release.yml"
219
219
  - ".github/workflows/test.yml"
220
220
  - ".gitignore"
221
221
  - ".rubocop.yml"
@@ -239,6 +239,7 @@ files:
239
239
  - gems/rails5.gemfile
240
240
  - gems/rails6.gemfile
241
241
  - gems/sidekiq.gemfile
242
+ - gems/sqlite3-v2.gemfile
242
243
  - gems/typhoeus.gemfile
243
244
  - lib/scout_apm.rb
244
245
  - lib/scout_apm/agent.rb
@@ -254,12 +255,14 @@ files:
254
255
  - lib/scout_apm/auto_instrument/rails.rb
255
256
  - lib/scout_apm/background_job_integrations/delayed_job.rb
256
257
  - lib/scout_apm/background_job_integrations/faktory.rb
258
+ - lib/scout_apm/background_job_integrations/good_job.rb
257
259
  - lib/scout_apm/background_job_integrations/legacy_sneakers.rb
258
260
  - lib/scout_apm/background_job_integrations/que.rb
259
261
  - lib/scout_apm/background_job_integrations/resque.rb
260
262
  - lib/scout_apm/background_job_integrations/shoryuken.rb
261
263
  - lib/scout_apm/background_job_integrations/sidekiq.rb
262
264
  - lib/scout_apm/background_job_integrations/sneakers.rb
265
+ - lib/scout_apm/background_job_integrations/solid_queue.rb
263
266
  - lib/scout_apm/background_recorder.rb
264
267
  - lib/scout_apm/background_worker.rb
265
268
  - lib/scout_apm/bucket_name_splitter.rb
@@ -485,7 +488,6 @@ homepage: https://github.com/scoutapp/scout_apm_ruby
485
488
  licenses:
486
489
  - MIT
487
490
  metadata: {}
488
- post_install_message:
489
491
  rdoc_options: []
490
492
  require_paths:
491
493
  - lib
@@ -501,78 +503,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
501
503
  - !ruby/object:Gem::Version
502
504
  version: '0'
503
505
  requirements: []
504
- rubygems_version: 3.0.8
505
- signing_key:
506
+ rubygems_version: 3.6.2
506
507
  specification_version: 4
507
508
  summary: Ruby application performance monitoring
508
- test_files:
509
- - test/data/config_test_1.yml
510
- - test/test_helper.rb
511
- - test/tmp/README.md
512
- - test/unit/agent_context_test.rb
513
- - test/unit/agent_test.rb
514
- - test/unit/auto_instrument/anonymous_block_value.rb
515
- - test/unit/auto_instrument/assignments-instrumented.rb
516
- - test/unit/auto_instrument/assignments.rb
517
- - test/unit/auto_instrument/controller-ast.txt
518
- - test/unit/auto_instrument/controller-instrumented.rb
519
- - test/unit/auto_instrument/controller.rb
520
- - test/unit/auto_instrument/hanging_method.rb
521
- - test/unit/auto_instrument/hash_shorthand_controller-instrumented.rb
522
- - test/unit/auto_instrument/hash_shorthand_controller.rb
523
- - test/unit/auto_instrument/rescue_from-instrumented.rb
524
- - test/unit/auto_instrument/rescue_from.rb
525
- - test/unit/auto_instrument_test.rb
526
- - test/unit/background_job_integrations/sidekiq_test.rb
527
- - test/unit/config_test.rb
528
- - test/unit/context_test.rb
529
- - test/unit/db_query_metric_set_test.rb
530
- - test/unit/db_query_metric_stats_test.rb
531
- - test/unit/environment_test.rb
532
- - test/unit/error_service/error_buffer_test.rb
533
- - test/unit/error_service/ignored_exceptions_test.rb
534
- - test/unit/extensions/periodic_callbacks_test.rb
535
- - test/unit/extensions/transaction_callbacks_test.rb
536
- - test/unit/external_service_metric_set_test.rb
537
- - test/unit/external_service_metric_stats_test.rb
538
- - test/unit/fake_store_test.rb
539
- - test/unit/git_revision_test.rb
540
- - test/unit/histogram_test.rb
541
- - test/unit/ignored_uris_test.rb
542
- - test/unit/instruments/action_view_test.rb
543
- - test/unit/instruments/active_record_test.rb
544
- - test/unit/instruments/fixtures/test/_test_partial.html.erb
545
- - test/unit/instruments/fixtures/test/_test_partial_collection.html.erb
546
- - test/unit/instruments/fixtures/test_view.html.erb
547
- - test/unit/instruments/http_client_test.rb
548
- - test/unit/instruments/http_test.rb
549
- - test/unit/instruments/moped_test.rb
550
- - test/unit/instruments/net_http_test.rb
551
- - test/unit/instruments/percentile_sampler_test.rb
552
- - test/unit/instruments/redis_test.rb
553
- - test/unit/instruments/typhoeus_test.rb
554
- - test/unit/layaway_test.rb
555
- - test/unit/layer_children_set_test.rb
556
- - test/unit/layer_converters/depth_first_walker_test.rb
557
- - test/unit/layer_converters/metric_converter_test.rb
558
- - test/unit/layer_converters/stubs.rb
559
- - test/unit/limited_layer_test.rb
560
- - test/unit/logger_test.rb
561
- - test/unit/metric_set_test.rb
562
- - test/unit/remote/message_test.rb
563
- - test/unit/remote/route_test.rb
564
- - test/unit/remote/server_test.rb
565
- - test/unit/request_histograms_test.rb
566
- - test/unit/scored_item_set_test.rb
567
- - test/unit/serializers/payload_serializer_test.rb
568
- - test/unit/slow_request_policy_test.rb
569
- - test/unit/sql_sanitizer_test.rb
570
- - test/unit/store_test.rb
571
- - test/unit/tracer_test.rb
572
- - test/unit/tracked_request_test.rb
573
- - test/unit/transaction_test.rb
574
- - test/unit/transaction_time_consumed_test.rb
575
- - test/unit/utils/active_record_metric_name_test.rb
576
- - test/unit/utils/backtrace_parser_test.rb
577
- - test/unit/utils/numbers_test.rb
578
- - test/unit/utils/scm.rb
509
+ test_files: []