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,557 +0,0 @@
1
- describe Appsignal::CheckIn::Scheduler do
2
- include WaitForHelper
3
- include TakeAtMostHelper
4
-
5
- let(:log_stream) { std_stream }
6
- let(:logs) { log_contents(log_stream) }
7
- let(:appsignal_options) { {} }
8
- let(:scheduler) { Appsignal::CheckIn.scheduler }
9
-
10
- before do
11
- start_agent(:options => appsignal_options, :internal_logger => test_logger(log_stream))
12
- # Shorten debounce intervals to make the tests run faster.
13
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 0.1)
14
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 0.1)
15
- end
16
-
17
- after do
18
- scheduler.stop
19
- end
20
-
21
- describe "when no event is sent" do
22
- it "does not start a thread" do
23
- expect(scheduler.thread).to be_nil
24
- end
25
-
26
- it "does not schedule a debounce" do
27
- expect(scheduler.waker).to be_nil
28
- end
29
-
30
- it "can be stopped" do
31
- # Set all debounce intervals to 10 seconds, to make the assertion
32
- # fail if it waits for the debounce -- this ensures that what is being
33
- # tested is that no debounces are awaited when stopping the scheduler.
34
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 10)
35
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 10)
36
-
37
- take_at_most(0.1) do
38
- expect { scheduler.stop }.not_to raise_error
39
- end
40
- end
41
-
42
- it "can be stopped more than once" do
43
- # Set all debounce intervals to 10 seconds, to make the assertion
44
- # fail if it waits for the debounce -- this ensures that what is being
45
- # tested is that no debounces are awaited when stopping the scheduler.
46
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 10)
47
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 10)
48
-
49
- take_at_most(0.1) do
50
- expect { scheduler.stop }.not_to raise_error
51
- expect { scheduler.stop }.not_to raise_error
52
- end
53
- end
54
-
55
- it "closes the queue when stopped" do
56
- scheduler.stop
57
- expect(scheduler.queue.closed?).to be(true)
58
- end
59
- end
60
-
61
- describe "when an event is sent" do
62
- it "starts a thread" do
63
- stub_check_in_request(
64
- :events => [
65
- "identifier" => "test",
66
- "kind" => "finish",
67
- "check_in_type" => "cron"
68
- ]
69
- )
70
- Appsignal::CheckIn.cron("test")
71
- expect(scheduler.thread).to be_a(Thread)
72
- end
73
-
74
- it "schedules a debounce" do
75
- stub_check_in_request(
76
- :events => [
77
- "identifier" => "test",
78
- "kind" => "finish",
79
- "check_in_type" => "cron"
80
- ]
81
- )
82
- Appsignal::CheckIn.cron("test")
83
- expect(scheduler.waker).to be_a(Thread)
84
- end
85
-
86
- it "schedules the event to be transmitted" do
87
- stub_check_in_request(
88
- :events => [
89
- "identifier" => "test",
90
- "kind" => "finish",
91
- "check_in_type" => "cron"
92
- ]
93
- )
94
-
95
- expect(scheduler.events).to be_empty
96
-
97
- Appsignal::CheckIn.cron("test")
98
-
99
- expect(scheduler.events).not_to be_empty
100
-
101
- wait_for("the event to be transmitted") { scheduler.transmitted == 1 }
102
-
103
- expect(scheduler.events).to be_empty
104
-
105
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `test` finish event")
106
- expect(logs).to contains_log(:debug, "Transmitted cron check-in `test` finish event")
107
- end
108
-
109
- it "waits for the event to be transmitted when stopped" do
110
- # Set all debounce intervals to 10 seconds, to make the test
111
- # fail if it waits for the debounce -- this ensures that what is being
112
- # tested is that the events are transmitted immediately when the
113
- # scheduler is stopped, without waiting for any debounce.
114
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 10)
115
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 10)
116
-
117
- stub_check_in_request(
118
- :events => [
119
- "identifier" => "test",
120
- "kind" => "finish",
121
- "check_in_type" => "cron"
122
- ]
123
- )
124
-
125
- Appsignal::CheckIn.cron("test")
126
-
127
- expect(scheduler.events).not_to be_empty
128
-
129
- take_at_most(0.1) do
130
- expect { scheduler.stop }.not_to raise_error
131
- end
132
-
133
- # Check that the thread wasn't killed before the transmission was
134
- # completed.
135
- expect(scheduler.transmitted).to eq(1)
136
-
137
- expect(scheduler.events).to be_empty
138
-
139
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `test` finish event")
140
- expect(logs).to contains_log(:debug, "Transmitted cron check-in `test` finish event")
141
- end
142
-
143
- it "can be stopped more than once" do
144
- # Set all debounce intervals to 10 seconds, to make the test
145
- # fail if it waits for the debounce -- this ensures that what is being
146
- # tested is that the events are transmitted immediately when the
147
- # scheduler is stopped, without waiting for the debounce interval.
148
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 10)
149
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 10)
150
-
151
- stub_check_in_request(
152
- :events => [
153
- "identifier" => "test",
154
- "kind" => "finish",
155
- "check_in_type" => "cron"
156
- ]
157
- )
158
- Appsignal::CheckIn.cron("test")
159
- take_at_most(0.1) do
160
- expect { scheduler.stop }.not_to raise_error
161
- end
162
-
163
- # Check that the thread wasn't killed before the transmission was
164
- # completed.
165
- expect(scheduler.transmitted).to eq(1)
166
-
167
- take_at_most(0.1) do
168
- expect { scheduler.stop }.not_to raise_error
169
- end
170
- end
171
-
172
- it "closes the queue when stopped" do
173
- stub_check_in_request(
174
- :events => [
175
- "identifier" => "test",
176
- "kind" => "finish",
177
- "check_in_type" => "cron"
178
- ]
179
- )
180
- Appsignal::CheckIn.cron("test")
181
- scheduler.stop
182
- expect(scheduler.queue.closed?).to be(true)
183
- end
184
-
185
- it "kills the thread when stopped" do
186
- stub_check_in_request(
187
- :events => [
188
- "identifier" => "test",
189
- "kind" => "finish",
190
- "check_in_type" => "cron"
191
- ]
192
- )
193
- Appsignal::CheckIn.cron("test")
194
- scheduler.stop
195
- expect(scheduler.thread.alive?).to be(false)
196
- end
197
-
198
- it "unschedules the debounce when stopped" do
199
- stub_check_in_request(
200
- :events => [
201
- "identifier" => "test",
202
- "kind" => "finish",
203
- "check_in_type" => "cron"
204
- ]
205
- )
206
- Appsignal::CheckIn.cron("test")
207
- waker = scheduler.waker
208
- scheduler.stop
209
- expect(waker.alive?).to be(false)
210
- expect(scheduler.waker).to be_nil
211
- end
212
- end
213
-
214
- describe "when many events are sent" do
215
- describe "within the short debounce interval" do
216
- it "transmits all events at once" do
217
- ["first", "second", "third"].map do |identifier|
218
- stub_check_in_request(
219
- :events => [
220
- "identifier" => identifier,
221
- "kind" => "finish",
222
- "check_in_type" => "cron"
223
- ]
224
- )
225
- end
226
-
227
- Appsignal::CheckIn.cron("first")
228
- Appsignal::CheckIn.cron("second")
229
- Appsignal::CheckIn.cron("third")
230
-
231
- wait_for("the events to be transmitted") { scheduler.transmitted == 1 }
232
- end
233
-
234
- it "transmits all events at once when stopped" do
235
- # Set a short debounce interval of 10 seconds, to make the final wait
236
- # fail if it waits for the debounce -- this ensures that what is being
237
- # tested is that the events are transmitted when the scheduler is
238
- # stopped.
239
- stub_const("Appsignal::CheckIn::Scheduler::INITIAL_DEBOUNCE_SECONDS", 10)
240
-
241
- ["first", "second", "third"].map do |identifier|
242
- stub_check_in_request(
243
- :events => [
244
- "identifier" => identifier,
245
- "kind" => "finish",
246
- "check_in_type" => "cron"
247
- ]
248
- )
249
- end
250
-
251
- Appsignal::CheckIn.cron("first")
252
- Appsignal::CheckIn.cron("second")
253
- Appsignal::CheckIn.cron("third")
254
-
255
- scheduler.stop
256
-
257
- wait_for("the events to be transmitted") { scheduler.transmitted == 1 }
258
- end
259
- end
260
-
261
- describe "further apart than the short debounce interval" do
262
- it "transmits the first event and enqueues future events" do
263
- stub_check_in_request(
264
- :events => [
265
- "identifier" => "first",
266
- "kind" => "finish",
267
- "check_in_type" => "cron"
268
- ]
269
- )
270
-
271
- Appsignal::CheckIn.cron("first")
272
-
273
- wait_for("the first event to be transmitted") { scheduler.transmitted == 1 }
274
-
275
- stub_check_in_request(
276
- :events => [
277
- {
278
- "identifier" => "second",
279
- "kind" => "finish",
280
- "check_in_type" => "cron"
281
- },
282
- {
283
- "identifier" => "third",
284
- "kind" => "finish",
285
- "check_in_type" => "cron"
286
- }
287
- ]
288
- )
289
- Appsignal::CheckIn.cron("second")
290
- Appsignal::CheckIn.cron("third")
291
-
292
- expect(scheduler.events).to match(["second", "third"].map do |identifier|
293
- hash_including({
294
- :identifier => identifier,
295
- :check_in_type => "cron",
296
- :kind => "finish"
297
- })
298
- end)
299
- end
300
-
301
- it "transmits the other events after the debounce interval" do
302
- stub_check_in_request(
303
- :events => [
304
- "identifier" => "first",
305
- "kind" => "finish",
306
- "check_in_type" => "cron"
307
- ]
308
- )
309
- Appsignal::CheckIn.cron("first")
310
-
311
- wait_for("the first event to be transmitted") { scheduler.transmitted == 1 }
312
-
313
- stub_check_in_request(
314
- :events => [
315
- {
316
- "identifier" => "second",
317
- "kind" => "finish",
318
- "check_in_type" => "cron"
319
- },
320
- {
321
- "identifier" => "third",
322
- "kind" => "finish",
323
- "check_in_type" => "cron"
324
- }
325
- ]
326
- )
327
-
328
- Appsignal::CheckIn.cron("second")
329
- Appsignal::CheckIn.cron("third")
330
-
331
- expect(scheduler.events).to_not be_empty
332
-
333
- wait_for("the other events to be transmitted") { scheduler.transmitted == 2 }
334
-
335
- expect(scheduler.events).to be_empty
336
-
337
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `first` finish event")
338
- expect(logs).to contains_log(:debug, "Transmitted cron check-in `first` finish event")
339
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `second` finish event")
340
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `third` finish event")
341
- expect(logs).to contains_log(:debug, "Transmitted 2 check-in events")
342
- end
343
-
344
- it "transmits the other events when stopped" do
345
- # Restore the original long debounce interval of 10 seconds, to make
346
- # the final wait fail if it waits for the debounce -- this ensures
347
- # that what is being tested is that the events are transmitted
348
- # immediately when the scheduler is stopped.
349
- stub_const("Appsignal::CheckIn::Scheduler::BETWEEN_TRANSMISSIONS_DEBOUNCE_SECONDS", 10)
350
-
351
- stub_check_in_request(
352
- :events => [
353
- "identifier" => "first",
354
- "kind" => "finish",
355
- "check_in_type" => "cron"
356
- ]
357
- )
358
- Appsignal::CheckIn.cron("first")
359
-
360
- wait_for("the event to be transmitted") { scheduler.transmitted == 1 }
361
-
362
- stub_check_in_request(
363
- :events => [
364
- {
365
- "identifier" => "second",
366
- "kind" => "finish",
367
- "check_in_type" => "cron"
368
- },
369
- {
370
- "identifier" => "third",
371
- "kind" => "finish",
372
- "check_in_type" => "cron"
373
- }
374
- ]
375
- )
376
-
377
- Appsignal::CheckIn.cron("second")
378
- Appsignal::CheckIn.cron("third")
379
-
380
- expect(scheduler.events).to_not be_empty
381
-
382
- scheduler.stop
383
-
384
- wait_for("the other events to be transmitted") { scheduler.transmitted == 2 }
385
-
386
- expect(scheduler.events).to be_empty
387
-
388
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `first` finish event")
389
- expect(logs).to contains_log(:debug, "Transmitted cron check-in `first` finish event")
390
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `second` finish event")
391
- expect(logs).to contains_log(:debug, "Scheduling cron check-in `third` finish event")
392
- expect(logs).to contains_log(:debug, "Transmitted 2 check-in events")
393
- end
394
- end
395
- end
396
-
397
- describe "when a similar event is sent more than once" do
398
- it "only transmits one of the similar events" do
399
- # We must instantiate `Appsignal::CheckIn::Cron` directly, as the
400
- # `.cron` helper would use a different digest for each invocation.
401
- cron = Appsignal::CheckIn::Cron.new(:identifier => "test")
402
-
403
- stub_check_in_request(
404
- :events => [
405
- "identifier" => "test",
406
- "kind" => "start",
407
- "check_in_type" => "cron"
408
- ]
409
- )
410
-
411
- cron.start
412
- cron.start
413
-
414
- wait_for("the event to be transmitted") { scheduler.transmitted == 1 }
415
-
416
- expect(logs).to contains_log(
417
- :debug,
418
- "Scheduling cron check-in `test` start event (digest #{cron.digest}) to be transmitted"
419
- )
420
- expect(logs).to contains_log(
421
- :debug,
422
- "Scheduling cron check-in `test` start event (digest #{cron.digest}) to be transmitted"
423
- )
424
- expect(logs).to contains_log(
425
- :debug,
426
- "Replacing previously scheduled cron check-in `test` start event (digest #{cron.digest})"
427
- )
428
- expect(logs).to contains_log(
429
- :debug,
430
- "Transmitted cron check-in `test` start event (digest #{cron.digest})"
431
- )
432
- end
433
- end
434
-
435
- describe "when the scheduler is stopped" do
436
- it "does not schedule any events to be transmitted" do
437
- scheduler.stop
438
-
439
- Appsignal::CheckIn.cron("test")
440
-
441
- expect(scheduler.events).to be_empty
442
-
443
- expect(logs).to contains_log(
444
- :debug,
445
- /Cannot transmit cron check-in `test` finish event .+: AppSignal is stopped/
446
- )
447
- end
448
- end
449
-
450
- describe "when AppSignal is not active" do
451
- let(:appsignal_options) { { :active => false } }
452
-
453
- it "does not schedule any events to be transmitted" do
454
- scheduler.stop
455
-
456
- Appsignal::CheckIn.cron("test")
457
-
458
- expect(scheduler.events).to be_empty
459
-
460
- expect(logs).to contains_log(
461
- :debug,
462
- /Cannot transmit cron check-in `test` finish event .+: AppSignal is not active/
463
- )
464
- end
465
- end
466
-
467
- describe "when transmitting returns a non-success response code" do
468
- it "logs the error and continues" do
469
- stub_check_in_request(
470
- :events => [
471
- "identifier" => "first",
472
- "kind" => "start",
473
- "check_in_type" => "cron"
474
- ],
475
- :response => { :status => 404 }
476
- )
477
- stub_check_in_request(
478
- :events => [
479
- "identifier" => "first",
480
- "kind" => "finish",
481
- "check_in_type" => "cron"
482
- ],
483
- :response => { :status => 404 }
484
- )
485
-
486
- Appsignal::CheckIn.cron("first")
487
-
488
- wait_for("the first event to be transmitted") { scheduler.transmitted == 1 }
489
-
490
- stub_check_in_request(
491
- :events => [
492
- "identifier" => "second",
493
- "kind" => "start",
494
- "check_in_type" => "cron"
495
- ]
496
- )
497
- stub_check_in_request(
498
- :events => [
499
- "identifier" => "second",
500
- "kind" => "finish",
501
- "check_in_type" => "cron"
502
- ]
503
- )
504
-
505
- Appsignal::CheckIn.cron("second")
506
-
507
- wait_for("the second event to be transmitted") { scheduler.transmitted == 2 }
508
-
509
- expect(logs).to contains_log(
510
- :error,
511
- /Failed to transmit cron check-in `first` finish event .+: 404 status code/
512
- )
513
- expect(logs).to contains_log(
514
- :debug,
515
- "Transmitted cron check-in `second` finish event"
516
- )
517
- end
518
- end
519
-
520
- describe "when transmitting throws an error" do
521
- it "logs the error and continues" do
522
- stub_check_in_request(
523
- :events => [
524
- "identifier" => "first",
525
- "kind" => "finish",
526
- "check_in_type" => "cron"
527
- ],
528
- :response => ExampleStandardError.new("Something went wrong")
529
- )
530
-
531
- Appsignal::CheckIn.cron("first")
532
-
533
- wait_for("the first event to be transmitted") { scheduler.transmitted == 1 }
534
-
535
- stub_check_in_request(
536
- :events => [
537
- "identifier" => "second",
538
- "kind" => "finish",
539
- "check_in_type" => "cron"
540
- ]
541
- )
542
-
543
- Appsignal::CheckIn.cron("second")
544
-
545
- wait_for("the second event to be transmitted") { scheduler.transmitted == 2 }
546
-
547
- expect(logs).to contains_log(
548
- :error,
549
- /Failed to transmit cron check-in `first` finish event .+: ExampleStandardError: Something went wrong/ # rubocop:disable Layout/LineLength
550
- )
551
- expect(logs).to contains_log(
552
- :debug,
553
- "Transmitted cron check-in `second` finish event"
554
- )
555
- end
556
- end
557
- end
@@ -1,46 +0,0 @@
1
- require "appsignal/cli"
2
-
3
- describe Appsignal::CLI::Demo do
4
- include CLIHelpers
5
-
6
- let(:options) { {} }
7
- let(:out_stream) { std_stream }
8
- let(:output) { out_stream.read }
9
- before(:context) { Appsignal.stop }
10
-
11
- def run
12
- run_within_dir project_fixture_path
13
- end
14
-
15
- def run_within_dir(chdir)
16
- Dir.chdir chdir do
17
- capture_stdout(out_stream) { run_cli("demo", options) }
18
- end
19
- end
20
-
21
- context "without configuration" do
22
- it "returns an error" do
23
- expect { run_within_dir tmp_dir }.to raise_error(SystemExit)
24
-
25
- expect(output).to include("Error: Unable to start the AppSignal agent")
26
- end
27
- end
28
-
29
- context "with configuration" do
30
- before do
31
- # Ignore sleeps to speed up the test
32
- allow(Appsignal::Demo).to receive(:sleep)
33
- end
34
- let(:options) { { :environment => "development" } }
35
-
36
- it "calls Appsignal::Demo transmitter" do
37
- expect(Appsignal::Demo).to receive(:transmit).and_return(true)
38
- run
39
- end
40
-
41
- it "outputs message" do
42
- run
43
- expect(output).to include("Demonstration sample data sent!")
44
- end
45
- end
46
- end
@@ -1,16 +0,0 @@
1
- require "bundler/cli"
2
- require "bundler/cli/common"
3
- require "appsignal/cli/diagnose/paths"
4
-
5
- describe Appsignal::CLI::Diagnose::Paths do
6
- describe "#paths" do
7
- before { start_agent }
8
-
9
- it "returns gem installation path as package_install_path" do
10
- expect(described_class.new.paths[:package_install_path]).to eq(
11
- :label => "AppSignal gem path",
12
- :path => Bundler::CLI::Common.select_spec("appsignal").full_gem_path.strip
13
- )
14
- end
15
- end
16
- end
@@ -1,86 +0,0 @@
1
- require "appsignal/cli/diagnose/utils"
2
-
3
- describe Appsignal::CLI::Diagnose::Utils do
4
- describe ".username_for_uid" do
5
- subject { described_class.username_for_uid(uid) }
6
-
7
- context "when user with id exists" do
8
- let(:uid) { 0 }
9
-
10
- it "returns username" do
11
- is_expected.to be_kind_of(String)
12
- end
13
- end
14
-
15
- context "when user with id does not exist" do
16
- let(:uid) { -1 }
17
-
18
- it "returns nil" do
19
- is_expected.to be_nil
20
- end
21
- end
22
- end
23
-
24
- describe ".group_for_gid" do
25
- subject { described_class.group_for_gid(uid) }
26
-
27
- context "when group with id exists" do
28
- let(:uid) { 0 }
29
-
30
- it "returns group name" do
31
- is_expected.to be_kind_of(String)
32
- end
33
- end
34
-
35
- context "when group with id does not exist" do
36
- let(:uid) { -3 }
37
-
38
- it "returns nil" do
39
- is_expected.to be_nil
40
- end
41
- end
42
- end
43
-
44
- describe ".read_file_content" do
45
- let(:path) { File.join(spec_system_tmp_dir, "test_file.txt") }
46
- let(:bytes_to_read) { 100 }
47
- subject { described_class.read_file_content(path, bytes_to_read) }
48
- before do
49
- File.write(path, file_contents)
50
- end
51
-
52
- context "when file is bigger than read size" do
53
- let(:file_contents) do
54
- "".tap do |s|
55
- 100.times do |i|
56
- s << "line #{i}\n"
57
- end
58
- end
59
- end
60
-
61
- it "returns the last X bytes" do
62
- is_expected
63
- .to eq(file_contents[(file_contents.length - bytes_to_read)..file_contents.length])
64
- end
65
- end
66
-
67
- context "when file is smaller than read size" do
68
- let(:file_contents) { "line 1\n" }
69
-
70
- it "returns the whole file content" do
71
- is_expected.to eq(file_contents)
72
- end
73
- end
74
-
75
- context "when reading the file raises an illegal seek error" do
76
- let(:file_contents) { "line 1\n" }
77
- before do
78
- expect(File).to receive(:binread).and_raise(Errno::ESPIPE)
79
- end
80
-
81
- it "returns the error as the content" do
82
- expect { subject }.to raise_error(Errno::ESPIPE)
83
- end
84
- end
85
- end
86
- end