appsignal 2.11.0.alpha.2-java → 2.11.0.beta.5-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 (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: java
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
@@ -186,7 +186,8 @@ files:
186
186
  - gemfiles/rails-5.1.gemfile
187
187
  - gemfiles/rails-5.2.gemfile
188
188
  - gemfiles/rails-6.0.gemfile
189
- - gemfiles/resque.gemfile
189
+ - gemfiles/resque-1.gemfile
190
+ - gemfiles/resque-2.gemfile
190
191
  - gemfiles/sequel-435.gemfile
191
192
  - gemfiles/sequel.gemfile
192
193
  - gemfiles/sinatra.gemfile
@@ -220,6 +221,7 @@ files:
220
221
  - lib/appsignal/helpers/metrics.rb
221
222
  - lib/appsignal/hooks.rb
222
223
  - lib/appsignal/hooks/action_cable.rb
224
+ - lib/appsignal/hooks/active_job.rb
223
225
  - lib/appsignal/hooks/active_support_notifications.rb
224
226
  - lib/appsignal/hooks/celluloid.rb
225
227
  - lib/appsignal/hooks/data_mapper.rb
@@ -231,6 +233,7 @@ files:
231
233
  - lib/appsignal/hooks/que.rb
232
234
  - lib/appsignal/hooks/rake.rb
233
235
  - lib/appsignal/hooks/redis.rb
236
+ - lib/appsignal/hooks/resque.rb
234
237
  - lib/appsignal/hooks/sequel.rb
235
238
  - lib/appsignal/hooks/shoryuken.rb
236
239
  - lib/appsignal/hooks/sidekiq.rb
@@ -255,6 +258,7 @@ files:
255
258
  - lib/appsignal/logger.rb
256
259
  - lib/appsignal/marker.rb
257
260
  - lib/appsignal/minutely.rb
261
+ - lib/appsignal/probes.rb
258
262
  - lib/appsignal/probes/puma.rb
259
263
  - lib/appsignal/probes/sidekiq.rb
260
264
  - lib/appsignal/rack/generic_instrumentation.rb
@@ -301,10 +305,12 @@ files:
301
305
  - spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb
302
306
  - spec/lib/appsignal/event_formatter_spec.rb
303
307
  - spec/lib/appsignal/extension/jruby_spec.rb
308
+ - spec/lib/appsignal/extension_install_failure_spec.rb
304
309
  - spec/lib/appsignal/extension_spec.rb
305
310
  - spec/lib/appsignal/garbage_collection_profiler_spec.rb
306
311
  - spec/lib/appsignal/hooks/action_cable_spec.rb
307
312
  - spec/lib/appsignal/hooks/active_support_notifications_spec.rb
313
+ - spec/lib/appsignal/hooks/activejob_spec.rb
308
314
  - spec/lib/appsignal/hooks/celluloid_spec.rb
309
315
  - spec/lib/appsignal/hooks/data_mapper_spec.rb
310
316
  - spec/lib/appsignal/hooks/delayed_job_spec.rb
@@ -315,6 +321,7 @@ files:
315
321
  - spec/lib/appsignal/hooks/que_spec.rb
316
322
  - spec/lib/appsignal/hooks/rake_spec.rb
317
323
  - spec/lib/appsignal/hooks/redis_spec.rb
324
+ - spec/lib/appsignal/hooks/resque_spec.rb
318
325
  - spec/lib/appsignal/hooks/sequel_spec.rb
319
326
  - spec/lib/appsignal/hooks/shoryuken_spec.rb
320
327
  - spec/lib/appsignal/hooks/sidekiq_spec.rb
@@ -362,6 +369,7 @@ files:
362
369
  - spec/support/fixtures/projects/valid/config/environments/test.rb
363
370
  - spec/support/fixtures/projects/valid/log/.gitkeep
364
371
  - spec/support/fixtures/uploaded_file.txt
372
+ - spec/support/helpers/action_mailer_helpers.rb
365
373
  - spec/support/helpers/api_request_helper.rb
366
374
  - spec/support/helpers/cli_helpers.rb
367
375
  - spec/support/helpers/config_helpers.rb
@@ -396,7 +404,7 @@ licenses:
396
404
  - MIT
397
405
  metadata:
398
406
  bug_tracker_uri: https://github.com/appsignal/appsignal-ruby/issues
399
- changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/master/CHANGELOG.md
407
+ changelog_uri: https://github.com/appsignal/appsignal-ruby/blob/main/CHANGELOG.md
400
408
  documentation_uri: https://docs.appsignal.com/ruby/
401
409
  homepage_uri: https://docs.appsignal.com/ruby/
402
410
  source_code_uri: https://github.com/appsignal/appsignal-ruby
@@ -445,10 +453,12 @@ test_files:
445
453
  - spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb
446
454
  - spec/lib/appsignal/event_formatter_spec.rb
447
455
  - spec/lib/appsignal/extension/jruby_spec.rb
456
+ - spec/lib/appsignal/extension_install_failure_spec.rb
448
457
  - spec/lib/appsignal/extension_spec.rb
449
458
  - spec/lib/appsignal/garbage_collection_profiler_spec.rb
450
459
  - spec/lib/appsignal/hooks/action_cable_spec.rb
451
460
  - spec/lib/appsignal/hooks/active_support_notifications_spec.rb
461
+ - spec/lib/appsignal/hooks/activejob_spec.rb
452
462
  - spec/lib/appsignal/hooks/celluloid_spec.rb
453
463
  - spec/lib/appsignal/hooks/data_mapper_spec.rb
454
464
  - spec/lib/appsignal/hooks/delayed_job_spec.rb
@@ -459,6 +469,7 @@ test_files:
459
469
  - spec/lib/appsignal/hooks/que_spec.rb
460
470
  - spec/lib/appsignal/hooks/rake_spec.rb
461
471
  - spec/lib/appsignal/hooks/redis_spec.rb
472
+ - spec/lib/appsignal/hooks/resque_spec.rb
462
473
  - spec/lib/appsignal/hooks/sequel_spec.rb
463
474
  - spec/lib/appsignal/hooks/shoryuken_spec.rb
464
475
  - spec/lib/appsignal/hooks/sidekiq_spec.rb
@@ -506,6 +517,7 @@ test_files:
506
517
  - spec/support/fixtures/projects/valid/config/environments/test.rb
507
518
  - spec/support/fixtures/projects/valid/log/.gitkeep
508
519
  - spec/support/fixtures/uploaded_file.txt
520
+ - spec/support/helpers/action_mailer_helpers.rb
509
521
  - spec/support/helpers/api_request_helper.rb
510
522
  - spec/support/helpers/cli_helpers.rb
511
523
  - spec/support/helpers/config_helpers.rb