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,155 +0,0 @@
1
- require "appsignal/integrations/resque"
2
-
3
- if DependencyHelper.resque_present?
4
- describe Appsignal::Integrations::ResqueIntegration do
5
- def perform_rescue_job(klass, options = {})
6
- payload = { "class" => klass.to_s }.merge(options)
7
- job = ::Resque::Job.new(queue, payload)
8
- keep_transactions { job.perform }
9
- end
10
-
11
- let(:queue) { "default" }
12
- let(:namespace) { Appsignal::Transaction::BACKGROUND_JOB }
13
- let(:options) { {} }
14
- before do
15
- start_agent(:options => options)
16
-
17
- class ResqueTestJob
18
- def self.perform(*_args)
19
- end
20
- end
21
-
22
- class ResqueErrorTestJob
23
- def self.perform
24
- raise "resque job error"
25
- end
26
- end
27
-
28
- expect(Appsignal).to receive(:stop) # Resque calls stop after every job
29
- end
30
- around do |example|
31
- keep_transactions { example.run }
32
- end
33
- after do
34
- Object.send(:remove_const, :ResqueTestJob)
35
- Object.send(:remove_const, :ResqueErrorTestJob)
36
- end
37
-
38
- it "tracks a transaction on perform" do
39
- perform_rescue_job(ResqueTestJob)
40
-
41
- transaction = last_transaction
42
- expect(transaction).to have_id
43
- expect(transaction).to have_namespace(namespace)
44
- expect(transaction).to have_action("ResqueTestJob#perform")
45
- expect(transaction).to_not have_error
46
- expect(transaction).to_not include_metadata
47
- expect(transaction).to_not include_breadcrumbs
48
- expect(transaction).to include_tags("queue" => queue)
49
- expect(transaction).to include_event("name" => "perform.resque")
50
- end
51
-
52
- context "with error" do
53
- it "tracks the error on the transaction" do
54
- expect do
55
- perform_rescue_job(ResqueErrorTestJob)
56
- end.to raise_error(RuntimeError, "resque job error")
57
-
58
- transaction = last_transaction
59
- expect(transaction).to have_id
60
- expect(transaction).to have_namespace(namespace)
61
- expect(transaction).to have_action("ResqueErrorTestJob#perform")
62
- expect(transaction).to have_error("RuntimeError", "resque job error")
63
- expect(transaction).to_not include_metadata
64
- expect(transaction).to_not include_breadcrumbs
65
- expect(transaction).to include_tags("queue" => queue)
66
- expect(transaction).to include_event("name" => "perform.resque")
67
- end
68
- end
69
-
70
- context "with arguments" do
71
- let(:options) { { :filter_parameters => ["foo"] } }
72
-
73
- it "filters out configured arguments" do
74
- perform_rescue_job(
75
- ResqueTestJob,
76
- "args" => [
77
- "foo",
78
- {
79
- "foo" => "secret",
80
- "bar" => "Bar",
81
- "baz" => { "1" => "foo" }
82
- }
83
- ]
84
- )
85
-
86
- transaction = last_transaction
87
- expect(transaction).to have_id
88
- expect(transaction).to have_namespace(namespace)
89
- expect(transaction).to have_action("ResqueTestJob#perform")
90
- expect(transaction).to_not have_error
91
- expect(transaction).to_not include_metadata
92
- expect(transaction).to_not include_breadcrumbs
93
- expect(transaction).to include_tags("queue" => queue)
94
- expect(transaction).to include_event("name" => "perform.resque")
95
- expect(transaction).to include_params(
96
- [
97
- "foo",
98
- {
99
- "foo" => "[FILTERED]",
100
- "bar" => "Bar",
101
- "baz" => { "1" => "foo" }
102
- }
103
- ]
104
- )
105
- end
106
- end
107
-
108
- context "with active job" do
109
- before do
110
- module ActiveJobMock
111
- module QueueAdapters
112
- module ResqueAdapter
113
- module JobWrapper
114
- class << self
115
- def perform(job_data)
116
- # Basic ActiveJob stub for this test.
117
- # I haven't found a way to run Resque in a testing mode.
118
- Appsignal.set_action(job_data["job_class"])
119
- end
120
- end
121
- end
122
- end
123
- end
124
- end
125
-
126
- stub_const "ActiveJob", ActiveJobMock
127
- end
128
- after { Object.send(:remove_const, :ActiveJobMock) }
129
-
130
- it "does not set arguments but lets the ActiveJob integration handle it" do
131
- perform_rescue_job(
132
- ResqueTestJob,
133
- "class" => "ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper",
134
- "args" => [
135
- {
136
- "job_class" => "ResqueTestJobByActiveJob#perform",
137
- "arguments" => ["an argument", "second argument"]
138
- }
139
- ]
140
- )
141
-
142
- transaction = last_transaction
143
- expect(transaction).to have_id
144
- expect(transaction).to have_namespace(namespace)
145
- expect(transaction).to have_action("ResqueTestJobByActiveJob#perform")
146
- expect(transaction).to_not have_error
147
- expect(transaction).to_not include_metadata
148
- expect(transaction).to_not include_breadcrumbs
149
- expect(transaction).to include_tags("queue" => queue)
150
- expect(transaction).to include_event("name" => "perform.resque")
151
- expect(transaction).to_not include_params
152
- end
153
- end
154
- end
155
- end
@@ -1,165 +0,0 @@
1
- require "appsignal/integrations/shoryuken"
2
-
3
- describe Appsignal::Integrations::ShoryukenMiddleware do
4
- class DemoShoryukenWorker
5
- end
6
-
7
- let(:time) { "2010-01-01 10:01:00UTC" }
8
- let(:worker_instance) { DemoShoryukenWorker.new }
9
- let(:queue) { "some-funky-queue-name" }
10
- let(:sqs_msg) { double(:message_id => "msg1", :attributes => {}) }
11
- let(:body) { {} }
12
- let(:options) { {} }
13
- before { start_agent(:options => options) }
14
- around { |example| keep_transactions { example.run } }
15
-
16
- def perform_shoryuken_job(&block)
17
- block ||= lambda {}
18
- Timecop.freeze(Time.parse(time)) do
19
- described_class.new.call(
20
- worker_instance,
21
- queue,
22
- sqs_msg,
23
- body,
24
- &block
25
- )
26
- end
27
- end
28
-
29
- context "with a performance call" do
30
- let(:sent_timestamp) { Time.parse("1976-11-18 0:00:00UTC").to_i * 1000 }
31
- let(:sqs_msg) do
32
- double(:message_id => "msg1", :attributes => { "SentTimestamp" => sent_timestamp })
33
- end
34
-
35
- context "with complex argument" do
36
- let(:body) { { :foo => "Foo", :bar => "Bar" } }
37
-
38
- it "wraps the job in a transaction with the correct params" do
39
- expect { perform_shoryuken_job }.to change { created_transactions.length }.by(1)
40
-
41
- transaction = last_transaction
42
- expect(transaction).to have_id
43
- expect(transaction).to have_namespace(Appsignal::Transaction::BACKGROUND_JOB)
44
- expect(transaction).to have_action("DemoShoryukenWorker#perform")
45
- expect(transaction).to_not have_error
46
- expect(transaction).to include_event(
47
- "body" => "",
48
- "body_format" => Appsignal::EventFormatter::DEFAULT,
49
- "count" => 1,
50
- "name" => "perform_job.shoryuken",
51
- "title" => ""
52
- )
53
- expect(transaction).to include_params("foo" => "Foo", "bar" => "Bar")
54
- expect(transaction).to include_tags(
55
- "message_id" => "msg1",
56
- "queue" => queue,
57
- "SentTimestamp" => sent_timestamp
58
- )
59
- expect(transaction).to have_queue_start(sent_timestamp)
60
- expect(transaction).to be_completed
61
- end
62
-
63
- context "with parameter filtering" do
64
- let(:options) { { :filter_parameters => ["foo"] } }
65
-
66
- it "filters selected arguments" do
67
- perform_shoryuken_job
68
-
69
- expect(last_transaction).to include_params("foo" => "[FILTERED]", "bar" => "Bar")
70
- end
71
- end
72
- end
73
-
74
- context "with a string as an argument" do
75
- let(:body) { "foo bar" }
76
-
77
- it "handles string arguments" do
78
- perform_shoryuken_job
79
-
80
- expect(last_transaction).to include_params("params" => body)
81
- end
82
- end
83
-
84
- context "with primitive type as argument" do
85
- let(:body) { 1 }
86
-
87
- it "handles primitive types as arguments" do
88
- perform_shoryuken_job
89
-
90
- expect(last_transaction).to include_params("params" => body)
91
- end
92
- end
93
- end
94
-
95
- context "with exception" do
96
- it "sets the exception on the transaction" do
97
- expect do
98
- expect do
99
- perform_shoryuken_job { raise ExampleException, "error message" }
100
- end.to raise_error(ExampleException)
101
- end.to change { created_transactions.length }.by(1)
102
-
103
- transaction = last_transaction
104
- expect(transaction).to have_id
105
- expect(transaction).to have_action("DemoShoryukenWorker#perform")
106
- expect(transaction).to have_namespace(Appsignal::Transaction::BACKGROUND_JOB)
107
- expect(transaction).to have_error("ExampleException", "error message")
108
- expect(transaction).to be_completed
109
- end
110
- end
111
-
112
- context "with batched jobs" do
113
- let(:sqs_msg) do
114
- [
115
- double(
116
- :message_id => "msg2",
117
- :attributes => {
118
- "SentTimestamp" => (Time.parse("1976-11-18 01:00:00UTC").to_i * 1000).to_s
119
- }
120
- ),
121
- double(
122
- :message_id => "msg1",
123
- :attributes => { "SentTimestamp" => sent_timestamp.to_s }
124
- )
125
- ]
126
- end
127
- let(:body) do
128
- [
129
- "foo bar",
130
- { :id => "123", :foo => "Foo", :bar => "Bar" }
131
- ]
132
- end
133
- let(:sent_timestamp) { Time.parse("1976-11-18 01:00:00UTC").to_i * 1000 }
134
-
135
- it "creates a transaction for the batch" do
136
- expect do
137
- perform_shoryuken_job {} # rubocop:disable Lint/EmptyBlock
138
- end.to change { created_transactions.length }.by(1)
139
-
140
- transaction = last_transaction
141
- expect(transaction).to have_id
142
- expect(transaction).to have_action("DemoShoryukenWorker#perform")
143
- expect(transaction).to have_namespace(Appsignal::Transaction::BACKGROUND_JOB)
144
- expect(transaction).to_not have_error
145
- expect(transaction).to include_event(
146
- "body" => "",
147
- "body_format" => Appsignal::EventFormatter::DEFAULT,
148
- "count" => 1,
149
- "name" => "perform_job.shoryuken",
150
- "title" => ""
151
- )
152
- expect(transaction).to include_params(
153
- "msg2" => "foo bar",
154
- "msg1" => { "id" => "123", "foo" => "Foo", "bar" => "Bar" }
155
- )
156
- expect(transaction).to include_tags(
157
- "batch" => true,
158
- "queue" => "some-funky-queue-name",
159
- "SentTimestamp" => sent_timestamp.to_s # Earliest/oldest timestamp from messages
160
- )
161
- # Queue time based on earliest/oldest timestamp from messages
162
- expect(transaction).to have_queue_start(sent_timestamp)
163
- end
164
- end
165
- end