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.
- checksums.yaml +4 -4
- data/lib/rookout/atfork.rb +73 -0
- data/lib/rookout/augs/actions/action_run_processor.rb +4 -3
- data/lib/rookout/augs/aug.rb +33 -91
- data/lib/rookout/augs/aug_factory.rb +94 -27
- data/lib/rookout/augs/aug_rate_limiter.rb +50 -47
- data/lib/rookout/augs/augs_manager.rb +3 -1
- data/lib/rookout/augs/conditions/condition.rb +4 -2
- data/lib/rookout/augs/limits_manager.rb +32 -0
- data/lib/rookout/augs/locations/location.rb +75 -1
- data/lib/rookout/augs/locations/location_exception_handler.rb +22 -0
- data/lib/rookout/augs/locations/location_file_line.rb +21 -5
- data/lib/rookout/com_ws/agent_com_ws.rb +97 -58
- data/lib/rookout/com_ws/backoff.rb +5 -10
- data/lib/rookout/com_ws/command_handler.rb +1 -1
- data/lib/rookout/com_ws/envelope_wrapper.rb +68 -0
- data/lib/rookout/com_ws/git.rb +1 -1
- data/lib/rookout/com_ws/information.rb +95 -4
- data/lib/rookout/com_ws/output.rb +69 -21
- data/lib/rookout/com_ws/pinger.rb +41 -0
- data/lib/rookout/com_ws/websocket_client.rb +173 -0
- data/lib/rookout/commit.rb +3 -0
- data/lib/rookout/config.rb +94 -18
- data/lib/rookout/exceptions.rb +147 -12
- data/lib/rookout/interface.rb +95 -32
- data/lib/rookout/logger.rb +39 -10
- data/lib/rookout/processor/namespace_serializer.rb +2 -2
- data/lib/rookout/processor/namespace_serializer2.rb +331 -0
- data/lib/rookout/processor/namespaces/container_namespace.rb +5 -0
- data/lib/rookout/processor/namespaces/frame_namespace.rb +20 -17
- data/lib/rookout/processor/namespaces/namespace.rb +3 -2
- data/lib/rookout/processor/namespaces/noop_namespace.rb +4 -8
- data/lib/rookout/processor/namespaces/ruby_object_namespace.rb +39 -22
- data/lib/rookout/processor/namespaces/ruby_object_serializer.rb +15 -12
- data/lib/rookout/processor/namespaces/ruby_utils_namespace.rb +0 -4
- data/lib/rookout/processor/namespaces/stack_namespace.rb +6 -4
- data/lib/rookout/processor/namespaces/traceback_namespace.rb +13 -9
- data/lib/rookout/processor/operations/set_operation.rb +6 -1
- data/lib/rookout/processor/paths/arithmetic_path.rb +5 -3
- data/lib/rookout/processor/paths/canopy/actions.rb +5 -1
- data/lib/rookout/processor/paths/canopy/consts.rb +6 -4
- data/lib/rookout/processor/paths/canopy/maps.rb +286 -286
- data/lib/rookout/processor/paths/canopy/markers.rb +35 -4
- data/lib/rookout/processor/processor_factory.rb +0 -2
- data/lib/rookout/processor/rook_error.rb +6 -1
- data/lib/rookout/protobuf/controller_info_pb.rb +1 -0
- data/lib/rookout/protobuf/messages_pb.rb +54 -0
- data/lib/rookout/protobuf/variant2_pb.rb +42 -0
- data/lib/rookout/protobuf/variant_pb.rb +22 -0
- data/lib/rookout/rookout_singleton.rb +23 -5
- data/lib/rookout/sanitizer.rb +22 -0
- data/lib/rookout/services/position.rb +92 -75
- data/lib/rookout/services/tracer.rb +30 -16
- data/lib/rookout/start.rb +12 -0
- data/lib/rookout/trigger_services.rb +2 -2
- data/lib/rookout/user_warnings.rb +2 -0
- data/lib/rookout/utils.rb +34 -0
- data/lib/rookout/version.rb +1 -2
- data/lib/rookout.rb +4 -0
- 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
|
10
|
-
|
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 @
|
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 @
|
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
|
11
|
-
|
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 @
|
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 >= @
|
26
|
-
|
29
|
+
break if position >= @stack_trace.length
|
30
|
+
frame_info = @stack_trace[position]
|
27
31
|
|
28
|
-
code_object = Com::Rookout::Variant::CodeObject.new filename:
|
29
|
-
lineno:
|
30
|
-
name:
|
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) &&
|
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
|
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
|
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
|
-
|
53
|
+
case key
|
54
|
+
when ObjectMarker
|
54
55
|
return true if key.obj == a
|
55
|
-
|
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
|
-
|
66
|
+
case value
|
67
|
+
when ObjectMarker
|
66
68
|
return true if value.obj == a
|
67
|
-
|
69
|
+
when a
|
68
70
|
return true
|
69
71
|
end
|
70
72
|
end
|