appsignal 2.10.7-java → 2.11.0.alpha.2-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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.semaphore/semaphore.yml +45 -53
  3. data/CHANGELOG.md +18 -0
  4. data/build_matrix.yml +13 -6
  5. data/ext/agent.yml +19 -19
  6. data/ext/appsignal_extension.c +10 -1
  7. data/ext/base.rb +15 -4
  8. data/gemfiles/padrino.gemfile +2 -2
  9. data/lib/appsignal.rb +21 -1
  10. data/lib/appsignal/capistrano.rb +2 -0
  11. data/lib/appsignal/config.rb +6 -2
  12. data/lib/appsignal/environment.rb +126 -0
  13. data/lib/appsignal/extension/jruby.rb +10 -0
  14. data/lib/appsignal/hooks/net_http.rb +2 -0
  15. data/lib/appsignal/hooks/puma.rb +2 -58
  16. data/lib/appsignal/hooks/redis.rb +2 -0
  17. data/lib/appsignal/hooks/sequel.rb +2 -0
  18. data/lib/appsignal/hooks/sidekiq.rb +2 -99
  19. data/lib/appsignal/integrations/delayed_job_plugin.rb +16 -3
  20. data/lib/appsignal/integrations/object.rb +4 -0
  21. data/lib/appsignal/integrations/resque_active_job.rb +12 -4
  22. data/lib/appsignal/probes/puma.rb +61 -0
  23. data/lib/appsignal/probes/sidekiq.rb +102 -0
  24. data/lib/appsignal/rack/js_exception_catcher.rb +5 -2
  25. data/lib/appsignal/transaction.rb +22 -7
  26. data/lib/appsignal/version.rb +1 -1
  27. data/lib/puma/plugin/appsignal.rb +2 -1
  28. data/spec/lib/appsignal/cli/diagnose_spec.rb +2 -1
  29. data/spec/lib/appsignal/config_spec.rb +6 -1
  30. data/spec/lib/appsignal/environment_spec.rb +167 -0
  31. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +198 -166
  32. data/spec/lib/appsignal/hooks/puma_spec.rb +2 -181
  33. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +256 -462
  34. data/spec/lib/appsignal/integrations/padrino_spec.rb +1 -1
  35. data/spec/lib/appsignal/integrations/resque_active_job_spec.rb +55 -13
  36. data/spec/lib/appsignal/probes/puma_spec.rb +180 -0
  37. data/spec/lib/appsignal/probes/sidekiq_spec.rb +201 -0
  38. data/spec/lib/appsignal/rack/js_exception_catcher_spec.rb +9 -4
  39. data/spec/lib/appsignal/transaction_spec.rb +30 -13
  40. data/spec/lib/appsignal_spec.rb +22 -0
  41. data/spec/lib/puma/appsignal_spec.rb +1 -1
  42. data/spec/support/helpers/dependency_helper.rb +5 -0
  43. data/spec/support/helpers/env_helpers.rb +1 -1
  44. data/spec/support/helpers/environment_metdata_helper.rb +16 -0
  45. data/spec/support/stubs/sidekiq/api.rb +1 -1
  46. metadata +19 -8
@@ -4,9 +4,12 @@ describe Appsignal::Rack::JSExceptionCatcher do
4
4
  let(:config_options) { { :enable_frontend_error_catching => true } }
5
5
  let(:config) { project_fixture_config("production", config_options) }
6
6
  let(:deprecation_message) do
7
- "The Appsignal::Rack::JSExceptionCatcher is deprecated. " \
8
- "Please use the official AppSignal JavaScript integration instead. " \
9
- "https://docs.appsignal.com/front-end/"
7
+ "The Appsignal::Rack::JSExceptionCatcher is " \
8
+ "deprecated and will be removed in a future version. Please use " \
9
+ "the official AppSignal JavaScript integration by disabling " \
10
+ "`enable_frontend_error_catching` in your configuration and " \
11
+ "installing AppSignal for JavaScript instead. " \
12
+ "(https://docs.appsignal.com/front-end/)"
10
13
  end
11
14
  before { Appsignal.config = config }
12
15
 
@@ -32,7 +35,9 @@ describe Appsignal::Rack::JSExceptionCatcher do
32
35
 
33
36
  describe "#call" do
34
37
  let(:catcher) do
35
- silence { Appsignal::Rack::JSExceptionCatcher.new(app, options) }
38
+ silence :allowed => ["enable_frontend_error_catching"] do
39
+ Appsignal::Rack::JSExceptionCatcher.new(app, options)
40
+ end
36
41
  end
37
42
  after { catcher.call(env) }
38
43
 
@@ -500,23 +500,40 @@ describe Appsignal::Transaction do
500
500
  end
501
501
 
502
502
  describe "#set_http_or_background_queue_start" do
503
- context "for a http transaction" do
504
- let(:namespace) { Appsignal::Transaction::HTTP_REQUEST }
505
- let(:env) { { "HTTP_X_REQUEST_START" => (fixed_time * 1000).to_s } }
503
+ let(:header_factor) { 1_000 }
504
+ let(:env_queue_start) { fixed_time + 20 } # in seconds
506
505
 
507
- it "should set the queue start on the transaction" do
508
- expect(transaction).to receive(:set_queue_start).with(13_897_836_000)
506
+ context "when a queue time is found in a request header" do
507
+ let(:header_time) { ((fixed_time + 10) * header_factor).to_i } # in milliseconds
508
+ let(:env) { { "HTTP_X_REQUEST_START" => "t=#{header_time}" } }
509
+
510
+ it "sets the http header value in milliseconds on the transaction" do
511
+ expect(transaction).to receive(:set_queue_start).with(1_389_783_610_000)
509
512
 
510
513
  transaction.set_http_or_background_queue_start
511
514
  end
515
+
516
+ context "when a :queue_start key is found in the transaction environment" do
517
+ let(:env) do
518
+ {
519
+ "HTTP_X_REQUEST_START" => "t=#{header_time}",
520
+ :queue_start => env_queue_start
521
+ }
522
+ end
523
+
524
+ it "sets the http header value in milliseconds on the transaction" do
525
+ expect(transaction).to receive(:set_queue_start).with(1_389_783_610_000)
526
+
527
+ transaction.set_http_or_background_queue_start
528
+ end
529
+ end
512
530
  end
513
531
 
514
- context "for a background transaction" do
515
- let(:namespace) { Appsignal::Transaction::BACKGROUND_JOB }
516
- let(:env) { { :queue_start => fixed_time } }
532
+ context "when a :queue_start key is found in the transaction environment" do
533
+ let(:env) { { :queue_start => env_queue_start } } # in seconds
517
534
 
518
- it "should set the queue start on the transaction" do
519
- expect(transaction).to receive(:set_queue_start).with(1_389_783_600_000)
535
+ it "sets the :queue_start value in milliseconds on the transaction" do
536
+ expect(transaction).to receive(:set_queue_start).with(1_389_783_620_000)
520
537
 
521
538
  transaction.set_http_or_background_queue_start
522
539
  end
@@ -910,7 +927,7 @@ describe Appsignal::Transaction do
910
927
  context "when queue start is set" do
911
928
  let(:env) { background_env_with_data }
912
929
 
913
- it { is_expected.to eq 1_389_783_590_000 }
930
+ it { is_expected.to eq 1_389_783_600_000 }
914
931
  end
915
932
  end
916
933
 
@@ -949,7 +966,7 @@ describe Appsignal::Transaction do
949
966
  it { is_expected.to be_nil }
950
967
  end
951
968
 
952
- context "with some cruft" do
969
+ context "with unparsable content at the end" do
953
970
  let(:env) { { "HTTP_X_REQUEST_START" => "t=#{slightly_earlier_time_value}aaaa" } }
954
971
 
955
972
  it { is_expected.to eq 1_389_783_599_600 }
@@ -969,7 +986,7 @@ describe Appsignal::Transaction do
969
986
  end
970
987
  end
971
988
 
972
- context "time in miliseconds" do
989
+ context "time in milliseconds" do
973
990
  let(:factor) { 1_000 }
974
991
 
975
992
  it_should_behave_like "http queue start"
@@ -1,4 +1,6 @@
1
1
  describe Appsignal do
2
+ include EnvironmentMetadataHelper
3
+
2
4
  before do
3
5
  # Make sure we have a clean state because we want to test
4
6
  # initialization here.
@@ -80,18 +82,22 @@ describe Appsignal do
80
82
  allow(GC::Profiler).to receive(:enable)
81
83
  Appsignal.config.config_hash[:enable_allocation_tracking] = true
82
84
  Appsignal.config.config_hash[:enable_gc_instrumentation] = true
85
+ capture_environment_metadata_report_calls
83
86
  end
84
87
 
85
88
  it "should enable Ruby's GC::Profiler" do
86
89
  expect(GC::Profiler).to receive(:enable)
87
90
  Appsignal.start
91
+ expect_environment_metadata("ruby_gc_instrumentation_enabled", "true")
88
92
  end
89
93
 
90
94
  unless Appsignal::System.jruby?
95
+
91
96
  it "installs the allocation event hook" do
92
97
  expect(Appsignal::Extension).to receive(:install_allocation_event_hook)
93
98
  .and_call_original
94
99
  Appsignal.start
100
+ expect_environment_metadata("ruby_allocation_tracking_enabled", "true")
95
101
  end
96
102
  end
97
103
  end
@@ -100,6 +106,7 @@ describe Appsignal do
100
106
  before do
101
107
  Appsignal.config.config_hash[:enable_allocation_tracking] = false
102
108
  Appsignal.config.config_hash[:enable_gc_instrumentation] = false
109
+ capture_environment_metadata_report_calls
103
110
  end
104
111
 
105
112
  it "should not enable Ruby's GC::Profiler" do
@@ -110,11 +117,13 @@ describe Appsignal do
110
117
  it "should not install the allocation event hook" do
111
118
  expect(Appsignal::Minutely).not_to receive(:install_allocation_event_hook)
112
119
  Appsignal.start
120
+ expect_not_environment_metadata("ruby_allocation_tracking_enabled")
113
121
  end
114
122
 
115
123
  it "should not add the gc probe to minutely" do
116
124
  expect(Appsignal::Minutely).not_to receive(:register_garbage_collection_probe)
117
125
  Appsignal.start
126
+ expect_not_environment_metadata("ruby_gc_instrumentation_enabled")
118
127
  end
119
128
  end
120
129
 
@@ -139,6 +148,19 @@ describe Appsignal do
139
148
  Appsignal.start
140
149
  end
141
150
  end
151
+
152
+ describe "environment metadata" do
153
+ before { capture_environment_metadata_report_calls }
154
+
155
+ it "collects and reports environment metadata" do
156
+ Appsignal.start
157
+ expect_environment_metadata("ruby_version", "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}")
158
+ expect_environment_metadata("ruby_engine", RUBY_ENGINE)
159
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.3.0")
160
+ expect_environment_metadata("ruby_engine_version", RUBY_ENGINE_VERSION)
161
+ end
162
+ end
163
+ end
142
164
  end
143
165
 
144
166
  context "with debug logging" do
@@ -62,7 +62,7 @@ RSpec.describe "Puma plugin" do
62
62
  expect(launcher.events.on_booted).to_not be_nil
63
63
 
64
64
  launcher.events.on_booted.call
65
- expect(Appsignal::Minutely.probes[:puma]).to eql(Appsignal::Hooks::PumaProbe)
65
+ expect(Appsignal::Minutely.probes[:puma]).to eql(Appsignal::Probes::PumaProbe)
66
66
 
67
67
  # Minutely probes started and called
68
68
  wait_for("enough probe calls") { probe.calls >= 2 }
@@ -9,6 +9,11 @@ module DependencyHelper
9
9
  dependency_present? "rails"
10
10
  end
11
11
 
12
+ def rails6_present?
13
+ rails_present? &&
14
+ Gem.loaded_specs["rails"].version >= Gem::Version.new("6.0.0")
15
+ end
16
+
12
17
  def sequel_present?
13
18
  dependency_present? "sequel"
14
19
  end
@@ -27,7 +27,7 @@ module EnvHelpers
27
27
  :priority => 1,
28
28
  :attempts => 0,
29
29
  :queue => "default",
30
- :queue_start => fixed_time - 10.0
30
+ :queue_start => fixed_time
31
31
  }.merge(args)
32
32
  end
33
33
  end
@@ -0,0 +1,16 @@
1
+ module EnvironmentMetadataHelper
2
+ def capture_environment_metadata_report_calls
3
+ allow(Appsignal::Extension).to receive(:set_environment_metadata)
4
+ .and_call_original
5
+ end
6
+
7
+ def expect_environment_metadata(key, value)
8
+ expect(Appsignal::Extension).to have_received(:set_environment_metadata)
9
+ .with(key, value)
10
+ end
11
+
12
+ def expect_not_environment_metadata(key)
13
+ expect(Appsignal::Extension).to_not have_received(:set_environment_metadata)
14
+ .with(key, anything)
15
+ end
16
+ end
@@ -1,4 +1,4 @@
1
- class Sidekiq
1
+ module Sidekiq
2
2
  class API
3
3
  end
4
4
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.7
4
+ version: 2.11.0.alpha.2
5
5
  platform: java
6
6
  authors:
7
7
  - Robert Beekman
8
8
  - Thijs Cadier
9
9
  - Tom de Bruijn
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-05-05 00:00:00.000000000 Z
13
+ date: 2020-07-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -204,6 +204,7 @@ files:
204
204
  - lib/appsignal/cli/notify_of_deploy.rb
205
205
  - lib/appsignal/config.rb
206
206
  - lib/appsignal/demo.rb
207
+ - lib/appsignal/environment.rb
207
208
  - lib/appsignal/event_formatter.rb
208
209
  - lib/appsignal/event_formatter/action_view/render_formatter.rb
209
210
  - lib/appsignal/event_formatter/active_record/instantiation_formatter.rb
@@ -254,6 +255,8 @@ files:
254
255
  - lib/appsignal/logger.rb
255
256
  - lib/appsignal/marker.rb
256
257
  - lib/appsignal/minutely.rb
258
+ - lib/appsignal/probes/puma.rb
259
+ - lib/appsignal/probes/sidekiq.rb
257
260
  - lib/appsignal/rack/generic_instrumentation.rb
258
261
  - lib/appsignal/rack/js_exception_catcher.rb
259
262
  - lib/appsignal/rack/rails_instrumentation.rb
@@ -288,6 +291,7 @@ files:
288
291
  - spec/lib/appsignal/cli_spec.rb
289
292
  - spec/lib/appsignal/config_spec.rb
290
293
  - spec/lib/appsignal/demo_spec.rb
294
+ - spec/lib/appsignal/environment_spec.rb
291
295
  - spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb
292
296
  - spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb
293
297
  - spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb
@@ -332,6 +336,8 @@ files:
332
336
  - spec/lib/appsignal/logger_spec.rb
333
337
  - spec/lib/appsignal/marker_spec.rb
334
338
  - spec/lib/appsignal/minutely_spec.rb
339
+ - spec/lib/appsignal/probes/puma_spec.rb
340
+ - spec/lib/appsignal/probes/sidekiq_spec.rb
335
341
  - spec/lib/appsignal/rack/generic_instrumentation_spec.rb
336
342
  - spec/lib/appsignal/rack/js_exception_catcher_spec.rb
337
343
  - spec/lib/appsignal/rack/rails_instrumentation_spec.rb
@@ -362,6 +368,7 @@ files:
362
368
  - spec/support/helpers/dependency_helper.rb
363
369
  - spec/support/helpers/directory_helper.rb
364
370
  - spec/support/helpers/env_helpers.rb
371
+ - spec/support/helpers/environment_metdata_helper.rb
365
372
  - spec/support/helpers/example_exception.rb
366
373
  - spec/support/helpers/example_standard_error.rb
367
374
  - spec/support/helpers/log_helpers.rb
@@ -393,7 +400,7 @@ metadata:
393
400
  documentation_uri: https://docs.appsignal.com/ruby/
394
401
  homepage_uri: https://docs.appsignal.com/ruby/
395
402
  source_code_uri: https://github.com/appsignal/appsignal-ruby
396
- post_install_message:
403
+ post_install_message:
397
404
  rdoc_options: []
398
405
  require_paths:
399
406
  - lib
@@ -405,12 +412,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
405
412
  version: '1.9'
406
413
  required_rubygems_version: !ruby/object:Gem::Requirement
407
414
  requirements:
408
- - - ">="
415
+ - - ">"
409
416
  - !ruby/object:Gem::Version
410
- version: '0'
417
+ version: 1.3.1
411
418
  requirements: []
412
- rubygems_version: 3.1.2
413
- signing_key:
419
+ rubygems_version: 3.1.4
420
+ signing_key:
414
421
  specification_version: 4
415
422
  summary: Logs performance and exception data from your app to appsignal.com
416
423
  test_files:
@@ -428,6 +435,7 @@ test_files:
428
435
  - spec/lib/appsignal/cli_spec.rb
429
436
  - spec/lib/appsignal/config_spec.rb
430
437
  - spec/lib/appsignal/demo_spec.rb
438
+ - spec/lib/appsignal/environment_spec.rb
431
439
  - spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb
432
440
  - spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb
433
441
  - spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb
@@ -472,6 +480,8 @@ test_files:
472
480
  - spec/lib/appsignal/logger_spec.rb
473
481
  - spec/lib/appsignal/marker_spec.rb
474
482
  - spec/lib/appsignal/minutely_spec.rb
483
+ - spec/lib/appsignal/probes/puma_spec.rb
484
+ - spec/lib/appsignal/probes/sidekiq_spec.rb
475
485
  - spec/lib/appsignal/rack/generic_instrumentation_spec.rb
476
486
  - spec/lib/appsignal/rack/js_exception_catcher_spec.rb
477
487
  - spec/lib/appsignal/rack/rails_instrumentation_spec.rb
@@ -502,6 +512,7 @@ test_files:
502
512
  - spec/support/helpers/dependency_helper.rb
503
513
  - spec/support/helpers/directory_helper.rb
504
514
  - spec/support/helpers/env_helpers.rb
515
+ - spec/support/helpers/environment_metdata_helper.rb
505
516
  - spec/support/helpers/example_exception.rb
506
517
  - spec/support/helpers/example_standard_error.rb
507
518
  - spec/support/helpers/log_helpers.rb