rookout 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rookout/augs/actions/action_run_processor.rb +3 -3
- data/lib/rookout/augs/aug.rb +23 -90
- data/lib/rookout/augs/aug_factory.rb +16 -13
- data/lib/rookout/augs/aug_rate_limiter.rb +3 -3
- data/lib/rookout/augs/conditions/condition.rb +4 -2
- data/lib/rookout/augs/locations/location.rb +75 -1
- data/lib/rookout/augs/locations/location_file_line.rb +16 -4
- data/lib/rookout/com_ws/agent_com_ws.rb +28 -33
- data/lib/rookout/com_ws/information.rb +1 -1
- data/lib/rookout/com_ws/pinger.rb +36 -0
- data/lib/rookout/com_ws/websocket_client.rb +143 -0
- data/lib/rookout/config.rb +1 -0
- data/lib/rookout/exceptions.rb +40 -0
- data/lib/rookout/interface.rb +29 -24
- data/lib/rookout/logger.rb +16 -2
- data/lib/rookout/processor/namespace_serializer.rb +1 -1
- data/lib/rookout/processor/namespaces/namespace.rb +2 -2
- data/lib/rookout/processor/namespaces/noop_namespace.rb +1 -1
- data/lib/rookout/processor/namespaces/ruby_object_serializer.rb +3 -3
- data/lib/rookout/processor/operations/set_operation.rb +4 -1
- data/lib/rookout/processor/paths/arithmetic_path.rb +1 -1
- data/lib/rookout/processor/paths/canopy/markers.rb +5 -2
- data/lib/rookout/rookout_singleton.rb +4 -3
- data/lib/rookout/services/position.rb +73 -73
- data/lib/rookout/services/tracer.rb +8 -5
- data/lib/rookout/trigger_services.rb +2 -2
- data/lib/rookout/user_warnings.rb +2 -0
- data/lib/rookout/utils.rb +9 -0
- data/lib/rookout/version.rb +1 -2
- metadata +35 -32
@@ -3,6 +3,8 @@ 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"
|
@@ -29,7 +31,8 @@ module Rookout
|
|
29
31
|
@paths.each do |dest_path, source_path|
|
30
32
|
begin
|
31
33
|
value = source_path.read_from namespace
|
32
|
-
if value.is_a?(RubyObjectNamespace) &&
|
34
|
+
if value.is_a?(Namespaces::RubyObjectNamespace) &&
|
35
|
+
value.dump_config == Namespaces::OBJECT_DUMP_CONFIG_DEFAULT
|
33
36
|
value.tailor_limits!
|
34
37
|
end
|
35
38
|
|
@@ -71,7 +71,7 @@ module Rookout
|
|
71
71
|
|
72
72
|
if result.is_a? Canopy::ToolExceptionMarker
|
73
73
|
raise result.obj if result.obj.is_a? Exceptions::ToolException
|
74
|
-
raise Exceptions::RookInvalidArithmeticPath
|
74
|
+
raise Exceptions::RookInvalidArithmeticPath.new(@raw_path, result.obj)
|
75
75
|
end
|
76
76
|
|
77
77
|
res = result.obj
|
@@ -4,6 +4,9 @@ module Rookout
|
|
4
4
|
module Canopy
|
5
5
|
require_relative "consts"
|
6
6
|
|
7
|
+
require_relative "../../../exceptions"
|
8
|
+
require_relative "../../namespaces/container_namespace"
|
9
|
+
|
7
10
|
class Marker; end
|
8
11
|
|
9
12
|
class Operation < Marker
|
@@ -12,7 +15,7 @@ module Rookout
|
|
12
15
|
end
|
13
16
|
|
14
17
|
def write _namespace, _value
|
15
|
-
raise Exception
|
18
|
+
raise Exception::RookOperationReadOnly, self.class.to_s
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
@@ -36,7 +39,7 @@ module Rookout
|
|
36
39
|
namespace.read_attribute @name
|
37
40
|
rescue Exceptions::RookAttributeNotFound
|
38
41
|
raise unless create
|
39
|
-
namespace.write_attribute name, ContainerNamespace.new
|
42
|
+
namespace.write_attribute @name, Namespaces::ContainerNamespace.new
|
40
43
|
end
|
41
44
|
|
42
45
|
def write namespace, value
|
@@ -40,7 +40,7 @@ module Rookout
|
|
40
40
|
@services_started = false
|
41
41
|
end
|
42
42
|
|
43
|
-
def connect token, host, port, proxy, labels, async_start,
|
43
|
+
def connect token: nil, host: nil, port: nil, proxy: nil, labels: [], async_start: false, **_
|
44
44
|
raise Exceptions::RookInterfaceException, "Multiple connection attempts not supported!" unless @agent_com.nil?
|
45
45
|
|
46
46
|
start_trigger_services
|
@@ -48,6 +48,7 @@ module Rookout
|
|
48
48
|
Logger.instance.debug "Initiating AgentCom-\t#{host}:#{port}"
|
49
49
|
|
50
50
|
@agent_com = ComWs::AgentComWs.new @output, host, port, proxy, token, labels
|
51
|
+
@output.agent_com = @agent_com
|
51
52
|
@command_handler = ComWs::CommandHandler.new @agent_com, @aug_manager
|
52
53
|
|
53
54
|
@agent_com.connect
|
@@ -65,8 +66,8 @@ module Rookout
|
|
65
66
|
private
|
66
67
|
|
67
68
|
def check_version_supported
|
68
|
-
raise Exceptions:: RookVersionNotSupported
|
69
|
-
raise Exceptions::RookVersionNotSupported
|
69
|
+
raise Exceptions:: RookVersionNotSupported.new("platform", RUBY_ENGINE) unless RUBY_ENGINE == "ruby"
|
70
|
+
raise Exceptions::RookVersionNotSupported.new("version", RUBY_VERSION) unless
|
70
71
|
RUBY_VERSION.start_with?("2.7") || RUBY_VERSION.start_with?("2.6")
|
71
72
|
end
|
72
73
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Rookout
|
2
2
|
module Services
|
3
|
+
require "zlib"
|
4
|
+
|
3
5
|
require_relative "../logger"
|
4
6
|
require_relative "../exceptions"
|
5
7
|
|
@@ -16,10 +18,16 @@ module Rookout
|
|
16
18
|
def initialize tracer
|
17
19
|
@tracer = tracer
|
18
20
|
@augs = {}
|
21
|
+
@iseqs = {}
|
19
22
|
@trace_point = TracePoint.new :script_compiled do |tp|
|
20
23
|
begin
|
21
24
|
begin
|
22
|
-
|
25
|
+
iseq = tp.instruction_sequence
|
26
|
+
# Ignore script without sources
|
27
|
+
if iseq.absolute_path
|
28
|
+
@iseqs[tp.path] = iseq
|
29
|
+
evaluate_script iseq
|
30
|
+
end
|
23
31
|
rescue Exception => e
|
24
32
|
Logger.instance.exception "Exception while evaluating script", e
|
25
33
|
end
|
@@ -30,22 +38,18 @@ module Rookout
|
|
30
38
|
@trace_point.enable
|
31
39
|
end
|
32
40
|
|
33
|
-
def add_aug location
|
34
|
-
positions =
|
35
|
-
|
36
|
-
|
37
|
-
else
|
38
|
-
@tracer.add_breakpoint_aug positions, aug
|
39
|
-
end
|
41
|
+
def add_aug location
|
42
|
+
positions = evaluate_all_scripts_to_location location
|
43
|
+
@tracer.add_breakpoint_aug positions, location unless positions.empty?
|
44
|
+
@augs[location.id] = location
|
40
45
|
end
|
41
46
|
|
42
47
|
def remove_aug aug_id
|
43
|
-
|
44
|
-
return if
|
48
|
+
location = @augs[aug_id]
|
49
|
+
return if location.nil?
|
45
50
|
|
46
51
|
@augs.delete [aug_id]
|
47
|
-
|
48
|
-
aug.notify_removed
|
52
|
+
location.notify_removed
|
49
53
|
end
|
50
54
|
|
51
55
|
def clear_augs
|
@@ -64,88 +68,47 @@ module Rookout
|
|
64
68
|
private
|
65
69
|
|
66
70
|
#########################################################################################
|
67
|
-
#
|
71
|
+
# ISEQ comparison Section
|
68
72
|
def evaluate_script iseq
|
69
73
|
filename = iseq.absolute_path
|
70
74
|
return if filename.nil?
|
71
75
|
|
72
|
-
@augs.
|
73
|
-
|
76
|
+
@augs.each_value do |location|
|
77
|
+
position = evaluate_script_to_location iseq, filename, location
|
78
|
+
next if position.nil?
|
74
79
|
|
75
|
-
|
76
|
-
# TODO: CHECK FILE AND LINE HASH COMPARED TO AUG
|
77
|
-
position = PositionMarker.new iseq.absolute_path, location.lineno, iseq
|
78
|
-
@tracer.add_breakpoint_aug [position], pair[1]
|
79
|
-
elsif suggested_match? location, filename
|
80
|
-
warning = Exceptions::RookSourceFilePathSuggestion.new location.filename, filename
|
81
|
-
pair[1].notify_warning warning
|
82
|
-
end
|
80
|
+
@tracer.add_breakpoint_aug [position], location
|
83
81
|
end
|
84
82
|
end
|
85
83
|
|
86
|
-
|
87
|
-
# Enumerating Section
|
88
|
-
def resolve_positions location, aug
|
89
|
-
# TODO: ADD HASHES AND SUGGESTIONS TO THIS FLOW
|
84
|
+
def evaluate_all_scripts_to_location location
|
90
85
|
positions = []
|
86
|
+
@iseqs.each_value do |iseq|
|
87
|
+
position = evaluate_script_to_location iseq, iseq.absolute_path, location
|
88
|
+
next if position.nil?
|
91
89
|
|
92
|
-
|
93
|
-
positions += scan_module_or_class mod, location, aug
|
94
|
-
end
|
95
|
-
|
96
|
-
ObjectSpace.each_object Class do |klass|
|
97
|
-
positions += scan_module_or_class klass, location, aug
|
90
|
+
positions << position
|
98
91
|
end
|
99
92
|
|
100
93
|
positions
|
101
94
|
end
|
102
95
|
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
method = mod.instance_method method_name
|
108
|
-
next unless method_match? method, location, aug
|
109
|
-
|
110
|
-
position = PositionMarker.new location.lineno, method
|
111
|
-
positions.push position
|
112
|
-
end
|
113
|
-
|
114
|
-
mod.private_instance_methods(false).each do |method_name|
|
115
|
-
method = mod.instance_method method_name
|
116
|
-
next unless method_match? method, location, aug
|
96
|
+
def evaluate_script_to_location iseq, filename, location
|
97
|
+
if exact_match? location.filename, filename
|
98
|
+
lineno = find_updated_line filename, location
|
99
|
+
return if lineno == -1
|
117
100
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
positions
|
123
|
-
end
|
124
|
-
|
125
|
-
def method_match? method, location, aug
|
126
|
-
return false unless method.source_location
|
127
|
-
filename = method.source_location[0]
|
128
|
-
|
129
|
-
if exact_match? location, filename
|
130
|
-
disasm_header = "== disasm: #<ISeq:#{method.name}@#{location.filename}:"
|
131
|
-
line_in_disasm = "(#{location.lineno.to_s.rjust 4})"
|
132
|
-
text = RubyVM::InstructionSequence.disasm method
|
133
|
-
return false if text.nil?
|
134
|
-
|
135
|
-
text.start_with?(disasm_header) && text.include?(line_in_disasm)
|
136
|
-
else
|
137
|
-
if suggested_match? location, filename
|
138
|
-
warning = Exceptions::RookSourceFilePathSuggestion.new location.filename, filename
|
139
|
-
aug.notify_warning warning
|
140
|
-
end
|
141
|
-
false
|
101
|
+
PositionMarker.new location.lineno, iseq
|
102
|
+
elsif suggested_match? location, filename
|
103
|
+
warning = Exceptions::RookSourceFilePathSuggestion.new location.filename, filename
|
104
|
+
location.notify_warning warning
|
142
105
|
end
|
143
106
|
end
|
144
107
|
|
145
108
|
#########################################################################################
|
146
109
|
# Utils
|
147
|
-
def exact_match?
|
148
|
-
|
110
|
+
def exact_match? location_filename, script_filename
|
111
|
+
script_filename.end_with? location_filename
|
149
112
|
end
|
150
113
|
|
151
114
|
def suggested_match? location, filename
|
@@ -158,6 +121,43 @@ module Rookout
|
|
158
121
|
content.gsub!(/(?:\r\n|\r|\n)/, "\n")
|
159
122
|
Digest::SHA2.new(256).hexdigest content
|
160
123
|
end
|
124
|
+
|
125
|
+
def find_updated_line filename, location
|
126
|
+
return location.lineno if location.line_crc.nil?
|
127
|
+
|
128
|
+
lines = File.readlines filename, chomp: true
|
129
|
+
line_crc32 = lines.length >= location.lineno ? crc_line(lines[location.lineno - 1]) : nil
|
130
|
+
return location.lineno if location.line_crc == line_crc32
|
131
|
+
|
132
|
+
if location.line_unique
|
133
|
+
first_line = nil
|
134
|
+
second_found = false
|
135
|
+
|
136
|
+
lines.each_with_index do |line, index|
|
137
|
+
if crc_line(line) == location.line_crc
|
138
|
+
if first_line.nil?
|
139
|
+
first_line = index
|
140
|
+
else
|
141
|
+
second_found = true
|
142
|
+
break
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
if first_line && !second_found
|
148
|
+
updated_line = first_line + 1
|
149
|
+
location.notify_warning Exceptions::RookLineMoved.new(filename, location.lineno, updated_line)
|
150
|
+
return updated_line
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
location.notify_error Exceptions::RookCrcMismatchException.new(filename, location.line_crc, line_crc32)
|
155
|
+
-1
|
156
|
+
end
|
157
|
+
|
158
|
+
def crc_line line
|
159
|
+
(Zlib.crc32(line) & 0xffffffff).to_s 16
|
160
|
+
end
|
161
161
|
end
|
162
162
|
end
|
163
163
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
module Rookout
|
2
2
|
module Services
|
3
|
-
|
4
|
-
include BindingOfCaller::BindingExtensions
|
3
|
+
require_relative "../logger"
|
5
4
|
|
6
5
|
class Tracer
|
6
|
+
require "binding_of_caller"
|
7
|
+
include BindingOfCaller::BindingExtensions
|
8
|
+
|
7
9
|
def initialize
|
8
10
|
@trace_points = {}
|
9
11
|
@augs = {}
|
@@ -19,7 +21,7 @@ module Rookout
|
|
19
21
|
begin
|
20
22
|
trace_point.enable target: position.method, target_line: position.lineno
|
21
23
|
rescue ArgumentError => e
|
22
|
-
raise Exceptions::RookSetTracepointFailed
|
24
|
+
raise Exceptions::RookSetTracepointFailed.new(position.lineno, e)
|
23
25
|
end
|
24
26
|
|
25
27
|
# We add and remove a dummy trace point to re-align the tracing mechanism as a result of some bug in adding
|
@@ -69,9 +71,10 @@ module Rookout
|
|
69
71
|
TracePoint.new :line do
|
70
72
|
begin
|
71
73
|
begin
|
72
|
-
|
74
|
+
# TODO: consider delaying callers (get bindings) until we actually need them in Aug.rb
|
75
|
+
aug.execute callers, nil
|
73
76
|
rescue Exception => e
|
74
|
-
Logger.instance.exception "Exception
|
77
|
+
Logger.instance.exception "Exception calling aug", e
|
75
78
|
end
|
76
79
|
rescue
|
77
80
|
# Don't leak any exception from here
|
@@ -17,8 +17,8 @@ module Rookout
|
|
17
17
|
@services.each_value { |service| service.remove_aug aug_id }
|
18
18
|
end
|
19
19
|
|
20
|
-
def clear_augs
|
21
|
-
@services.each_value
|
20
|
+
def clear_augs
|
21
|
+
@services.each_value(&:clear_augs)
|
22
22
|
end
|
23
23
|
|
24
24
|
def start
|
data/lib/rookout/version.rb
CHANGED
metadata
CHANGED
@@ -1,181 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rookout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liran Haimovitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: binding_of_caller
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: concurrent-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: websocket-driver
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.5.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.5.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: google-protobuf
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.0.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: event_emitter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.2.6
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.2.6
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: google-style
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 1.24.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.24.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: minitest
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '5.14'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '5.14'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: minitest-autotest
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '1.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: minitest-focus
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '1.1'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '1.1'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: minitest-rg
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '5.2'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '5.2'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: autotest-suffix
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '1.1'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '1.1'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: rake-compiler
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '1.0'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - "
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '1.0'
|
181
181
|
description: rookout is the Ruby SDK for the Rookout Debugging Platform
|
@@ -204,7 +204,9 @@ files:
|
|
204
204
|
- lib/rookout/com_ws/git.rb
|
205
205
|
- lib/rookout/com_ws/information.rb
|
206
206
|
- lib/rookout/com_ws/output.rb
|
207
|
+
- lib/rookout/com_ws/pinger.rb
|
207
208
|
- lib/rookout/com_ws/token_bucket.rb
|
209
|
+
- lib/rookout/com_ws/websocket_client.rb
|
208
210
|
- lib/rookout/config.rb
|
209
211
|
- lib/rookout/exceptions.rb
|
210
212
|
- lib/rookout/interface.rb
|
@@ -241,6 +243,7 @@ files:
|
|
241
243
|
- lib/rookout/services/tracer.rb
|
242
244
|
- lib/rookout/trigger_services.rb
|
243
245
|
- lib/rookout/user_warnings.rb
|
246
|
+
- lib/rookout/utils.rb
|
244
247
|
- lib/rookout/version.rb
|
245
248
|
homepage: https://rookout.com
|
246
249
|
licenses:
|
@@ -262,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
262
265
|
- !ruby/object:Gem::Version
|
263
266
|
version: '0'
|
264
267
|
requirements: []
|
265
|
-
rubygems_version: 3.
|
268
|
+
rubygems_version: 3.0.3
|
266
269
|
signing_key:
|
267
270
|
specification_version: 4
|
268
271
|
summary: rookout is the Ruby SDK for the Rookout Debugging Platform
|