appsignal 2.11.0.alpha.2 → 2.11.0.beta.5

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/.semaphore/semaphore.yml +94 -10
  4. data/CHANGELOG.md +31 -1
  5. data/README.md +4 -4
  6. data/Rakefile +16 -4
  7. data/appsignal.gemspec +1 -1
  8. data/build_matrix.yml +7 -3
  9. data/ext/Rakefile +2 -0
  10. data/ext/agent.yml +19 -19
  11. data/ext/base.rb +7 -0
  12. data/ext/extconf.rb +2 -0
  13. data/gemfiles/rails-4.2.gemfile +9 -2
  14. data/gemfiles/rails-5.0.gemfile +1 -0
  15. data/gemfiles/rails-5.1.gemfile +1 -0
  16. data/gemfiles/rails-5.2.gemfile +1 -0
  17. data/gemfiles/rails-6.0.gemfile +1 -0
  18. data/gemfiles/resque-1.gemfile +7 -0
  19. data/gemfiles/{resque.gemfile → resque-2.gemfile} +1 -1
  20. data/lib/appsignal.rb +1 -0
  21. data/lib/appsignal/auth_check.rb +4 -2
  22. data/lib/appsignal/cli/diagnose.rb +1 -1
  23. data/lib/appsignal/config.rb +35 -2
  24. data/lib/appsignal/extension.rb +6 -5
  25. data/lib/appsignal/extension/jruby.rb +6 -5
  26. data/lib/appsignal/hooks.rb +25 -0
  27. data/lib/appsignal/hooks/active_job.rb +137 -0
  28. data/lib/appsignal/hooks/puma.rb +0 -1
  29. data/lib/appsignal/hooks/resque.rb +60 -0
  30. data/lib/appsignal/hooks/sidekiq.rb +17 -94
  31. data/lib/appsignal/integrations/delayed_job_plugin.rb +1 -1
  32. data/lib/appsignal/integrations/que.rb +1 -1
  33. data/lib/appsignal/integrations/resque.rb +9 -12
  34. data/lib/appsignal/integrations/resque_active_job.rb +9 -32
  35. data/lib/appsignal/probes.rb +7 -0
  36. data/lib/appsignal/probes/puma.rb +1 -1
  37. data/lib/appsignal/probes/sidekiq.rb +3 -1
  38. data/lib/appsignal/transaction.rb +10 -0
  39. data/lib/appsignal/utils/deprecation_message.rb +6 -2
  40. data/lib/appsignal/version.rb +1 -1
  41. data/spec/lib/appsignal/auth_check_spec.rb +23 -0
  42. data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
  43. data/spec/lib/appsignal/capistrano3_spec.rb +1 -1
  44. data/spec/lib/appsignal/cli/diagnose_spec.rb +42 -0
  45. data/spec/lib/appsignal/config_spec.rb +21 -0
  46. data/spec/lib/appsignal/extension/jruby_spec.rb +31 -28
  47. data/spec/lib/appsignal/extension_install_failure_spec.rb +23 -0
  48. data/spec/lib/appsignal/hooks/activejob_spec.rb +591 -0
  49. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +3 -14
  50. data/spec/lib/appsignal/hooks/resque_spec.rb +185 -0
  51. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +222 -268
  52. data/spec/lib/appsignal/hooks_spec.rb +57 -0
  53. data/spec/lib/appsignal/integrations/que_spec.rb +25 -6
  54. data/spec/lib/appsignal/integrations/resque_active_job_spec.rb +20 -179
  55. data/spec/lib/appsignal/integrations/resque_spec.rb +20 -85
  56. data/spec/lib/appsignal/marker_spec.rb +1 -1
  57. data/spec/lib/appsignal/probes/sidekiq_spec.rb +10 -7
  58. data/spec/lib/appsignal/transaction_spec.rb +5 -7
  59. data/spec/spec_helper.rb +5 -0
  60. data/spec/support/helpers/action_mailer_helpers.rb +25 -0
  61. data/spec/support/helpers/config_helpers.rb +3 -2
  62. data/spec/support/helpers/dependency_helper.rb +9 -2
  63. data/spec/support/helpers/transaction_helpers.rb +6 -0
  64. data/spec/support/stubs/sidekiq/api.rb +1 -1
  65. data/spec/support/testing.rb +19 -19
  66. metadata +16 -4
@@ -4,7 +4,7 @@ describe Appsignal::Marker do
4
4
  described_class.new(
5
5
  {
6
6
  :revision => "503ce0923ed177a3ce000005",
7
- :repository => "master",
7
+ :repository => "main",
8
8
  :user => "batman",
9
9
  :rails_env => "production"
10
10
  },
@@ -7,7 +7,7 @@ describe Appsignal::Probes::SidekiqProbe do
7
7
  let(:expected_default_tags) { { :hostname => "localhost" } }
8
8
  before do
9
9
  Appsignal.config = project_fixture_config
10
- module Sidekiq
10
+ module SidekiqMock
11
11
  def self.redis_info
12
12
  {
13
13
  "connected_clients" => 2,
@@ -88,15 +88,14 @@ describe Appsignal::Probes::SidekiqProbe do
88
88
  end
89
89
  end
90
90
  end
91
+ stub_const("Sidekiq", SidekiqMock)
91
92
  end
92
- after { Object.send(:remove_const, "Sidekiq") }
93
+ after { Object.send(:remove_const, :SidekiqMock) }
93
94
 
94
95
  describe ".dependencies_present?" do
95
96
  before do
96
- class Redis; end
97
- Redis.const_set(:VERSION, version)
97
+ stub_const("Redis::VERSION", version)
98
98
  end
99
- after { Object.send(:remove_const, "Redis") }
100
99
 
101
100
  context "when Redis version is < 3.3.5" do
102
101
  let(:version) { "3.3.4" }
@@ -116,9 +115,13 @@ describe Appsignal::Probes::SidekiqProbe do
116
115
  end
117
116
 
118
117
  it "loads Sidekiq::API" do
119
- expect(defined?(Sidekiq::API)).to be_falsy
118
+ # Hide the Sidekiq constant if it was already loaded. It will be
119
+ # redefined by loading "sidekiq/api" in the probe.
120
+ hide_const "Sidekiq::Stats"
121
+
122
+ expect(defined?(Sidekiq::Stats)).to be_falsy
120
123
  probe
121
- expect(defined?(Sidekiq::API)).to be_truthy
124
+ expect(defined?(Sidekiq::Stats)).to be_truthy
122
125
  end
123
126
 
124
127
  it "logs config on initialize" do
@@ -473,22 +473,20 @@ describe Appsignal::Transaction do
473
473
  end
474
474
  end
475
475
 
476
- describe "set_queue_start" do
477
- it "should set the queue start in extension" do
478
- expect(transaction.ext).to receive(:set_queue_start).with(
479
- 10.0
480
- ).once
476
+ describe "#set_queue_start" do
477
+ it "sets the queue start in extension" do
478
+ expect(transaction.ext).to receive(:set_queue_start).with(10.0).once
481
479
 
482
480
  transaction.set_queue_start(10.0)
483
481
  end
484
482
 
485
- it "should not set the queue start in extension when value is nil" do
483
+ it "does not set the queue start in extension when value is nil" do
486
484
  expect(transaction.ext).to_not receive(:set_queue_start)
487
485
 
488
486
  transaction.set_queue_start(nil)
489
487
  end
490
488
 
491
- it "should not raise an error when the queue start is too big" do
489
+ it "does not raise an error when the queue start is too big" do
492
490
  expect(transaction.ext).to receive(:set_queue_start).and_raise(RangeError)
493
491
 
494
492
  expect(Appsignal.logger).to receive(:warn).with("Queue start value 10 is too big")
@@ -65,6 +65,10 @@ RSpec.configure do |config|
65
65
 
66
66
  config.example_status_persistence_file_path = "spec/examples.txt"
67
67
  config.fail_if_no_examples = true
68
+ config.filter_run_excluding(
69
+ :extension_installation_failure => true,
70
+ :jruby => !DependencyHelper.running_jruby?
71
+ )
68
72
  config.mock_with :rspec do |mocks|
69
73
  mocks.syntax = :expect
70
74
  end
@@ -111,6 +115,7 @@ RSpec.configure do |config|
111
115
  # in the diagnose task, so add it manually to the list of to-be cleaned up
112
116
  # keys.
113
117
  env_keys << "_APPSIGNAL_DIAGNOSE"
118
+ env_keys << "_TEST_APPSIGNAL_EXTENSION_FAILURE"
114
119
  env_keys.each do |key|
115
120
  # First set the ENV var to an empty string and then delete the key from
116
121
  # the env. We set the env var to an empty string first as JRuby doesn't
@@ -0,0 +1,25 @@
1
+ module ActionMailerHelpers
2
+ def perform_action_mailer(mailer, method, args = nil)
3
+ if DependencyHelper.rails_version >= Gem::Version.new("5.2.0")
4
+ case args
5
+ when Array
6
+ mailer.send(method, *args).deliver_later
7
+ when Hash
8
+ mailer.with(args).send(method).deliver_later
9
+ when NilClass
10
+ mailer.send(method).deliver_later
11
+ else
12
+ raise "Unknown scenario for arguments: #{args}"
13
+ end
14
+ else
15
+ # Rails 5.1 and lower
16
+ mailer_object =
17
+ if args
18
+ mailer.send(method, *args)
19
+ else
20
+ mailer.send(method)
21
+ end
22
+ mailer_object.deliver_later
23
+ end
24
+ end
25
+ end
@@ -5,12 +5,13 @@ module ConfigHelpers
5
5
  )
6
6
  end
7
7
 
8
- def project_fixture_config(env = "production", initial_config = {}, logger = Appsignal.logger)
8
+ def project_fixture_config(env = "production", initial_config = {}, logger = Appsignal.logger, config_file = nil)
9
9
  Appsignal::Config.new(
10
10
  project_fixture_path,
11
11
  env,
12
12
  initial_config,
13
- logger
13
+ logger,
14
+ config_file
14
15
  )
15
16
  end
16
17
 
@@ -1,6 +1,10 @@
1
1
  module DependencyHelper
2
2
  module_function
3
3
 
4
+ def ruby_version
5
+ Gem::Version.new(RUBY_VERSION)
6
+ end
7
+
4
8
  def running_jruby?
5
9
  defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
6
10
  end
@@ -10,8 +14,11 @@ module DependencyHelper
10
14
  end
11
15
 
12
16
  def rails6_present?
13
- rails_present? &&
14
- Gem.loaded_specs["rails"].version >= Gem::Version.new("6.0.0")
17
+ rails_present? && rails_version >= Gem::Version.new("6.0.0")
18
+ end
19
+
20
+ def rails_version
21
+ Gem.loaded_specs["rails"].version
15
22
  end
16
23
 
17
24
  def sequel_present?
@@ -44,6 +44,12 @@ module TransactionHelpers
44
44
  created_transactions.last
45
45
  end
46
46
 
47
+ # Set current transaction manually.
48
+ # Cleared by {clear_current_transaction!}
49
+ def set_current_transaction(transaction) # rubocop:disable Naming/AccessorMethodName
50
+ Thread.current[:appsignal_transaction] = transaction
51
+ end
52
+
47
53
  # Use when {Appsignal::Transaction.clear_current_transaction!} is stubbed to
48
54
  # clear the current transaction on the current thread.
49
55
  def clear_current_transaction!
@@ -1,4 +1,4 @@
1
1
  module Sidekiq
2
- class API
2
+ class Stats
3
3
  end
4
4
  end
@@ -38,25 +38,9 @@ module Appsignal
38
38
  end
39
39
  end
40
40
 
41
- class Transaction
42
- class << self
43
- alias original_new new
44
-
45
- # Override the {Appsignal::Transaction.new} method so we can track which
46
- # transactions are created on the {Appsignal::Testing.transactions} list.
47
- #
48
- # @see TransactionHelpers#last_transaction
49
- def new(*args)
50
- transaction = original_new(*args)
51
- Appsignal::Testing.transactions << transaction
52
- transaction
53
- end
54
- end
55
- end
56
-
57
41
  class Extension
58
42
  class Transaction
59
- alias original_finish finish
43
+ alias original_finish finish if method_defined? :finish
60
44
 
61
45
  # Override default {Extension::Transaction#finish} behavior to always
62
46
  # return true, which tells the transaction to add its sample data (unless
@@ -72,7 +56,7 @@ module Appsignal
72
56
  return_value
73
57
  end
74
58
 
75
- alias original_complete complete
59
+ alias original_complete complete if method_defined? :complete
76
60
 
77
61
  # Override default {Extension::Transaction#complete} behavior to
78
62
  # store the transaction JSON before the transaction is completed
@@ -94,7 +78,7 @@ module Appsignal
94
78
  @completed || false
95
79
  end
96
80
 
97
- alias original_to_json to_json
81
+ alias original_to_json to_json if method_defined? :to_json
98
82
 
99
83
  # Override default {Extension::Transaction#to_json} behavior to
100
84
  # return the stored the transaction JSON when the transaction was
@@ -111,3 +95,19 @@ module Appsignal
111
95
  end
112
96
  end
113
97
  end
98
+
99
+ module AppsignalTest
100
+ module Transaction
101
+ # Override the {Appsignal::Transaction.new} method so we can track which
102
+ # transactions are created on the {Appsignal::Testing.transactions} list.
103
+ #
104
+ # @see TransactionHelpers#last_transaction
105
+ def new(*_args)
106
+ transaction = super
107
+ Appsignal::Testing.transactions << transaction
108
+ transaction
109
+ end
110
+ end
111
+ end
112
+
113
+ Appsignal::Transaction.extend(AppsignalTest::Transaction)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.11.0.alpha.2
4
+ version: 2.11.0.beta.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Beekman
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-07-02 00:00:00.000000000 Z
13
+ date: 2020-07-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -172,7 +172,8 @@ files:
172
172
  - gemfiles/rails-5.1.gemfile
173
173
  - gemfiles/rails-5.2.gemfile
174
174
  - gemfiles/rails-6.0.gemfile
175
- - gemfiles/resque.gemfile
175
+ - gemfiles/resque-1.gemfile
176
+ - gemfiles/resque-2.gemfile
176
177
  - gemfiles/sequel-435.gemfile
177
178
  - gemfiles/sequel.gemfile
178
179
  - gemfiles/sinatra.gemfile
@@ -206,6 +207,7 @@ files:
206
207
  - lib/appsignal/helpers/metrics.rb
207
208
  - lib/appsignal/hooks.rb
208
209
  - lib/appsignal/hooks/action_cable.rb
210
+ - lib/appsignal/hooks/active_job.rb
209
211
  - lib/appsignal/hooks/active_support_notifications.rb
210
212
  - lib/appsignal/hooks/celluloid.rb
211
213
  - lib/appsignal/hooks/data_mapper.rb
@@ -217,6 +219,7 @@ files:
217
219
  - lib/appsignal/hooks/que.rb
218
220
  - lib/appsignal/hooks/rake.rb
219
221
  - lib/appsignal/hooks/redis.rb
222
+ - lib/appsignal/hooks/resque.rb
220
223
  - lib/appsignal/hooks/sequel.rb
221
224
  - lib/appsignal/hooks/shoryuken.rb
222
225
  - lib/appsignal/hooks/sidekiq.rb
@@ -241,6 +244,7 @@ files:
241
244
  - lib/appsignal/logger.rb
242
245
  - lib/appsignal/marker.rb
243
246
  - lib/appsignal/minutely.rb
247
+ - lib/appsignal/probes.rb
244
248
  - lib/appsignal/probes/puma.rb
245
249
  - lib/appsignal/probes/sidekiq.rb
246
250
  - lib/appsignal/rack/generic_instrumentation.rb
@@ -287,10 +291,12 @@ files:
287
291
  - spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb
288
292
  - spec/lib/appsignal/event_formatter_spec.rb
289
293
  - spec/lib/appsignal/extension/jruby_spec.rb
294
+ - spec/lib/appsignal/extension_install_failure_spec.rb
290
295
  - spec/lib/appsignal/extension_spec.rb
291
296
  - spec/lib/appsignal/garbage_collection_profiler_spec.rb
292
297
  - spec/lib/appsignal/hooks/action_cable_spec.rb
293
298
  - spec/lib/appsignal/hooks/active_support_notifications_spec.rb
299
+ - spec/lib/appsignal/hooks/activejob_spec.rb
294
300
  - spec/lib/appsignal/hooks/celluloid_spec.rb
295
301
  - spec/lib/appsignal/hooks/data_mapper_spec.rb
296
302
  - spec/lib/appsignal/hooks/delayed_job_spec.rb
@@ -301,6 +307,7 @@ files:
301
307
  - spec/lib/appsignal/hooks/que_spec.rb
302
308
  - spec/lib/appsignal/hooks/rake_spec.rb
303
309
  - spec/lib/appsignal/hooks/redis_spec.rb
310
+ - spec/lib/appsignal/hooks/resque_spec.rb
304
311
  - spec/lib/appsignal/hooks/sequel_spec.rb
305
312
  - spec/lib/appsignal/hooks/shoryuken_spec.rb
306
313
  - spec/lib/appsignal/hooks/sidekiq_spec.rb
@@ -348,6 +355,7 @@ files:
348
355
  - spec/support/fixtures/projects/valid/config/environments/test.rb
349
356
  - spec/support/fixtures/projects/valid/log/.gitkeep
350
357
  - spec/support/fixtures/uploaded_file.txt
358
+ - spec/support/helpers/action_mailer_helpers.rb
351
359
  - spec/support/helpers/api_request_helper.rb
352
360
  - spec/support/helpers/cli_helpers.rb
353
361
  - spec/support/helpers/config_helpers.rb
@@ -382,7 +390,7 @@ licenses:
382
390
  - MIT
383
391
  metadata:
384
392
  bug_tracker_uri: https://github.com/appsignal/appsignal-ruby/issues
385
- changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/master/CHANGELOG.md
393
+ changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md
386
394
  documentation_uri: https://docs.appsignal.com/ruby/
387
395
  homepage_uri: https://docs.appsignal.com/ruby/
388
396
  source_code_uri: https://github.com/appsignal/appsignal-ruby
@@ -431,10 +439,12 @@ test_files:
431
439
  - spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb
432
440
  - spec/lib/appsignal/event_formatter_spec.rb
433
441
  - spec/lib/appsignal/extension/jruby_spec.rb
442
+ - spec/lib/appsignal/extension_install_failure_spec.rb
434
443
  - spec/lib/appsignal/extension_spec.rb
435
444
  - spec/lib/appsignal/garbage_collection_profiler_spec.rb
436
445
  - spec/lib/appsignal/hooks/action_cable_spec.rb
437
446
  - spec/lib/appsignal/hooks/active_support_notifications_spec.rb
447
+ - spec/lib/appsignal/hooks/activejob_spec.rb
438
448
  - spec/lib/appsignal/hooks/celluloid_spec.rb
439
449
  - spec/lib/appsignal/hooks/data_mapper_spec.rb
440
450
  - spec/lib/appsignal/hooks/delayed_job_spec.rb
@@ -445,6 +455,7 @@ test_files:
445
455
  - spec/lib/appsignal/hooks/que_spec.rb
446
456
  - spec/lib/appsignal/hooks/rake_spec.rb
447
457
  - spec/lib/appsignal/hooks/redis_spec.rb
458
+ - spec/lib/appsignal/hooks/resque_spec.rb
448
459
  - spec/lib/appsignal/hooks/sequel_spec.rb
449
460
  - spec/lib/appsignal/hooks/shoryuken_spec.rb
450
461
  - spec/lib/appsignal/hooks/sidekiq_spec.rb
@@ -492,6 +503,7 @@ test_files:
492
503
  - spec/support/fixtures/projects/valid/config/environments/test.rb
493
504
  - spec/support/fixtures/projects/valid/log/.gitkeep
494
505
  - spec/support/fixtures/uploaded_file.txt
506
+ - spec/support/helpers/action_mailer_helpers.rb
495
507
  - spec/support/helpers/api_request_helper.rb
496
508
  - spec/support/helpers/cli_helpers.rb
497
509
  - spec/support/helpers/config_helpers.rb