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
@@ -1,4 +1,4 @@
1
- module DependencyHelper # rubocop:disable Metrics/ModuleLength
1
+ module DependencyHelper
2
2
  module_function
3
3
 
4
4
  def ruby_version
@@ -123,6 +123,11 @@ module DependencyHelper # rubocop:disable Metrics/ModuleLength
123
123
  dependency_present? "hanami"
124
124
  end
125
125
 
126
+ def hanami2_1_present?
127
+ hanami_present? &&
128
+ Gem::Version.new(::Hanami::VERSION) >= Gem::Version.new("2.1.0")
129
+ end
130
+
126
131
  def dry_monitor_present?
127
132
  dependency_present? "dry-monitor"
128
133
  end
@@ -89,6 +89,6 @@ module StdStreamsHelper
89
89
  end
90
90
  end
91
91
  reject
92
- end.join(",")
92
+ end.join
93
93
  end
94
94
  end
@@ -44,6 +44,14 @@ module TransactionHelpers
44
44
  created_transactions.last
45
45
  end
46
46
 
47
+ def current_transaction?
48
+ Appsignal::Transaction.current?
49
+ end
50
+
51
+ def current_transaction
52
+ Appsignal::Transaction.current
53
+ end
54
+
47
55
  # Set current transaction manually.
48
56
  # Cleared by {clear_current_transaction!}
49
57
  #
@@ -0,0 +1,185 @@
1
+ def define_transaction_metadata_matcher_for(matcher_key, value_key = matcher_key)
2
+ value_key = value_key.to_s
3
+
4
+ RSpec::Matchers.define "have_#{matcher_key}" do |expected_value|
5
+ match(:notify_expectation_failures => true) do |transaction|
6
+ actual_value = transaction.to_h[value_key]
7
+ if expected_value
8
+ expect(actual_value).to eq(expected_value)
9
+ else
10
+ expect(actual_value).to_not be_nil
11
+ end
12
+ end
13
+
14
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
15
+ actual_value = transaction.to_h[value_key]
16
+ if expected_value
17
+ expect(actual_value).to_not eq(expected_value)
18
+ else
19
+ expect(actual_value).to be_nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ define_transaction_metadata_matcher_for(:id)
26
+ define_transaction_metadata_matcher_for(:namespace)
27
+ define_transaction_metadata_matcher_for(:action)
28
+
29
+ def define_transaction_sample_matcher_for(matcher_key, value_key = matcher_key)
30
+ value_key = value_key.to_s
31
+
32
+ RSpec::Matchers.define "include_#{matcher_key}" do |expected_value|
33
+ match(:notify_expectation_failures => true) do |transaction|
34
+ sample_data = transaction.to_h.dig("sample_data", value_key) || {}
35
+
36
+ if expected_value
37
+ expected_value = hash_including(expected_value) if expected_value.is_a?(Hash)
38
+ expect(sample_data).to match(expected_value)
39
+ else
40
+ expect(sample_data).to be_present
41
+ end
42
+ end
43
+
44
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
45
+ sample_data = transaction.to_h.dig("sample_data", value_key) || {}
46
+
47
+ if expected_value
48
+ expect(sample_data).to_not include(expected_value)
49
+ else
50
+ expect(sample_data).to be_empty
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ define_transaction_sample_matcher_for(:sample_metadata, :metadata)
57
+ define_transaction_sample_matcher_for(:params)
58
+ define_transaction_sample_matcher_for(:environment)
59
+ define_transaction_sample_matcher_for(:session_data)
60
+ define_transaction_sample_matcher_for(:tags)
61
+ define_transaction_sample_matcher_for(:custom_data)
62
+
63
+ RSpec::Matchers.define :be_completed do
64
+ match(:notify_expectation_failures => true) do |transaction|
65
+ values_match? transaction.ext._completed?, true
66
+ end
67
+ end
68
+
69
+ RSpec::Matchers.define :have_error do |error_class, error_message|
70
+ match(:notify_expectation_failures => true) do |transaction|
71
+ transaction_error = transaction.to_h["error"]
72
+ if error_class && error_message
73
+ expect(transaction_error).to include(
74
+ "name" => error_class,
75
+ "message" => error_message,
76
+ "backtrace" => kind_of(String)
77
+ )
78
+ else
79
+ expect(transaction_error).to be_any
80
+ end
81
+ end
82
+
83
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
84
+ transaction_error = transaction.to_h["error"]
85
+ if error_class && error_message
86
+ expect(transaction_error).to_not include(
87
+ "name" => error_class,
88
+ "message" => error_message,
89
+ "backtrace" => kind_of(String)
90
+ )
91
+ else
92
+ expect(transaction_error).to be_nil
93
+ end
94
+ end
95
+ end
96
+
97
+ RSpec::Matchers.define :include_event do |event|
98
+ match(:notify_expectation_failures => true) do |transaction|
99
+ events = transaction.to_h["events"]
100
+ if event
101
+ expect(events).to include(format_event(event))
102
+ else
103
+ expect(events).to be_any
104
+ end
105
+ end
106
+
107
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
108
+ events = transaction.to_h["events"]
109
+ if event
110
+ expect(events).to_not include(format_event(event))
111
+ else
112
+ expect(events).to be_empty
113
+ end
114
+ end
115
+
116
+ def format_event(event)
117
+ hash_including({
118
+ "body" => "",
119
+ "body_format" => Appsignal::EventFormatter::DEFAULT,
120
+ "count" => 1,
121
+ "name" => kind_of(String),
122
+ "title" => ""
123
+ }.merge(event.transform_keys(&:to_s)))
124
+ end
125
+ end
126
+ RSpec::Matchers.alias_matcher :include_events, :include_event
127
+
128
+ RSpec::Matchers.define :include_metadata do |metadata|
129
+ match(:notify_expectation_failures => true) do |transaction|
130
+ actual_metadata = transaction.to_h["metadata"]
131
+ if metadata
132
+ expect(actual_metadata).to include(metadata)
133
+ else
134
+ expect(actual_metadata).to be_any
135
+ end
136
+ end
137
+
138
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
139
+ actual_metadata = transaction.to_h["metadata"]
140
+ if metadata
141
+ expect(actual_metadata).to_not include(metadata)
142
+ else
143
+ expect(actual_metadata).to be_empty
144
+ end
145
+ end
146
+ end
147
+
148
+ RSpec::Matchers.define :include_breadcrumb do |action, category, message, metadata, time|
149
+ match(:notify_expectation_failures => true) do |transaction|
150
+ breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
151
+ if action
152
+ breadcrumb = format_breadcrumb(action, category, message, metadata, time)
153
+ expect(breadcrumbs).to include(breadcrumb)
154
+ else
155
+ expect(transaction.to_h.dig("sample_data", "breadcrumbs")).to be_any
156
+ end
157
+ end
158
+
159
+ match_when_negated(:notify_expectation_failures => true) do |transaction|
160
+ breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
161
+ if action
162
+ breadcrumb = format_breadcrumb(action, category, message, metadata, time)
163
+ expect(breadcrumbs).to_not include(breadcrumb)
164
+ else
165
+ expect(breadcrumbs).to_not be_any
166
+ end
167
+ end
168
+
169
+ def format_breadcrumb(action, category, message, metadata, time)
170
+ {
171
+ "action" => action,
172
+ "category" => category,
173
+ "message" => message,
174
+ "metadata" => metadata,
175
+ "time" => time
176
+ }
177
+ end
178
+ end
179
+ RSpec::Matchers.alias_matcher :include_breadcrumbs, :include_breadcrumb
180
+
181
+ RSpec::Matchers.define :have_queue_start do |queue_start_time|
182
+ match(:notify_expectation_failures => true) do |transaction|
183
+ expect(transaction.ext.queue_start).to eq(queue_start_time)
184
+ end
185
+ end
@@ -0,0 +1,20 @@
1
+ class DummyApp
2
+ def initialize(&app)
3
+ @app = app
4
+ @called = false
5
+ end
6
+
7
+ def call(env)
8
+ if @app
9
+ @app&.call(env)
10
+ else
11
+ [200, {}, ["body"]]
12
+ end
13
+ ensure
14
+ @called = true
15
+ end
16
+
17
+ def called?
18
+ @called
19
+ end
20
+ end
@@ -1,22 +1,14 @@
1
1
  RSpec.shared_examples "instrument helper" do
2
- let(:stub) { double }
3
- before do
4
- expect(stub).to receive(:method_call).and_return("return value")
5
-
6
- expect(transaction).to receive(:start_event)
7
- expect(transaction).to receive(:finish_event).with(
8
- "name",
9
- "title",
10
- "body",
11
- 0
12
- )
13
- end
2
+ around { |example| keep_transactions { example.run } }
3
+ let(:stub) { double(:method_call => "return value") }
14
4
 
15
5
  it "records an event around the given block" do
16
6
  return_value = instrumenter.instrument "name", "title", "body" do
17
7
  stub.method_call
18
8
  end
19
9
  expect(return_value).to eq "return value"
10
+
11
+ expect_transaction_to_have_event
20
12
  end
21
13
 
22
14
  context "with an error raised in the passed block" do
@@ -27,6 +19,8 @@ RSpec.shared_examples "instrument helper" do
27
19
  raise ExampleException, "foo"
28
20
  end
29
21
  end.to raise_error(ExampleException, "foo")
22
+
23
+ expect_transaction_to_have_event
30
24
  end
31
25
  end
32
26
 
@@ -38,6 +32,17 @@ RSpec.shared_examples "instrument helper" do
38
32
  throw :foo
39
33
  end
40
34
  end.to throw_symbol(:foo)
35
+
36
+ expect_transaction_to_have_event
41
37
  end
42
38
  end
39
+
40
+ def expect_transaction_to_have_event
41
+ expect(transaction).to include_event(
42
+ "name" => "name",
43
+ "title" => "title",
44
+ "body" => "body",
45
+ "body_format" => Appsignal::EventFormatter::DEFAULT
46
+ )
47
+ end
43
48
  end
@@ -120,16 +120,25 @@ end
120
120
 
121
121
  module AppsignalTest
122
122
  module Transaction
123
- # Override the {Appsignal::Transaction.new} method so we can track which
124
- # transactions are created on the {Appsignal::Testing.transactions} list.
125
- #
126
- # @see TransactionHelpers#last_transaction
127
- def new(*_args)
128
- transaction = super
129
- Appsignal::Testing.transactions << transaction
130
- transaction
123
+ module ClassMethods
124
+ # Override the {Appsignal::Transaction.new} method so we can track which
125
+ # transactions are created on the {Appsignal::Testing.transactions} list.
126
+ #
127
+ # @see TransactionHelpers#last_transaction
128
+ def new(*_args)
129
+ transaction = super
130
+ Appsignal::Testing.transactions << transaction
131
+ transaction
132
+ end
133
+ end
134
+
135
+ module InstanceMethods
136
+ def _sample
137
+ sample_data
138
+ end
131
139
  end
132
140
  end
133
141
  end
134
142
 
135
- Appsignal::Transaction.extend(AppsignalTest::Transaction)
143
+ Appsignal::Transaction.extend(AppsignalTest::Transaction::ClassMethods)
144
+ Appsignal::Transaction.prepend(AppsignalTest::Transaction::InstanceMethods)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: 3.10.0
5
5
  platform: java
6
6
  authors:
7
7
  - Robert Beekman
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-06-26 00:00:00.000000000 Z
13
+ date: 2024-07-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 1.50.0
77
+ version: 1.64.1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 1.50.0
84
+ version: 1.64.1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: timecop
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -149,13 +149,13 @@ extra_rdoc_files: []
149
149
  files:
150
150
  - ".github/ISSUE_TEMPLATE/bug_report.md"
151
151
  - ".github/ISSUE_TEMPLATE/chore.md"
152
+ - ".github/workflows/ci.yml"
152
153
  - ".github/workflows/create_release_from_tag.yml"
153
154
  - ".gitignore"
154
155
  - ".gitmodules"
155
156
  - ".rspec"
156
157
  - ".rubocop.yml"
157
158
  - ".rubocop_todo.yml"
158
- - ".semaphore/semaphore.yml"
159
159
  - ".yardopts"
160
160
  - CHANGELOG.md
161
161
  - CODE_OF_CONDUCT.md
@@ -177,7 +177,8 @@ files:
177
177
  - gemfiles/capistrano3.gemfile
178
178
  - gemfiles/dry-monitor.gemfile
179
179
  - gemfiles/grape.gemfile
180
- - gemfiles/hanami.gemfile
180
+ - gemfiles/hanami-2.0.gemfile
181
+ - gemfiles/hanami-2.1.gemfile
181
182
  - gemfiles/http5.gemfile
182
183
  - gemfiles/no_dependencies.gemfile
183
184
  - gemfiles/padrino.gemfile
@@ -285,10 +286,14 @@ files:
285
286
  - lib/appsignal/probes/helpers.rb
286
287
  - lib/appsignal/probes/mri.rb
287
288
  - lib/appsignal/probes/sidekiq.rb
289
+ - lib/appsignal/rack.rb
288
290
  - lib/appsignal/rack/abstract_middleware.rb
291
+ - lib/appsignal/rack/body_wrapper.rb
289
292
  - lib/appsignal/rack/event_handler.rb
290
293
  - lib/appsignal/rack/generic_instrumentation.rb
294
+ - lib/appsignal/rack/grape_middleware.rb
291
295
  - lib/appsignal/rack/hanami_middleware.rb
296
+ - lib/appsignal/rack/instrumentation_middleware.rb
292
297
  - lib/appsignal/rack/rails_instrumentation.rb
293
298
  - lib/appsignal/rack/sinatra_instrumentation.rb
294
299
  - lib/appsignal/rack/streaming_listener.rb
@@ -300,6 +305,7 @@ files:
300
305
  - lib/appsignal/utils/data.rb
301
306
  - lib/appsignal/utils/hash_sanitizer.rb
302
307
  - lib/appsignal/utils/integration_logger.rb
308
+ - lib/appsignal/utils/integration_memory_logger.rb
303
309
  - lib/appsignal/utils/json.rb
304
310
  - lib/appsignal/utils/query_params_sanitizer.rb
305
311
  - lib/appsignal/utils/rails_helper.rb
@@ -310,7 +316,6 @@ files:
310
316
  - mono.yml
311
317
  - resources/appsignal.yml.erb
312
318
  - resources/cacert.pem
313
- - script/lint_git
314
319
  - spec/.rubocop.yml
315
320
  - spec/lib/appsignal/auth_check_spec.rb
316
321
  - spec/lib/appsignal/capistrano2_spec.rb
@@ -371,10 +376,10 @@ files:
371
376
  - spec/lib/appsignal/hooks/webmachine_spec.rb
372
377
  - spec/lib/appsignal/hooks_spec.rb
373
378
  - spec/lib/appsignal/integrations/data_mapper_spec.rb
374
- - spec/lib/appsignal/integrations/grape_spec.rb
375
379
  - spec/lib/appsignal/integrations/hanami_spec.rb
376
380
  - spec/lib/appsignal/integrations/http_spec.rb
377
381
  - spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb
382
+ - spec/lib/appsignal/integrations/net_http_spec.rb
378
383
  - spec/lib/appsignal/integrations/object_spec.rb
379
384
  - spec/lib/appsignal/integrations/padrino_spec.rb
380
385
  - spec/lib/appsignal/integrations/que_spec.rb
@@ -389,9 +394,12 @@ files:
389
394
  - spec/lib/appsignal/probes/sidekiq_spec.rb
390
395
  - spec/lib/appsignal/probes_spec.rb
391
396
  - spec/lib/appsignal/rack/abstract_middleware_spec.rb
397
+ - spec/lib/appsignal/rack/body_wrapper_spec.rb
392
398
  - spec/lib/appsignal/rack/event_handler_spec.rb
393
399
  - spec/lib/appsignal/rack/generic_instrumentation_spec.rb
400
+ - spec/lib/appsignal/rack/grape_middleware_spec.rb
394
401
  - spec/lib/appsignal/rack/hanami_middleware_spec.rb
402
+ - spec/lib/appsignal/rack/instrumentation_middleware_spec.rb
395
403
  - spec/lib/appsignal/rack/rails_instrumentation_spec.rb
396
404
  - spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb
397
405
  - spec/lib/appsignal/rack/streaming_listener_spec.rb
@@ -402,6 +410,7 @@ files:
402
410
  - spec/lib/appsignal/utils/data_spec.rb
403
411
  - spec/lib/appsignal/utils/hash_sanitizer_spec.rb
404
412
  - spec/lib/appsignal/utils/integration_logger_spec.rb
413
+ - spec/lib/appsignal/utils/integration_memory_logger_spec.rb
405
414
  - spec/lib/appsignal/utils/json_spec.rb
406
415
  - spec/lib/appsignal/utils/query_params_sanitizer_spec.rb
407
416
  - spec/lib/appsignal_spec.rb
@@ -435,10 +444,11 @@ files:
435
444
  - spec/support/helpers/time_helpers.rb
436
445
  - spec/support/helpers/transaction_helpers.rb
437
446
  - spec/support/helpers/wait_for_helper.rb
438
- - spec/support/matchers/be_completed.rb
439
447
  - spec/support/matchers/contains_log.rb
440
448
  - spec/support/matchers/have_colorized_text.rb
449
+ - spec/support/matchers/transaction.rb
441
450
  - spec/support/mocks/appsignal_mock.rb
451
+ - spec/support/mocks/dummy_app.rb
442
452
  - spec/support/mocks/fake_gc_profiler.rb
443
453
  - spec/support/mocks/fake_gvl_tools.rb
444
454
  - spec/support/mocks/mock_probe.rb
@@ -448,7 +458,6 @@ files:
448
458
  - spec/support/stubs/sidekiq/api.rb
449
459
  - spec/support/testing.rb
450
460
  - support/bundler_wrapper
451
- - support/check_versions
452
461
  - support/install_deps
453
462
  homepage: https://github.com/appsignal/appsignal-ruby
454
463
  licenses:
@@ -476,7 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
476
485
  - !ruby/object:Gem::Version
477
486
  version: '0'
478
487
  requirements: []
479
- rubygems_version: 3.5.11
488
+ rubygems_version: 3.5.14
480
489
  signing_key:
481
490
  specification_version: 4
482
491
  summary: Logs performance and exception data from your app to appsignal.com