stackify-ruby-apm 0.9.0 → 1.0.0

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +18 -0
  3. data/Gemfile.lock +181 -8
  4. data/LICENSE.md +66 -0
  5. data/README.md +5 -3
  6. data/Rakefile +4 -0
  7. data/docker-compose.yml +46 -0
  8. data/lib/stackify/agent.rb +22 -9
  9. data/lib/stackify/config.rb +65 -29
  10. data/lib/stackify/context/response.rb +13 -0
  11. data/lib/stackify/context_builder.rb +0 -2
  12. data/lib/stackify/error.rb +2 -2
  13. data/lib/stackify/error_builder.rb +1 -1
  14. data/lib/stackify/instrumenter.rb +4 -4
  15. data/lib/stackify/logger/logger_high_version.rb +65 -0
  16. data/lib/stackify/logger/logger_lower_version.rb +63 -0
  17. data/lib/stackify/middleware.rb +0 -4
  18. data/lib/stackify/normalizers.rb +0 -1
  19. data/lib/stackify/normalizers/active_record.rb +3 -1
  20. data/lib/stackify/railtie.rb +0 -1
  21. data/lib/stackify/serializers/errors.rb +8 -7
  22. data/lib/stackify/serializers/transactions.rb +3 -2
  23. data/lib/stackify/span.rb +1 -2
  24. data/lib/stackify/span/context.rb +5 -1
  25. data/lib/stackify/spies/action_dispatch.rb +8 -1
  26. data/lib/stackify/spies/httpclient.rb +14 -5
  27. data/lib/stackify/spies/httprb.rb +45 -0
  28. data/lib/stackify/spies/mongo.rb +13 -1
  29. data/lib/stackify/spies/net_http.rb +14 -3
  30. data/lib/stackify/spies/redis.rb +66 -0
  31. data/lib/stackify/spies/sinatra.rb +3 -1
  32. data/lib/stackify/spies/sinatra_activerecord/mysql_adapter.rb +177 -0
  33. data/lib/stackify/spies/sinatra_activerecord/postgresql_adapter.rb +96 -0
  34. data/lib/stackify/spies/sinatra_activerecord/sqlite_adapter.rb +48 -0
  35. data/lib/stackify/spies/tilt.rb +8 -1
  36. data/lib/stackify/stacktrace_builder.rb +4 -3
  37. data/lib/stackify/subscriber.rb +4 -4
  38. data/lib/stackify/trace_logger.rb +6 -23
  39. data/lib/stackify/transaction.rb +10 -1
  40. data/lib/stackify/util.rb +0 -13
  41. data/lib/stackify/version.rb +1 -1
  42. data/lib/stackify/worker.rb +5 -5
  43. data/lib/stackify_ruby_apm.rb +2 -6
  44. data/run-test.sh +75 -0
  45. data/stackify-ruby-apm.gemspec +0 -1
  46. metadata +12 -17
  47. data/lib/stackify/logger.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f5b0114ca432b384986bef0196ff170ddc28d29
4
- data.tar.gz: 8c5850539e077d39f1b0542a9bc4c80a9d5c21cf
3
+ metadata.gz: 6bd379b0656760e155c8796bf1774627e593ecbe
4
+ data.tar.gz: cb1f771b879d3c21dafc339e7f1cb874f592f9fb
5
5
  SHA512:
6
- metadata.gz: 51f466a4778791cb024cb072a38e590cf8f07e09a7e202be694d6bb6a97be1ea501ccb79a057c68c538e1a18186b8a375b894d8133845eb6c44608d6ec3a6681
7
- data.tar.gz: a858da77af22d0f32415377fdd454effb880fccb7ebf2e82d2045c1da1d9d451634a5405539cae2ebcb040db701b659296828428e06c6b44f72129a3836dd29c
6
+ metadata.gz: be773012e733b98d520a0605f9a6fe85f79a06feddfda47046479929eba89b161a50528e0bc8188717ad2d5004fc236b71f720941f78378baeb74ae87f0f564f
7
+ data.tar.gz: bae740a96d52bd9905af652998a3f5440f836028e1d000684e496ea37f5fd8b0c50e9f752b02ada9b84e341a6fcd2f44c9409d7efc96e6f26b627d9d9630b0a5
data/Gemfile CHANGED
@@ -2,3 +2,21 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in stackify-ruby-apm.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'mongo'
8
+ gem 'webmock'
9
+ gem 'fakeredis'
10
+ gem 'rack-test'
11
+ gem 'rails'
12
+ gem 'httpclient'
13
+ gem 'http'
14
+ gem 'timecop'
15
+ gem "sinatra"
16
+ gem "activerecord"
17
+ gem "sinatra-activerecord"
18
+ gem "sqlite3"
19
+ gem 'mysql2'
20
+ gem 'pg', '~> 0.20'
21
+ gem 'rubocop', require: false
22
+ end
data/Gemfile.lock CHANGED
@@ -1,29 +1,149 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stackify-ruby-apm (0.9.0)
4
+ stackify-ruby-apm (1.0.0)
5
5
  concurrent-ruby (~> 1.0)
6
6
  delegate_matcher (~> 0.4)
7
- webmock (~> 3.4)
8
7
 
9
8
  GEM
10
9
  remote: https://rubygems.org/
11
10
  specs:
11
+ actioncable (5.2.2)
12
+ actionpack (= 5.2.2)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailer (5.2.2)
16
+ actionpack (= 5.2.2)
17
+ actionview (= 5.2.2)
18
+ activejob (= 5.2.2)
19
+ mail (~> 2.5, >= 2.5.4)
20
+ rails-dom-testing (~> 2.0)
21
+ actionpack (5.2.2)
22
+ actionview (= 5.2.2)
23
+ activesupport (= 5.2.2)
24
+ rack (~> 2.0)
25
+ rack-test (>= 0.6.3)
26
+ rails-dom-testing (~> 2.0)
27
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
28
+ actionview (5.2.2)
29
+ activesupport (= 5.2.2)
30
+ builder (~> 3.1)
31
+ erubi (~> 1.4)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
34
+ activejob (5.2.2)
35
+ activesupport (= 5.2.2)
36
+ globalid (>= 0.3.6)
37
+ activemodel (5.2.2)
38
+ activesupport (= 5.2.2)
39
+ activerecord (5.2.2)
40
+ activemodel (= 5.2.2)
41
+ activesupport (= 5.2.2)
42
+ arel (>= 9.0)
43
+ activestorage (5.2.2)
44
+ actionpack (= 5.2.2)
45
+ activerecord (= 5.2.2)
46
+ marcel (~> 0.3.1)
47
+ activesupport (5.2.2)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
50
+ minitest (~> 5.1)
51
+ tzinfo (~> 1.1)
12
52
  addressable (2.5.2)
13
53
  public_suffix (>= 2.0.2, < 4.0)
14
- concurrent-ruby (1.1.3)
54
+ arel (9.0.0)
55
+ ast (2.4.0)
56
+ bson (4.3.0)
57
+ builder (3.2.3)
58
+ concurrent-ruby (1.1.4)
15
59
  crack (0.4.3)
16
60
  safe_yaml (~> 1.0.0)
61
+ crass (1.0.4)
17
62
  delegate_matcher (0.4.3)
18
63
  proc_extensions (~> 0.2)
19
64
  diff-lcs (1.3)
65
+ domain_name (0.5.20180417)
66
+ unf (>= 0.0.5, < 1.0.0)
67
+ erubi (1.8.0)
68
+ fakeredis (0.7.0)
69
+ redis (>= 3.2, < 5.0)
20
70
  file-tail (1.2.0)
21
71
  tins (~> 1.0)
22
- hashdiff (0.3.7)
72
+ globalid (0.4.1)
73
+ activesupport (>= 4.2.0)
74
+ hashdiff (0.3.8)
75
+ http (4.0.0)
76
+ addressable (~> 2.3)
77
+ http-cookie (~> 1.0)
78
+ http-form_data (~> 2.0)
79
+ http_parser.rb (~> 0.6.0)
80
+ http-cookie (1.0.3)
81
+ domain_name (~> 0.5)
82
+ http-form_data (2.1.1)
83
+ http_parser.rb (0.6.0)
84
+ httpclient (2.8.3)
85
+ i18n (1.5.1)
86
+ concurrent-ruby (~> 1.0)
87
+ jaro_winkler (1.5.2)
88
+ loofah (2.2.3)
89
+ crass (~> 1.0.2)
90
+ nokogiri (>= 1.5.9)
91
+ mail (2.7.1)
92
+ mini_mime (>= 0.1.1)
93
+ marcel (0.3.3)
94
+ mimemagic (~> 0.3.2)
95
+ method_source (0.9.2)
96
+ mimemagic (0.3.3)
97
+ mini_mime (1.0.1)
98
+ mini_portile2 (2.4.0)
99
+ minitest (5.11.3)
100
+ mongo (2.6.2)
101
+ bson (>= 4.3.0, < 5.0.0)
102
+ mustermann (1.0.3)
103
+ mysql2 (0.5.2)
104
+ nio4r (2.3.1)
105
+ nokogiri (1.10.0)
106
+ mini_portile2 (~> 2.4.0)
107
+ parallel (1.12.1)
108
+ parser (2.5.3.0)
109
+ ast (~> 2.4.0)
110
+ pg (0.21.0)
111
+ powerpack (0.1.2)
23
112
  proc_extensions (0.2)
24
113
  sourcify (~> 0.5)
25
114
  public_suffix (3.0.3)
115
+ rack (2.0.6)
116
+ rack-protection (2.0.5)
117
+ rack
118
+ rack-test (1.1.0)
119
+ rack (>= 1.0, < 3)
120
+ rails (5.2.2)
121
+ actioncable (= 5.2.2)
122
+ actionmailer (= 5.2.2)
123
+ actionpack (= 5.2.2)
124
+ actionview (= 5.2.2)
125
+ activejob (= 5.2.2)
126
+ activemodel (= 5.2.2)
127
+ activerecord (= 5.2.2)
128
+ activestorage (= 5.2.2)
129
+ activesupport (= 5.2.2)
130
+ bundler (>= 1.3.0)
131
+ railties (= 5.2.2)
132
+ sprockets-rails (>= 2.0.0)
133
+ rails-dom-testing (2.0.3)
134
+ activesupport (>= 4.2.0)
135
+ nokogiri (>= 1.6)
136
+ rails-html-sanitizer (1.0.4)
137
+ loofah (~> 2.2, >= 2.2.2)
138
+ railties (5.2.2)
139
+ actionpack (= 5.2.2)
140
+ activesupport (= 5.2.2)
141
+ method_source
142
+ rake (>= 0.8.7)
143
+ thor (>= 0.19.0, < 2.0)
144
+ rainbow (3.0.0)
26
145
  rake (10.5.0)
146
+ redis (4.1.0)
27
147
  rspec (3.8.0)
28
148
  rspec-core (~> 3.8.0)
29
149
  rspec-expectations (~> 3.8.0)
@@ -37,32 +157,85 @@ GEM
37
157
  diff-lcs (>= 1.2.0, < 2.0)
38
158
  rspec-support (~> 3.8.0)
39
159
  rspec-support (3.8.0)
160
+ rubocop (0.62.0)
161
+ jaro_winkler (~> 1.5.1)
162
+ parallel (~> 1.10)
163
+ parser (>= 2.5, != 2.5.1.1)
164
+ powerpack (~> 0.1)
165
+ rainbow (>= 2.2.2, < 4.0)
166
+ ruby-progressbar (~> 1.7)
167
+ unicode-display_width (~> 1.4.0)
168
+ ruby-progressbar (1.10.0)
40
169
  ruby2ruby (2.4.1)
41
170
  ruby_parser (~> 3.1)
42
171
  sexp_processor (~> 4.6)
43
- ruby_parser (3.11.0)
172
+ ruby_parser (3.12.0)
44
173
  sexp_processor (~> 4.9)
45
174
  safe_yaml (1.0.4)
46
175
  sexp_processor (4.11.0)
176
+ sinatra (2.0.5)
177
+ mustermann (~> 1.0)
178
+ rack (~> 2.0)
179
+ rack-protection (= 2.0.5)
180
+ tilt (~> 2.0)
181
+ sinatra-activerecord (2.0.13)
182
+ activerecord (>= 3.2)
183
+ sinatra (>= 1.0)
47
184
  sourcify (0.5.0)
48
185
  file-tail (>= 1.0.5)
49
186
  ruby2ruby (>= 1.2.5)
50
187
  ruby_parser (>= 2.0.5)
51
188
  sexp_processor (>= 3.0.5)
52
- tins (1.19.0)
53
- webmock (3.4.2)
189
+ sprockets (3.7.2)
190
+ concurrent-ruby (~> 1.0)
191
+ rack (> 1, < 3)
192
+ sprockets-rails (3.2.1)
193
+ actionpack (>= 4.0)
194
+ activesupport (>= 4.0)
195
+ sprockets (>= 3.0.0)
196
+ sqlite3 (1.3.13)
197
+ thor (0.20.3)
198
+ thread_safe (0.3.6)
199
+ tilt (2.0.9)
200
+ timecop (0.9.1)
201
+ tins (1.20.2)
202
+ tzinfo (1.2.5)
203
+ thread_safe (~> 0.1)
204
+ unf (0.1.4)
205
+ unf_ext
206
+ unf_ext (0.0.7.5)
207
+ unicode-display_width (1.4.1)
208
+ webmock (3.5.1)
54
209
  addressable (>= 2.3.6)
55
210
  crack (>= 0.3.2)
56
211
  hashdiff
212
+ websocket-driver (0.7.0)
213
+ websocket-extensions (>= 0.1.0)
214
+ websocket-extensions (0.1.3)
57
215
 
58
216
  PLATFORMS
59
217
  ruby
60
218
 
61
219
  DEPENDENCIES
220
+ activerecord
62
221
  bundler (~> 1.16)
222
+ fakeredis
223
+ http
224
+ httpclient
225
+ mongo
226
+ mysql2
227
+ pg (~> 0.20)
228
+ rack-test
229
+ rails
63
230
  rake (~> 10.0)
64
231
  rspec (~> 3.0)
232
+ rubocop
233
+ sinatra
234
+ sinatra-activerecord
235
+ sqlite3
65
236
  stackify-ruby-apm!
237
+ timecop
238
+ webmock
66
239
 
67
240
  BUNDLED WITH
68
- 1.16.4
241
+ 1.17.3
data/LICENSE.md ADDED
@@ -0,0 +1,66 @@
1
+ Stackify Ruby APM LICENSE
2
+ ---
3
+
4
+ Certain inventions disclosed in this file may be claimed within patents owned or patent applications filed by
5
+ Stackify, LLC (“Stackify”) or third parties.
6
+
7
+ Stackify grants you a revocable, non-exclusive, non-transferable, limited license to download, install and use this
8
+ Stackify Ruby APM package (“Application”) strictly in accordance with the terms of this Agreement and the terms found
9
+ at https://stackify.com/terms-conditions.
10
+
11
+ You agree not to, and you will not permit others to: license, sell, rent, lease, assign, distribute, transmit, host,
12
+ outsource, disclose or otherwise commercially exploit the Application or make the Application available to any third
13
+ party; modify, make derivative works of, disassemble, decrypt, reverse compile or reverse engineer any part of the
14
+ Application; or remove, alter or obscure any proprietary notice (including any notice of copyright or trademark) of
15
+ Stackify or its affiliates, partners, suppliers or the licensors of the Application.
16
+
17
+ You may install, execute, and distribute these files and their contents only in conjunction with your direct use of
18
+ Stackify’s services. These files and their contents shall not be used in conjunction with any other product or
19
+ software, including but not limited to those that may compete with any Stackify product, feature, or software. As a
20
+ condition to the foregoing grant, you must provide this notice along with each copy you distribute and you must not
21
+ remove, alter, or obscure this notice.
22
+
23
+ The Application, including without limitation all copyrights, patents, trademarks, trade secrets and other intellectual
24
+ property rights are, and shall remain, the sole and exclusive property of Stackify. Any feedback, comments, ideas,
25
+ code, pull requests, improvements or suggestions (collectively, "Suggestions") provided by you to Stackify with respect
26
+ to the Application shall remain the sole and exclusive property of Stackify. Stackify shall be free to use, copy,
27
+ modify, publish, or redistribute the Suggestions for any purpose and in any way without any credit or any compensation
28
+ to you.
29
+
30
+ Stackify reserves the right to modify, suspend or discontinue, temporarily or permanently, the Application or any
31
+ service to which it connects, with or without notice and without liability to you.
32
+
33
+ Stackify may from time to time provide enhancements or improvements to the features/functionality of the Application,
34
+ which may include patches, bug fixes, updates, upgrades and other modifications ("Updates"). Updates may modify or
35
+ delete certain features and/or functionalities of the Application. You agree that Stackify has no obligation to (i)
36
+ provide any Updates, or (ii) continue to provide or enable any particular features and/or functionalities of the
37
+ Application to you. You further agree that all Updates will be (i) deemed to constitute an integral part of the
38
+ Application, and (ii) subject to the terms and conditions of this Agreement.
39
+
40
+ All other use, reproduction, modification, distribution, or other exploitation of these files is strictly prohibited,
41
+ except as may be set forth in a separate written license agreement between you and Stackify. The terms of any such
42
+ license agreement will control over this notice. The license stated above will be automatically terminated and
43
+ revoked if you exceed its scope or violate any of the terms of this notice.
44
+
45
+ Upon termination of this Agreement, you shall cease all use of the Application and delete all copies of the
46
+ Application from your mobile device or from your computer.
47
+
48
+ Termination of this Agreement will not limit any of Stackify LLC's rights or remedies at law or in equity in case of
49
+ breach by you (during the term of this Agreement) of any of your obligations under the present Agreement.
50
+
51
+ You agree to indemnify and hold Stackify LLC and its parents, subsidiaries, affiliates, officers, employees, agents,
52
+ partners and licensors (if any) harmless from any claim or demand, including reasonable attorneys' fees, due to or
53
+ arising out of your: (a) use of the Application; (b) violation of this Agreement or any law or regulation; or (c)
54
+ violation of any right of a third party.
55
+
56
+ Unless otherwise expressly agreed by Stackify in a separate written license agreement, these files are provided
57
+ AS IS, WITHOUT WARRANTY OF ANY KIND, including without any implied warranties of MERCHANTABILITY, FITNESS FOR A
58
+ PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a condition to your use of these files, you are solely responsible
59
+ for such use. Stackify will have no liability to you for direct, indirect, consequential, incidental, special, or
60
+ punitive damages or for lost profits or data.
61
+
62
+ The Application also uses code from the following open source projects under the following licenses:
63
+
64
+ * concurrent-ruby - http://opensource.org/licenses/MIT
65
+ * delegate_matcher - http://opensource.org/licenses/MIT
66
+ * webmock - http://opensource.org/licenses/MIT
data/README.md CHANGED
@@ -6,9 +6,11 @@
6
6
  1. Install **Stackify Linux Agent**.
7
7
 
8
8
  2. Check that your setup meets our system requirements.
9
- * Ruby version 2.5+
10
- * Framework
11
- * Ruby on Rails 5.2+
9
+ * Ruby version 2.0+
10
+ * Frameworks
11
+ * Ruby on Rails 4+
12
+ * Rack 1+
13
+ * Sinatra 1.4+
12
14
  * Operating System
13
15
  * Linux
14
16
 
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
+ if defined?(Sinatra)
5
+ require "rspec/integration/sinatra_sqlite_adapter_rspec"
6
+ require "sinatra/activerecord/rake"
7
+ end
4
8
  RSpec::Core::RakeTask.new(:spec)
5
9
 
6
10
  task :default => :spec
@@ -0,0 +1,46 @@
1
+ version: "3"
2
+ services:
3
+
4
+ dbpostgresql:
5
+ image: postgres
6
+ volumes:
7
+ - postgresdata:/var/lib/postgresql/data
8
+ ports:
9
+ - 5433:5432
10
+ environment:
11
+ POSTGRES_DB: PostgresTestDB
12
+ POSTGRES_USER: bob
13
+ POSTGRES_PASSWORD: password
14
+ container_name: sinatra_activerecord_postgres_test
15
+
16
+ dbmysql:
17
+ image: mysql:5.7
18
+ volumes:
19
+ - mysqldata:/var/lib/mysql
20
+ ports:
21
+ - 3305:3306
22
+ environment:
23
+ - MYSQL_ROOT_PASSWORD=secret
24
+ - MYSQL_USER=bob
25
+ - MYSQL_PASSWORD=password
26
+ - MYSQL_DATABASE=MysqlTestDB
27
+ container_name: sinatra_activerecord_mysql_test
28
+
29
+ dbmongo:
30
+ image: mongo:3.6
31
+ volumes:
32
+ - mongodata:/data/db
33
+ - mongodata_config:/data/configdb
34
+ ports:
35
+ - 27018:27017
36
+ container_name: sinatra_activerecord_mongo_test
37
+
38
+ volumes:
39
+ postgresdata:
40
+ driver: local
41
+ mysqldata:
42
+ driver: local
43
+ mongodata:
44
+ driver: local
45
+ mongodata_config:
46
+ driver: local
@@ -27,6 +27,16 @@ module StackifyRubyAPM
27
27
  def self.start(config)
28
28
  return @instance if @instance
29
29
  config = Config.new(config) unless config.is_a?(Config)
30
+ pid = $PID || Process.pid
31
+ host_name = config.hostname || `hostname`
32
+ date_now = Time.now
33
+ current_trace_file = config.log_trace_path + host_name.squish! + "#" + pid.to_s.squish! + ".log"
34
+
35
+ if(ENV['STACKIFY_RUBY_ENV'] != 'rspec')
36
+ config.tracer_logger = StackifyLogger.new(current_trace_file, config.filenum_rotate, config.logger_byte_size)
37
+ config.logtime_created = date_now.strftime("%H:%M")
38
+ end
39
+
30
40
  LOCK.synchronize do
31
41
  return @instance if @instance
32
42
  @instance = new(config).start
@@ -53,7 +63,6 @@ module StackifyRubyAPM
53
63
  end
54
64
 
55
65
  def initialize(config)
56
- # puts '@stackify_ruby [Agent] [lib/agent.rb] initialize()'
57
66
  @config = config
58
67
  @trace_logger = TraceLogger.new(config)
59
68
  @messages = Queue.new
@@ -62,6 +71,7 @@ module StackifyRubyAPM
62
71
  @context_builder = ContextBuilder.new(self)
63
72
  @error_builder = ErrorBuilder.new(self)
64
73
  @stacktrace_builder = StacktraceBuilder.new(self)
74
+ @error_serializer = Serializers::Errors.new(config)
65
75
  end
66
76
 
67
77
  attr_reader :config,
@@ -71,18 +81,17 @@ module StackifyRubyAPM
71
81
  :context_builder,
72
82
  :stacktrace_builder,
73
83
  :trace_logger,
84
+ :error_serializer,
74
85
  :error_builder
75
86
 
76
87
  def start
77
- # puts '@stackify_ruby [Agent] [lib/agent.rb] start()'
78
- # puts '@stackify_ruby [Agent] [lib/agent.rb] Environment: ' + @config.environment_name
79
- # puts '@stackify_ruby [Agent] [lib/agent.rb] Application Name: ' + @config.application_name
80
- # @instrumenter.start
81
- debug 'Loaded spies:'
88
+ info '[Agent] start()'
89
+ spies_name = ''
82
90
  config.enabled_spies.each do |lib|
83
- debug lib.inspect
91
+ spies_name = spies_name + ', ' + lib.inspect.to_s
84
92
  require "stackify/spies/#{lib}"
85
93
  end
94
+ debug '[Agent] Loaded spies:' + spies_name
86
95
  self
87
96
  end
88
97
 
@@ -142,7 +151,11 @@ module StackifyRubyAPM
142
151
  exception,
143
152
  handled: handled
144
153
  )
145
- enqueue_error error
154
+ current_error = @error_serializer.build(error)
155
+ if current_transaction
156
+ current_transaction.add_exception(current_error)
157
+ end
158
+
146
159
  end
147
160
 
148
161
  def report_message(message, backtrace: nil, **attrs)
@@ -157,7 +170,7 @@ module StackifyRubyAPM
157
170
  private
158
171
 
159
172
  def boot_worker
160
- debug 'Booting worker'
173
+ debug '[Agent] Booting worker'
161
174
 
162
175
  @worker_thread = Thread.new do
163
176
  Worker.new(