appsignal 3.10.0-java → 3.12.0-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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/CHANGELOG.md +197 -0
  4. data/Gemfile +1 -0
  5. data/Rakefile +1 -1
  6. data/benchmark.rake +99 -42
  7. data/lib/appsignal/cli/demo.rb +0 -1
  8. data/lib/appsignal/cli/diagnose.rb +1 -1
  9. data/lib/appsignal/config.rb +204 -130
  10. data/lib/appsignal/demo.rb +16 -26
  11. data/lib/appsignal/event_formatter/rom/sql_formatter.rb +1 -0
  12. data/lib/appsignal/event_formatter.rb +3 -2
  13. data/lib/appsignal/helpers/instrumentation.rb +331 -19
  14. data/lib/appsignal/hooks/action_cable.rb +21 -16
  15. data/lib/appsignal/hooks/active_job.rb +14 -8
  16. data/lib/appsignal/hooks/delayed_job.rb +1 -1
  17. data/lib/appsignal/hooks/shoryuken.rb +3 -63
  18. data/lib/appsignal/integrations/action_cable.rb +5 -7
  19. data/lib/appsignal/integrations/active_support_notifications.rb +1 -0
  20. data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +36 -35
  21. data/lib/appsignal/integrations/data_mapper.rb +1 -0
  22. data/lib/appsignal/integrations/delayed_job_plugin.rb +27 -33
  23. data/lib/appsignal/integrations/dry_monitor.rb +1 -0
  24. data/lib/appsignal/integrations/excon.rb +1 -0
  25. data/lib/appsignal/integrations/grape.rb +7 -0
  26. data/lib/appsignal/integrations/hanami.rb +8 -43
  27. data/lib/appsignal/integrations/http.rb +1 -0
  28. data/lib/appsignal/integrations/net_http.rb +1 -0
  29. data/lib/appsignal/integrations/object.rb +6 -0
  30. data/lib/appsignal/integrations/padrino.rb +8 -73
  31. data/lib/appsignal/integrations/que.rb +13 -20
  32. data/lib/appsignal/integrations/railtie.rb +36 -14
  33. data/lib/appsignal/integrations/rake.rb +1 -5
  34. data/lib/appsignal/integrations/redis.rb +1 -0
  35. data/lib/appsignal/integrations/redis_client.rb +1 -0
  36. data/lib/appsignal/integrations/resque.rb +2 -5
  37. data/lib/appsignal/integrations/shoryuken.rb +75 -0
  38. data/lib/appsignal/integrations/sidekiq.rb +7 -15
  39. data/lib/appsignal/integrations/sinatra.rb +8 -19
  40. data/lib/appsignal/integrations/unicorn.rb +1 -0
  41. data/lib/appsignal/integrations/webmachine.rb +2 -5
  42. data/lib/appsignal/loaders/grape.rb +13 -0
  43. data/lib/appsignal/loaders/hanami.rb +40 -0
  44. data/lib/appsignal/loaders/padrino.rb +68 -0
  45. data/lib/appsignal/loaders/sinatra.rb +24 -0
  46. data/lib/appsignal/loaders.rb +92 -0
  47. data/lib/appsignal/logger.rb +7 -3
  48. data/lib/appsignal/probes/helpers.rb +1 -0
  49. data/lib/appsignal/probes/mri.rb +1 -0
  50. data/lib/appsignal/probes/sidekiq.rb +1 -0
  51. data/lib/appsignal/probes.rb +3 -0
  52. data/lib/appsignal/rack/abstract_middleware.rb +20 -13
  53. data/lib/appsignal/rack/event_handler.rb +44 -13
  54. data/lib/appsignal/rack/generic_instrumentation.rb +1 -0
  55. data/lib/appsignal/rack/grape_middleware.rb +2 -1
  56. data/lib/appsignal/rack/streaming_listener.rb +1 -0
  57. data/lib/appsignal/rack.rb +35 -0
  58. data/lib/appsignal/span.rb +1 -0
  59. data/lib/appsignal/transaction.rb +308 -101
  60. data/lib/appsignal/utils/data.rb +0 -1
  61. data/lib/appsignal/utils/hash_sanitizer.rb +0 -1
  62. data/lib/appsignal/utils/integration_logger.rb +0 -13
  63. data/lib/appsignal/utils/integration_memory_logger.rb +0 -13
  64. data/lib/appsignal/utils/json.rb +0 -1
  65. data/lib/appsignal/utils/query_params_sanitizer.rb +0 -1
  66. data/lib/appsignal/utils/stdout_and_logger_message.rb +0 -1
  67. data/lib/appsignal/utils.rb +6 -0
  68. data/lib/appsignal/version.rb +1 -1
  69. data/lib/appsignal.rb +169 -14
  70. data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
  71. data/spec/lib/appsignal/cli/demo_spec.rb +0 -1
  72. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +1 -1
  73. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1
  74. data/spec/lib/appsignal/config_spec.rb +291 -44
  75. data/spec/lib/appsignal/demo_spec.rb +1 -2
  76. data/spec/lib/appsignal/environment_spec.rb +4 -2
  77. data/spec/lib/appsignal/hooks/action_cable_spec.rb +43 -74
  78. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +3 -6
  79. data/spec/lib/appsignal/hooks/activejob_spec.rb +12 -3
  80. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +2 -443
  81. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +4 -7
  82. data/spec/lib/appsignal/hooks/excon_spec.rb +3 -6
  83. data/spec/lib/appsignal/hooks/gvl_spec.rb +2 -2
  84. data/spec/lib/appsignal/hooks/http_spec.rb +1 -3
  85. data/spec/lib/appsignal/hooks/net_http_spec.rb +1 -1
  86. data/spec/lib/appsignal/hooks/redis_client_spec.rb +5 -8
  87. data/spec/lib/appsignal/hooks/redis_spec.rb +3 -6
  88. data/spec/lib/appsignal/hooks/resque_spec.rb +1 -1
  89. data/spec/lib/appsignal/hooks/sequel_spec.rb +3 -5
  90. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -171
  91. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +1 -1
  92. data/spec/lib/appsignal/hooks/webmachine_spec.rb +1 -1
  93. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +459 -0
  94. data/spec/lib/appsignal/integrations/grape_spec.rb +36 -0
  95. data/spec/lib/appsignal/integrations/hanami_spec.rb +9 -178
  96. data/spec/lib/appsignal/integrations/http_spec.rb +1 -5
  97. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +4 -2
  98. data/spec/lib/appsignal/integrations/net_http_spec.rb +1 -1
  99. data/spec/lib/appsignal/integrations/object_spec.rb +1 -3
  100. data/spec/lib/appsignal/integrations/padrino_spec.rb +8 -330
  101. data/spec/lib/appsignal/integrations/que_spec.rb +3 -4
  102. data/spec/lib/appsignal/integrations/railtie_spec.rb +275 -191
  103. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +167 -0
  104. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +15 -13
  105. data/spec/lib/appsignal/integrations/sinatra_spec.rb +9 -104
  106. data/spec/lib/appsignal/integrations/webmachine_spec.rb +13 -1
  107. data/spec/lib/appsignal/loaders/grape_spec.rb +12 -0
  108. data/spec/lib/appsignal/loaders/hanami_spec.rb +95 -0
  109. data/spec/lib/appsignal/loaders/padrino_spec.rb +277 -0
  110. data/spec/lib/appsignal/loaders/sinatra_spec.rb +47 -0
  111. data/spec/lib/appsignal/loaders_spec.rb +137 -0
  112. data/spec/lib/appsignal/probes/sidekiq_spec.rb +1 -1
  113. data/spec/lib/appsignal/probes_spec.rb +6 -5
  114. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +51 -5
  115. data/spec/lib/appsignal/rack/event_handler_spec.rb +114 -10
  116. data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +1 -1
  117. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +2 -35
  118. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +1 -1
  119. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +4 -2
  120. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +3 -3
  121. data/spec/lib/appsignal/rack_spec.rb +63 -0
  122. data/spec/lib/appsignal/span_spec.rb +1 -3
  123. data/spec/lib/appsignal/transaction_spec.rb +1640 -1075
  124. data/spec/lib/appsignal/utils/integration_logger_spec.rb +12 -16
  125. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -10
  126. data/spec/lib/appsignal_spec.rb +601 -36
  127. data/spec/lib/puma/appsignal_spec.rb +0 -3
  128. data/spec/spec_helper.rb +5 -4
  129. data/spec/support/helpers/config_helpers.rb +2 -1
  130. data/spec/support/helpers/loader_helper.rb +21 -0
  131. data/spec/support/helpers/transaction_helpers.rb +44 -20
  132. data/spec/support/matchers/transaction.rb +15 -1
  133. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +7 -0
  134. data/spec/support/testing.rb +47 -1
  135. metadata +19 -2
@@ -15,9 +15,7 @@ describe Appsignal::Hooks::DelayedJobHook do
15
15
  end
16
16
  end
17
17
  after(:context) { Object.send(:remove_const, :Delayed) }
18
- before do
19
- start_agent
20
- end
18
+ before { start_agent }
21
19
 
22
20
  describe "#dependencies_present?" do
23
21
  subject { described_class.new.dependencies_present? }
@@ -26,446 +24,7 @@ describe Appsignal::Hooks::DelayedJobHook do
26
24
  end
27
25
 
28
26
  it "adds the plugin" do
29
- expect(::Delayed::Worker.plugins).to include Appsignal::Hooks::DelayedJobPlugin
30
- end
31
-
32
- # We haven't found a way to test the hooks, we'll have to do that manually
33
-
34
- describe ".invoke_with_instrumentation" do
35
- let(:plugin) { Appsignal::Hooks::DelayedJobPlugin }
36
- let(:time) { Time.parse("01-01-2001 10:01:00UTC") }
37
- let(:created_at) { time - 3600 }
38
- let(:run_at) { time - 3600 }
39
- let(:payload_object) { double(:args => args) }
40
- let(:job_data) do
41
- {
42
- :id => 123,
43
- :name => "TestClass#perform",
44
- :priority => 1,
45
- :attempts => 1,
46
- :queue => "default",
47
- :created_at => created_at,
48
- :run_at => run_at,
49
- :payload_object => payload_object
50
- }
51
- end
52
- let(:args) { ["argument"] }
53
- let(:job) { double(job_data) }
54
- let(:invoked_block) { proc {} }
55
-
56
- def perform
57
- Timecop.freeze(time) do
58
- keep_transactions do
59
- plugin.invoke_with_instrumentation(job, invoked_block)
60
- end
61
- end
62
- end
63
-
64
- context "with a normal call" do
65
- it "wraps it in a transaction" do
66
- perform
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"
77
- )
78
- expect(transaction).to include_params(["argument"])
79
- end
80
-
81
- context "with more complex params" do
82
- let(:args) do
83
- {
84
- :foo => "Foo",
85
- :bar => "Bar"
86
- }
87
- end
88
-
89
- it "adds the more complex arguments" do
90
- perform
91
-
92
- expect(last_transaction).to include_params("foo" => "Foo", "bar" => "Bar")
93
- end
94
-
95
- context "with parameter filtering" do
96
- before do
97
- Appsignal.config = project_fixture_config("production")
98
- Appsignal.config[:filter_parameters] = ["foo"]
99
- end
100
-
101
- it "filters selected arguments" do
102
- perform
103
-
104
- expect(last_transaction).to include_params("foo" => "[FILTERED]", "bar" => "Bar")
105
- end
106
- end
107
- end
108
-
109
- context "with run_at in the future" do
110
- let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
111
-
112
- it "reports queue_start with run_at time" do
113
- perform
114
-
115
- expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
116
- end
117
- end
118
-
119
- context "with class method job" do
120
- let(:job_data) do
121
- { :name => "CustomClassMethod.perform", :payload_object => payload_object }
122
- end
123
-
124
- it "wraps it in a transaction using the class method job name" do
125
- perform
126
- expect(last_transaction).to have_action("CustomClassMethod.perform")
127
- end
128
- end
129
-
130
- context "with custom name call" do
131
- before { perform }
132
-
133
- context "with appsignal_name defined" do
134
- context "with payload_object being an object" do
135
- context "with value" do
136
- let(:payload_object) { double(:appsignal_name => "CustomClass#perform") }
137
-
138
- it "wraps it in a transaction using the custom name" do
139
- expect(last_transaction).to have_action("CustomClass#perform")
140
- end
141
- end
142
-
143
- context "with non-String value" do
144
- let(:payload_object) { double(:appsignal_name => Object.new) }
145
-
146
- it "wraps it in a transaction using the original job name" do
147
- expect(last_transaction).to have_action("TestClass#perform")
148
- end
149
- end
150
-
151
- context "with class method name as job" do
152
- let(:payload_object) { double(:appsignal_name => "CustomClassMethod.perform") }
153
-
154
- it "wraps it in a transaction using the custom name" do
155
- perform
156
- expect(last_transaction).to have_action("CustomClassMethod.perform")
157
- end
158
- end
159
- end
160
-
161
- context "with payload_object being a Hash" do
162
- context "with value" do
163
- let(:payload_object) { double(:appsignal_name => "CustomClassHash#perform") }
164
-
165
- it "wraps it in a transaction using the custom name" do
166
- expect(last_transaction).to have_action("CustomClassHash#perform")
167
- end
168
- end
169
-
170
- context "with non-String value" do
171
- let(:payload_object) { double(:appsignal_name => Object.new) }
172
-
173
- it "wraps it in a transaction using the original job name" do
174
- expect(last_transaction).to have_action("TestClass#perform")
175
- end
176
- end
177
-
178
- context "with class method name as job" do
179
- let(:payload_object) { { :appsignal_name => "CustomClassMethod.perform" } }
180
-
181
- it "wraps it in a transaction using the custom name" do
182
- perform
183
- expect(last_transaction).to have_action("CustomClassMethod.perform")
184
- end
185
- end
186
- end
187
-
188
- context "with payload_object acting like a Hash and returning a non-String value" do
189
- class ClassActingAsHash
190
- def self.[](_key)
191
- Object.new
192
- end
193
-
194
- def self.appsignal_name
195
- "ClassActingAsHash#perform"
196
- end
197
- end
198
- let(:payload_object) { ClassActingAsHash }
199
-
200
- # We check for hash values before object values
201
- # this means ClassActingAsHash returns `Object.new` instead
202
- # of `self.appsignal_name`. Since this isn't a valid `String`
203
- # we return the default job name as action name.
204
- it "wraps it in a transaction using the original job name" do
205
- expect(last_transaction).to have_action("TestClass#perform")
206
- end
207
- end
208
- end
209
- end
210
-
211
- context "with only job class name" do
212
- let(:job_data) do
213
- { :name => "Banana", :payload_object => payload_object }
214
- end
215
-
216
- it "appends #perform to the class name" do
217
- perform
218
- expect(last_transaction).to have_action("Banana#perform")
219
- end
220
- end
221
-
222
- if active_job_present?
223
- require "active_job"
224
-
225
- context "when wrapped by ActiveJob" do
226
- let(:payload_object) do
227
- ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper.new(
228
- "arguments" => args,
229
- "job_class" => "TestClass",
230
- "job_id" => 123,
231
- "locale" => :en,
232
- "queue_name" => "default"
233
- )
234
- end
235
- let(:job) do
236
- double(
237
- :id => 123,
238
- :name => "ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper",
239
- :priority => 1,
240
- :attempts => 1,
241
- :queue => "default",
242
- :created_at => created_at,
243
- :run_at => run_at,
244
- :payload_object => payload_object
245
- )
246
- end
247
- let(:args) { ["activejob_argument"] }
248
-
249
- it "wraps it in a transaction with the correct params" do
250
- perform
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"
262
- )
263
- expect(transaction).to include_params(["activejob_argument"])
264
- end
265
-
266
- context "with more complex params" do
267
- let(:args) do
268
- {
269
- :foo => "Foo",
270
- :bar => "Bar"
271
- }
272
- end
273
-
274
- it "adds the more complex arguments" do
275
- perform
276
- transaction = last_transaction
277
- expect(transaction).to have_action("TestClass#perform")
278
- expect(transaction).to include_params(
279
- "foo" => "Foo",
280
- "bar" => "Bar"
281
- )
282
- end
283
-
284
- context "with parameter filtering" do
285
- before do
286
- Appsignal.config = project_fixture_config("production")
287
- Appsignal.config[:filter_parameters] = ["foo"]
288
- end
289
-
290
- it "filters selected arguments" do
291
- perform
292
- transaction = last_transaction
293
- expect(transaction).to have_action("TestClass#perform")
294
- expect(transaction).to include_params(
295
- "foo" => "[FILTERED]",
296
- "bar" => "Bar"
297
- )
298
- end
299
- end
300
- end
301
-
302
- context "with run_at in the future" do
303
- let(:run_at) { Time.parse("2017-01-01 10:01:00UTC") }
304
-
305
- it "reports queue_start with run_at time" do
306
- perform
307
-
308
- expect(last_transaction).to have_queue_start(run_at.to_i * 1000)
309
- end
310
- end
311
- end
312
- end
313
- end
314
-
315
- context "with an erroring call" do
316
- let(:error) { ExampleException.new("uh oh") }
317
- before do
318
- expect(invoked_block).to receive(:call).and_raise(error)
319
- end
320
-
321
- it "adds the error to the transaction" do
322
- expect do
323
- perform
324
- end.to raise_error(error)
325
-
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")
330
- end
331
- end
332
- end
333
-
334
- describe ".extract_value" do
335
- let(:plugin) { Appsignal::Hooks::DelayedJobPlugin }
336
-
337
- context "for a hash" do
338
- let(:hash) { { :key => "value", :bool_false => false } }
339
-
340
- context "when the key exists" do
341
- subject { plugin.extract_value(hash, :key) }
342
-
343
- it { is_expected.to eq "value" }
344
-
345
- context "when the value is false" do
346
- subject { plugin.extract_value(hash, :bool_false) }
347
-
348
- it { is_expected.to be false }
349
- end
350
- end
351
-
352
- context "when the key does not exist" do
353
- subject { plugin.extract_value(hash, :nonexistent_key) }
354
-
355
- it { is_expected.to be_nil }
356
-
357
- context "with a default value" do
358
- subject { plugin.extract_value(hash, :nonexistent_key, 1) }
359
-
360
- it { is_expected.to eq 1 }
361
- end
362
- end
363
- end
364
-
365
- context "for a struct" do
366
- before :context do
367
- TestStruct = Struct.new(:key)
368
- end
369
- let(:struct) { TestStruct.new("value") }
370
-
371
- context "when the key exists" do
372
- subject { plugin.extract_value(struct, :key) }
373
-
374
- it { is_expected.to eq "value" }
375
- end
376
-
377
- context "when the key does not exist" do
378
- subject { plugin.extract_value(struct, :nonexistent_key) }
379
-
380
- it { is_expected.to be_nil }
381
-
382
- context "with a default value" do
383
- subject { plugin.extract_value(struct, :nonexistent_key, 1) }
384
-
385
- it { is_expected.to eq 1 }
386
- end
387
- end
388
- end
389
-
390
- context "for a struct with a method" do
391
- before :context do
392
- class TestStructClass < Struct.new(:id) # rubocop:disable Style/StructInheritance
393
- def appsignal_name
394
- "TestStruct#perform"
395
- end
396
-
397
- def bool_false
398
- false
399
- end
400
- end
401
- end
402
- let(:struct) { TestStructClass.new("id") }
403
-
404
- context "when the Struct responds to a method" do
405
- subject { plugin.extract_value(struct, :appsignal_name) }
406
-
407
- it "returns the method value" do
408
- is_expected.to eq "TestStruct#perform"
409
- end
410
-
411
- context "when the value is false" do
412
- subject { plugin.extract_value(struct, :bool_false) }
413
-
414
- it "returns the method value" do
415
- is_expected.to be false
416
- end
417
- end
418
- end
419
-
420
- context "when the key does not exist" do
421
- subject { plugin.extract_value(struct, :nonexistent_key) }
422
-
423
- context "without a method with the same name" do
424
- it "returns nil" do
425
- is_expected.to be_nil
426
- end
427
- end
428
-
429
- context "with a default value" do
430
- let(:default_value) { :my_default_value }
431
- subject { plugin.extract_value(struct, :nonexistent_key, default_value) }
432
-
433
- it "returns the default value" do
434
- is_expected.to eq default_value
435
- end
436
- end
437
- end
438
- end
439
-
440
- context "for an object" do
441
- let(:object) { double(:existing_method => "value") }
442
-
443
- context "when the method exists" do
444
- subject { plugin.extract_value(object, :existing_method) }
445
-
446
- it { is_expected.to eq "value" }
447
- end
448
-
449
- context "when the method does not exist" do
450
- subject { plugin.extract_value(object, :nonexistent_method) }
451
-
452
- it { is_expected.to be_nil }
453
-
454
- context "and there is a default value" do
455
- subject { plugin.extract_value(object, :nonexistent_method, 1) }
456
-
457
- it { is_expected.to eq 1 }
458
- end
459
- end
460
- end
461
-
462
- context "when we need to call to_s on the value" do
463
- let(:object) { double(:existing_method => 1) }
464
-
465
- subject { plugin.extract_value(object, :existing_method, nil, true) }
466
-
467
- it { is_expected.to eq "1" }
468
- end
27
+ expect(::Delayed::Worker.plugins).to include(Appsignal::Integrations::DelayedJobPlugin)
469
28
  end
470
29
  end
471
30
 
@@ -32,16 +32,13 @@ if DependencyHelper.dry_monitor_present?
32
32
  end
33
33
 
34
34
  describe "Dry Monitor Integration" do
35
- before :context do
35
+ let(:notifications) { Dry::Monitor::Notifications.new(:test) }
36
+ let(:transaction) { http_request_transaction }
37
+ before do
36
38
  start_agent
39
+ set_current_transaction(transaction)
37
40
  end
38
41
 
39
- let!(:transaction) do
40
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
41
- end
42
-
43
- let(:notifications) { Dry::Monitor::Notifications.new(:test) }
44
-
45
42
  context "when is a dry-sql event" do
46
43
  let(:event_id) { :sql }
47
44
  let(:payload) do
@@ -1,7 +1,5 @@
1
1
  describe Appsignal::Hooks::ExconHook do
2
- before :context do
3
- start_agent
4
- end
2
+ before { start_agent }
5
3
 
6
4
  context "with Excon" do
7
5
  before(:context) do
@@ -27,9 +25,8 @@ describe Appsignal::Hooks::ExconHook do
27
25
  end
28
26
 
29
27
  describe "instrumentation" do
30
- let!(:transaction) do
31
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
32
- end
28
+ let(:transaction) { http_request_transaction }
29
+ before { set_current_transaction(transaction) }
33
30
  around { |example| keep_transactions { example.run } }
34
31
 
35
32
  it "instruments a http request" do
@@ -7,8 +7,8 @@ describe Appsignal::Hooks::GvlHook do
7
7
  end
8
8
  end
9
9
  else
10
- before(:context) do
11
- Appsignal.config = project_fixture_config
10
+ before do
11
+ start_agent
12
12
  end
13
13
 
14
14
  def expect_gvltools_require
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe Appsignal::Hooks::HttpHook do
4
- before :context do
5
- start_agent
6
- end
4
+ before { start_agent }
7
5
 
8
6
  if DependencyHelper.http_present?
9
7
  context "with instrument_http_rb set to true" do
@@ -1,5 +1,5 @@
1
1
  describe Appsignal::Hooks::NetHttpHook do
2
- before(:context) { start_agent }
2
+ before { start_agent }
3
3
 
4
4
  describe "#dependencies_present?" do
5
5
  subject { described_class.new.dependencies_present? }
@@ -1,6 +1,6 @@
1
1
  describe Appsignal::Hooks::RedisClientHook do
2
2
  before do
3
- Appsignal.config = project_fixture_config
3
+ start_agent
4
4
  end
5
5
 
6
6
  if DependencyHelper.redis_client_present?
@@ -78,10 +78,9 @@ describe Appsignal::Hooks::RedisClientHook do
78
78
  # track if it was installed already or not.
79
79
  Appsignal::Hooks::RedisClientHook.new.install
80
80
  end
81
- let!(:transaction) do
82
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
83
- end
81
+ let(:transaction) { http_request_transaction }
84
82
  let!(:client_config) { RedisClient::Config.new(:id => "stub_id") }
83
+ before { set_current_transaction(transaction) }
85
84
  around { |example| keep_transactions { example.run } }
86
85
 
87
86
  it "instrument a redis call" do
@@ -164,11 +163,9 @@ describe Appsignal::Hooks::RedisClientHook do
164
163
  # track if it was installed already or not.
165
164
  Appsignal::Hooks::RedisClientHook.new.install
166
165
  end
167
- let!(:transaction) do
168
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST,
169
- "test")
170
- end
166
+ let(:transaction) { http_request_transaction }
171
167
  let!(:client_config) { RedisClient::Config.new(:id => "stub_id") }
168
+ before { set_current_transaction(transaction) }
172
169
  around { |example| keep_transactions { example.run } }
173
170
 
174
171
  it "instrument a redis call" do
@@ -1,7 +1,5 @@
1
1
  describe Appsignal::Hooks::RedisHook do
2
- before do
3
- Appsignal.config = project_fixture_config
4
- end
2
+ before { start_agent }
5
3
 
6
4
  if DependencyHelper.redis_present?
7
5
  context "with redis" do
@@ -72,9 +70,8 @@ describe Appsignal::Hooks::RedisHook do
72
70
  # track if it was installed already or not.
73
71
  Appsignal::Hooks::RedisHook.new.install
74
72
  end
75
- let!(:transaction) do
76
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
77
- end
73
+ let(:transaction) { http_request_transaction }
74
+ before { set_current_transaction(transaction) }
78
75
  around { |example| keep_transactions { example.run } }
79
76
 
80
77
  it "instrument a redis call" do
@@ -83,7 +83,7 @@ describe Appsignal::Hooks::ResqueHook do
83
83
 
84
84
  context "with arguments" do
85
85
  before do
86
- Appsignal.config = project_fixture_config("production")
86
+ start_agent("production")
87
87
  Appsignal.config[:filter_parameters] = ["foo"]
88
88
  end
89
89
 
@@ -8,9 +8,7 @@ describe Appsignal::Hooks::SequelHook do
8
8
  end
9
9
  end
10
10
 
11
- before :context do
12
- start_agent
13
- end
11
+ before { start_agent }
14
12
 
15
13
  describe "#dependencies_present?" do
16
14
  subject { described_class.new.dependencies_present? }
@@ -19,9 +17,9 @@ describe Appsignal::Hooks::SequelHook do
19
17
  end
20
18
 
21
19
  context "with a transaction" do
22
- let(:transaction) { Appsignal::Transaction.current }
20
+ let(:transaction) { http_request_transaction }
23
21
  before do
24
- Appsignal::Transaction.create("uuid", Appsignal::Transaction::HTTP_REQUEST, "test")
22
+ set_current_transaction(transaction)
25
23
  db.logger = Logger.new($stdout) # To test #log_duration call
26
24
  end
27
25