rookout 0.1.0 → 0.1.56

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rookout/atfork.rb +73 -0
  3. data/lib/rookout/augs/actions/action_run_processor.rb +4 -3
  4. data/lib/rookout/augs/aug.rb +33 -91
  5. data/lib/rookout/augs/aug_factory.rb +94 -27
  6. data/lib/rookout/augs/aug_rate_limiter.rb +50 -47
  7. data/lib/rookout/augs/augs_manager.rb +3 -1
  8. data/lib/rookout/augs/conditions/condition.rb +4 -2
  9. data/lib/rookout/augs/limits_manager.rb +32 -0
  10. data/lib/rookout/augs/locations/location.rb +75 -1
  11. data/lib/rookout/augs/locations/location_exception_handler.rb +22 -0
  12. data/lib/rookout/augs/locations/location_file_line.rb +21 -5
  13. data/lib/rookout/com_ws/agent_com_ws.rb +97 -58
  14. data/lib/rookout/com_ws/backoff.rb +5 -10
  15. data/lib/rookout/com_ws/command_handler.rb +1 -1
  16. data/lib/rookout/com_ws/envelope_wrapper.rb +68 -0
  17. data/lib/rookout/com_ws/git.rb +1 -1
  18. data/lib/rookout/com_ws/information.rb +95 -4
  19. data/lib/rookout/com_ws/output.rb +69 -21
  20. data/lib/rookout/com_ws/pinger.rb +41 -0
  21. data/lib/rookout/com_ws/websocket_client.rb +173 -0
  22. data/lib/rookout/commit.rb +3 -0
  23. data/lib/rookout/config.rb +94 -18
  24. data/lib/rookout/exceptions.rb +147 -12
  25. data/lib/rookout/interface.rb +95 -32
  26. data/lib/rookout/logger.rb +39 -10
  27. data/lib/rookout/processor/namespace_serializer.rb +2 -2
  28. data/lib/rookout/processor/namespace_serializer2.rb +331 -0
  29. data/lib/rookout/processor/namespaces/container_namespace.rb +5 -0
  30. data/lib/rookout/processor/namespaces/frame_namespace.rb +20 -17
  31. data/lib/rookout/processor/namespaces/namespace.rb +3 -2
  32. data/lib/rookout/processor/namespaces/noop_namespace.rb +4 -8
  33. data/lib/rookout/processor/namespaces/ruby_object_namespace.rb +39 -22
  34. data/lib/rookout/processor/namespaces/ruby_object_serializer.rb +15 -12
  35. data/lib/rookout/processor/namespaces/ruby_utils_namespace.rb +0 -4
  36. data/lib/rookout/processor/namespaces/stack_namespace.rb +6 -4
  37. data/lib/rookout/processor/namespaces/traceback_namespace.rb +13 -9
  38. data/lib/rookout/processor/operations/set_operation.rb +6 -1
  39. data/lib/rookout/processor/paths/arithmetic_path.rb +5 -3
  40. data/lib/rookout/processor/paths/canopy/actions.rb +5 -1
  41. data/lib/rookout/processor/paths/canopy/consts.rb +6 -4
  42. data/lib/rookout/processor/paths/canopy/maps.rb +286 -286
  43. data/lib/rookout/processor/paths/canopy/markers.rb +35 -4
  44. data/lib/rookout/processor/processor_factory.rb +0 -2
  45. data/lib/rookout/processor/rook_error.rb +6 -1
  46. data/lib/rookout/protobuf/controller_info_pb.rb +1 -0
  47. data/lib/rookout/protobuf/messages_pb.rb +54 -0
  48. data/lib/rookout/protobuf/variant2_pb.rb +42 -0
  49. data/lib/rookout/protobuf/variant_pb.rb +22 -0
  50. data/lib/rookout/rookout_singleton.rb +23 -5
  51. data/lib/rookout/sanitizer.rb +22 -0
  52. data/lib/rookout/services/position.rb +92 -75
  53. data/lib/rookout/services/tracer.rb +30 -16
  54. data/lib/rookout/start.rb +12 -0
  55. data/lib/rookout/trigger_services.rb +2 -2
  56. data/lib/rookout/user_warnings.rb +2 -0
  57. data/lib/rookout/utils.rb +34 -0
  58. data/lib/rookout/version.rb +1 -2
  59. data/lib/rookout.rb +4 -0
  60. metadata +77 -51
@@ -11,9 +11,6 @@ module Rookout
11
11
  end
12
12
 
13
13
  class RookInterfaceException < ToolException
14
- def initialize message
15
- super message
16
- end
17
14
  end
18
15
 
19
16
  class RookVersionNotSupported < ToolException
@@ -31,7 +28,7 @@ module Rookout
31
28
 
32
29
  class RookAttributeNotFound < ToolException
33
30
  def initialize attribute
34
- super "Failed to get attribute #{attribute}", { attribute: attribute }
31
+ super "Failed to get attribute #{attribute}", { "attribute" => attribute }
35
32
  end
36
33
  end
37
34
 
@@ -84,37 +81,68 @@ module Rookout
84
81
 
85
82
  class RookNonPrimitiveObjectType < ToolException
86
83
  def initialize path
87
- super "Object %s must be of primitive type, such as: string, int, long etc: #{path}", { path: path }
84
+ super "Object #{path} must be of primitive type, such as: string, int, long etc",
85
+ { "path" => path }
88
86
  end
89
87
  end
90
88
 
91
89
  class RookMessageSizeExceeded < ToolException
92
90
  def initialize message_size, max_message_size
93
91
  super "Message size of #{message_size} exceeds max size limit of #{max_message_size}. " \
94
- "Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
95
- "as environment variable or system property",
96
- { message_size: message_size, max_message_size: max_message_size }
92
+ "Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
93
+ "as environment variable or system property",
94
+ { "message_size" => message_size, "max_message_size" => max_message_size }
95
+ end
96
+ end
97
+
98
+ class RookOutputQueueFull < ToolException
99
+ def initialize
100
+ super "Breakpoint triggered but output queue is full. " \
101
+ "Data collection will be disabled until the queue has emptied."
97
102
  end
98
103
  end
99
104
 
100
- class RookRuleRateLimited < ToolException
105
+ class RookRuleAugRateLimited < ToolException
101
106
  def initialize
102
107
  super "Breakpoint was disabled due to rate-limiting. " \
103
- "For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
108
+ "For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
109
+ end
110
+ end
111
+
112
+ class RookRuleGlobalRateLimited < ToolException
113
+ def initialize
114
+ super "Breakpoint was disabled due to global rate-limiting. " \
115
+ "For more information: https://docs.rookout.com/docs/breakpoints-tasks.html#rate-limiting"
116
+ end
117
+ end
118
+
119
+ class RookRuleRateLimited
120
+ def self.create
121
+ if Rookout::Config.using_global_rate_limiter
122
+ return RookRuleGlobalRateLimited.new
123
+ end
124
+ RookRuleAugRateLimited.new
104
125
  end
105
126
  end
106
127
 
107
128
  class RookInvalidToken < ToolException
108
- def initialize token
129
+ def initialize token = ""
109
130
  super "The Rookout token supplied #{token[0..6]} is not valid; please check the token and try again",
110
131
  { token: token[0...6] }
111
132
  end
112
133
  end
113
134
 
135
+ class RookWebSocketError < ToolException
136
+ def initialize http_status
137
+ super "Received HTTP status #{http_status} from the controller," \
138
+ "Please make sure WebSocket is enabled on the load balancer."
139
+ end
140
+ end
141
+
114
142
  class RookSourceFilePathSuggestion < ToolException
115
143
  def initialize wanted_path, matching_path
116
144
  super "Rookout found alternative file path: #{matching_path}",
117
- { wanted_path: wanted_path, matching_path: matching_path }
145
+ { "wanted_path" => wanted_path, "matching_path" => matching_path }
118
146
  end
119
147
  end
120
148
 
@@ -125,6 +153,13 @@ module Rookout
125
153
  end
126
154
  end
127
155
 
156
+ class RookInvalidPositionException < ToolException
157
+ def initialize filename, line
158
+ super "Invalid code position for TracePoint: #{filename}:#{line}",
159
+ { filename: filename, line: line }
160
+ end
161
+ end
162
+
128
163
  class RookObjectCannotBeSerialized < ToolException
129
164
  def initialize object, message
130
165
  super message, { "class" => object.class.to_s }
@@ -136,5 +171,105 @@ module Rookout
136
171
  super "No Rookout token was supplied. Make sure to pass the Rookout Token when starting the rook"
137
172
  end
138
173
  end
174
+
175
+ class RookInvalidOptions < ToolException
176
+ end
177
+
178
+ class RookInvalidLabel < ToolException
179
+ def initialize label_name
180
+ super "Invalid label: must not start with the '$' character (#{label_name})"
181
+ end
182
+ end
183
+
184
+ class RookCrcMismatchException < ToolException
185
+ def initialize filepath, expected, calculated
186
+ super "Line CRC32s do not match! path: #{filepath}, expected: #{expected}, calculated:#{calculated}",
187
+ {
188
+ "filepath" => filepath,
189
+ "expected" => expected,
190
+ "calculated" => calculated
191
+ }
192
+ end
193
+ end
194
+
195
+ class RookLineMoved < ToolException
196
+ def initialize filepath, old_line_no, new_line_no
197
+ super "Line has moved! path: #{filepath}, original line no: #{old_line_no}, new line no: #{new_line_no}",
198
+ {
199
+ "filepath" => filepath,
200
+ "old_line_no" => old_line_no,
201
+ "new_line_no" => new_line_no
202
+ }
203
+ end
204
+ end
205
+
206
+ class RookCommunicationException < ToolException
207
+ def initialize
208
+ super "Failed to connect to the controller - will continue attempting in the background"
209
+ end
210
+ end
211
+
212
+ class RookWebsocketException < ToolException
213
+ def initialize error
214
+ super "Error from Websocket #{error}", { "error" => error }
215
+ end
216
+ end
217
+
218
+ class RookProxyException < ToolException
219
+ def initialize error
220
+ super "Error from proxy #{error}", { "error" => error }
221
+ end
222
+ end
223
+
224
+ class RookBadProtobuf < ToolException
225
+ def initialize
226
+ super 'Bad protobuf version. Please execute "bundle config force_ruby_platform true" before "bundler install".'
227
+ end
228
+ end
229
+
230
+ class RookBadProtobufPlatform < ToolException
231
+ def initialize platform
232
+ super "Bad protobuf platform: #{platform}"
233
+ end
234
+ end
235
+
236
+ class RookObjectNameMissing < ToolException
237
+ def initialize configuration
238
+ super "Failed to find object name",
239
+ {
240
+ "configuration" => configuration
241
+ }
242
+ end
243
+ end
244
+
245
+ class RookUnsupportedLocation < ToolException
246
+ def initialize location
247
+ super "Unsupported aug location was specified: #{location}",
248
+ {
249
+ "location" => location
250
+ }
251
+ end
252
+ end
253
+
254
+ class RookInvalidRateLimitConfiguration < ToolException
255
+ def initialize config
256
+ super "Invalid rate limit configuration: #{config}",
257
+ {
258
+ "config" => config
259
+ }
260
+ end
261
+ end
262
+
263
+ class RookUnsupportedLiveLogger < ToolException
264
+ def initialize
265
+ super "Live Logger is not supported. Try using Rookout Live Debugger instead."
266
+ end
267
+ end
268
+
269
+ class RookLocalsUnavailable < ToolException
270
+ def initialize
271
+ super "Can't collect local variables up the stack"
272
+ end
273
+ end
139
274
  end
140
275
  end
@@ -4,10 +4,18 @@ module Rookout
4
4
  include Singleton
5
5
 
6
6
  require_relative "config"
7
+ require_relative "utils"
7
8
  require_relative "exceptions"
9
+ include Exceptions
8
10
 
9
11
  def initialize
10
12
  @rook = nil
13
+ @start_options = nil
14
+ end
15
+
16
+ def print_debug_messages
17
+ puts "[Rookout] Running in debug mode"
18
+ puts "[Rookout] Rookout SDK for ruby: #{Config.rookout_version}"
11
19
  end
12
20
 
13
21
  def start options = {}
@@ -15,28 +23,31 @@ module Rookout
15
23
  throw_errors = options[:throw_errors] == true
16
24
  Config.debug = evaluate_flag options[:debug], "ROOKOUT_DEBUG"
17
25
 
18
- begin
19
- require_relative "rookout_singleton"
20
-
21
- configure_logging options
22
- labels = options[:labels] || parse_labels(ENV["ROOKOUT_LABELS"])
23
- validate_labels labels
26
+ print_debug_messages if Config.debug
24
27
 
25
- configure_git options
26
-
27
- com = configure_com options
28
+ begin
29
+ verify_env
28
30
 
29
- async_start = true? ENV["ROOKOUT_ASYNC_START"]
30
- fork = evaluate_flag options[:fork], "ROOKOUT_ENABLE_FORK"
31
+ require_relative "rookout_singleton"
31
32
 
32
- print_config com, labels: labels, async_start: async_start, fork: fork if Config.debug
33
+ configure options
33
34
 
34
35
  rook = RookoutSingleton.instance
35
- rook.connect com[:token], com[:host], com[:port], com[:proxy], labels, async_start, fork
36
-
37
- # TODO: ADD DETAILED PROCESSING FOR SPECIFIC ERRORS
36
+ @start_options[throw_errors: throw_errors]
37
+ rook.connect(**@start_options)
38
+ rescue LoadError
39
+ raise if throw_errors
40
+ $stderr.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
41
+ "'bundle config force_ruby_platform true'"
42
+ rescue RookMissingToken, RookInvalidToken, RookInvalidOptions,
43
+ RookVersionNotSupported, RookBadProtobuf, RookWebSocketError => e
44
+ raise if throw_errors
45
+ $stderr.puts "[Rookout] Failed to start Rookout: #{e.message}"
46
+ rescue RookCommunicationException => e
47
+ raise if throw_errors
48
+ Logger.instance.warning "[Rookout] #{e.message}"
38
49
  rescue Exception => e
39
- puts e.full_message if Config.debug
50
+ $stderr.puts e.full_message if Config.debug
40
51
  raise if throw_errors
41
52
  end
42
53
  end
@@ -56,10 +67,42 @@ module Rookout
56
67
 
57
68
  TRUE_VALUE = [true, "y", "Y", "yes", "Yes", "YES", "true", "True", "TRUE", "1"].freeze
58
69
 
59
- def configure_logging options
70
+ def configure options
71
+ # If we are running post fork, use previous start_options
72
+ if options[:post_fork]
73
+ # Don't re-enable the fork handler
74
+ @start_options[:fork] = false
75
+ else
76
+ configure_globals options
77
+
78
+ @start_options = configure_start_options options
79
+ print_config @start_options
80
+ end
81
+ end
82
+
83
+ def verify_env
84
+ # Only test alpine
85
+ return unless File.exist? "/etc/alpine-release"
86
+
87
+ # Make sure protobuf is built from source
88
+ protobuf = Gem::Specification.find_by_path "google/protobuf"
89
+ $stderr.puts RookBadProtobuf.new.message if protobuf.nil?
90
+ return unless protobuf.platform != "ruby"
91
+
92
+ error = RookBadProtobufPlatform.new protobuf.platform
93
+ $stderr.puts error.message
94
+ end
95
+
96
+ def configure_scm options
97
+ Config.user_git_origin = options[:git_origin] if options[:git_origin]
98
+ Config.user_git_commit = options[:git_commit] if options[:git_commit]
99
+ Config.user_git_sources = options[:git_sources] if options[:git_sources] && options[:git_sources].is_a?(Hash)
100
+ end
101
+
102
+ def configure_globals options
60
103
  if Config.debug
61
104
  log_to_stderr = true
62
- log_level = "DEBUG"
105
+ log_level = :DEBUG
63
106
  else
64
107
  log_to_stderr = evaluate_flag options[:log_to_stderr], "ROOKOUT_LOG_TO_STDERR"
65
108
  log_level = options[:log_level] || ENV["ROOKOUT_LOG_FILE"]
@@ -70,23 +113,30 @@ module Rookout
70
113
  Config.logger_log_to_stderr = log_to_stderr unless log_to_stderr.nil?
71
114
  Config.logger_filename = log_file unless log_file.nil?
72
115
  Config.logger_log_level = log_level unless log_level.nil?
73
- end
74
116
 
75
- def configure_git options
76
- Config.user_git_origin = options[:git_origin] if options[:git_origin]
77
- Config.user_git_commit = options[:git_commit] if options[:git_commit]
117
+ configure_scm options
78
118
  end
79
119
 
80
- def configure_com options
120
+ def configure_start_options options
81
121
  host = evaluate_config options[:host], "ROOKOUT_CONTROLLER_HOST", "wss://control.rookout.com"
82
122
  port = evaluate_config options[:port], "ROOKOUT_CONTROLLER_PORT", 443
83
123
  proxy = evaluate_config options[:proxy], "ROOKOUT_PROXY"
84
124
  token = evaluate_config options[:token], "ROOKOUT_TOKEN"
85
125
 
86
- raise Exceptions::RookMissingToken if token.nil? && host == "wss://control.rookout.com"
126
+ raise RookMissingToken if token.nil? && !(host_specified options)
87
127
  verify_token token if token
88
128
 
89
- { host: host, port: port, proxy: proxy, token: token }
129
+ labels = stringify_labels(options[:labels]) || parse_labels(ENV["ROOKOUT_LABELS"])
130
+ validate_labels labels
131
+
132
+ async_start = true? ENV["ROOKOUT_ASYNC_START"]
133
+ fork = evaluate_flag options[:fork], "ROOKOUT_ENABLE_FORK"
134
+
135
+ { host: host, port: port, proxy: proxy, token: token, labels: labels, async_start: async_start, fork: fork }
136
+ end
137
+
138
+ def host_specified options
139
+ !options[:host].nil? || !ENV["ROOKOUT_CONTROLLER_HOST"].nil? || !ENV["ROOKOUT_AGENT_HOST"].nil?
90
140
  end
91
141
 
92
142
  def evaluate_flag argument, env_var_name
@@ -104,6 +154,18 @@ module Rookout
104
154
  default
105
155
  end
106
156
 
157
+ def stringify_labels labels
158
+ return nil unless labels
159
+
160
+ stringified_labels = {}
161
+
162
+ labels.each do |label_name, label_value|
163
+ stringified_labels[label_name.to_s] = label_value.to_s
164
+ end
165
+
166
+ stringified_labels
167
+ end
168
+
107
169
  def parse_labels raw_labels
108
170
  labels = {}
109
171
  return labels if raw_labels.nil?
@@ -120,21 +182,22 @@ module Rookout
120
182
  def validate_labels labels
121
183
  labels.each do |label_name, _|
122
184
  if label_name.start_with? "$"
123
- raise Exceptions::RookInvalidLabel, label_name
185
+ raise RookInvalidLabel, label_name
124
186
  end
125
187
  end
126
188
  end
127
189
 
128
190
  def verify_token token
129
- raise Exceptions::RookInvalidOptions, "Rookout token should be a String" unless token.is_a? String
130
- raise Exceptions::RookInvalidOptions, "Rookout token should be 64 characters" unless token.length == 64
131
- raise Exceptions::RookInvalidOptions, "Rookout token must consist of only hexadecimal characters" unless
191
+ raise RookInvalidOptions, "Rookout token should be a String" unless token.is_a? String
192
+ raise RookInvalidOptions, "Rookout token should be 64 characters" unless token.length == 64
193
+ raise RookInvalidOptions, "Rookout token must consist of only hexadecimal characters" unless
132
194
  token.match(/^[0-9a-zA-Z]{0,64}$/)
133
195
  end
134
196
 
135
- def print_config com, options
136
- puts "[Rookout] Communication Options: #{com}"
137
- puts "[Rookout] Other Options #{options}"
197
+ def print_config options
198
+ return unless Config.debug
199
+
200
+ puts "[Rookout] Start Options: #{options}"
138
201
  end
139
202
  end
140
203
  end
@@ -11,6 +11,15 @@ module Rookout
11
11
  LOG_LEVELS = [:DEBUG, :INFO, :WARNING, :ERROR].freeze
12
12
 
13
13
  def initialize
14
+ # Detect unit tests
15
+ if (Config.debug ||
16
+ $PROGRAM_NAME.end_with?("minitest_runner.rb") ||
17
+ $PROGRAM_NAME.end_with?("tunit_or_minitest_in_folder_runner.rb")) &&
18
+ Dir.pwd.end_with?("ruby-sdk")
19
+ Config.logger_log_level = :DEBUG
20
+ Config.logger_log_to_stderr = true
21
+ end
22
+
14
23
  @verbosity = LOG_LEVELS.index(Config.logger_log_level) || LOG_LEVELS.index(:INFO)
15
24
 
16
25
  @output = nil
@@ -43,7 +52,6 @@ module Rookout
43
52
  end
44
53
 
45
54
  def exception message, exc
46
- # TODO: REVIEW HOW TO REPORT EXCEPTIONS
47
55
  error message, exc
48
56
  end
49
57
 
@@ -54,12 +62,25 @@ module Rookout
54
62
  @level = level
55
63
  @time = Time.new
56
64
  @message = message
57
- @formatted_message = message % arguments
65
+ @formatted_message = @message % arguments
66
+
67
+ arguments.each do |argument|
68
+ if argument.is_a? Exception
69
+ @formatted_message += "\n#{argument.message}\n#{argument.backtrace.join "\n\t"}"
70
+ end
71
+ end
72
+
58
73
  @arguments = arguments
59
74
  set_caller
60
75
  end
61
76
 
62
- attr_reader :level, :time, :filename, :lineno, :message, :formatted_message, :arguments
77
+ attr_reader :level
78
+ attr_reader :time
79
+ attr_reader :filename
80
+ attr_reader :lineno
81
+ attr_reader :message
82
+ attr_reader :formatted_message
83
+ attr_reader :arguments
63
84
 
64
85
  def format
65
86
  "#{@time} #{Process.pid}:#{Thread.current.name}-" \
@@ -84,6 +105,7 @@ module Rookout
84
105
  end
85
106
  end
86
107
 
108
+ # rubocop:disable Style/RescueStandardError
87
109
  def log level, message, args
88
110
  level_no = LOG_LEVELS.index level
89
111
  if level_no.nil?
@@ -95,11 +117,18 @@ module Rookout
95
117
 
96
118
  record = LogRecord.new level, message, args
97
119
  @handlers.each { |handler| handler.call record }
120
+ rescue
121
+ # Log may never throw
122
+ nil
98
123
  end
124
+ # rubocop:enable Style/RescueStandardError
99
125
 
100
126
  def build_handlers
101
- @handlers.push new_file_handler unless Config.logger_filename.nil? || Config.logger_filename.empty?
102
- @handlers.push new_stderr_handler if Config.logger_log_to_stderr
127
+ if Config.logger_log_to_stderr
128
+ @handlers.push new_file_handler unless Config.logger_filename.nil? || Config.logger_filename.empty?
129
+ @handlers.push new_stderr_handler
130
+ end
131
+
103
132
  @handlers.push new_remote_handler
104
133
  end
105
134
 
@@ -114,19 +143,19 @@ module Rookout
114
143
  file = nil
115
144
 
116
145
  if Config.debug
117
- STDERR.puts "[Rookout] Failed to open log file: #{log_file_path}"
118
- STDERR.puts e.backtrace
146
+ $stderr.puts "[Rookout] Failed to open log file: #{log_file_path}"
147
+ $stderr.puts e.backtrace
119
148
  end
120
149
  end
121
150
 
122
- ->(record) { file.write record.format + "\n" if file }
151
+ ->(record) { file.write "#{record.format}\n" if file }
123
152
  end
124
153
 
125
154
  def calculate_log_file_path
126
155
  return Config.logger_filename if absolute_path? Config.logger_filename
127
156
 
128
157
  if RUBY_PLATFORM.include? "darwin"
129
- File.join ENV["HOME"], Config.logger_filename
158
+ File.join Dir.home, Config.logger_filename
130
159
  elsif RUBY_PLATFORM.match?(/cygwin|mswin|mingw|bccwin|wince|emx/)
131
160
  File.join ENV["USERPROFILE"], Config.logger_filename
132
161
  else
@@ -135,7 +164,7 @@ module Rookout
135
164
  end
136
165
 
137
166
  def new_stderr_handler
138
- ->(record) { STDERR.puts record.format }
167
+ ->(record) { $stderr.puts record.format }
139
168
  end
140
169
 
141
170
  def new_remote_handler
@@ -7,7 +7,7 @@ module Rookout
7
7
 
8
8
  module_function
9
9
 
10
- def dump namespace, log_errors = true
10
+ def dump namespace, log_errors
11
11
  namespace.dump log_errors
12
12
  rescue StandardError => e
13
13
  message = "Failed to serialize namespace"
@@ -17,7 +17,7 @@ module Rookout
17
17
  Logger.instance.exception message, e
18
18
 
19
19
  error = RookError.new e, message
20
- variant = error.dumps
20
+ variant.error_value = error.dumps
21
21
  end
22
22
  variant
23
23
  end