appsignal 3.9.2-java → 3.9.3-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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +3135 -0
- data/.rubocop.yml +28 -20
- data/.rubocop_todo.yml +7 -33
- data/CHANGELOG.md +38 -0
- data/Rakefile +79 -64
- data/appsignal.gemspec +1 -1
- data/build_matrix.yml +109 -179
- data/ext/base.rb +1 -1
- data/gemfiles/hanami-2.1.gemfile +7 -0
- data/lib/appsignal/cli/diagnose.rb +1 -1
- data/lib/appsignal/config.rb +1 -1
- data/lib/appsignal/demo.rb +0 -1
- data/lib/appsignal/environment.rb +5 -1
- data/lib/appsignal/extension/jruby.rb +1 -1
- data/lib/appsignal/helpers/instrumentation.rb +1 -1
- data/lib/appsignal/integrations/grape.rb +19 -47
- data/lib/appsignal/integrations/hanami.rb +8 -7
- data/lib/appsignal/integrations/padrino.rb +46 -43
- data/lib/appsignal/integrations/railtie.rb +0 -3
- data/lib/appsignal/integrations/sinatra.rb +0 -1
- data/lib/appsignal/probes/gvl.rb +24 -2
- data/lib/appsignal/probes/sidekiq.rb +1 -1
- data/lib/appsignal/probes.rb +1 -1
- data/lib/appsignal/rack/abstract_middleware.rb +62 -28
- data/lib/appsignal/rack/event_handler.rb +12 -3
- data/lib/appsignal/rack/grape_middleware.rb +40 -0
- data/lib/appsignal/rack/hanami_middleware.rb +1 -11
- data/lib/appsignal/rack/rails_instrumentation.rb +14 -55
- data/lib/appsignal/utils/integration_memory_logger.rb +78 -0
- data/lib/appsignal/utils.rb +1 -0
- data/lib/appsignal/version.rb +1 -1
- data/lib/appsignal.rb +34 -33
- data/spec/.rubocop.yml +1 -1
- data/spec/lib/appsignal/cli/diagnose_spec.rb +1 -1
- data/spec/lib/appsignal/cli/install_spec.rb +3 -3
- data/spec/lib/appsignal/config_spec.rb +7 -5
- data/spec/lib/appsignal/demo_spec.rb +38 -41
- data/spec/lib/appsignal/hooks/action_cable_spec.rb +86 -167
- data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +8 -20
- data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +38 -84
- data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +16 -37
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +4 -4
- data/spec/lib/appsignal/hooks/activejob_spec.rb +111 -200
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +54 -91
- data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +14 -32
- data/spec/lib/appsignal/hooks/excon_spec.rb +8 -12
- data/spec/lib/appsignal/hooks/net_http_spec.rb +7 -42
- data/spec/lib/appsignal/hooks/rake_spec.rb +9 -19
- data/spec/lib/appsignal/hooks/redis_client_spec.rb +18 -30
- data/spec/lib/appsignal/hooks/redis_spec.rb +10 -16
- data/spec/lib/appsignal/hooks/resque_spec.rb +42 -62
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +33 -74
- data/spec/lib/appsignal/integrations/hanami_spec.rb +79 -21
- data/spec/lib/appsignal/integrations/http_spec.rb +12 -20
- data/spec/lib/appsignal/integrations/net_http_spec.rb +33 -0
- data/spec/lib/appsignal/integrations/object_spec.rb +29 -36
- data/spec/lib/appsignal/integrations/padrino_spec.rb +47 -70
- data/spec/lib/appsignal/integrations/que_spec.rb +43 -70
- data/spec/lib/appsignal/integrations/railtie_spec.rb +26 -67
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +86 -160
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +0 -1
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +28 -39
- data/spec/lib/appsignal/probes/gvl_spec.rb +80 -3
- data/spec/lib/appsignal/probes_spec.rb +7 -4
- data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +215 -106
- data/spec/lib/appsignal/rack/event_handler_spec.rb +81 -78
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +2 -12
- data/spec/lib/appsignal/rack/grape_middleware_spec.rb +234 -0
- data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +2 -16
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +67 -131
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +36 -44
- data/spec/lib/appsignal/rack/streaming_listener_spec.rb +68 -86
- data/spec/lib/appsignal/transaction_spec.rb +76 -90
- data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +163 -0
- data/spec/lib/appsignal_spec.rb +363 -342
- data/spec/support/helpers/dependency_helper.rb +6 -1
- data/spec/support/helpers/std_streams_helper.rb +1 -1
- data/spec/support/helpers/transaction_helpers.rb +8 -0
- data/spec/support/matchers/transaction.rb +185 -0
- data/spec/support/mocks/dummy_app.rb +20 -0
- data/spec/support/shared_examples/instrument.rb +17 -12
- data/spec/support/testing.rb +18 -9
- metadata +15 -10
- data/.semaphore/semaphore.yml +0 -2347
- data/script/lint_git +0 -22
- data/spec/lib/appsignal/integrations/grape_spec.rb +0 -239
- data/spec/support/matchers/be_completed.rb +0 -5
- /data/gemfiles/{hanami.gemfile → hanami-2.0.gemfile} +0 -0
|
@@ -64,23 +64,18 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
64
64
|
context "with a normal call" do
|
|
65
65
|
it "wraps it in a transaction" do
|
|
66
66
|
perform
|
|
67
|
-
|
|
68
|
-
expect(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
"priority" => 1,
|
|
78
|
-
"attempts" => 1,
|
|
79
|
-
"queue" => "default",
|
|
80
|
-
"id" => "123"
|
|
81
|
-
},
|
|
82
|
-
"params" => ["argument"]
|
|
67
|
+
transaction = last_transaction
|
|
68
|
+
expect(transaction).to have_action("TestClass#perform")
|
|
69
|
+
expect(transaction).to have_namespace("background_job")
|
|
70
|
+
expect(transaction).to_not have_error
|
|
71
|
+
expect(transaction).to include_event(:name => "perform_job.delayed_job")
|
|
72
|
+
expect(transaction).to include_sample_metadata(
|
|
73
|
+
"priority" => 1,
|
|
74
|
+
"attempts" => 1,
|
|
75
|
+
"queue" => "default",
|
|
76
|
+
"id" => "123"
|
|
83
77
|
)
|
|
78
|
+
expect(transaction).to include_params(["argument"])
|
|
84
79
|
end
|
|
85
80
|
|
|
86
81
|
context "with more complex params" do
|
|
@@ -93,13 +88,8 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
93
88
|
|
|
94
89
|
it "adds the more complex arguments" do
|
|
95
90
|
perform
|
|
96
|
-
|
|
97
|
-
expect(
|
|
98
|
-
"params" => {
|
|
99
|
-
"foo" => "Foo",
|
|
100
|
-
"bar" => "Bar"
|
|
101
|
-
}
|
|
102
|
-
)
|
|
91
|
+
|
|
92
|
+
expect(last_transaction).to include_params("foo" => "Foo", "bar" => "Bar")
|
|
103
93
|
end
|
|
104
94
|
|
|
105
95
|
context "with parameter filtering" do
|
|
@@ -110,13 +100,8 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
110
100
|
|
|
111
101
|
it "filters selected arguments" do
|
|
112
102
|
perform
|
|
113
|
-
|
|
114
|
-
expect(
|
|
115
|
-
"params" => {
|
|
116
|
-
"foo" => "[FILTERED]",
|
|
117
|
-
"bar" => "Bar"
|
|
118
|
-
}
|
|
119
|
-
)
|
|
103
|
+
|
|
104
|
+
expect(last_transaction).to include_params("foo" => "[FILTERED]", "bar" => "Bar")
|
|
120
105
|
end
|
|
121
106
|
end
|
|
122
107
|
end
|
|
@@ -125,13 +110,9 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
125
110
|
let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
|
|
126
111
|
|
|
127
112
|
it "reports queue_start with run_at time" do
|
|
128
|
-
# TODO: Not available in transaction.to_h yet.
|
|
129
|
-
# https://github.com/appsignal/appsignal-agent/issues/293
|
|
130
|
-
expect(Appsignal).to receive(:monitor_transaction).with(
|
|
131
|
-
"perform_job.delayed_job",
|
|
132
|
-
a_hash_including(:queue_start => run_at)
|
|
133
|
-
).and_call_original
|
|
134
113
|
perform
|
|
114
|
+
|
|
115
|
+
expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
|
|
135
116
|
end
|
|
136
117
|
end
|
|
137
118
|
|
|
@@ -142,7 +123,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
142
123
|
|
|
143
124
|
it "wraps it in a transaction using the class method job name" do
|
|
144
125
|
perform
|
|
145
|
-
expect(last_transaction
|
|
126
|
+
expect(last_transaction).to have_action("CustomClassMethod.perform")
|
|
146
127
|
end
|
|
147
128
|
end
|
|
148
129
|
|
|
@@ -155,7 +136,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
155
136
|
let(:payload_object) { double(:appsignal_name => "CustomClass#perform") }
|
|
156
137
|
|
|
157
138
|
it "wraps it in a transaction using the custom name" do
|
|
158
|
-
expect(last_transaction
|
|
139
|
+
expect(last_transaction).to have_action("CustomClass#perform")
|
|
159
140
|
end
|
|
160
141
|
end
|
|
161
142
|
|
|
@@ -163,7 +144,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
163
144
|
let(:payload_object) { double(:appsignal_name => Object.new) }
|
|
164
145
|
|
|
165
146
|
it "wraps it in a transaction using the original job name" do
|
|
166
|
-
expect(last_transaction
|
|
147
|
+
expect(last_transaction).to have_action("TestClass#perform")
|
|
167
148
|
end
|
|
168
149
|
end
|
|
169
150
|
|
|
@@ -172,7 +153,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
172
153
|
|
|
173
154
|
it "wraps it in a transaction using the custom name" do
|
|
174
155
|
perform
|
|
175
|
-
expect(last_transaction
|
|
156
|
+
expect(last_transaction).to have_action("CustomClassMethod.perform")
|
|
176
157
|
end
|
|
177
158
|
end
|
|
178
159
|
end
|
|
@@ -182,7 +163,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
182
163
|
let(:payload_object) { double(:appsignal_name => "CustomClassHash#perform") }
|
|
183
164
|
|
|
184
165
|
it "wraps it in a transaction using the custom name" do
|
|
185
|
-
expect(last_transaction
|
|
166
|
+
expect(last_transaction).to have_action("CustomClassHash#perform")
|
|
186
167
|
end
|
|
187
168
|
end
|
|
188
169
|
|
|
@@ -190,7 +171,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
190
171
|
let(:payload_object) { double(:appsignal_name => Object.new) }
|
|
191
172
|
|
|
192
173
|
it "wraps it in a transaction using the original job name" do
|
|
193
|
-
expect(last_transaction
|
|
174
|
+
expect(last_transaction).to have_action("TestClass#perform")
|
|
194
175
|
end
|
|
195
176
|
end
|
|
196
177
|
|
|
@@ -199,7 +180,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
199
180
|
|
|
200
181
|
it "wraps it in a transaction using the custom name" do
|
|
201
182
|
perform
|
|
202
|
-
expect(last_transaction
|
|
183
|
+
expect(last_transaction).to have_action("CustomClassMethod.perform")
|
|
203
184
|
end
|
|
204
185
|
end
|
|
205
186
|
end
|
|
@@ -221,7 +202,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
221
202
|
# of `self.appsignal_name`. Since this isn't a valid `String`
|
|
222
203
|
# we return the default job name as action name.
|
|
223
204
|
it "wraps it in a transaction using the original job name" do
|
|
224
|
-
expect(last_transaction
|
|
205
|
+
expect(last_transaction).to have_action("TestClass#perform")
|
|
225
206
|
end
|
|
226
207
|
end
|
|
227
208
|
end
|
|
@@ -234,7 +215,7 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
234
215
|
|
|
235
216
|
it "appends #perform to the class name" do
|
|
236
217
|
perform
|
|
237
|
-
expect(last_transaction
|
|
218
|
+
expect(last_transaction).to have_action("Banana#perform")
|
|
238
219
|
end
|
|
239
220
|
end
|
|
240
221
|
|
|
@@ -267,23 +248,19 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
267
248
|
|
|
268
249
|
it "wraps it in a transaction with the correct params" do
|
|
269
250
|
perform
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
)
|
|
276
|
-
expect(
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
"
|
|
280
|
-
|
|
281
|
-
"attempts" => 1,
|
|
282
|
-
"queue" => "default",
|
|
283
|
-
"id" => "123"
|
|
284
|
-
},
|
|
285
|
-
"params" => ["activejob_argument"]
|
|
251
|
+
|
|
252
|
+
transaction = last_transaction
|
|
253
|
+
expect(transaction).to have_namespace("background_job")
|
|
254
|
+
expect(transaction).to have_action("TestClass#perform")
|
|
255
|
+
expect(transaction).to_not have_error
|
|
256
|
+
expect(transaction).to include_event("name" => "perform_job.delayed_job")
|
|
257
|
+
expect(transaction).to include_sample_metadata(
|
|
258
|
+
"priority" => 1,
|
|
259
|
+
"attempts" => 1,
|
|
260
|
+
"queue" => "default",
|
|
261
|
+
"id" => "123"
|
|
286
262
|
)
|
|
263
|
+
expect(transaction).to include_params(["activejob_argument"])
|
|
287
264
|
end
|
|
288
265
|
|
|
289
266
|
context "with more complex params" do
|
|
@@ -296,13 +273,11 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
296
273
|
|
|
297
274
|
it "adds the more complex arguments" do
|
|
298
275
|
perform
|
|
299
|
-
|
|
300
|
-
expect(
|
|
301
|
-
expect(
|
|
302
|
-
"
|
|
303
|
-
|
|
304
|
-
"bar" => "Bar"
|
|
305
|
-
}
|
|
276
|
+
transaction = last_transaction
|
|
277
|
+
expect(transaction).to have_action("TestClass#perform")
|
|
278
|
+
expect(transaction).to include_params(
|
|
279
|
+
"foo" => "Foo",
|
|
280
|
+
"bar" => "Bar"
|
|
306
281
|
)
|
|
307
282
|
end
|
|
308
283
|
|
|
@@ -314,13 +289,11 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
314
289
|
|
|
315
290
|
it "filters selected arguments" do
|
|
316
291
|
perform
|
|
317
|
-
|
|
318
|
-
expect(
|
|
319
|
-
expect(
|
|
320
|
-
"
|
|
321
|
-
|
|
322
|
-
"bar" => "Bar"
|
|
323
|
-
}
|
|
292
|
+
transaction = last_transaction
|
|
293
|
+
expect(transaction).to have_action("TestClass#perform")
|
|
294
|
+
expect(transaction).to include_params(
|
|
295
|
+
"foo" => "[FILTERED]",
|
|
296
|
+
"bar" => "Bar"
|
|
324
297
|
)
|
|
325
298
|
end
|
|
326
299
|
end
|
|
@@ -330,11 +303,9 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
330
303
|
let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
|
|
331
304
|
|
|
332
305
|
it "reports queue_start with run_at time" do
|
|
333
|
-
expect(Appsignal).to receive(:monitor_transaction).with(
|
|
334
|
-
"perform_job.delayed_job",
|
|
335
|
-
a_hash_including(:queue_start => run_at)
|
|
336
|
-
).and_call_original
|
|
337
306
|
perform
|
|
307
|
+
|
|
308
|
+
expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
|
|
338
309
|
end
|
|
339
310
|
end
|
|
340
311
|
end
|
|
@@ -352,18 +323,10 @@ describe Appsignal::Hooks::DelayedJobHook do
|
|
|
352
323
|
perform
|
|
353
324
|
end.to raise_error(error)
|
|
354
325
|
|
|
355
|
-
|
|
356
|
-
expect(
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"error" => {
|
|
360
|
-
"name" => "ExampleException",
|
|
361
|
-
"message" => "uh oh",
|
|
362
|
-
# TODO: backtrace should be an Array of Strings
|
|
363
|
-
# https://github.com/appsignal/appsignal-agent/issues/294
|
|
364
|
-
"backtrace" => kind_of(String)
|
|
365
|
-
}
|
|
366
|
-
)
|
|
326
|
+
transaction = last_transaction
|
|
327
|
+
expect(transaction).to have_namespace("background_job")
|
|
328
|
+
expect(transaction).to have_action("TestClass#perform")
|
|
329
|
+
expect(transaction).to have_error("ExampleException", "uh oh")
|
|
367
330
|
end
|
|
368
331
|
end
|
|
369
332
|
end
|
|
@@ -53,22 +53,13 @@ if DependencyHelper.dry_monitor_present?
|
|
|
53
53
|
|
|
54
54
|
it "creates an sql event" do
|
|
55
55
|
notifications.instrument(event_id, payload)
|
|
56
|
-
expect(transaction
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"child_gc_duration" => kind_of(Float),
|
|
64
|
-
"count" => 1,
|
|
65
|
-
"duration" => kind_of(Float),
|
|
66
|
-
"gc_duration" => kind_of(Float),
|
|
67
|
-
"name" => "query.postgres",
|
|
68
|
-
"start" => kind_of(Float),
|
|
69
|
-
"title" => "query.postgres"
|
|
70
|
-
}
|
|
71
|
-
])
|
|
56
|
+
expect(transaction).to include_event(
|
|
57
|
+
"body" => "SELECT * FROM users",
|
|
58
|
+
"body_format" => Appsignal::EventFormatter::SQL_BODY_FORMAT,
|
|
59
|
+
"count" => 1,
|
|
60
|
+
"name" => "query.postgres",
|
|
61
|
+
"title" => "query.postgres"
|
|
62
|
+
)
|
|
72
63
|
end
|
|
73
64
|
end
|
|
74
65
|
|
|
@@ -82,22 +73,13 @@ if DependencyHelper.dry_monitor_present?
|
|
|
82
73
|
|
|
83
74
|
it "creates a generic event" do
|
|
84
75
|
notifications.instrument(event_id, payload)
|
|
85
|
-
expect(transaction
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
"child_gc_duration" => kind_of(Float),
|
|
93
|
-
"count" => 1,
|
|
94
|
-
"duration" => kind_of(Float),
|
|
95
|
-
"gc_duration" => kind_of(Float),
|
|
96
|
-
"name" => "foo",
|
|
97
|
-
"start" => kind_of(Float),
|
|
98
|
-
"title" => ""
|
|
99
|
-
}
|
|
100
|
-
])
|
|
76
|
+
expect(transaction).to include_event(
|
|
77
|
+
"body" => "",
|
|
78
|
+
"body_format" => Appsignal::EventFormatter::DEFAULT,
|
|
79
|
+
"count" => 1,
|
|
80
|
+
"name" => "foo",
|
|
81
|
+
"title" => ""
|
|
82
|
+
)
|
|
101
83
|
end
|
|
102
84
|
end
|
|
103
85
|
end
|
|
@@ -40,12 +40,10 @@ describe Appsignal::Hooks::ExconHook do
|
|
|
40
40
|
}
|
|
41
41
|
Excon.defaults[:instrumentor].instrument("excon.request", data) {} # rubocop:disable Lint/EmptyBlock
|
|
42
42
|
|
|
43
|
-
expect(transaction
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"body" => ""
|
|
48
|
-
)
|
|
43
|
+
expect(transaction).to include_event(
|
|
44
|
+
"name" => "request.excon",
|
|
45
|
+
"title" => "GET http://www.google.com",
|
|
46
|
+
"body" => ""
|
|
49
47
|
)
|
|
50
48
|
end
|
|
51
49
|
|
|
@@ -53,12 +51,10 @@ describe Appsignal::Hooks::ExconHook do
|
|
|
53
51
|
data = { :host => "www.google.com" }
|
|
54
52
|
Excon.defaults[:instrumentor].instrument("excon.response", data) {} # rubocop:disable Lint/EmptyBlock
|
|
55
53
|
|
|
56
|
-
expect(transaction
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"body" => ""
|
|
61
|
-
)
|
|
54
|
+
expect(transaction).to include_event(
|
|
55
|
+
"name" => "response.excon",
|
|
56
|
+
"title" => "www.google.com",
|
|
57
|
+
"body" => ""
|
|
62
58
|
)
|
|
63
59
|
end
|
|
64
60
|
end
|
|
@@ -1,51 +1,16 @@
|
|
|
1
1
|
describe Appsignal::Hooks::NetHttpHook do
|
|
2
|
-
before
|
|
3
|
-
start_agent
|
|
4
|
-
end
|
|
2
|
+
before(:context) { start_agent }
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
subject { described_class.new.dependencies_present? }
|
|
4
|
+
describe "#dependencies_present?" do
|
|
5
|
+
subject { described_class.new.dependencies_present? }
|
|
9
6
|
|
|
7
|
+
context "with Net::HTTP instrumentation enabled" do
|
|
10
8
|
it { is_expected.to be_truthy }
|
|
11
9
|
end
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
Appsignal
|
|
15
|
-
|
|
16
|
-
.at_least(:once)
|
|
17
|
-
expect(Appsignal::Transaction.current).to receive(:finish_event)
|
|
18
|
-
.at_least(:once)
|
|
19
|
-
.with("request.net_http", "GET http://www.google.com", nil, 0)
|
|
20
|
-
|
|
21
|
-
stub_request(:any, "http://www.google.com/")
|
|
22
|
-
|
|
23
|
-
Net::HTTP.get_response(URI.parse("http://www.google.com"))
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it "should instrument a https request" do
|
|
27
|
-
Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
|
|
28
|
-
expect(Appsignal::Transaction.current).to receive(:start_event)
|
|
29
|
-
.at_least(:once)
|
|
30
|
-
expect(Appsignal::Transaction.current).to receive(:finish_event)
|
|
31
|
-
.at_least(:once)
|
|
32
|
-
.with("request.net_http", "GET https://www.google.com", nil, 0)
|
|
33
|
-
|
|
34
|
-
stub_request(:any, "https://www.google.com/")
|
|
35
|
-
|
|
36
|
-
uri = URI.parse("https://www.google.com")
|
|
37
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
|
38
|
-
http.use_ssl = true
|
|
39
|
-
http.get(uri.request_uri)
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
context "with Net::HTTP instrumentation disabled" do
|
|
44
|
-
before { Appsignal.config.config_hash[:instrument_net_http] = false }
|
|
45
|
-
after { Appsignal.config.config_hash[:instrument_net_http] = true }
|
|
46
|
-
|
|
47
|
-
describe "#dependencies_present?" do
|
|
48
|
-
subject { described_class.new.dependencies_present? }
|
|
11
|
+
context "with Net::HTTP instrumentation disabled" do
|
|
12
|
+
before { Appsignal.config.config_hash[:instrument_net_http] = false }
|
|
13
|
+
after { Appsignal.config.config_hash[:instrument_net_http] = true }
|
|
49
14
|
|
|
50
15
|
it { is_expected.to be_falsy }
|
|
51
16
|
end
|
|
@@ -15,8 +15,7 @@ describe Appsignal::Hooks::RakeHook do
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "creates no transaction" do
|
|
18
|
-
expect
|
|
19
|
-
expect { perform }.to_not(change { created_transactions })
|
|
18
|
+
expect { perform }.to_not(change { created_transactions.count })
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
it "calls the original task" do
|
|
@@ -42,20 +41,13 @@ describe Appsignal::Hooks::RakeHook do
|
|
|
42
41
|
it "creates a background job transaction" do
|
|
43
42
|
perform
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
expect(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"message" => "my error message",
|
|
53
|
-
"backtrace" => kind_of(String)
|
|
54
|
-
},
|
|
55
|
-
"sample_data" => hash_including(
|
|
56
|
-
"params" => { "foo" => "bar" }
|
|
57
|
-
)
|
|
58
|
-
)
|
|
44
|
+
transaction = last_transaction
|
|
45
|
+
expect(transaction).to have_id
|
|
46
|
+
expect(transaction).to have_namespace(Appsignal::Transaction::BACKGROUND_JOB)
|
|
47
|
+
expect(transaction).to have_action("task:name")
|
|
48
|
+
expect(transaction).to have_error("ExampleException", "my error message")
|
|
49
|
+
expect(transaction).to include_params("foo" => "bar")
|
|
50
|
+
expect(transaction).to be_completed
|
|
59
51
|
end
|
|
60
52
|
|
|
61
53
|
context "when first argument is not a `Rake::TaskArguments`" do
|
|
@@ -64,9 +56,7 @@ describe Appsignal::Hooks::RakeHook do
|
|
|
64
56
|
it "does not add the params to the transaction" do
|
|
65
57
|
perform
|
|
66
58
|
|
|
67
|
-
expect(last_transaction
|
|
68
|
-
"sample_data" => hash_excluding("params")
|
|
69
|
-
)
|
|
59
|
+
expect(last_transaction).to_not include_params
|
|
70
60
|
end
|
|
71
61
|
end
|
|
72
62
|
end
|
|
@@ -88,13 +88,10 @@ describe Appsignal::Hooks::RedisClientHook do
|
|
|
88
88
|
connection = RedisClient::RubyConnection.new client_config
|
|
89
89
|
expect(connection.write([:get, "key"])).to eql("stub_write")
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
"body" => "get ?",
|
|
96
|
-
"title" => "stub_id"
|
|
97
|
-
)
|
|
91
|
+
expect(transaction).to include_event(
|
|
92
|
+
"name" => "query.redis",
|
|
93
|
+
"body" => "get ?",
|
|
94
|
+
"title" => "stub_id"
|
|
98
95
|
)
|
|
99
96
|
end
|
|
100
97
|
|
|
@@ -103,16 +100,13 @@ describe Appsignal::Hooks::RedisClientHook do
|
|
|
103
100
|
script = "return redis.call('set',KEYS[1],ARGV[1])"
|
|
104
101
|
keys = ["foo"]
|
|
105
102
|
argv = ["bar"]
|
|
106
|
-
expect(connection.write([:eval, script, keys.size, keys,
|
|
107
|
-
|
|
103
|
+
expect(connection.write([:eval, script, keys.size, keys, argv]))
|
|
104
|
+
.to eql("stub_write")
|
|
108
105
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"body" => "#{script} ? ?",
|
|
114
|
-
"title" => "stub_id"
|
|
115
|
-
)
|
|
106
|
+
expect(transaction).to include_event(
|
|
107
|
+
"name" => "query.redis",
|
|
108
|
+
"body" => "#{script} ? ?",
|
|
109
|
+
"title" => "stub_id"
|
|
116
110
|
)
|
|
117
111
|
end
|
|
118
112
|
end
|
|
@@ -181,13 +175,10 @@ describe Appsignal::Hooks::RedisClientHook do
|
|
|
181
175
|
connection = RedisClient::HiredisConnection.new client_config
|
|
182
176
|
expect(connection.write([:get, "key"])).to eql("stub_write")
|
|
183
177
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
"body" => "get ?",
|
|
189
|
-
"title" => "stub_id"
|
|
190
|
-
)
|
|
178
|
+
expect(transaction).to include_event(
|
|
179
|
+
"name" => "query.redis",
|
|
180
|
+
"body" => "get ?",
|
|
181
|
+
"title" => "stub_id"
|
|
191
182
|
)
|
|
192
183
|
end
|
|
193
184
|
|
|
@@ -199,13 +190,10 @@ describe Appsignal::Hooks::RedisClientHook do
|
|
|
199
190
|
expect(connection.write([:eval, script, keys.size, keys,
|
|
200
191
|
argv])).to eql("stub_write")
|
|
201
192
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
"body" => "#{script} ? ?",
|
|
207
|
-
"title" => "stub_id"
|
|
208
|
-
)
|
|
193
|
+
expect(transaction).to include_event(
|
|
194
|
+
"name" => "query.redis",
|
|
195
|
+
"body" => "#{script} ? ?",
|
|
196
|
+
"title" => "stub_id"
|
|
209
197
|
)
|
|
210
198
|
end
|
|
211
199
|
end
|
|
@@ -81,14 +81,11 @@ describe Appsignal::Hooks::RedisHook do
|
|
|
81
81
|
client = Redis::Client.new
|
|
82
82
|
expect(client.write([:get, "key"])).to eql("stub_write")
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
"title" => "stub_id"
|
|
90
|
-
)
|
|
91
|
-
)
|
|
84
|
+
expect(transaction).to include_event(
|
|
85
|
+
"name" => "query.redis",
|
|
86
|
+
"body" => "get ?",
|
|
87
|
+
"title" => "stub_id"
|
|
88
|
+
)
|
|
92
89
|
end
|
|
93
90
|
|
|
94
91
|
it "instrument a redis script call" do
|
|
@@ -98,14 +95,11 @@ describe Appsignal::Hooks::RedisHook do
|
|
|
98
95
|
argv = ["bar"]
|
|
99
96
|
expect(client.write([:eval, script, keys.size, keys, argv])).to eql("stub_write")
|
|
100
97
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
"title" => "stub_id"
|
|
107
|
-
)
|
|
108
|
-
)
|
|
98
|
+
expect(transaction).to include_event(
|
|
99
|
+
"name" => "query.redis",
|
|
100
|
+
"body" => "#{script} ? ?",
|
|
101
|
+
"title" => "stub_id"
|
|
102
|
+
)
|
|
109
103
|
end
|
|
110
104
|
end
|
|
111
105
|
end
|