scout_apm 5.3.8 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: []