appsignal 4.0.5 → 4.0.7

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 (203) 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/build_matrix.yml +2 -1
  6. data/ext/agent.rb +27 -27
  7. data/lib/appsignal/check_in/scheduler.rb +3 -4
  8. data/lib/appsignal/check_in.rb +1 -1
  9. data/lib/appsignal/config.rb +1 -3
  10. data/lib/appsignal/integrations/que.rb +8 -2
  11. data/lib/appsignal/integrations/resque.rb +1 -6
  12. data/lib/appsignal/utils/hash_sanitizer.rb +4 -0
  13. data/lib/appsignal/version.rb +1 -1
  14. metadata +2 -191
  15. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  16. data/.github/ISSUE_TEMPLATE/chore.md +0 -14
  17. data/.github/workflows/ci.yml +0 -3150
  18. data/.github/workflows/create_release_from_tag.yml +0 -62
  19. data/.gitignore +0 -35
  20. data/.gitmodules +0 -3
  21. data/.rspec +0 -4
  22. data/.yardopts +0 -8
  23. data/benchmark.rake +0 -139
  24. data/gemfiles/capistrano2.gemfile +0 -6
  25. data/gemfiles/capistrano3.gemfile +0 -7
  26. data/gemfiles/dry-monitor.gemfile +0 -5
  27. data/gemfiles/grape.gemfile +0 -5
  28. data/gemfiles/hanami-2.0.gemfile +0 -7
  29. data/gemfiles/hanami-2.1.gemfile +0 -7
  30. data/gemfiles/http5.gemfile +0 -5
  31. data/gemfiles/no_dependencies.gemfile +0 -10
  32. data/gemfiles/padrino.gemfile +0 -7
  33. data/gemfiles/psych-3.gemfile +0 -5
  34. data/gemfiles/psych-4.gemfile +0 -5
  35. data/gemfiles/que.gemfile +0 -5
  36. data/gemfiles/rails-6.0.gemfile +0 -10
  37. data/gemfiles/rails-6.1.gemfile +0 -11
  38. data/gemfiles/rails-7.0.gemfile +0 -11
  39. data/gemfiles/rails-7.1.gemfile +0 -11
  40. data/gemfiles/rails-7.2.gemfile +0 -11
  41. data/gemfiles/redis-4.gemfile +0 -5
  42. data/gemfiles/redis-5.gemfile +0 -6
  43. data/gemfiles/resque-2.gemfile +0 -6
  44. data/gemfiles/sequel.gemfile +0 -10
  45. data/gemfiles/sinatra.gemfile +0 -5
  46. data/gemfiles/webmachine1.gemfile +0 -7
  47. data/gemfiles/webmachine2.gemfile +0 -6
  48. data/mono.yml +0 -16
  49. data/spec/.rubocop.yml +0 -7
  50. data/spec/lib/appsignal/auth_check_spec.rb +0 -84
  51. data/spec/lib/appsignal/capistrano2_spec.rb +0 -227
  52. data/spec/lib/appsignal/capistrano3_spec.rb +0 -284
  53. data/spec/lib/appsignal/check_in/cron_spec.rb +0 -202
  54. data/spec/lib/appsignal/check_in/scheduler_spec.rb +0 -443
  55. data/spec/lib/appsignal/cli/demo_spec.rb +0 -46
  56. data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +0 -16
  57. data/spec/lib/appsignal/cli/diagnose/utils_spec.rb +0 -86
  58. data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1553
  59. data/spec/lib/appsignal/cli/helpers_spec.rb +0 -179
  60. data/spec/lib/appsignal/cli/install_spec.rb +0 -848
  61. data/spec/lib/appsignal/cli_spec.rb +0 -56
  62. data/spec/lib/appsignal/config_spec.rb +0 -1380
  63. data/spec/lib/appsignal/demo_spec.rb +0 -83
  64. data/spec/lib/appsignal/environment_spec.rb +0 -190
  65. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +0 -60
  66. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +0 -21
  67. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +0 -21
  68. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +0 -52
  69. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +0 -21
  70. data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +0 -84
  71. data/spec/lib/appsignal/event_formatter/rom/sql_formatter_spec.rb +0 -22
  72. data/spec/lib/appsignal/event_formatter/sequel/sql_formatter_spec.rb +0 -30
  73. data/spec/lib/appsignal/event_formatter/view_component/render_formatter_spec.rb +0 -41
  74. data/spec/lib/appsignal/event_formatter_spec.rb +0 -193
  75. data/spec/lib/appsignal/extension/jruby_spec.rb +0 -46
  76. data/spec/lib/appsignal/extension_install_failure_spec.rb +0 -20
  77. data/spec/lib/appsignal/extension_spec.rb +0 -178
  78. data/spec/lib/appsignal/garbage_collection_spec.rb +0 -98
  79. data/spec/lib/appsignal/hooks/action_cable_spec.rb +0 -345
  80. data/spec/lib/appsignal/hooks/action_mailer_spec.rb +0 -55
  81. data/spec/lib/appsignal/hooks/active_support_notifications/finish_with_state_shared_examples.rb +0 -23
  82. data/spec/lib/appsignal/hooks/active_support_notifications/instrument_shared_examples.rb +0 -99
  83. data/spec/lib/appsignal/hooks/active_support_notifications/start_finish_shared_examples.rb +0 -47
  84. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +0 -47
  85. data/spec/lib/appsignal/hooks/activejob_spec.rb +0 -650
  86. data/spec/lib/appsignal/hooks/at_exit_spec.rb +0 -105
  87. data/spec/lib/appsignal/hooks/celluloid_spec.rb +0 -40
  88. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +0 -40
  89. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +0 -38
  90. data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +0 -83
  91. data/spec/lib/appsignal/hooks/excon_spec.rb +0 -67
  92. data/spec/lib/appsignal/hooks/gvl_spec.rb +0 -145
  93. data/spec/lib/appsignal/hooks/http_spec.rb +0 -37
  94. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +0 -46
  95. data/spec/lib/appsignal/hooks/mri_spec.rb +0 -23
  96. data/spec/lib/appsignal/hooks/net_http_spec.rb +0 -18
  97. data/spec/lib/appsignal/hooks/passenger_spec.rb +0 -30
  98. data/spec/lib/appsignal/hooks/puma_spec.rb +0 -80
  99. data/spec/lib/appsignal/hooks/que_spec.rb +0 -19
  100. data/spec/lib/appsignal/hooks/rake_spec.rb +0 -144
  101. data/spec/lib/appsignal/hooks/redis_client_spec.rb +0 -218
  102. data/spec/lib/appsignal/hooks/redis_spec.rb +0 -124
  103. data/spec/lib/appsignal/hooks/resque_spec.rb +0 -27
  104. data/spec/lib/appsignal/hooks/sequel_spec.rb +0 -44
  105. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -29
  106. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +0 -115
  107. data/spec/lib/appsignal/hooks/unicorn_spec.rb +0 -63
  108. data/spec/lib/appsignal/hooks/webmachine_spec.rb +0 -24
  109. data/spec/lib/appsignal/hooks_spec.rb +0 -124
  110. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +0 -74
  111. data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +0 -454
  112. data/spec/lib/appsignal/integrations/http_spec.rb +0 -111
  113. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +0 -154
  114. data/spec/lib/appsignal/integrations/net_http_spec.rb +0 -33
  115. data/spec/lib/appsignal/integrations/object_spec.rb +0 -347
  116. data/spec/lib/appsignal/integrations/puma_spec.rb +0 -150
  117. data/spec/lib/appsignal/integrations/que_spec.rb +0 -152
  118. data/spec/lib/appsignal/integrations/railtie_spec.rb +0 -457
  119. data/spec/lib/appsignal/integrations/resque_spec.rb +0 -155
  120. data/spec/lib/appsignal/integrations/shoryuken_spec.rb +0 -165
  121. data/spec/lib/appsignal/integrations/sidekiq_spec.rb +0 -640
  122. data/spec/lib/appsignal/integrations/webmachine_spec.rb +0 -136
  123. data/spec/lib/appsignal/loaders/grape_spec.rb +0 -12
  124. data/spec/lib/appsignal/loaders/hanami_spec.rb +0 -92
  125. data/spec/lib/appsignal/loaders/padrino_spec.rb +0 -273
  126. data/spec/lib/appsignal/loaders/sinatra_spec.rb +0 -44
  127. data/spec/lib/appsignal/loaders_spec.rb +0 -144
  128. data/spec/lib/appsignal/logger_spec.rb +0 -205
  129. data/spec/lib/appsignal/marker_spec.rb +0 -51
  130. data/spec/lib/appsignal/probes/gvl_spec.rb +0 -164
  131. data/spec/lib/appsignal/probes/mri_spec.rb +0 -162
  132. data/spec/lib/appsignal/probes/sidekiq_spec.rb +0 -333
  133. data/spec/lib/appsignal/probes_spec.rb +0 -411
  134. data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +0 -370
  135. data/spec/lib/appsignal/rack/body_wrapper_spec.rb +0 -319
  136. data/spec/lib/appsignal/rack/event_handler_spec.rb +0 -441
  137. data/spec/lib/appsignal/rack/grape_middleware_spec.rb +0 -201
  138. data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +0 -36
  139. data/spec/lib/appsignal/rack/instrumentation_middleware_spec.rb +0 -38
  140. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +0 -126
  141. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +0 -217
  142. data/spec/lib/appsignal/rack_spec.rb +0 -243
  143. data/spec/lib/appsignal/sample_data_spec.rb +0 -238
  144. data/spec/lib/appsignal/span_spec.rb +0 -141
  145. data/spec/lib/appsignal/system_spec.rb +0 -126
  146. data/spec/lib/appsignal/transaction_spec.rb +0 -2111
  147. data/spec/lib/appsignal/transmitter_spec.rb +0 -198
  148. data/spec/lib/appsignal/utils/data_spec.rb +0 -166
  149. data/spec/lib/appsignal/utils/hash_sanitizer_spec.rb +0 -182
  150. data/spec/lib/appsignal/utils/integration_logger_spec.rb +0 -21
  151. data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -153
  152. data/spec/lib/appsignal/utils/json_spec.rb +0 -44
  153. data/spec/lib/appsignal/utils/query_params_sanitizer_spec.rb +0 -192
  154. data/spec/lib/appsignal_spec.rb +0 -1919
  155. data/spec/lib/puma/appsignal_spec.rb +0 -334
  156. data/spec/spec_helper.rb +0 -173
  157. data/spec/support/fixtures/generated_config.yml +0 -24
  158. data/spec/support/fixtures/projects/broken/config/appsignal.yml +0 -1
  159. data/spec/support/fixtures/projects/valid/config/appsignal.yml +0 -57
  160. data/spec/support/fixtures/projects/valid/log/.gitkeep +0 -0
  161. data/spec/support/fixtures/projects/valid_with_rails_app/config/application.rb +0 -16
  162. data/spec/support/fixtures/projects/valid_with_rails_app/config/appsignal.yml +0 -56
  163. data/spec/support/fixtures/projects/valid_with_rails_app/config/environment.rb +0 -10
  164. data/spec/support/fixtures/projects/valid_with_rails_app/log/.gitkeep +0 -0
  165. data/spec/support/fixtures/uploaded_file.txt +0 -0
  166. data/spec/support/hanami/hanami_app.rb +0 -29
  167. data/spec/support/helpers/action_mailer_helpers.rb +0 -25
  168. data/spec/support/helpers/activejob_helpers.rb +0 -27
  169. data/spec/support/helpers/api_request_helper.rb +0 -20
  170. data/spec/support/helpers/cli_helpers.rb +0 -40
  171. data/spec/support/helpers/config_helpers.rb +0 -66
  172. data/spec/support/helpers/dependency_helper.rb +0 -150
  173. data/spec/support/helpers/directory_helper.rb +0 -27
  174. data/spec/support/helpers/env_helpers.rb +0 -41
  175. data/spec/support/helpers/environment_metdata_helper.rb +0 -16
  176. data/spec/support/helpers/example_exception.rb +0 -13
  177. data/spec/support/helpers/example_standard_error.rb +0 -13
  178. data/spec/support/helpers/loader_helper.rb +0 -21
  179. data/spec/support/helpers/log_helpers.rb +0 -36
  180. data/spec/support/helpers/rails_helper.rb +0 -28
  181. data/spec/support/helpers/std_streams_helper.rb +0 -94
  182. data/spec/support/helpers/system_helpers.rb +0 -8
  183. data/spec/support/helpers/take_at_most_helper.rb +0 -21
  184. data/spec/support/helpers/time_helpers.rb +0 -11
  185. data/spec/support/helpers/transaction_helpers.rb +0 -122
  186. data/spec/support/helpers/wait_for_helper.rb +0 -39
  187. data/spec/support/matchers/contains_log.rb +0 -26
  188. data/spec/support/matchers/have_colorized_text.rb +0 -28
  189. data/spec/support/matchers/transaction.rb +0 -200
  190. data/spec/support/mocks/appsignal_mock.rb +0 -18
  191. data/spec/support/mocks/dummy_app.rb +0 -20
  192. data/spec/support/mocks/fake_gc_profiler.rb +0 -19
  193. data/spec/support/mocks/fake_gvl_tools.rb +0 -28
  194. data/spec/support/mocks/hash_like.rb +0 -10
  195. data/spec/support/mocks/mock_probe.rb +0 -13
  196. data/spec/support/mocks/puma_mock.rb +0 -43
  197. data/spec/support/shared_examples/instrument.rb +0 -48
  198. data/spec/support/stubs/appsignal/loaders/loader_stub.rb +0 -7
  199. data/spec/support/stubs/delayed_job.rb +0 -0
  200. data/spec/support/stubs/sidekiq/api.rb +0 -4
  201. data/spec/support/testing.rb +0 -194
  202. data/support/bundler_wrapper +0 -12
  203. data/support/install_deps +0 -33
@@ -1,11 +0,0 @@
1
- module TimeHelpers
2
- def fixed_time
3
- @fixed_time ||= Time.utc(2014, 1, 15, 11, 0, 0).to_f
4
- end
5
-
6
- def advance_frozen_time(time, addition)
7
- Time.at(time.to_f + addition).tap do |new_time|
8
- Timecop.freeze(new_time)
9
- end
10
- end
11
- end
@@ -1,122 +0,0 @@
1
- module TransactionHelpers
2
- def uploaded_file
3
- if DependencyHelper.rails_present?
4
- ActionDispatch::Http::UploadedFile.new(:tempfile => "/tmp")
5
- else
6
- ::Rack::Multipart::UploadedFile.new(File.join(fixtures_dir, "/uploaded_file.txt"))
7
- end
8
- end
9
-
10
- def default_namespace
11
- Appsignal::Transaction::HTTP_REQUEST
12
- end
13
-
14
- def create_transaction(namespace = default_namespace)
15
- Appsignal::Transaction.create(namespace)
16
- end
17
-
18
- def new_transaction(namespace = default_namespace, ext: nil)
19
- Appsignal::Transaction.new(namespace, :ext => ext)
20
- end
21
-
22
- def rack_request(env)
23
- Rack::Request.new(env)
24
- end
25
-
26
- def background_job_transaction
27
- new_transaction(Appsignal::Transaction::BACKGROUND_JOB)
28
- end
29
-
30
- def http_request_transaction
31
- new_transaction(Appsignal::Transaction::HTTP_REQUEST)
32
- end
33
-
34
- # Returns the all {Appsignal::Transaction} objects created during this test
35
- # run so far.
36
- #
37
- # @return [Array<Appsignal::Transaction>]
38
- def created_transactions
39
- Appsignal::Testing.transactions
40
- end
41
-
42
- # Returns the last created {Appsignal::Transaction}.
43
- #
44
- # @return [Appsignal::Transaction]
45
- def last_transaction
46
- created_transactions.last
47
- end
48
-
49
- def current_transaction?
50
- Appsignal::Transaction.current?
51
- end
52
-
53
- def current_transaction
54
- Appsignal::Transaction.current
55
- end
56
-
57
- # Set current transaction manually.
58
- # Cleared by {clear_current_transaction!}
59
- #
60
- # When a block is given, the current transaction is automatically unset after
61
- # the block.
62
- def set_current_transaction(transaction) # rubocop:disable Naming/AccessorMethodName
63
- Thread.current[:appsignal_transaction] = transaction
64
- yield if block_given?
65
- ensure
66
- clear_current_transaction! if block_given?
67
- end
68
-
69
- # Use when {Appsignal::Transaction.clear_current_transaction!} is stubbed to
70
- # clear the current transaction on the current thread.
71
- def clear_current_transaction!
72
- Thread.current[:appsignal_transaction] = nil
73
- end
74
-
75
- # Set the current for the duration of the given block.
76
- #
77
- # Helper for {set_current_transaction} and {clear_current_transaction!}
78
- def with_current_transaction(transaction)
79
- set_current_transaction transaction
80
- yield
81
- ensure
82
- clear_current_transaction!
83
- end
84
-
85
- # Track the AppSignal transaction JSON when a transaction gets completed
86
- # ({Appsignal::Transaction.complete}).
87
- #
88
- # It will also add sample data to the transaction when it gets completed.
89
- # This can be disabled by setting the `sample` option to `false`.
90
- #
91
- # It will be tracked for every transaction that is started inside the
92
- # `keep_transactions` block.
93
- #
94
- # @example Keep a transaction while also adding sample data
95
- # keep_transactions do
96
- # transaction = Appsignal::Transaction.new(...)
97
- # transaction.complete
98
- # transaction.to_h # => Hash with transaction data before it was completed
99
- # end
100
- #
101
- # @example Keep a transaction without adding sample data
102
- # keep_transactions :sample => false do
103
- # transaction = Appsignal::Transaction.new(...)
104
- # transaction.complete
105
- # transaction.to_h
106
- # # => Hash with transaction data before it was completed with an empty
107
- # # Hash for the `sample_data` key.
108
- # end
109
- #
110
- # @yield block to perform while the transactions are tracked.
111
- # @param options [Hash]
112
- # @option options [Boolean] :sample Whether or not to sample transactions.
113
- # @return [Object] returns the block return value.
114
- def keep_transactions(options = {})
115
- Appsignal::Testing.keep_transactions = true
116
- Appsignal::Testing.sample_transactions = options.fetch(:sample, true)
117
- yield
118
- ensure
119
- Appsignal::Testing.keep_transactions = nil
120
- Appsignal::Testing.sample_transactions = nil
121
- end
122
- end
@@ -1,39 +0,0 @@
1
- module WaitForHelper
2
- # Wait for a condition to be met
3
- #
4
- # @example
5
- # # Perform threaded operation
6
- # wait_for("enough probe calls") { probe.calls >= 2 }
7
- # # Assert on result
8
- #
9
- # @param name [String] The name of the condition to check. Used in the
10
- # error when it fails.
11
- # @yield Assertion to check.
12
- # @yieldreturn [Boolean] True/False value that indicates if the condition
13
- # is met.
14
- # @raise [StandardError] Raises error if the condition is not met after 5
15
- # seconds, 5_000 tries.
16
- def wait_for(name)
17
- max_wait = 5_000
18
- i = 0
19
- error = nil
20
- while i < max_wait
21
- begin
22
- result = yield
23
- break if result
24
- rescue Exception => e # rubocop:disable Lint/RescueException
25
- # Capture error so we know if it exited with an error
26
- error = e
27
- ensure
28
- i += 1
29
- sleep 0.001
30
- end
31
- end
32
-
33
- return unless i >= max_wait
34
-
35
- error_message =
36
- ("\nError: #{error.class}: #{error.message}\n#{error.backtrace.join("\n")}" if error)
37
- raise "Waited 5 seconds for #{name} condition, but was not met.#{error_message}"
38
- end
39
- end
@@ -1,26 +0,0 @@
1
- RSpec::Matchers.define :contains_log do |level, message|
2
- log_level_prefix = level.upcase
3
-
4
- match do |actual|
5
- case message
6
- when Regexp
7
- /\[#{log_level_prefix}\] #{message}/.match?(actual)
8
- else
9
- expected_log_line = "[#{log_level_prefix}] #{message}"
10
- actual.include?(expected_log_line)
11
- end
12
- end
13
-
14
- failure_message do |actual|
15
- <<~MESSAGE
16
- Did not contain log line:
17
- Log level: #{log_level_prefix}
18
- Message: #{message}
19
-
20
- Received logs:
21
- #{actual}
22
- MESSAGE
23
- end
24
-
25
- diffable
26
- end
@@ -1,28 +0,0 @@
1
- RSpec::Matchers.define :have_colorized_text do |color, text|
2
- match do |actual|
3
- color_codes = Appsignal::CLI::Helpers::COLOR_CODES
4
- reset_color_code = color_codes.fetch(:default)
5
- color_code = color_codes.fetch(color)
6
-
7
- @expected = "\e[#{color_code}m#{text}\e[#{reset_color_code}m"
8
- expect(actual).to include(@expected)
9
- end
10
-
11
- diffable
12
- attr_reader :expected
13
- end
14
-
15
- COLOR_TAG_MATCHER_REGEX = /\e\[(\d+)m/.freeze
16
- RSpec::Matchers.define :have_color_markers do
17
- match do |actual|
18
- actual =~ COLOR_TAG_MATCHER_REGEX
19
- end
20
-
21
- failure_message do
22
- "expected that output contains color markers: /\\e[\\d+m/"
23
- end
24
-
25
- failure_message_when_negated do
26
- "expected that output does not contain color markers: /\\e[\\d+m/"
27
- end
28
- end
@@ -1,200 +0,0 @@
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
- define_transaction_sample_matcher_for(:error_causes)
63
-
64
- RSpec::Matchers.define :be_completed do
65
- match(:notify_expectation_failures => true) do |transaction|
66
- values_match? transaction.ext._completed?, true
67
- end
68
- end
69
-
70
- RSpec::Matchers.define :have_error do |error_class, error_message, error_backtrace|
71
- match(:notify_expectation_failures => true) do |transaction|
72
- transaction_error = transaction.to_h["error"]
73
- if error_class && error_message
74
- expect(transaction_error).to include(
75
- "name" => error_class,
76
- "message" => error_message,
77
- "backtrace" => error_backtrace ? JSON.dump(error_backtrace) : kind_of(String)
78
- )
79
- else
80
- expect(transaction_error).to be_any
81
- end
82
- end
83
-
84
- match_when_negated(:notify_expectation_failures => true) do |transaction|
85
- transaction_error = transaction.to_h["error"]
86
- if error_class && error_message
87
- expect(transaction_error).to_not include(
88
- "name" => error_class,
89
- "message" => error_message,
90
- "backtrace" => kind_of(String)
91
- )
92
- else
93
- expect(transaction_error).to be_nil
94
- end
95
- end
96
- end
97
-
98
- RSpec::Matchers.define :include_event do |event|
99
- match(:notify_expectation_failures => true) do |transaction|
100
- events = transaction.to_h["events"]
101
- if event
102
- expect(events).to include(format_event(event))
103
- else
104
- expect(events).to be_any
105
- end
106
- end
107
-
108
- match_when_negated(:notify_expectation_failures => true) do |transaction|
109
- events = transaction.to_h["events"]
110
- if event
111
- expect(events).to_not include(format_event(event))
112
- else
113
- expect(events).to be_empty
114
- end
115
- end
116
-
117
- def format_event(event)
118
- hash_including({
119
- "body" => "",
120
- "body_format" => Appsignal::EventFormatter::DEFAULT,
121
- "count" => 1,
122
- "name" => kind_of(String),
123
- "title" => ""
124
- }.merge(event.transform_keys(&:to_s)))
125
- end
126
- end
127
- RSpec::Matchers.alias_matcher :include_events, :include_event
128
-
129
- RSpec::Matchers.define :include_metadata do |metadata|
130
- match(:notify_expectation_failures => true) do |transaction|
131
- actual_metadata = transaction.to_h["metadata"]
132
- if metadata
133
- expect(actual_metadata).to include(metadata)
134
- else
135
- expect(actual_metadata).to be_any
136
- end
137
- end
138
-
139
- match_when_negated(:notify_expectation_failures => true) do |transaction|
140
- actual_metadata = transaction.to_h["metadata"]
141
- if metadata
142
- expect(actual_metadata).to_not include(metadata)
143
- else
144
- expect(actual_metadata).to be_empty
145
- end
146
- end
147
- end
148
-
149
- RSpec::Matchers.define :include_breadcrumb do |action, category, message, metadata, time|
150
- match(:notify_expectation_failures => true) do |transaction|
151
- breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
152
- if action
153
- breadcrumb = format_breadcrumb(action, category, message, metadata, time)
154
- expect(breadcrumbs).to include(breadcrumb)
155
- else
156
- expect(transaction.to_h.dig("sample_data", "breadcrumbs")).to be_any
157
- end
158
- end
159
-
160
- match_when_negated(:notify_expectation_failures => true) do |transaction|
161
- breadcrumbs = transaction.to_h.dig("sample_data", "breadcrumbs")
162
- if action
163
- breadcrumb = format_breadcrumb(action, category, message, metadata, time)
164
- expect(breadcrumbs).to_not include(breadcrumb)
165
- else
166
- expect(breadcrumbs).to_not be_any
167
- end
168
- end
169
-
170
- def format_breadcrumb(action, category, message, metadata, time)
171
- {
172
- "action" => action,
173
- "category" => category,
174
- "message" => message || "",
175
- "metadata" => metadata || {},
176
- "time" => time || kind_of(Integer)
177
- }
178
- end
179
- end
180
- RSpec::Matchers.alias_matcher :include_breadcrumbs, :include_breadcrumb
181
-
182
- RSpec::Matchers.define :have_queue_start do |queue_start_time|
183
- match(:notify_expectation_failures => true) do |transaction|
184
- actual_start = transaction.ext.queue_start
185
- if queue_start_time
186
- expect(actual_start).to eq(queue_start_time)
187
- else
188
- expect(actual_start).to_not be_nil
189
- end
190
- end
191
-
192
- match_when_negated(:notify_expectation_failures => true) do |transaction|
193
- actual_start = transaction.ext.queue_start
194
- if queue_start_time
195
- expect(actual_start).to_not eq(queue_start_time)
196
- else
197
- expect(actual_start).to be_nil
198
- end
199
- end
200
- end
@@ -1,18 +0,0 @@
1
- class AppsignalMock
2
- attr_reader :gauges
3
-
4
- def initialize(hostname: nil)
5
- @hostname = hostname
6
- @gauges = []
7
- end
8
-
9
- def config
10
- options = {}
11
- options[:hostname] = @hostname if @hostname
12
- ConfigHelpers.build_config(:options => options)
13
- end
14
-
15
- def set_gauge(*args)
16
- @gauges << args
17
- end
18
- end
@@ -1,20 +0,0 @@
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,19 +0,0 @@
1
- class FakeGCProfiler
2
- attr_accessor :total_time
3
- attr_writer :clear_delay
4
-
5
- def initialize(total_time = 0)
6
- @total_time = total_time
7
- end
8
-
9
- def clear
10
- sleep clear_delay
11
- @total_time = 0
12
- end
13
-
14
- private
15
-
16
- def clear_delay
17
- @clear_delay ||= 0
18
- end
19
- end
@@ -1,28 +0,0 @@
1
- module FakeGVLTools
2
- def self.reset
3
- self::GlobalTimer.monotonic_time = 0
4
- self::WaitingThreads.count = 0
5
- end
6
-
7
- module GlobalTimer
8
- @monotonic_time = 0
9
-
10
- class << self
11
- attr_accessor :monotonic_time
12
- end
13
- end
14
-
15
- module WaitingThreads
16
- @count = 0
17
- @enabled = false
18
-
19
- class << self
20
- attr_accessor :count
21
- attr_writer :enabled
22
-
23
- def enabled?
24
- @enabled
25
- end
26
- end
27
- end
28
- end
@@ -1,10 +0,0 @@
1
- class HashLike < Hash
2
- def initialize(value)
3
- super
4
- @value = value
5
- end
6
-
7
- def to_h
8
- @value
9
- end
10
- end
@@ -1,13 +0,0 @@
1
- class MockProbe
2
- attr_reader :calls
3
-
4
- def initialize
5
- Appsignal::Testing.store[:mock_probe_call] = 0
6
- @calls = 0
7
- end
8
-
9
- def call
10
- Appsignal::Testing.store[:mock_probe_call] += 1
11
- @calls += 1
12
- end
13
- end
@@ -1,43 +0,0 @@
1
- class PumaMock
2
- module MiniSSL
3
- class SSLError < StandardError
4
- def self.to_s
5
- "Puma::MiniSSL::SSLError"
6
- end
7
- end
8
- end
9
-
10
- class HttpParserError < StandardError
11
- def self.to_s
12
- "Puma::HttpParserError"
13
- end
14
- end
15
-
16
- class HttpParserError501 < StandardError
17
- def self.to_s
18
- "Puma::HttpParserError501"
19
- end
20
- end
21
-
22
- def self.stats
23
- end
24
-
25
- def self.cli_config
26
- @cli_config ||= CliConfig.new
27
- end
28
-
29
- class Server
30
- end
31
-
32
- module Const
33
- VERSION = "6.0.0".freeze
34
- end
35
-
36
- class CliConfig
37
- attr_accessor :options
38
-
39
- def initialize
40
- @options = {}
41
- end
42
- end
43
- end
@@ -1,48 +0,0 @@
1
- RSpec.shared_examples "instrument helper" do
2
- around { |example| keep_transactions { example.run } }
3
- let(:stub) { double(:method_call => "return value") }
4
-
5
- it "records an event around the given block" do
6
- return_value = instrumenter.instrument "name", "title", "body" do
7
- stub.method_call
8
- end
9
- expect(return_value).to eq "return value"
10
-
11
- expect_transaction_to_have_event
12
- end
13
-
14
- context "with an error raised in the passed block" do
15
- it "records an event around the given block" do
16
- expect do
17
- instrumenter.instrument "name", "title", "body" do
18
- stub.method_call
19
- raise ExampleException, "foo"
20
- end
21
- end.to raise_error(ExampleException, "foo")
22
-
23
- expect_transaction_to_have_event
24
- end
25
- end
26
-
27
- context "with an error raise in the passed block" do
28
- it "records an event around the given block" do
29
- expect do
30
- instrumenter.instrument "name", "title", "body" do
31
- stub.method_call
32
- throw :foo
33
- end
34
- end.to throw_symbol(:foo)
35
-
36
- expect_transaction_to_have_event
37
- end
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
48
- end
@@ -1,7 +0,0 @@
1
- module Appsignal
2
- module Loaders
3
- class LoaderStub < Loader
4
- register :loader_stub
5
- end
6
- end
7
- end
File without changes
@@ -1,4 +0,0 @@
1
- module Sidekiq
2
- class Stats
3
- end
4
- end