appsignal 3.12.6-java → 4.0.0.beta.1-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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +499 -487
  3. data/CHANGELOG.md +151 -0
  4. data/Rakefile +31 -7
  5. data/benchmark.rake +4 -6
  6. data/build_matrix.yml +45 -39
  7. data/ext/agent.rb +27 -27
  8. data/ext/appsignal_extension.c +25 -0
  9. data/gemfiles/rails-7.2.gemfile +11 -0
  10. data/lib/appsignal/check_in/cron.rb +67 -0
  11. data/lib/appsignal/check_in.rb +46 -0
  12. data/lib/appsignal/cli/diagnose.rb +37 -28
  13. data/lib/appsignal/cli/install.rb +5 -1
  14. data/lib/appsignal/config.rb +57 -119
  15. data/lib/appsignal/demo.rb +2 -2
  16. data/lib/appsignal/extension/jruby.rb +14 -0
  17. data/lib/appsignal/helpers/instrumentation.rb +139 -414
  18. data/lib/appsignal/helpers/metrics.rb +0 -16
  19. data/lib/appsignal/hooks/action_cable.rb +8 -8
  20. data/lib/appsignal/hooks/active_job.rb +2 -2
  21. data/lib/appsignal/hooks/at_exit.rb +37 -0
  22. data/lib/appsignal/hooks.rb +1 -16
  23. data/lib/appsignal/integrations/action_cable.rb +2 -2
  24. data/lib/appsignal/integrations/capistrano/appsignal.cap +2 -4
  25. data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +1 -4
  26. data/lib/appsignal/integrations/delayed_job_plugin.rb +3 -3
  27. data/lib/appsignal/integrations/http.rb +2 -7
  28. data/lib/appsignal/integrations/que.rb +2 -2
  29. data/lib/appsignal/integrations/railtie.rb +26 -59
  30. data/lib/appsignal/integrations/rake.rb +2 -2
  31. data/lib/appsignal/integrations/resque.rb +2 -2
  32. data/lib/appsignal/integrations/shoryuken.rb +4 -4
  33. data/lib/appsignal/integrations/sidekiq.rb +3 -3
  34. data/lib/appsignal/integrations/webmachine.rb +2 -2
  35. data/lib/appsignal/loaders.rb +1 -1
  36. data/lib/appsignal/probes.rb +0 -9
  37. data/lib/appsignal/rack/abstract_middleware.rb +4 -26
  38. data/lib/appsignal/rack/event_handler.rb +4 -4
  39. data/lib/appsignal/rack/rails_instrumentation.rb +1 -1
  40. data/lib/appsignal/rack.rb +0 -25
  41. data/lib/appsignal/sample_data.rb +95 -0
  42. data/lib/appsignal/transaction.rb +235 -361
  43. data/lib/appsignal/utils/rails_helper.rb +4 -0
  44. data/lib/appsignal/version.rb +1 -1
  45. data/lib/appsignal.rb +20 -62
  46. data/spec/lib/appsignal/auth_check_spec.rb +1 -1
  47. data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
  48. data/spec/lib/appsignal/capistrano3_spec.rb +53 -13
  49. data/spec/lib/appsignal/{heartbeat_spec.rb → check_in_spec.rb} +45 -36
  50. data/spec/lib/appsignal/cli/demo_spec.rb +7 -27
  51. data/spec/lib/appsignal/cli/diagnose_spec.rb +145 -110
  52. data/spec/lib/appsignal/config_spec.rb +304 -379
  53. data/spec/lib/appsignal/extension_install_failure_spec.rb +5 -1
  54. data/spec/lib/appsignal/extension_spec.rb +5 -1
  55. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +1 -1
  56. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +1 -2
  57. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +1 -0
  58. data/spec/lib/appsignal/hooks/activejob_spec.rb +7 -12
  59. data/spec/lib/appsignal/hooks/at_exit_spec.rb +72 -0
  60. data/spec/lib/appsignal/hooks/gvl_spec.rb +10 -5
  61. data/spec/lib/appsignal/hooks/http_spec.rb +3 -3
  62. data/spec/lib/appsignal/hooks/net_http_spec.rb +3 -3
  63. data/spec/lib/appsignal/hooks/rake_spec.rb +6 -9
  64. data/spec/lib/appsignal/hooks/redis_client_spec.rb +5 -10
  65. data/spec/lib/appsignal/hooks/redis_spec.rb +4 -7
  66. data/spec/lib/appsignal/hooks/resque_spec.rb +3 -5
  67. data/spec/lib/appsignal/hooks_spec.rb +0 -41
  68. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +29 -20
  69. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +4 -9
  70. data/spec/lib/appsignal/integrations/http_spec.rb +0 -21
  71. data/spec/lib/appsignal/integrations/railtie_spec.rb +179 -157
  72. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +3 -5
  73. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +48 -62
  74. data/spec/lib/appsignal/loaders/hanami_spec.rb +6 -9
  75. data/spec/lib/appsignal/loaders/padrino_spec.rb +6 -10
  76. data/spec/lib/appsignal/loaders/sinatra_spec.rb +6 -9
  77. data/spec/lib/appsignal/loaders_spec.rb +8 -1
  78. data/spec/lib/appsignal/marker_spec.rb +1 -1
  79. data/spec/lib/appsignal/probes_spec.rb +4 -83
  80. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +4 -63
  81. data/spec/lib/appsignal/rack/event_handler_spec.rb +18 -15
  82. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +3 -11
  83. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +4 -5
  84. data/spec/lib/appsignal/sample_data_spec.rb +174 -0
  85. data/spec/lib/appsignal/transaction_spec.rb +791 -1031
  86. data/spec/lib/appsignal/transmitter_spec.rb +6 -8
  87. data/spec/lib/appsignal_spec.rb +294 -643
  88. data/spec/spec_helper.rb +1 -3
  89. data/spec/support/fixtures/projects/valid/config/appsignal.yml +4 -7
  90. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +16 -0
  91. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +56 -0
  92. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +5 -0
  93. data/spec/support/helpers/api_request_helper.rb +3 -2
  94. data/spec/support/helpers/config_helpers.rb +41 -11
  95. data/spec/support/helpers/dependency_helper.rb +8 -0
  96. data/spec/support/helpers/log_helpers.rb +1 -0
  97. data/spec/support/helpers/rails_helper.rb +6 -6
  98. data/spec/support/helpers/transaction_helpers.rb +2 -24
  99. data/spec/support/matchers/transaction.rb +3 -3
  100. data/spec/support/mocks/appsignal_mock.rb +3 -3
  101. data/spec/support/mocks/mock_probe.rb +2 -0
  102. data/spec/support/testing.rb +2 -2
  103. metadata +14 -23
  104. data/gemfiles/que_beta.gemfile +0 -5
  105. data/lib/appsignal/heartbeat.rb +0 -59
  106. data/lib/appsignal/helpers/heartbeats.rb +0 -44
  107. data/lib/appsignal/integrations/grape.rb +0 -35
  108. data/lib/appsignal/integrations/hanami.rb +0 -13
  109. data/lib/appsignal/integrations/padrino.rb +0 -13
  110. data/lib/appsignal/integrations/sinatra.rb +0 -13
  111. data/lib/appsignal/rack/generic_instrumentation.rb +0 -22
  112. data/lib/appsignal/rack/streaming_listener.rb +0 -28
  113. data/spec/lib/appsignal/integrations/grape_spec.rb +0 -36
  114. data/spec/lib/appsignal/integrations/hanami_spec.rb +0 -17
  115. data/spec/lib/appsignal/integrations/padrino_spec.rb +0 -15
  116. data/spec/lib/appsignal/integrations/sinatra_spec.rb +0 -15
  117. data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +0 -81
  118. data/spec/lib/appsignal/rack/streaming_listener_spec.rb +0 -69
  119. data/spec/support/fixtures/projects/valid/config/environments/development.rb +0 -0
  120. data/spec/support/fixtures/projects/valid/config/environments/production.rb +0 -0
  121. data/spec/support/fixtures/projects/valid/config/environments/test.rb +0 -0
  122. data/spec/support/rails/my_app.rb +0 -6
  123. /data/spec/support/fixtures/projects/{valid/config/application.rb → valid_with_rails_app/log/.gitkeep} +0 -0
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "appsignal"
4
-
5
- Appsignal::Utils::StdoutAndLoggerMessage.warning(
6
- "The 'require \"appsignal/integrations/padrino\"' file require integration " \
7
- "method is deprecated. " \
8
- "Please follow the Padrino setup guide in our docs for the new method: " \
9
- "https://docs.appsignal.com/ruby/integrations/padrino.html"
10
- )
11
-
12
- Appsignal.load(:padrino)
13
- Appsignal.start
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "appsignal"
4
-
5
- Appsignal::Utils::StdoutAndLoggerMessage.warning(
6
- "The 'require \"appsignal/integrations/sinatra\"' file require integration " \
7
- "method is deprecated. " \
8
- "Please follow the Sinatra setup guide in our docs for the new method: " \
9
- "https://docs.appsignal.com/ruby/integrations/sinatra.html"
10
- )
11
-
12
- Appsignal.load(:sinatra)
13
- Appsignal.start
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Appsignal
4
- module Rack
5
- # @deprecated Use {InstrumentationMiddleware} instead.
6
- # @api private
7
- class GenericInstrumentation < AbstractMiddleware
8
- def initialize(app, options = {})
9
- options[:instrument_event_name] ||= "process_action.generic"
10
- super
11
- end
12
-
13
- def add_transaction_metadata_after(transaction, request)
14
- super
15
- transaction.set_action_if_nil("unknown")
16
- end
17
- end
18
-
19
- # @api private
20
- class GenericInstrumentationAlias < GenericInstrumentation; end
21
- end
22
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Appsignal::Utils::StdoutAndLoggerMessage.warning \
4
- "The constant Appsignal::Rack::StreamingListener has been deprecated. " \
5
- "Please update the constant name to " \
6
- "Appsignal::Rack::InstrumentationMiddleware."
7
-
8
- module Appsignal
9
- module Rack
10
- # Instrumentation middleware that tracks exceptions in streaming Rack
11
- # responses.
12
- #
13
- # @deprecated Use {InstrumentationMiddleware} instead.
14
- # @api private
15
- class StreamingListener < AbstractMiddleware
16
- def initialize(app, options = {})
17
- options[:instrument_event_name] ||= "process_streaming_request.rack"
18
- super
19
- end
20
-
21
- def add_transaction_metadata_after(transaction, request)
22
- transaction.set_action_if_nil(request.env["appsignal.action"])
23
-
24
- super
25
- end
26
- end
27
- end
28
- end
@@ -1,36 +0,0 @@
1
- if DependencyHelper.grape_present?
2
- require "appsignal/integrations/grape"
3
-
4
- context "Appsignal::Grape::Middleware constant" do
5
- let(:err_stream) { std_stream }
6
- let(:stderr) { err_stream.read }
7
-
8
- it "returns the Rack::GrapeMiddleware constant calling the Grape::Middleware constant" do
9
- silence { expect(Appsignal::Grape::Middleware).to be(Appsignal::Rack::GrapeMiddleware) }
10
- end
11
-
12
- it "prints a deprecation warning to STDERR" do
13
- capture_std_streams(std_stream, err_stream) do
14
- expect(Appsignal::Grape::Middleware).to be(Appsignal::Rack::GrapeMiddleware)
15
- end
16
-
17
- expect(stderr).to include(
18
- "appsignal WARNING: The constant Appsignal::Grape::Middleware has been deprecated."
19
- )
20
- end
21
-
22
- it "logs a warning" do
23
- logs =
24
- capture_logs do
25
- silence do
26
- expect(Appsignal::Grape::Middleware).to be(Appsignal::Rack::GrapeMiddleware)
27
- end
28
- end
29
-
30
- expect(logs).to contains_log(
31
- :warn,
32
- "The constant Appsignal::Grape::Middleware has been deprecated."
33
- )
34
- end
35
- end
36
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if DependencyHelper.hanami_present?
4
- describe "Hanami integration" do
5
- it "loads the Hanami loader" do
6
- ENV["APPSIGNAL_APP_NAME"] = "test/sinatra"
7
- ENV["APPSIGNAL_PUSH_API_KEY"] = "test-key"
8
-
9
- require "appsignal/integrations/hanami"
10
-
11
- expect(Appsignal::Loaders.instances).to include(
12
- :hanami => kind_of(Appsignal::Loaders::HanamiLoader)
13
- )
14
- expect(Appsignal.active?).to be(true)
15
- end
16
- end
17
- end
@@ -1,15 +0,0 @@
1
- if DependencyHelper.padrino_present?
2
- describe "Padrino integration" do
3
- it "loads the Padrino loader" do
4
- ENV["APPSIGNAL_APP_NAME"] = "test/sinatra"
5
- ENV["APPSIGNAL_PUSH_API_KEY"] = "test-key"
6
-
7
- require "appsignal/integrations/padrino"
8
-
9
- expect(Appsignal::Loaders.instances).to include(
10
- :padrino => kind_of(Appsignal::Loaders::PadrinoLoader)
11
- )
12
- expect(Appsignal.active?).to be(true)
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- if DependencyHelper.padrino_present?
2
- describe "Sinatra integration" do
3
- it "loads the Sinatra loader" do
4
- ENV["APPSIGNAL_APP_NAME"] = "test/sinatra"
5
- ENV["APPSIGNAL_PUSH_API_KEY"] = "test-key"
6
-
7
- require "appsignal/integrations/sinatra"
8
-
9
- expect(Appsignal::Loaders.instances).to include(
10
- :sinatra => kind_of(Appsignal::Loaders::SinatraLoader)
11
- )
12
- expect(Appsignal.active?).to be(true)
13
- end
14
- end
15
- end
@@ -1,81 +0,0 @@
1
- describe "Appsignal::Rack::GenericInstrumentation" do
2
- describe "Appsignal::Rack::GenericInstrumentation constant" do
3
- let(:err_stream) { std_stream }
4
- let(:stderr) { err_stream.read }
5
- before do
6
- if Appsignal::Rack.const_defined?(:GenericInstrumentation)
7
- hide_const "Appsignal::Rack::GenericInstrumentation"
8
- end
9
- end
10
-
11
- it "returns the Rack::GenericInstrumentation constant" do
12
- silence do
13
- expect(Appsignal::Rack::GenericInstrumentation)
14
- .to be(Appsignal::Rack::GenericInstrumentationAlias)
15
- end
16
- end
17
-
18
- it "prints a deprecation warning to STDERR" do
19
- capture_std_streams(std_stream, err_stream) do
20
- Appsignal::Rack::GenericInstrumentation
21
- end
22
-
23
- expect(stderr).to include(
24
- "appsignal WARNING: The constant Appsignal::Rack::GenericInstrumentation " \
25
- "has been deprecated."
26
- )
27
- end
28
-
29
- it "logs a warning" do
30
- logs =
31
- capture_logs do
32
- silence do
33
- Appsignal::Rack::GenericInstrumentation
34
- end
35
- end
36
-
37
- expect(logs).to contains_log(
38
- :warn,
39
- "The constant Appsignal::Rack::GenericInstrumentation has been deprecated."
40
- )
41
- end
42
- end
43
-
44
- describe "middleware" do
45
- let(:app) { double(:call => true) }
46
- let(:env) { Rack::MockRequest.env_for("/some/path") }
47
- let(:middleware) { Appsignal::Rack::GenericInstrumentation.new(app, {}) }
48
-
49
- before { start_agent }
50
- around { |example| keep_transactions { example.run } }
51
-
52
- def make_request(env)
53
- middleware.call(env)
54
- end
55
-
56
- context "without an exception" do
57
- it "reports a process_action.generic event" do
58
- make_request(env)
59
-
60
- expect(last_transaction).to include_event("name" => "process_action.generic")
61
- end
62
- end
63
-
64
- context "with action name env" do
65
- it "reports the appsignal.action env as the action name" do
66
- env["appsignal.action"] = "MyAction"
67
- make_request(env)
68
-
69
- expect(last_transaction).to have_action("MyAction")
70
- end
71
- end
72
-
73
- context "without action name metadata" do
74
- it "reports 'unknown' as the action name" do
75
- make_request(env)
76
-
77
- expect(last_transaction).to have_action("unknown")
78
- end
79
- end
80
- end
81
- end
@@ -1,69 +0,0 @@
1
- describe "Appsignal::Rack::StreamingListener" do
2
- def load_middleware
3
- load "lib/appsignal/rack/streaming_listener.rb"
4
- end
5
-
6
- describe "loading the streaming_listener integrations file" do
7
- let(:err_stream) { std_stream }
8
- let(:stderr) { err_stream.read }
9
- after { Appsignal::Rack.send(:remove_const, :StreamingListener) }
10
-
11
- it "prints a deprecation warning to STDERR" do
12
- capture_std_streams(std_stream, err_stream) do
13
- load_middleware
14
- end
15
-
16
- expect(stderr).to include(
17
- "appsignal WARNING: The constant Appsignal::Rack::StreamingListener " \
18
- "has been deprecated."
19
- )
20
- end
21
-
22
- it "logs a warning" do
23
- logs =
24
- capture_logs do
25
- silence do
26
- load_middleware
27
- end
28
- end
29
-
30
- expect(logs).to contains_log(
31
- :warn,
32
- "The constant Appsignal::Rack::StreamingListener has been deprecated."
33
- )
34
- end
35
- end
36
-
37
- describe "middleware" do
38
- let(:env) { {} }
39
- let(:app) { DummyApp.new }
40
- let(:middleware) { Appsignal::Rack::StreamingListener.new(app, {}) }
41
- around { |example| keep_transactions { example.run } }
42
- before(:context) { load_middleware }
43
- before { start_agent }
44
-
45
- def make_request
46
- middleware.call(env)
47
- end
48
-
49
- it "instruments the call" do
50
- make_request
51
-
52
- expect(last_transaction).to include_event("name" => "process_streaming_request.rack")
53
- end
54
-
55
- it "set no action by default" do
56
- make_request
57
-
58
- expect(last_transaction).to_not have_action
59
- end
60
-
61
- it "set `appsignal.action` to the action name" do
62
- env["appsignal.action"] = "Action"
63
-
64
- make_request
65
-
66
- expect(last_transaction).to have_action("Action")
67
- end
68
- end
69
- end
@@ -1,6 +0,0 @@
1
- module MyApp
2
- class Application < Rails::Application
3
- config.active_support.deprecation = proc { |message, stack| }
4
- config.eager_load = false
5
- end
6
- end