appsignal 4.0.6-java → 4.0.8-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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Rakefile +9 -9
  4. data/appsignal.gemspec +22 -1
  5. data/ext/agent.rb +27 -27
  6. data/lib/appsignal/check_in.rb +1 -1
  7. data/lib/appsignal/config.rb +1 -3
  8. data/lib/appsignal/integrations/resque.rb +1 -6
  9. data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
  10. data/lib/appsignal/version.rb +1 -1
  11. data/lib/appsignal.rb +10 -8
  12. metadata +2 -192
  13. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  14. data/.github/ISSUE_TEMPLATE/chore.md +0 -14
  15. data/.github/workflows/ci.yml +0 -3285
  16. data/.github/workflows/create_release_from_tag.yml +0 -62
  17. data/.gitignore +0 -35
  18. data/.gitmodules +0 -3
  19. data/.rspec +0 -4
  20. data/.yardopts +0 -8
  21. data/benchmark.rake +0 -139
  22. data/gemfiles/capistrano2.gemfile +0 -6
  23. data/gemfiles/capistrano3.gemfile +0 -7
  24. data/gemfiles/dry-monitor.gemfile +0 -5
  25. data/gemfiles/grape.gemfile +0 -5
  26. data/gemfiles/hanami-2.0.gemfile +0 -7
  27. data/gemfiles/hanami-2.1.gemfile +0 -7
  28. data/gemfiles/http5.gemfile +0 -5
  29. data/gemfiles/no_dependencies.gemfile +0 -10
  30. data/gemfiles/padrino.gemfile +0 -7
  31. data/gemfiles/psych-3.gemfile +0 -5
  32. data/gemfiles/psych-4.gemfile +0 -5
  33. data/gemfiles/que-1.gemfile +0 -5
  34. data/gemfiles/que-2.gemfile +0 -5
  35. data/gemfiles/rails-6.0.gemfile +0 -10
  36. data/gemfiles/rails-6.1.gemfile +0 -11
  37. data/gemfiles/rails-7.0.gemfile +0 -11
  38. data/gemfiles/rails-7.1.gemfile +0 -11
  39. data/gemfiles/rails-7.2.gemfile +0 -11
  40. data/gemfiles/redis-4.gemfile +0 -5
  41. data/gemfiles/redis-5.gemfile +0 -6
  42. data/gemfiles/resque-2.gemfile +0 -6
  43. data/gemfiles/sequel.gemfile +0 -10
  44. data/gemfiles/sinatra.gemfile +0 -5
  45. data/gemfiles/webmachine1.gemfile +0 -7
  46. data/gemfiles/webmachine2.gemfile +0 -6
  47. data/mono.yml +0 -16
  48. data/spec/.rubocop.yml +0 -7
  49. data/spec/lib/appsignal/auth_check_spec.rb +0 -84
  50. data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
  51. data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
  52. data/spec/lib/appsignal/check_in/cron_spec.rb +0 -210
  53. data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -557
  54. data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
  55. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
  56. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
  57. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
  58. data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
  59. data/spec/lib/appsignal/cli/install_spec.rb +0 -848
  60. data/spec/lib/appsignal/cli_spec.rb +0 -56
  61. data/spec/lib/appsignal/config_spec.rb +0 -1380
  62. data/spec/lib/appsignal/demo_spec.rb +0 -83
  63. data/spec/lib/appsignal/environment_spec.rb +0 -190
  64. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
  65. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
  66. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
  67. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
  68. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
  69. data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
  70. data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
  71. data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
  72. data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
  73. data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
  74. data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
  75. data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
  76. data/spec/lib/appsignal/extension_spec.rb +0 -178
  77. data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
  78. data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
  79. data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
  80. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
  81. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
  82. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
  83. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
  84. data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
  85. data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
  86. data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
  87. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
  88. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
  89. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
  90. data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
  91. data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
  92. data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
  93. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
  94. data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
  95. data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
  96. data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
  97. data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
  98. data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
  99. data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
  100. data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
  101. data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
  102. data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
  103. data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
  104. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
  105. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
  106. data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
  107. data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
  108. data/spec/lib/appsignal/hooks_spec.rb +0 -124
  109. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
  110. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
  111. data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
  112. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
  113. data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
  114. data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
  115. data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
  116. data/spec/lib/appsignal/integrations/que_spec.rb +0 -187
  117. data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
  118. data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
  119. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
  120. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
  121. data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
  122. data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
  123. data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
  124. data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
  125. data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
  126. data/spec/lib/appsignal/loaders_spec.rb +0 -144
  127. data/spec/lib/appsignal/logger_spec.rb +0 -205
  128. data/spec/lib/appsignal/marker_spec.rb +0 -51
  129. data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
  130. data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
  131. data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
  132. data/spec/lib/appsignal/probes_spec.rb +0 -414
  133. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
  134. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
  135. data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
  136. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
  137. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
  138. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
  139. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
  140. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
  141. data/spec/lib/appsignal/rack_spec.rb +0 -243
  142. data/spec/lib/appsignal/sample_data_spec.rb +0 -238
  143. data/spec/lib/appsignal/span_spec.rb +0 -141
  144. data/spec/lib/appsignal/system_spec.rb +0 -126
  145. data/spec/lib/appsignal/transaction_spec.rb +0 -2115
  146. data/spec/lib/appsignal/transmitter_spec.rb +0 -198
  147. data/spec/lib/appsignal/utils/data_spec.rb +0 -166
  148. data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
  149. data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
  150. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
  151. data/spec/lib/appsignal/utils/json_spec.rb +0 -44
  152. data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
  153. data/spec/lib/appsignal_spec.rb +0 -1919
  154. data/spec/lib/puma/appsignal_spec.rb +0 -334
  155. data/spec/spec_helper.rb +0 -179
  156. data/spec/support/fixtures/generated_config.yml +0 -24
  157. data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
  158. data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
  159. data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
  160. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
  161. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
  162. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
  163. data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
  164. data/spec/support/fixtures/uploaded_file.txt +0 -0
  165. data/spec/support/hanami/hanami_app.rb +0 -29
  166. data/spec/support/helpers/action_mailer_helpers.rb +0 -25
  167. data/spec/support/helpers/activejob_helpers.rb +0 -27
  168. data/spec/support/helpers/api_request_helper.rb +0 -60
  169. data/spec/support/helpers/cli_helpers.rb +0 -40
  170. data/spec/support/helpers/config_helpers.rb +0 -66
  171. data/spec/support/helpers/dependency_helper.rb +0 -155
  172. data/spec/support/helpers/directory_helper.rb +0 -27
  173. data/spec/support/helpers/env_helpers.rb +0 -41
  174. data/spec/support/helpers/environment_metdata_helper.rb +0 -16
  175. data/spec/support/helpers/example_exception.rb +0 -13
  176. data/spec/support/helpers/example_standard_error.rb +0 -13
  177. data/spec/support/helpers/loader_helper.rb +0 -21
  178. data/spec/support/helpers/log_helpers.rb +0 -36
  179. data/spec/support/helpers/rails_helper.rb +0 -28
  180. data/spec/support/helpers/std_streams_helper.rb +0 -94
  181. data/spec/support/helpers/system_helpers.rb +0 -8
  182. data/spec/support/helpers/take_at_most_helper.rb +0 -21
  183. data/spec/support/helpers/time_helpers.rb +0 -11
  184. data/spec/support/helpers/transaction_helpers.rb +0 -122
  185. data/spec/support/helpers/wait_for_helper.rb +0 -39
  186. data/spec/support/matchers/contains_log.rb +0 -26
  187. data/spec/support/matchers/have_colorized_text.rb +0 -28
  188. data/spec/support/matchers/transaction.rb +0 -200
  189. data/spec/support/mocks/appsignal_mock.rb +0 -18
  190. data/spec/support/mocks/dummy_app.rb +0 -20
  191. data/spec/support/mocks/fake_gc_profiler.rb +0 -19
  192. data/spec/support/mocks/fake_gvl_tools.rb +0 -28
  193. data/spec/support/mocks/hash_like.rb +0 -10
  194. data/spec/support/mocks/mock_probe.rb +0 -13
  195. data/spec/support/mocks/puma_mock.rb +0 -43
  196. data/spec/support/shared_examples/instrument.rb +0 -48
  197. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
  198. data/spec/support/stubs/delayed_job.rb +0 -0
  199. data/spec/support/stubs/sidekiq/api.rb +0 -4
  200. data/spec/support/testing.rb +0 -203
  201. data/support/bundler_wrapper +0 -12
  202. data/support/install_deps +0 -33
@@ -1,334 +0,0 @@
1
- RSpec.describe "Puma plugin" do
2
- include WaitForHelper
3
-
4
- class MockPumaLauncher
5
- def log_writer
6
- return @log_writer if defined?(@log_writer)
7
-
8
- @log_writer = MockPumaLogWriter.new
9
- end
10
- end
11
-
12
- class MockPumaLogWriter
13
- attr_reader :logs
14
-
15
- def initialize
16
- @logs = []
17
- end
18
-
19
- def log(message)
20
- @logs << [:log, message]
21
- end
22
-
23
- def debug(message)
24
- @logs << [:debug, message]
25
- end
26
-
27
- def error(message)
28
- @logs << [:error, message]
29
- end
30
- end
31
-
32
- # StatsD server used for these tests.
33
- # Open a UDPSocket and listen for messages sent by the AppSignal Puma plugin.
34
- class StatsdServer
35
- def initialize(statsd_port)
36
- @statsd_port = statsd_port
37
- end
38
-
39
- def start
40
- stop
41
- @socket = UDPSocket.new
42
- @socket.bind("127.0.0.1", @statsd_port)
43
-
44
- loop do
45
- # Listen for messages and track them on the messages Array.
46
- packet = @socket.recvfrom(1024)
47
- track_message packet.first
48
- rescue Errno::EBADF
49
- # Ignore error for JRuby 9.1.17.0 specifically, it doesn't appear to
50
- # happen on 9.2.18.0. It doesn't break the tests themselves, ignoring
51
- # this error. It's probably a timing issue where it tries to read
52
- # from the socket after it's closed.
53
- end
54
- end
55
-
56
- def stop
57
- defined?(@socket) && @socket && @socket.close
58
- ensure
59
- @socket = nil
60
- end
61
-
62
- def messages
63
- @messages ||= []
64
- end
65
-
66
- private
67
-
68
- def track_message(message)
69
- @messages_mutex ||= Mutex.new
70
- @messages_mutex.synchronize { messages << message }
71
- end
72
- end
73
-
74
- let(:probe) { MockProbe.new }
75
- let(:launcher) { MockPumaLauncher.new }
76
- let(:hostname) { Socket.gethostname }
77
- let(:expected_default_tags) { { "hostname" => hostname } }
78
- let(:stats_data) { { :backlog => 1 } }
79
- before do
80
- module Puma
81
- def self.stats
82
- JSON.dump(@_stats_data)
83
- end
84
-
85
- def self.stats_hash
86
- @_stats_data
87
- end
88
-
89
- def self._set_stats=(data)
90
- @_stats_data = data
91
- end
92
-
93
- class Plugin
94
- class << self
95
- attr_reader :appsignal_plugin
96
-
97
- def create(&block)
98
- @appsignal_plugin = Class.new(::Puma::Plugin)
99
- @appsignal_plugin.class_eval(&block)
100
- end
101
- end
102
-
103
- attr_reader :in_background_block
104
-
105
- def in_background(&block)
106
- @in_background_block = block
107
- end
108
- end
109
- end
110
- load File.expand_path("../lib/puma/plugin/appsignal.rb", APPSIGNAL_SPEC_DIR)
111
- end
112
- after do
113
- Object.send(:remove_const, :Puma)
114
- Object.send(:remove_const, :AppsignalPumaPlugin)
115
- end
116
-
117
- def run_plugin(stats_data, plugin, &block)
118
- Puma._set_stats = stats_data
119
- ENV["APPSIGNAL_STATSD_PORT"] = "8126"
120
- @statsd = StatsdServer.new(ENV.fetch("APPSIGNAL_STATSD_PORT"))
121
- @server_thread = Thread.new { @statsd.start }
122
- @server_thread.abort_on_exception = true
123
- @client_thread = Thread.new { start_plugin(plugin) }
124
- @client_thread.abort_on_exception = true
125
- wait_for(:puma_client_wait, &block)
126
- ensure
127
- ENV["APPSIGNAL_STATSD_PORT"] = nil
128
- Puma._set_stats = nil
129
- # Stop all threads in test and stop listening on the UDPSocket
130
- @client_thread.kill if defined?(@client_thread) && @client_thread
131
- @server_thread.kill if defined?(@server_thread) && @server_thread
132
- @client_thread = nil
133
- @server_thread = nil
134
-
135
- @statsd.stop if defined?(@statsd) && @statsd
136
- @statsd = nil
137
- end
138
-
139
- def appsignal_plugin
140
- Puma::Plugin.appsignal_plugin
141
- end
142
-
143
- def start_plugin(plugin_class)
144
- plugin = plugin_class.new
145
- # Speed up test by not waiting for 60 seconds initial wait time and loop
146
- # interval.
147
- allow(plugin).to receive(:sleep_time).and_return(0.01)
148
- plugin.start(launcher)
149
- plugin.in_background_block.call
150
- end
151
-
152
- def logs
153
- launcher.log_writer.logs
154
- end
155
-
156
- def messages
157
- @statsd.messages.map do |message|
158
- metric, type, tags_string = message.split("|")
159
- metric_name, metric_value = metric.split(":")
160
- tags = {}
161
- tags_string[1..].split(",").each do |tag|
162
- key, value = tag.split(":")
163
- tags[key] = value
164
- end
165
- {
166
- :name => metric_name,
167
- :value => metric_value.to_i,
168
- :type => type,
169
- :tags => tags
170
- }
171
- end
172
- end
173
-
174
- def expect_gauge(metric_name, metric_value, tags_hash = {})
175
- expect(messages).to include(
176
- :name => "puma_#{metric_name}",
177
- :value => metric_value,
178
- :type => "g",
179
- :tags => expected_default_tags.merge(tags_hash)
180
- )
181
- end
182
-
183
- context "with multiple worker stats" do
184
- let(:stats_data) do
185
- {
186
- :workers => 2,
187
- :booted_workers => 2,
188
- :old_workers => 0,
189
- :worker_status => [
190
- {
191
- :last_status => {
192
- :backlog => 0,
193
- :running => 5,
194
- :pool_capacity => 5,
195
- :max_threads => 5
196
- }
197
- },
198
- {
199
- :last_status => {
200
- :backlog => 0,
201
- :running => 5,
202
- :pool_capacity => 5,
203
- :max_threads => 5
204
- }
205
- }
206
- ]
207
- }
208
- end
209
-
210
- it "collects puma stats as gauge metrics with the (summed) worker metrics" do
211
- run_plugin(stats_data, appsignal_plugin) do
212
- expect(logs).to_not include([:error, kind_of(String)])
213
- expect_gauge(:workers, 2, "type" => "count")
214
- expect_gauge(:workers, 2, "type" => "booted")
215
- expect_gauge(:workers, 0, "type" => "old")
216
- expect_gauge(:connection_backlog, 0)
217
- expect_gauge(:pool_capacity, 10)
218
- expect_gauge(:threads, 10, "type" => "running")
219
- expect_gauge(:threads, 10, "type" => "max")
220
- end
221
- end
222
- end
223
-
224
- context "with single worker stats" do
225
- let(:stats_data) do
226
- {
227
- :backlog => 0,
228
- :running => 5,
229
- :pool_capacity => 5,
230
- :max_threads => 5
231
- }
232
- end
233
-
234
- it "calls `puma_gauge` with the (summed) worker metrics" do
235
- run_plugin(stats_data, appsignal_plugin) do
236
- expect(logs).to_not include([:error, kind_of(String)])
237
- expect_gauge(:connection_backlog, 0)
238
- expect_gauge(:pool_capacity, 5)
239
- expect_gauge(:threads, 5, "type" => "running")
240
- expect_gauge(:threads, 5, "type" => "max")
241
- end
242
- end
243
- end
244
-
245
- context "when using APPSIGNAL_HOSTNAME" do
246
- let(:hostname) { "my-host-name" }
247
- before { ENV["APPSIGNAL_HOSTNAME"] = hostname }
248
- after { ENV.delete("APPSIGNAL_HOSTNAME") }
249
-
250
- it "reports the APPSIGNAL_HOSTNAME as the hostname tag value" do
251
- run_plugin(stats_data, appsignal_plugin) do
252
- expect(logs).to_not include([:error, kind_of(String)])
253
- expect_gauge(:connection_backlog, 1)
254
- end
255
- end
256
- end
257
-
258
- context "without Puma.stats_hash" do
259
- before do
260
- Puma.singleton_class.send(:remove_method, :stats_hash)
261
- end
262
-
263
- it "fetches metrics from Puma.stats instead" do
264
- run_plugin(stats_data, appsignal_plugin) do
265
- expect(logs).to_not include([:error, kind_of(String)])
266
- expect(logs).to_not include([kind_of(Symbol), "AppSignal: No Puma stats to report."])
267
- expect_gauge(:connection_backlog, 1)
268
- end
269
- end
270
- end
271
-
272
- context "without Puma.stats and Puma.stats_hash" do
273
- before do
274
- Puma.singleton_class.send(:remove_method, :stats)
275
- Puma.singleton_class.send(:remove_method, :stats_hash)
276
- end
277
-
278
- it "does not fetch metrics" do
279
- run_plugin(stats_data, appsignal_plugin) do
280
- expect(logs).to_not include([:error, kind_of(String)])
281
- expect(logs).to include([:debug, "AppSignal: No Puma stats to report."])
282
- expect(messages).to be_empty
283
- end
284
- end
285
- end
286
-
287
- context "without running StatsD server" do
288
- it "does nothing" do
289
- run_plugin(stats_data, appsignal_plugin) do
290
- expect(logs).to_not include([:error, kind_of(String)])
291
- expect(messages).to be_empty
292
- end
293
- end
294
- end
295
-
296
- context "with Puma < 6 Events class" do
297
- class MockPumaEvents
298
- attr_reader :logs
299
-
300
- def initialize
301
- @logs = []
302
- end
303
-
304
- def log(message)
305
- @logs << [:log, message]
306
- end
307
-
308
- def debug(message)
309
- @logs << [:debug, message]
310
- end
311
-
312
- def error(message)
313
- @logs << [:error, message]
314
- end
315
- end
316
-
317
- let(:launcher) do
318
- Class.new do
319
- def events
320
- return @events if defined?(@events)
321
-
322
- @events = MockPumaEvents.new
323
- end
324
- end.new
325
- end
326
- let(:stats_data) { { :max_threads => 5 } }
327
-
328
- it "logs messages to the events class" do
329
- run_plugin(stats_data, appsignal_plugin) do
330
- expect(launcher.events.logs).to_not be_empty
331
- end
332
- end
333
- end
334
- end
data/spec/spec_helper.rb DELETED
@@ -1,179 +0,0 @@
1
- ENV["RAILS_ENV"] ||= "test"
2
- ENV["RACK_ENV"] ||= "test"
3
- ENV["PADRINO_ENV"] ||= "test"
4
-
5
- APPSIGNAL_SPEC_DIR = File.expand_path(__dir__)
6
- $LOAD_PATH.unshift(File.join(APPSIGNAL_SPEC_DIR, "support/stubs"))
7
-
8
- Bundler.require :default
9
- require "cgi"
10
- require "rack"
11
- require "rspec"
12
- require "timecop"
13
- require "webmock/rspec"
14
-
15
- Dir[File.join(APPSIGNAL_SPEC_DIR, "support", "helpers", "*.rb")].sort.each do |f|
16
- require f
17
- end
18
- Dir[File.join(DirectoryHelper.support_dir, "mocks", "*.rb")].sort.each do |f|
19
- require f
20
- end
21
- Dir[File.join(DirectoryHelper.support_dir, "matchers", "*.rb")].sort.each do |f|
22
- require f
23
- end
24
- Dir[File.join(APPSIGNAL_SPEC_DIR, "support/shared_examples", "*.rb")].sort.each do |f|
25
- require f
26
- end
27
- if DependencyHelper.rails_present?
28
- require File.join(ConfigHelpers.rails_project_fixture_path, "config/application.rb")
29
- end
30
- if DependencyHelper.hanami2_present?
31
- Dir[File.join(DirectoryHelper.support_dir, "hanami", "*.rb")].sort.each do |f|
32
- require f
33
- end
34
- end
35
- require "pry" if DependencyHelper.dependency_present?("pry")
36
- require "appsignal"
37
- # Include patches of AppSignal modules and classes to make test helpers
38
- # available.
39
- require File.join(DirectoryHelper.support_dir, "testing.rb")
40
-
41
- puts "Running specs in #{RUBY_VERSION} on #{RUBY_PLATFORM}\n\n"
42
-
43
- # Add way to clear subscribers between specs
44
- if defined?(ActiveSupport)
45
- module ActiveSupport
46
- module Notifications
47
- class Fanout
48
- def clear_subscribers
49
- @subscribers.clear
50
- @listeners_for.clear
51
- end
52
- end
53
- end
54
- end
55
- end
56
-
57
- RSpec.configure do |config|
58
- config.include DirectoryHelper
59
- config.include StdStreamsHelper
60
- config.include ConfigHelpers
61
- config.include EnvHelpers
62
- config.include TimeHelpers
63
- config.include TransactionHelpers
64
- config.include ApiRequestHelper
65
- config.include SystemHelpers
66
- config.include LogHelpers
67
- config.include LoaderHelper
68
- config.extend DependencyHelper
69
-
70
- config.example_status_persistence_file_path = "spec/examples.txt"
71
- config.fail_if_no_examples = true
72
- config.exclude_pattern = "spec/integration/diagnose/**/*_spec.rb"
73
- config.filter_run_excluding(
74
- :extension_installation_failure => true,
75
- :jruby => !DependencyHelper.running_jruby?
76
- )
77
- config.mock_with :rspec do |mocks|
78
- mocks.syntax = :expect
79
- end
80
- config.expect_with :rspec do |expectations|
81
- expectations.syntax = :expect
82
- end
83
-
84
- def spec_system_tmp_dir
85
- File.join(tmp_dir, "system-tmp")
86
- end
87
-
88
- config.before :suite do
89
- WebMock.disable_net_connect!
90
- end
91
-
92
- config.before :context do
93
- FileUtils.rm_rf(tmp_dir)
94
- FileUtils.mkdir_p(spec_system_tmp_dir)
95
- end
96
-
97
- config.before do
98
- Appsignal.clear!
99
- Appsignal::Testing.clear!
100
- Appsignal::Loaders.clear!
101
- Appsignal::CheckIn.clear!
102
-
103
- clear_current_transaction!
104
- stop_minutely_probes
105
- ENV["RAILS_ENV"] ||= "test"
106
- ENV["RACK_ENV"] ||= "test"
107
- ENV["PADRINO_ENV"] ||= "test"
108
-
109
- # Clean environment
110
- appsignal_key_prefixes = %w[APPSIGNAL_ _APPSIGNAL_]
111
- env_keys = ENV.keys.select { |key| key.start_with?(*appsignal_key_prefixes) }
112
- # Always unset the diagnose variable
113
- # For normal Ruby this is unset in the diagnose task itself, but the JRuby
114
- # bug requires us to unset it using the method below as well. It's not
115
- # present in the ENV keys list because it's already cleared in Ruby itself
116
- # in the diagnose task, so add it manually to the list of to-be cleaned up
117
- # keys.
118
- env_keys << "_APPSIGNAL_DIAGNOSE"
119
- env_keys << "_TEST_APPSIGNAL_EXTENSION_FAILURE"
120
- env_keys.each do |key|
121
- # First set the ENV var to an empty string and then delete the key from
122
- # the env. We set the env var to an empty string first as JRuby doesn't
123
- # sync `delete` calls to extensions, making our extension think the env
124
- # var is still set after calling `ENV.delete`. Setting it to an empty
125
- # string will sort of unset it, our extension ignores env vars with an
126
- # empty string as a value.
127
- ENV[key] = ""
128
- ENV.delete(key)
129
- end
130
-
131
- # Stub system_tmp_dir to something in the project dir for specs
132
- allow(Appsignal::Config).to receive(:system_tmp_dir).and_return(spec_system_tmp_dir)
133
-
134
- # Unsubscribe Rails error reporter if present to avoid it reporting errors
135
- # multiple times through multiple subscriptions.
136
- if defined?(Rails) && Rails.respond_to?(:error)
137
- if Rails.error.respond_to?(:unsubscribe) # Future Rails version after 7.0.4.3
138
- Rails.error.unsubscribe(Appsignal::Integrations::RailsErrorReporterSubscriber)
139
- else
140
- Rails.error.instance_variable_get(:@subscribers)
141
- .delete(Appsignal::Integrations::RailsErrorReporterSubscriber)
142
- end
143
- end
144
- end
145
-
146
- # These tests are not run by default. They require a failed extension
147
- # installation. See the `rake test:failure` task. If a test with this tag was
148
- # run, run `rake extension:install` again to fix the extension installation
149
- # before running other tests.
150
- config.before :extension_installation_failure => true do
151
- next unless Appsignal.extension_loaded?
152
-
153
- raise "Extension is loaded, please run the following task and rerun the test." \
154
- "\n\n rake test:prepare_failure"
155
- end
156
-
157
- # Check to see if the extension is loaded before running the specs. If the
158
- # extension is not loaded it can result in unexpected behavior.
159
- config.before do |example|
160
- next if Appsignal.extension_loaded?
161
- next if example.metadata[:extension_installation_failure]
162
-
163
- puts "\nWARNING: The AppSignal extension is not loaded, please run the " \
164
- "following task and rerun the test." \
165
- "\n\n rake extension:install\n"
166
- end
167
-
168
- config.after do
169
- stop_minutely_probes
170
- end
171
-
172
- config.after :context do
173
- FileUtils.rm_f(File.join(project_fixture_path, "log/appsignal.log"))
174
- end
175
-
176
- def stop_minutely_probes
177
- Appsignal::Probes.stop
178
- end
179
- end
@@ -1,24 +0,0 @@
1
- default: &defaults
2
- # Your push api key, it is possible to set this dynamically using ERB:
3
- # push_api_key: "<%= ENV['APPSIGNAL_PUSH_API_KEY'] %>"
4
- push_api_key: "my_app_key"
5
-
6
- # Your app's name
7
- name: "MyApp"
8
-
9
- # The cuttoff point in ms above which a request is considered slow, default is 200
10
- # slow_request_threshold: 200
11
-
12
- # Actions that should not be monitored by AppSignal
13
- # ignore_actions:
14
- # - ApplicationController#isup
15
-
16
- # Configuration per environment, leave out an environment or set active
17
- # to false to not push metrics for that environment.
18
- development:
19
- <<: *defaults
20
- active: true
21
-
22
- production:
23
- <<: *defaults
24
- active: true
@@ -1 +0,0 @@
1
- <%= ENV.fetch("I AM A KEY THAT DOES NOT EXIST") %>
@@ -1,57 +0,0 @@
1
- default: &defaults
2
- push_api_key: "abc"
3
- name: "TestApp"
4
- enable_minutely_probes: false
5
-
6
- production:
7
- <<: *defaults
8
- active: true
9
-
10
- development:
11
- <<: *defaults
12
- active: true
13
-
14
- test:
15
- <<: *defaults
16
- endpoint: "http://localhost:3000"
17
- log_level: debug
18
- active: true
19
-
20
- old_config:
21
- api_key: "def"
22
- active: true
23
- ignore_exceptions:
24
- - StandardError
25
- request_headers: [
26
- "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
27
- "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
28
- "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
29
- "REQUEST_METHOD", "REQUEST_PATH", "SERVER_NAME", "SERVER_PORT",
30
- "SERVER_PROTOCOL", "HTTP_USER_AGENT"
31
- ]
32
-
33
- old_config_mixed_with_new_config:
34
- push_api_key: "ghi"
35
- api_key: "def"
36
- active: true
37
- ignore_errors:
38
- - NoMethodError
39
- ignore_exceptions:
40
- - StandardError
41
- request_headers: [
42
- "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
43
- "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
44
- "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
45
- "REQUEST_METHOD", "REQUEST_PATH", "SERVER_NAME", "SERVER_PORT",
46
- "SERVER_PROTOCOL", "HTTP_USER_AGENT"
47
- ]
48
-
49
- rack_env:
50
- <<: *defaults
51
-
52
- rails_env:
53
- <<: *defaults
54
-
55
- inactive_env:
56
- <<: *defaults
57
- active: false
File without changes
@@ -1,16 +0,0 @@
1
- require "rails"
2
-
3
- module MyApp
4
- class Application < Rails::Application
5
- config.active_support.deprecation = proc { |message, stack| }
6
- config.eager_load = false
7
-
8
- def self.initialize!
9
- # Prevent errors about Rails being initialized more than once
10
- return if defined?(@initialized)
11
-
12
- super
13
- @initialized = true
14
- end
15
- end
16
- end
@@ -1,56 +0,0 @@
1
- default: &defaults
2
- push_api_key: "abc"
3
- name: "TestApp"
4
- enable_minutely_probes: false
5
-
6
- production:
7
- <<: *defaults
8
- active: true
9
-
10
- development:
11
- <<: *defaults
12
- active: true
13
-
14
- test:
15
- <<: *defaults
16
- log_level: debug
17
- active: true
18
-
19
- old_config:
20
- api_key: "def"
21
- active: true
22
- ignore_exceptions:
23
- - StandardError
24
- request_headers: [
25
- "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
26
- "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
27
- "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
28
- "REQUEST_METHOD", "REQUEST_PATH", "SERVER_NAME", "SERVER_PORT",
29
- "SERVER_PROTOCOL", "HTTP_USER_AGENT"
30
- ]
31
-
32
- old_config_mixed_with_new_config:
33
- push_api_key: "ghi"
34
- api_key: "def"
35
- active: true
36
- ignore_errors:
37
- - NoMethodError
38
- ignore_exceptions:
39
- - StandardError
40
- request_headers: [
41
- "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
42
- "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
43
- "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
44
- "REQUEST_METHOD", "REQUEST_PATH", "SERVER_NAME", "SERVER_PORT",
45
- "SERVER_PROTOCOL", "HTTP_USER_AGENT"
46
- ]
47
-
48
- rack_env:
49
- <<: *defaults
50
-
51
- rails_env:
52
- <<: *defaults
53
-
54
- inactive_env:
55
- <<: *defaults
56
- active: false
@@ -1,10 +0,0 @@
1
- # Load the Rails application.
2
- require_relative "application"
3
-
4
- # Initialize the Rails application.
5
- MyApp::Application.initialize!
6
-
7
- # Asserted from the diagnose spec
8
- Appsignal.configure do |config|
9
- config.ignore_actions = ["Action from DSL"]
10
- end
File without changes