rookout 0.1.0 → 0.1.56

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 (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
@@ -5,14 +5,16 @@ module Rookout
5
5
  require_relative "frame_namespace"
6
6
  require_relative "traceback_namespace"
7
7
 
8
+
8
9
  class StackNamespace < Namespace
9
- def initialize backtrace, offset = 0
10
- @backtrace = backtrace
10
+ def initialize stack_trace, offset = 0
11
+ super()
12
+ @stack_trace = stack_trace
11
13
  @offset = offset
12
14
  end
13
15
 
14
16
  def read_key key
15
- FrameNamespace.new @backtrace[key + @offset]
17
+ FrameNamespace.new nil, @stack_trace[key + @offset]
16
18
  end
17
19
 
18
20
  def call_method name, args
@@ -22,7 +24,7 @@ module Rookout
22
24
 
23
25
  def create_traceback args
24
26
  args = 1000 if args == ""
25
- TracebackNamespace.new @backtrace, @offset, args.to_i
27
+ TracebackNamespace.new @stack_trace, @offset, args.to_i
26
28
  end
27
29
  end
28
30
  end
@@ -3,18 +3,22 @@ module Rookout
3
3
  module Namespaces
4
4
  require_relative "namespace"
5
5
  require_relative "frame_namespace"
6
-
7
6
  require_relative "../../protobuf/variant_pb"
8
7
 
9
8
  class TracebackNamespace < Namespace
10
- def initialize backtrace, offset, depth
11
- @backtrace = backtrace
9
+ def initialize stack_trace, offset, depth
10
+ super()
11
+ @stack_trace = stack_trace
12
12
  @offset = offset
13
13
  @depth = depth
14
14
  end
15
15
 
16
+ attr_reader :stack_trace
17
+ attr_reader :offset
18
+ attr_reader :depth
19
+
16
20
  def read_key key
17
- FrameNamespace.new @backtrace[key + @offset]
21
+ FrameNamespace.new nil, @stack_trace[key + @offset]
18
22
  end
19
23
 
20
24
  def dump _log_object_errors
@@ -22,12 +26,12 @@ module Rookout
22
26
 
23
27
  @depth.times do |i|
24
28
  position = i + @offset
25
- break if position >= @backtrace.length
26
- frame = @backtrace[position]
29
+ break if position >= @stack_trace.length
30
+ frame_info = @stack_trace[position]
27
31
 
28
- code_object = Com::Rookout::Variant::CodeObject.new filename: frame.source_location[0],
29
- lineno: frame.source_location[1],
30
- name: frame.eval("__method__").to_s
32
+ code_object = Com::Rookout::Variant::CodeObject.new filename: frame_info.path,
33
+ lineno: frame_info.lineno,
34
+ name: frame_info.label
31
35
 
32
36
  traceback.locations << code_object
33
37
  end
@@ -3,12 +3,16 @@ module Rookout
3
3
  module Operations
4
4
  require_relative "operation"
5
5
 
6
+ require_relative "../namespaces/ruby_object_namespace"
7
+
6
8
  require_relative "../rook_error"
7
9
  require_relative "../../logger"
8
10
  require_relative "../../user_warnings"
9
11
 
10
12
  class SetOperation < Operation
11
13
  def initialize configuration, factory
14
+ super()
15
+
12
16
  @paths = []
13
17
 
14
18
  configuration["paths"].each do |key, value|
@@ -29,7 +33,8 @@ module Rookout
29
33
  @paths.each do |dest_path, source_path|
30
34
  begin
31
35
  value = source_path.read_from namespace
32
- if value.is_a?(RubyObjectNamespace) && value.dump_config == Namespaces::OBJECT_DUMP_CONFIG_DEFAULT
36
+ if value.is_a?(Namespaces::RubyObjectNamespace) &&
37
+ value.dump_config == Namespaces::OBJECT_DUMP_CONFIG_DEFAULT
33
38
  value.tailor_limits!
34
39
  end
35
40
 
@@ -13,6 +13,8 @@ module Rookout
13
13
 
14
14
  class ArithmeticPath < Path
15
15
  def initialize path
16
+ super()
17
+
16
18
  if path.is_a? Hash
17
19
  path = path["path"] || path[:path]
18
20
  end
@@ -20,7 +22,7 @@ module Rookout
20
22
  @raw_path = path
21
23
 
22
24
  if path.start_with?("NOT(") && path.end_with?(")")
23
- @path = path["NOT(".length..-2]
25
+ @path = path[("NOT(".length)..-2]
24
26
  @negation = true
25
27
  else
26
28
  @path = path
@@ -33,7 +35,7 @@ module Rookout
33
35
  def read_from namespace
34
36
  begin
35
37
  result = Maps.parse @path, actions: Canopy::Actions.new(namespace)
36
- rescue Maps::ParseError => e
38
+ rescue Maps::ParseError, NameError => e
37
39
  raise RookInvalidArithmeticPath.new(@path, e)
38
40
  end
39
41
 
@@ -71,7 +73,7 @@ module Rookout
71
73
 
72
74
  if result.is_a? Canopy::ToolExceptionMarker
73
75
  raise result.obj if result.obj.is_a? Exceptions::ToolException
74
- raise Exceptions::RookInvalidArithmeticPath, @raw_path, result.obj
76
+ raise Exceptions::RookInvalidArithmeticPath.new(@raw_path, result.obj)
75
77
  end
76
78
 
77
79
  res = result.obj
@@ -79,6 +79,8 @@ module Rookout
79
79
  end
80
80
 
81
81
  # rubocop:disable Metrics/AbcSize
82
+ # rubocop:disable Metrics/CyclomaticComplexity
83
+ # rubocop:disable Metrics/PerceivedComplexity
82
84
  def make_comp_exp _input, _start, _finish, elements
83
85
  # We can assume the following: atom ( opt_ atom )*
84
86
  # the first (which must be) will be simple atom
@@ -108,7 +110,7 @@ module Rookout
108
110
  flat_elements.each_with_index do |e, index|
109
111
  if e.is_a?(Opt) && e.level == level
110
112
  result = e.execute_operation flat_elements[index - 1], flat_elements[index + 1]
111
- flat_elements = flat_elements[0...index - 1] + [result] + flat_elements[index + 2..-1]
113
+ flat_elements = flat_elements[0...index - 1] + [result] + flat_elements[index + 2..]
112
114
  restart_scan = true
113
115
  break
114
116
  end
@@ -122,6 +124,8 @@ module Rookout
122
124
 
123
125
  flat_elements[0]
124
126
  end
127
+ # rubocop:enable Metrics/PerceivedComplexity
128
+ # rubocop:enable Metrics/CyclomaticComplexity
125
129
  # rubocop:enable Metrics/AbcSize
126
130
 
127
131
  def make_opt _input, _start, _finish, elements
@@ -50,9 +50,10 @@ module Rookout
50
50
  # If it's a dict, scan the keys, compensating for additional abstraction
51
51
  if b.is_a? Hash
52
52
  b.each_key do |key|
53
- if key.is_a? ObjectMarker
53
+ case key
54
+ when ObjectMarker
54
55
  return true if key.obj == a
55
- elsif key == a
56
+ when a
56
57
  return true
57
58
  end
58
59
  end
@@ -62,9 +63,10 @@ module Rookout
62
63
  # If it's an array, scan the value, compensating for additional abstraction
63
64
  if b.is_a? Array
64
65
  b.each do |value|
65
- if value.is_a? ObjectMarker
66
+ case value
67
+ when ObjectMarker
66
68
  return true if value.obj == a
67
- elsif value == a
69
+ when a
68
70
  return true
69
71
  end
70
72
  end