appsignal 3.9.2-java → 3.10.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +3138 -0
  3. data/.rubocop.yml +28 -20
  4. data/.rubocop_todo.yml +7 -33
  5. data/CHANGELOG.md +130 -0
  6. data/README.md +0 -1
  7. data/Rakefile +80 -65
  8. data/appsignal.gemspec +1 -1
  9. data/build_matrix.yml +112 -184
  10. data/ext/base.rb +1 -1
  11. data/gemfiles/hanami-2.1.gemfile +7 -0
  12. data/gemfiles/webmachine1.gemfile +5 -4
  13. data/lib/appsignal/cli/diagnose.rb +1 -1
  14. data/lib/appsignal/config.rb +5 -1
  15. data/lib/appsignal/demo.rb +0 -1
  16. data/lib/appsignal/environment.rb +11 -2
  17. data/lib/appsignal/extension/jruby.rb +1 -1
  18. data/lib/appsignal/helpers/instrumentation.rb +164 -2
  19. data/lib/appsignal/hooks/active_job.rb +1 -6
  20. data/lib/appsignal/integrations/grape.rb +19 -47
  21. data/lib/appsignal/integrations/hanami.rb +8 -7
  22. data/lib/appsignal/integrations/padrino.rb +51 -52
  23. data/lib/appsignal/integrations/railtie.rb +0 -3
  24. data/lib/appsignal/integrations/rake.rb +46 -12
  25. data/lib/appsignal/integrations/sidekiq.rb +1 -11
  26. data/lib/appsignal/integrations/sinatra.rb +0 -1
  27. data/lib/appsignal/integrations/webmachine.rb +15 -9
  28. data/lib/appsignal/probes/gvl.rb +24 -2
  29. data/lib/appsignal/probes/sidekiq.rb +1 -1
  30. data/lib/appsignal/probes.rb +1 -1
  31. data/lib/appsignal/rack/abstract_middleware.rb +104 -33
  32. data/lib/appsignal/rack/body_wrapper.rb +143 -0
  33. data/lib/appsignal/rack/event_handler.rb +12 -3
  34. data/lib/appsignal/rack/generic_instrumentation.rb +5 -4
  35. data/lib/appsignal/rack/grape_middleware.rb +40 -0
  36. data/lib/appsignal/rack/hanami_middleware.rb +2 -12
  37. data/lib/appsignal/rack/instrumentation_middleware.rb +62 -0
  38. data/lib/appsignal/rack/rails_instrumentation.rb +14 -57
  39. data/lib/appsignal/rack/sinatra_instrumentation.rb +1 -3
  40. data/lib/appsignal/rack/streaming_listener.rb +13 -59
  41. data/lib/appsignal/rack.rb +31 -0
  42. data/lib/appsignal/transaction.rb +50 -8
  43. data/lib/appsignal/utils/integration_memory_logger.rb +78 -0
  44. data/lib/appsignal/utils.rb +1 -0
  45. data/lib/appsignal/version.rb +1 -1
  46. data/lib/appsignal.rb +36 -33
  47. data/spec/.rubocop.yml +1 -1
  48. data/spec/lib/appsignal/cli/diagnose_spec.rb +1 -1
  49. data/spec/lib/appsignal/cli/install_spec.rb +3 -3
  50. data/spec/lib/appsignal/config_spec.rb +8 -5
  51. data/spec/lib/appsignal/demo_spec.rb +38 -41
  52. data/spec/lib/appsignal/hooks/action_cable_spec.rb +86 -167
  53. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +8 -20
  54. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +38 -84
  55. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +16 -37
  56. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +4 -4
  57. data/spec/lib/appsignal/hooks/activejob_spec.rb +111 -200
  58. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +54 -91
  59. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +14 -32
  60. data/spec/lib/appsignal/hooks/excon_spec.rb +8 -12
  61. data/spec/lib/appsignal/hooks/net_http_spec.rb +7 -42
  62. data/spec/lib/appsignal/hooks/rake_spec.rb +107 -34
  63. data/spec/lib/appsignal/hooks/redis_client_spec.rb +18 -30
  64. data/spec/lib/appsignal/hooks/redis_spec.rb +10 -16
  65. data/spec/lib/appsignal/hooks/resque_spec.rb +42 -62
  66. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +33 -74
  67. data/spec/lib/appsignal/integrations/hanami_spec.rb +79 -21
  68. data/spec/lib/appsignal/integrations/http_spec.rb +12 -20
  69. data/spec/lib/appsignal/integrations/net_http_spec.rb +33 -0
  70. data/spec/lib/appsignal/integrations/object_spec.rb +29 -36
  71. data/spec/lib/appsignal/integrations/padrino_spec.rb +190 -163
  72. data/spec/lib/appsignal/integrations/que_spec.rb +43 -70
  73. data/spec/lib/appsignal/integrations/railtie_spec.rb +26 -67
  74. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +86 -160
  75. data/spec/lib/appsignal/integrations/sinatra_spec.rb +10 -3
  76. data/spec/lib/appsignal/integrations/webmachine_spec.rb +77 -40
  77. data/spec/lib/appsignal/probes/gvl_spec.rb +80 -3
  78. data/spec/lib/appsignal/probes_spec.rb +7 -4
  79. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +302 -105
  80. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +263 -0
  81. data/spec/lib/appsignal/rack/event_handler_spec.rb +81 -78
  82. data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +70 -27
  83. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +234 -0
  84. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +2 -16
  85. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +38 -0
  86. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +67 -131
  87. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +36 -44
  88. data/spec/lib/appsignal/rack/streaming_listener_spec.rb +44 -139
  89. data/spec/lib/appsignal/transaction_spec.rb +239 -94
  90. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +163 -0
  91. data/spec/lib/appsignal_spec.rb +556 -344
  92. data/spec/support/helpers/dependency_helper.rb +6 -1
  93. data/spec/support/helpers/std_streams_helper.rb +1 -1
  94. data/spec/support/helpers/transaction_helpers.rb +8 -0
  95. data/spec/support/matchers/transaction.rb +185 -0
  96. data/spec/support/mocks/dummy_app.rb +20 -0
  97. data/spec/support/shared_examples/instrument.rb +17 -12
  98. data/spec/support/testing.rb +18 -9
  99. metadata +20 -11
  100. data/.semaphore/semaphore.yml +0 -2347
  101. data/script/lint_git +0 -22
  102. data/spec/lib/appsignal/integrations/grape_spec.rb +0 -239
  103. data/spec/support/matchers/be_completed.rb +0 -5
  104. data/support/check_versions +0 -22
  105. /data/gemfiles/{hanami.gemfile → hanami-2.0.gemfile} +0 -0
data/script/lint_git DELETED
@@ -1,22 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -eu
4
-
5
- LINTJE_VERSION="0.11.3"
6
-
7
- mkdir -p "$HOME/bin"
8
- cache_key=v1-lintje-$LINTJE_VERSION
9
- cache restore $cache_key
10
-
11
- # File exists and is executable
12
- if [ -x "$HOME/bin/lintje" ]; then
13
- echo "Restored Lintje $LINTJE_VERSION from cache"
14
- else
15
- echo "Downloading Lintje $LINTJE_VERSION"
16
- curl -L \
17
- https://github.com/tombruijn/lintje/releases/download/v$LINTJE_VERSION/x86_64-unknown-linux-gnu.tar.gz | \
18
- tar -xz --directory "$HOME/bin"
19
- cache store $cache_key "$HOME/bin/lintje"
20
- fi
21
-
22
- "$HOME/bin/lintje" "$SEMAPHORE_GIT_COMMIT_RANGE"
@@ -1,239 +0,0 @@
1
- if DependencyHelper.grape_present?
2
- require "appsignal/integrations/grape"
3
-
4
- describe Appsignal::Grape::Middleware do
5
- let(:app) do
6
- Class.new(::Grape::API) do
7
- format :json
8
- post :ping do
9
- { :message => "Hello world!" }
10
- end
11
- end
12
- end
13
- let(:api_endpoint) { app.endpoints.first }
14
- let(:env) do
15
- http_request_env_with_data \
16
- "api.endpoint" => api_endpoint,
17
- "REQUEST_METHOD" => "POST",
18
- :path => "/ping"
19
- end
20
- let(:middleware) { Appsignal::Grape::Middleware.new(api_endpoint) }
21
- around do |example|
22
- GrapeExample = Module.new
23
- GrapeExample.send(:const_set, :Api, app)
24
- example.run
25
- Object.send(:remove_const, :GrapeExample)
26
- end
27
-
28
- describe "#call" do
29
- context "when AppSignal is not active" do
30
- before(:context) do
31
- Appsignal.config = nil
32
- Appsignal::Hooks.load_hooks
33
- end
34
-
35
- it "creates no transaction" do
36
- expect(Appsignal::Transaction).to_not receive(:create)
37
- end
38
-
39
- it "calls the endpoint normally" do
40
- expect(api_endpoint).to receive(:call).with(env)
41
- end
42
-
43
- after { middleware.call(env) }
44
- end
45
-
46
- context "when AppSignal is active" do
47
- let(:transaction) { http_request_transaction }
48
- before :context do
49
- Appsignal.config = project_fixture_config
50
- expect(Appsignal.active?).to be_truthy
51
- end
52
- before do
53
- expect(Appsignal::Transaction).to receive(:create).with(
54
- kind_of(String),
55
- Appsignal::Transaction::HTTP_REQUEST,
56
- kind_of(::Rack::Request)
57
- ).and_return(transaction)
58
- end
59
-
60
- context "without error" do
61
- it "calls the endpoint" do
62
- expect(api_endpoint).to receive(:call).with(env)
63
- end
64
-
65
- it "sets metadata" do
66
- expect(transaction).to receive(:set_http_or_background_queue_start)
67
- expect(transaction).to receive(:set_action_if_nil).with("POST::GrapeExample::Api#/ping")
68
- expect(transaction).to receive(:set_metadata).with("path", "/ping")
69
- expect(transaction).to receive(:set_metadata).with("method", "POST")
70
- end
71
-
72
- after { middleware.call(env) }
73
- end
74
-
75
- context "with error" do
76
- let(:app) do
77
- Class.new(::Grape::API) do
78
- format :json
79
- post :ping do
80
- raise ExampleException
81
- end
82
- end
83
- end
84
-
85
- it "sets metadata" do
86
- expect(transaction).to receive(:set_http_or_background_queue_start)
87
- expect(transaction).to receive(:set_action_if_nil).with("POST::GrapeExample::Api#/ping")
88
- expect(transaction).to receive(:set_metadata).with("path", "/ping")
89
- expect(transaction).to receive(:set_metadata).with("method", "POST")
90
- end
91
-
92
- it "sets the error" do
93
- expect(transaction).to receive(:set_error).with(kind_of(ExampleException))
94
- end
95
-
96
- context "with env['grape.skip_appsignal_error'] = true" do
97
- before do
98
- env["grape.skip_appsignal_error"] = true
99
- end
100
-
101
- it "does not add the error" do
102
- expect(transaction).to_not receive(:set_error)
103
- end
104
- end
105
-
106
- after do
107
- expect { middleware.call(env) }.to raise_error ExampleException
108
- end
109
- end
110
-
111
- context "with route" do
112
- let(:app) do
113
- Class.new(::Grape::API) do
114
- route([:get, :post], "hello") do
115
- "Hello!"
116
- end
117
- end
118
- end
119
- let(:env) do
120
- http_request_env_with_data \
121
- "api.endpoint" => api_endpoint,
122
- "REQUEST_METHOD" => "GET",
123
- :path => ""
124
- end
125
-
126
- it "sets non-unique route path" do
127
- expect(transaction).to receive(:set_action).with("GET::GrapeExample::Api#/hello")
128
- expect(transaction).to receive(:set_metadata).with("path", "/hello")
129
- expect(transaction).to receive(:set_metadata).with("method", "GET")
130
- end
131
-
132
- after { middleware.call(env) }
133
- end
134
-
135
- context "with route_param" do
136
- let(:app) do
137
- Class.new(::Grape::API) do
138
- format :json
139
- resource :users do
140
- route_param :id do
141
- get do
142
- { :name => "Tom" }
143
- end
144
- end
145
- end
146
- end
147
- end
148
- let(:env) do
149
- http_request_env_with_data \
150
- "api.endpoint" => api_endpoint,
151
- "REQUEST_METHOD" => "GET",
152
- :path => ""
153
- end
154
-
155
- it "sets non-unique route_param path" do
156
- expect(transaction).to receive(:set_action_if_nil)
157
- .with("GET::GrapeExample::Api#/users/:id/")
158
- expect(transaction).to receive(:set_metadata).with("path", "/users/:id/")
159
- expect(transaction).to receive(:set_metadata).with("method", "GET")
160
- end
161
-
162
- after { middleware.call(env) }
163
- end
164
-
165
- context "with namespaced path" do
166
- context "with symbols" do
167
- let(:app) do
168
- Class.new(::Grape::API) do
169
- format :json
170
- namespace :v1 do
171
- namespace :beta do
172
- post :ping do
173
- { :message => "Hello namespaced world!" }
174
- end
175
- end
176
- end
177
- end
178
- end
179
-
180
- it "sets namespaced path" do
181
- expect(transaction).to receive(:set_action_if_nil)
182
- .with("POST::GrapeExample::Api#/v1/beta/ping")
183
- expect(transaction).to receive(:set_metadata).with("path", "/v1/beta/ping")
184
- expect(transaction).to receive(:set_metadata).with("method", "POST")
185
- end
186
- end
187
-
188
- context "with strings" do
189
- context "without / prefix" do
190
- let(:app) do
191
- Class.new(::Grape::API) do
192
- format :json
193
- namespace "v1" do
194
- namespace "beta" do
195
- post "ping" do
196
- { :message => "Hello namespaced world!" }
197
- end
198
- end
199
- end
200
- end
201
- end
202
-
203
- it "sets namespaced path" do
204
- expect(transaction).to receive(:set_action_if_nil)
205
- .with("POST::GrapeExample::Api#/v1/beta/ping")
206
- expect(transaction).to receive(:set_metadata).with("path", "/v1/beta/ping")
207
- expect(transaction).to receive(:set_metadata).with("method", "POST")
208
- end
209
- end
210
-
211
- context "with / prefix" do
212
- let(:app) do
213
- Class.new(::Grape::API) do
214
- format :json
215
- namespace "/v1" do
216
- namespace "/beta" do
217
- post "/ping" do
218
- { :message => "Hello namespaced world!" }
219
- end
220
- end
221
- end
222
- end
223
- end
224
-
225
- it "sets namespaced path" do
226
- expect(transaction).to receive(:set_action_if_nil)
227
- .with("POST::GrapeExample::Api#/v1/beta/ping")
228
- expect(transaction).to receive(:set_metadata).with("path", "/v1/beta/ping")
229
- expect(transaction).to receive(:set_metadata).with("method", "POST")
230
- end
231
- end
232
- end
233
-
234
- after { middleware.call(env) }
235
- end
236
- end
237
- end
238
- end
239
- end
@@ -1,5 +0,0 @@
1
- RSpec::Matchers.define :be_completed do
2
- match do |transaction|
3
- values_match? transaction.ext._completed?, true
4
- end
5
- end
@@ -1,22 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -eu
4
-
5
- actual_ruby_version=$(ruby --version)
6
- if [[ "$actual_ruby_version" == *"jruby"* ]]; then
7
- # Replace "-" from specified RUBY_VERSION string. Semaphore/rbenv version uses
8
- # a dash, where `jruby --version` uses a space.
9
- sanitized_ruby_version="${RUBY_VERSION//-/ }"
10
- else
11
- # Strip "-" from specified RUBY_VERSION string. Semaphore/rbenv version uses
12
- # a dash, where `ruby --version` does not.
13
- sanitized_ruby_version="${RUBY_VERSION//-}"
14
- fi
15
- if [[ "$actual_ruby_version" == *"$sanitized_ruby_version"* ]]; then
16
- echo "Ruby version is $RUBY_VERSION"
17
- exit 0
18
- else
19
- echo "Ruby version is: $actual_ruby_version"
20
- echo "Ruby version should be: $sanitized_ruby_version"
21
- exit 1
22
- fi
File without changes