appsignal 2.9.2.alpha.1 → 2.9.18.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
  3. data/.github/ISSUE_TEMPLATE/chore.md +14 -0
  4. data/.gitignore +1 -2
  5. data/.rubocop.yml +3 -0
  6. data/.travis.yml +25 -27
  7. data/CHANGELOG.md +632 -535
  8. data/README.md +8 -3
  9. data/Rakefile +118 -122
  10. data/SUPPORT.md +16 -0
  11. data/appsignal.gemspec +14 -4
  12. data/build_matrix.yml +16 -8
  13. data/ext/Rakefile +2 -3
  14. data/ext/agent.yml +40 -37
  15. data/ext/base.rb +37 -14
  16. data/ext/extconf.rb +3 -4
  17. data/gemfiles/capistrano2.gemfile +5 -0
  18. data/gemfiles/capistrano3.gemfile +5 -0
  19. data/gemfiles/grape.gemfile +5 -0
  20. data/gemfiles/no_dependencies.gemfile +5 -0
  21. data/gemfiles/padrino.gemfile +5 -0
  22. data/gemfiles/que.gemfile +5 -0
  23. data/gemfiles/que_beta.gemfile +10 -0
  24. data/gemfiles/rails-3.2.gemfile +5 -0
  25. data/gemfiles/rails-4.0.gemfile +5 -0
  26. data/gemfiles/rails-4.1.gemfile +5 -0
  27. data/gemfiles/rails-4.2.gemfile +5 -0
  28. data/gemfiles/rails-6.0.gemfile +1 -1
  29. data/gemfiles/resque.gemfile +5 -0
  30. data/lib/appsignal.rb +1 -4
  31. data/lib/appsignal/cli/demo.rb +5 -2
  32. data/lib/appsignal/cli/diagnose/utils.rb +2 -0
  33. data/lib/appsignal/cli/install.rb +34 -10
  34. data/lib/appsignal/cli/notify_of_deploy.rb +10 -0
  35. data/lib/appsignal/event_formatter/action_view/render_formatter.rb +10 -8
  36. data/lib/appsignal/helpers/instrumentation.rb +18 -9
  37. data/lib/appsignal/helpers/metrics.rb +0 -1
  38. data/lib/appsignal/hooks.rb +3 -1
  39. data/lib/appsignal/hooks/active_support_notifications.rb +2 -5
  40. data/lib/appsignal/hooks/puma.rb +15 -13
  41. data/lib/appsignal/hooks/sequel.rb +1 -1
  42. data/lib/appsignal/hooks/sidekiq.rb +33 -8
  43. data/lib/appsignal/integrations/que.rb +9 -8
  44. data/lib/appsignal/minutely.rb +38 -19
  45. data/lib/appsignal/transaction.rb +5 -0
  46. data/lib/appsignal/utils/rails_helper.rb +4 -0
  47. data/lib/appsignal/version.rb +1 -1
  48. data/lib/puma/plugin/appsignal.rb +26 -0
  49. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +40 -0
  50. data/spec/lib/appsignal/cli/install_spec.rb +51 -7
  51. data/spec/lib/appsignal/cli/notify_of_deploy_spec.rb +10 -0
  52. data/spec/lib/appsignal/config_spec.rb +10 -8
  53. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +38 -28
  54. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +104 -25
  55. data/spec/lib/appsignal/hooks/puma_spec.rb +69 -39
  56. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +65 -3
  57. data/spec/lib/appsignal/hooks_spec.rb +4 -0
  58. data/spec/lib/appsignal/minutely_spec.rb +150 -88
  59. data/spec/lib/appsignal/transaction_spec.rb +27 -4
  60. data/spec/lib/appsignal_spec.rb +62 -11
  61. data/spec/lib/puma/appsignal_spec.rb +91 -0
  62. data/spec/support/{project_fixture → fixtures/projects/valid}/config/application.rb +0 -0
  63. data/spec/support/{project_fixture → fixtures/projects/valid}/config/appsignal.yml +0 -0
  64. data/spec/support/{project_fixture → fixtures/projects/valid}/config/environments/development.rb +0 -0
  65. data/spec/support/{project_fixture → fixtures/projects/valid}/config/environments/production.rb +0 -0
  66. data/spec/support/{project_fixture → fixtures/projects/valid}/config/environments/test.rb +0 -0
  67. data/spec/support/{project_fixture → fixtures/projects/valid}/log/.gitkeep +0 -0
  68. data/spec/support/helpers/config_helpers.rb +1 -1
  69. data/spec/support/helpers/wait_for_helper.rb +28 -0
  70. data/spec/support/mocks/mock_probe.rb +11 -0
  71. metadata +37 -30
  72. data/spec/support/fixtures/containers/cgroups/docker +0 -14
  73. data/spec/support/fixtures/containers/cgroups/docker_systemd +0 -8
  74. data/spec/support/fixtures/containers/cgroups/lxc +0 -10
  75. data/spec/support/fixtures/containers/cgroups/no_permission +0 -0
  76. data/spec/support/fixtures/containers/cgroups/none +0 -1
@@ -630,7 +630,11 @@ describe Appsignal::Transaction do
630
630
 
631
631
  describe "#set_error" do
632
632
  let(:env) { http_request_env_with_data }
633
- let(:error) { double(:error, :message => "test message", :backtrace => ["line 1"]) }
633
+ let(:error) do
634
+ e = ExampleStandardError.new("test message")
635
+ allow(e).to receive(:backtrace).and_return(["line 1"])
636
+ e
637
+ end
634
638
 
635
639
  it "should also respond to add_exception for backwords compatibility" do
636
640
  expect(transaction).to respond_to(:add_exception)
@@ -643,10 +647,24 @@ describe Appsignal::Transaction do
643
647
  transaction.set_error(error)
644
648
  end
645
649
 
650
+ context "when error is not an error" do
651
+ let(:error) { Object.new }
652
+
653
+ it "does not add the error" do
654
+ expect(Appsignal.logger).to receive(:error).with(
655
+ "Appsignal::Transaction#set_error: Cannot set error. " \
656
+ "The given value is not an exception: #{error.inspect}"
657
+ )
658
+ expect(transaction.ext).to_not receive(:set_error)
659
+
660
+ transaction.set_error(error)
661
+ end
662
+ end
663
+
646
664
  context "for a http request" do
647
665
  it "should set an error in the extension" do
648
666
  expect(transaction.ext).to receive(:set_error).with(
649
- "RSpec::Mocks::Double",
667
+ "ExampleStandardError",
650
668
  "test message",
651
669
  Appsignal::Utils::Data.generate(["line 1"])
652
670
  )
@@ -656,7 +674,12 @@ describe Appsignal::Transaction do
656
674
  end
657
675
 
658
676
  context "when error message is nil" do
659
- let(:error) { double(:error, :message => nil, :backtrace => ["line 1"]) }
677
+ let(:error) do
678
+ e = ExampleStandardError.new
679
+ allow(e).to receive(:message).and_return(nil)
680
+ allow(e).to receive(:backtrace).and_return(["line 1"])
681
+ e
682
+ end
660
683
 
661
684
  it "should not raise an error" do
662
685
  expect { transaction.set_error(error) }.to_not raise_error
@@ -664,7 +687,7 @@ describe Appsignal::Transaction do
664
687
 
665
688
  it "should set an error in the extension" do
666
689
  expect(transaction.ext).to receive(:set_error).with(
667
- "RSpec::Mocks::Double",
690
+ "ExampleStandardError",
668
691
  "",
669
692
  Appsignal::Utils::Data.generate(["line 1"])
670
693
  )
@@ -94,12 +94,6 @@ describe Appsignal do
94
94
  Appsignal.start
95
95
  end
96
96
  end
97
-
98
- it "should add the gc probe to minutely" do
99
- expect(Appsignal::Minutely).to receive(:register_garbage_collection_probe)
100
- .and_call_original
101
- Appsignal.start
102
- end
103
97
  end
104
98
 
105
99
  context "when allocation tracking and gc instrumentation have been disabled" do
@@ -246,6 +240,16 @@ describe Appsignal do
246
240
 
247
241
  context "not active" do
248
242
  describe ".monitor_transaction" do
243
+ let(:log_stream) { StringIO.new }
244
+ let(:log) { log_contents(log_stream) }
245
+ before do
246
+ Appsignal.config = project_fixture_config("not_active")
247
+ Appsignal.start
248
+ Appsignal.start_logger
249
+ Appsignal.logger = test_logger(log_stream)
250
+ end
251
+ after { Appsignal.logger = nil }
252
+
249
253
  it "should do nothing but still yield the block" do
250
254
  expect(Appsignal::Transaction).to_not receive(:create)
251
255
  expect(Appsignal).to_not receive(:instrument)
@@ -258,6 +262,23 @@ describe Appsignal do
258
262
  end).to eq 1
259
263
  end.to_not raise_error
260
264
  end
265
+
266
+ context "with an unknown event type" do
267
+ it "yields the given block" do
268
+ expect do |blk|
269
+ Appsignal.monitor_transaction("unknown.sidekiq", &blk)
270
+ end.to yield_control
271
+ end
272
+
273
+ it "logs an error" do
274
+ Appsignal.monitor_transaction("unknown.sidekiq") {}
275
+ expect(log).to contains_log(
276
+ :error,
277
+ "Unrecognized name 'unknown.sidekiq': names must start with either 'perform_job' " \
278
+ "(for jobs and tasks) or 'process_action' (for HTTP requests)"
279
+ )
280
+ end
281
+ end
261
282
  end
262
283
 
263
284
  describe ".listen_for_error" do
@@ -305,10 +326,15 @@ describe Appsignal do
305
326
  end
306
327
 
307
328
  context "with config and started" do
329
+ let(:log_stream) { StringIO.new }
330
+ let(:log) { log_contents(log_stream) }
308
331
  before do
309
332
  Appsignal.config = project_fixture_config
310
333
  Appsignal.start
334
+ Appsignal.start_logger
335
+ Appsignal.logger = test_logger(log_stream)
311
336
  end
337
+ after { Appsignal.logger = nil }
312
338
 
313
339
  describe ".monitor_transaction" do
314
340
  context "with a successful call" do
@@ -365,6 +391,23 @@ describe Appsignal do
365
391
  end.to raise_error(error)
366
392
  end
367
393
  end
394
+
395
+ context "with an unknown event type" do
396
+ it "yields the given block" do
397
+ expect do |blk|
398
+ Appsignal.monitor_transaction("unknown.sidekiq", &blk)
399
+ end.to yield_control
400
+ end
401
+
402
+ it "logs an error" do
403
+ Appsignal.monitor_transaction("unknown.sidekiq") {}
404
+ expect(log).to contains_log(
405
+ :error,
406
+ "Unrecognized name 'unknown.sidekiq': names must start with either 'perform_job' " \
407
+ "(for jobs and tasks) or 'process_action' (for HTTP requests)"
408
+ )
409
+ end
410
+ end
368
411
  end
369
412
 
370
413
  describe ".monitor_single_transaction" do
@@ -614,8 +657,10 @@ describe Appsignal do
614
657
  let(:error) { double }
615
658
 
616
659
  it "logs an error message" do
617
- expect(Appsignal.logger).to receive(:error)
618
- .with("Can't send error, given value is not an exception")
660
+ expect(Appsignal.logger).to receive(:error).with(
661
+ "Appsignal.send_error: Cannot send error. " \
662
+ "The given value is not an exception: #{error.inspect}"
663
+ )
619
664
  end
620
665
 
621
666
  it "does not send the error" do
@@ -735,13 +780,19 @@ describe Appsignal do
735
780
  Appsignal.set_error(error)
736
781
  end
737
782
 
738
- context "when the error is nil" do
739
- it "does nothing" do
783
+ context "when the error is not an Exception" do
784
+ let(:error) { Object.new }
785
+
786
+ it "logs an error" do
787
+ expect(Appsignal.logger).to receive(:error).with(
788
+ "Appsignal.set_error: Cannot set error. " \
789
+ "The given value is not an exception: #{error.inspect}"
790
+ )
740
791
  expect(transaction).to_not receive(:set_error)
741
792
  expect(transaction).to_not receive(:set_tags)
742
793
  expect(transaction).to_not receive(:set_namespace)
743
794
 
744
- Appsignal.set_error(nil)
795
+ Appsignal.set_error(error)
745
796
  end
746
797
  end
747
798
 
@@ -0,0 +1,91 @@
1
+ RSpec.describe "Puma plugin" do
2
+ include WaitForHelper
3
+
4
+ class MockPumaLauncher
5
+ def events
6
+ return @events if defined?(@events)
7
+
8
+ @events = MockPumaEvents.new
9
+ end
10
+ end
11
+
12
+ class MockPumaEvents
13
+ def on_booted(&block)
14
+ @on_booted = block if block_given?
15
+ @on_booted if defined?(@on_booted)
16
+ end
17
+ end
18
+
19
+ let(:probe) { MockProbe.new }
20
+ let(:launcher) { MockPumaLauncher.new }
21
+ before do
22
+ module Puma
23
+ def self.stats
24
+ end
25
+
26
+ class Plugin
27
+ class << self
28
+ attr_reader :plugin
29
+
30
+ def create(&block)
31
+ @plugin = Class.new(::Puma::Plugin)
32
+ @plugin.class_eval(&block)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ Appsignal::Minutely.probes.clear
39
+ ENV["APPSIGNAL_ENABLE_MINUTELY_PROBES"] = "true"
40
+ Appsignal.config = project_fixture_config
41
+ # Speed up test time
42
+ allow(Appsignal::Minutely).to receive(:initial_wait_time).and_return(0.001)
43
+ allow(Appsignal::Minutely).to receive(:wait_time).and_return(0.001)
44
+
45
+ Appsignal::Minutely.probes.register :my_probe, probe
46
+ load File.expand_path("../lib/puma/plugin/appsignal.rb", APPSIGNAL_SPEC_DIR)
47
+ end
48
+ after do
49
+ Appsignal.config = nil
50
+ Object.send :remove_const, :Puma
51
+ Object.send :remove_const, :APPSIGNAL_PUMA_PLUGIN_LOADED
52
+ end
53
+
54
+ it "registers the PumaProbe" do
55
+ expect(Appsignal::Minutely.probes[:my_probe]).to eql(probe)
56
+ expect(Appsignal::Minutely.probes[:puma]).to be_nil
57
+ plugin = Puma::Plugin.plugin.new
58
+ expect(launcher.events.on_booted).to be_nil
59
+
60
+ plugin.start(launcher)
61
+ expect(Appsignal::Minutely.probes[:puma]).to be_nil
62
+ expect(launcher.events.on_booted).to_not be_nil
63
+
64
+ launcher.events.on_booted.call
65
+ expect(Appsignal::Minutely.probes[:puma]).to eql(Appsignal::Hooks::PumaProbe)
66
+
67
+ # Minutely probes started and called
68
+ wait_for("enough probe calls") { probe.calls >= 2 }
69
+ end
70
+
71
+ context "without Puma.stats" do
72
+ before { Puma.singleton_class.send(:remove_method, :stats) }
73
+
74
+ it "does not register the PumaProbe" do
75
+ expect(Appsignal::Minutely.probes[:my_probe]).to eql(probe)
76
+ expect(Appsignal::Minutely.probes[:puma]).to be_nil
77
+ plugin = Puma::Plugin.plugin.new
78
+ expect(launcher.events.on_booted).to be_nil
79
+
80
+ plugin.start(launcher)
81
+ expect(Appsignal::Minutely.probes[:puma]).to be_nil
82
+ expect(launcher.events.on_booted).to_not be_nil
83
+
84
+ launcher.events.on_booted.call
85
+ expect(Appsignal::Minutely.probes[:puma]).to be_nil
86
+
87
+ # Minutely probes started and called
88
+ wait_for("enough probe calls") { probe.calls >= 2 }
89
+ end
90
+ end
91
+ end
@@ -1,7 +1,7 @@
1
1
  module ConfigHelpers
2
2
  def project_fixture_path
3
3
  File.expand_path(
4
- File.join(File.dirname(__FILE__), "../project_fixture")
4
+ File.join(File.dirname(__FILE__), "../fixtures/projects/valid")
5
5
  )
6
6
  end
7
7
 
@@ -0,0 +1,28 @@
1
+ module WaitForHelper
2
+ # Wait for a condition to be met
3
+ #
4
+ # @example
5
+ # # Perform threaded operation
6
+ # wait_for("enough probe calls") { probe.calls >= 2 }
7
+ # # Assert on result
8
+ #
9
+ # @param name [String] The name of the condition to check. Used in the
10
+ # error when it fails.
11
+ # @yield Assertion to check.
12
+ # @yieldreturn [Boolean] True/False value that indicates if the condition
13
+ # is met.
14
+ # @raise [StandardError] Raises error if the condition is not met after 5
15
+ # seconds, 5_000 tries.
16
+ def wait_for(name)
17
+ max_wait = 5_000
18
+ i = 0
19
+ while i <= max_wait
20
+ break if yield
21
+ i += 1
22
+ sleep 0.001
23
+ end
24
+
25
+ return unless i == max_wait
26
+ raise "Waited 5 seconds for #{name} condition, but was not met."
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ class MockProbe
2
+ attr_reader :calls
3
+
4
+ def initialize
5
+ @calls = 0
6
+ end
7
+
8
+ def call
9
+ @calls += 1
10
+ end
11
+ end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.2.alpha.1
4
+ version: 2.9.18.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Beekman
8
8
  - Thijs Cadier
9
+ - Tom de Bruijn
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2019-03-28 00:00:00.000000000 Z
13
+ date: 2019-11-18 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rack
@@ -45,14 +46,14 @@ dependencies:
45
46
  requirements:
46
47
  - - "~>"
47
48
  - !ruby/object:Gem::Version
48
- version: '3.7'
49
+ version: '3.8'
49
50
  type: :development
50
51
  prerelease: false
51
52
  version_requirements: !ruby/object:Gem::Requirement
52
53
  requirements:
53
54
  - - "~>"
54
55
  - !ruby/object:Gem::Version
55
- version: '3.7'
56
+ version: '3.8'
56
57
  - !ruby/object:Gem::Dependency
57
58
  name: pry
58
59
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +116,14 @@ dependencies:
115
116
  requirements:
116
117
  - - ">="
117
118
  - !ruby/object:Gem::Version
118
- version: '0'
119
+ version: 0.9.20
119
120
  type: :development
120
121
  prerelease: false
121
122
  version_requirements: !ruby/object:Gem::Requirement
122
123
  requirements:
123
124
  - - ">="
124
125
  - !ruby/object:Gem::Version
125
- version: '0'
126
+ version: 0.9.20
126
127
  description: The official appsignal.com gem
127
128
  email:
128
129
  - support@appsignal.com
@@ -132,6 +133,8 @@ extensions:
132
133
  - ext/extconf.rb
133
134
  extra_rdoc_files: []
134
135
  files:
136
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
137
+ - ".github/ISSUE_TEMPLATE/chore.md"
135
138
  - ".gitignore"
136
139
  - ".rspec"
137
140
  - ".rubocop.yml"
@@ -144,6 +147,7 @@ files:
144
147
  - LICENSE
145
148
  - README.md
146
149
  - Rakefile
150
+ - SUPPORT.md
147
151
  - appsignal.gemspec
148
152
  - benchmark.rake
149
153
  - bin/appsignal
@@ -159,6 +163,7 @@ files:
159
163
  - gemfiles/no_dependencies.gemfile
160
164
  - gemfiles/padrino.gemfile
161
165
  - gemfiles/que.gemfile
166
+ - gemfiles/que_beta.gemfile
162
167
  - gemfiles/rails-3.2.gemfile
163
168
  - gemfiles/rails-4.0.gemfile
164
169
  - gemfiles/rails-4.1.gemfile
@@ -250,6 +255,7 @@ files:
250
255
  - lib/appsignal/utils/query_params_sanitizer.rb
251
256
  - lib/appsignal/utils/rails_helper.rb
252
257
  - lib/appsignal/version.rb
258
+ - lib/puma/plugin/appsignal.rb
253
259
  - lib/sequel/extensions/appsignal_integration.rb
254
260
  - resources/appsignal.yml.erb
255
261
  - resources/cacert.pem
@@ -323,13 +329,15 @@ files:
323
329
  - spec/lib/appsignal/utils/json_spec.rb
324
330
  - spec/lib/appsignal/utils/query_params_sanitizer_spec.rb
325
331
  - spec/lib/appsignal_spec.rb
332
+ - spec/lib/puma/appsignal_spec.rb
326
333
  - spec/spec_helper.rb
327
- - spec/support/fixtures/containers/cgroups/docker
328
- - spec/support/fixtures/containers/cgroups/docker_systemd
329
- - spec/support/fixtures/containers/cgroups/lxc
330
- - spec/support/fixtures/containers/cgroups/no_permission
331
- - spec/support/fixtures/containers/cgroups/none
332
334
  - spec/support/fixtures/generated_config.yml
335
+ - spec/support/fixtures/projects/valid/config/application.rb
336
+ - spec/support/fixtures/projects/valid/config/appsignal.yml
337
+ - spec/support/fixtures/projects/valid/config/environments/development.rb
338
+ - spec/support/fixtures/projects/valid/config/environments/production.rb
339
+ - spec/support/fixtures/projects/valid/config/environments/test.rb
340
+ - spec/support/fixtures/projects/valid/log/.gitkeep
333
341
  - spec/support/fixtures/uploaded_file.txt
334
342
  - spec/support/helpers/api_request_helper.rb
335
343
  - spec/support/helpers/cli_helpers.rb
@@ -344,15 +352,11 @@ files:
344
352
  - spec/support/helpers/system_helpers.rb
345
353
  - spec/support/helpers/time_helpers.rb
346
354
  - spec/support/helpers/transaction_helpers.rb
355
+ - spec/support/helpers/wait_for_helper.rb
347
356
  - spec/support/matchers/contains_log.rb
348
357
  - spec/support/mocks/fake_gc_profiler.rb
349
358
  - spec/support/mocks/mock_extension.rb
350
- - spec/support/project_fixture/config/application.rb
351
- - spec/support/project_fixture/config/appsignal.yml
352
- - spec/support/project_fixture/config/environments/development.rb
353
- - spec/support/project_fixture/config/environments/production.rb
354
- - spec/support/project_fixture/config/environments/test.rb
355
- - spec/support/project_fixture/log/.gitkeep
359
+ - spec/support/mocks/mock_probe.rb
356
360
  - spec/support/rails/my_app.rb
357
361
  - spec/support/shared_examples/instrument.rb
358
362
  - spec/support/stubs/delayed_job.rb
@@ -362,7 +366,12 @@ files:
362
366
  homepage: https://github.com/appsignal/appsignal-ruby
363
367
  licenses:
364
368
  - MIT
365
- metadata: {}
369
+ metadata:
370
+ bug_tracker_uri: https://github.com/appsignal/appsignal-ruby/issues
371
+ changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/master/CHANGELOG.md
372
+ documentation_uri: https://docs.appsignal.com/ruby/
373
+ homepage_uri: https://docs.appsignal.com/ruby/
374
+ source_code_uri: https://github.com/appsignal/appsignal-ruby
366
375
  post_install_message:
367
376
  rdoc_options: []
368
377
  require_paths:
@@ -379,7 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
379
388
  - !ruby/object:Gem::Version
380
389
  version: 1.3.1
381
390
  requirements: []
382
- rubygems_version: 3.0.2
391
+ rubygems_version: 3.0.6
383
392
  signing_key:
384
393
  specification_version: 4
385
394
  summary: Logs performance and exception data from your app to appsignal.com
@@ -454,13 +463,15 @@ test_files:
454
463
  - spec/lib/appsignal/utils/json_spec.rb
455
464
  - spec/lib/appsignal/utils/query_params_sanitizer_spec.rb
456
465
  - spec/lib/appsignal_spec.rb
466
+ - spec/lib/puma/appsignal_spec.rb
457
467
  - spec/spec_helper.rb
458
- - spec/support/fixtures/containers/cgroups/docker
459
- - spec/support/fixtures/containers/cgroups/docker_systemd
460
- - spec/support/fixtures/containers/cgroups/lxc
461
- - spec/support/fixtures/containers/cgroups/no_permission
462
- - spec/support/fixtures/containers/cgroups/none
463
468
  - spec/support/fixtures/generated_config.yml
469
+ - spec/support/fixtures/projects/valid/config/application.rb
470
+ - spec/support/fixtures/projects/valid/config/appsignal.yml
471
+ - spec/support/fixtures/projects/valid/config/environments/development.rb
472
+ - spec/support/fixtures/projects/valid/config/environments/production.rb
473
+ - spec/support/fixtures/projects/valid/config/environments/test.rb
474
+ - spec/support/fixtures/projects/valid/log/.gitkeep
464
475
  - spec/support/fixtures/uploaded_file.txt
465
476
  - spec/support/helpers/api_request_helper.rb
466
477
  - spec/support/helpers/cli_helpers.rb
@@ -475,15 +486,11 @@ test_files:
475
486
  - spec/support/helpers/system_helpers.rb
476
487
  - spec/support/helpers/time_helpers.rb
477
488
  - spec/support/helpers/transaction_helpers.rb
489
+ - spec/support/helpers/wait_for_helper.rb
478
490
  - spec/support/matchers/contains_log.rb
479
491
  - spec/support/mocks/fake_gc_profiler.rb
480
492
  - spec/support/mocks/mock_extension.rb
481
- - spec/support/project_fixture/config/application.rb
482
- - spec/support/project_fixture/config/appsignal.yml
483
- - spec/support/project_fixture/config/environments/development.rb
484
- - spec/support/project_fixture/config/environments/production.rb
485
- - spec/support/project_fixture/config/environments/test.rb
486
- - spec/support/project_fixture/log/.gitkeep
493
+ - spec/support/mocks/mock_probe.rb
487
494
  - spec/support/rails/my_app.rb
488
495
  - spec/support/shared_examples/instrument.rb
489
496
  - spec/support/stubs/delayed_job.rb