rookout 0.1.25 → 0.1.29
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/augs/aug_rate_limiter.rb +3 -10
- data/lib/rookout/com_ws/agent_com_ws.rb +19 -2
- data/lib/rookout/com_ws/information.rb +1 -1
- data/lib/rookout/com_ws/websocket_client.rb +1 -2
- data/lib/rookout/commit.rb +1 -1
- data/lib/rookout/interface.rb +1 -0
- data/lib/rookout/logger.rb +5 -0
- data/lib/rookout/processor/namespaces/ruby_object_namespace.rb +3 -3
- data/lib/rookout/rookout_singleton.rb +3 -2
- data/lib/rookout/services/position.rb +9 -6
- data/lib/rookout/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49682fe35cb88044623330221963d1796926bd4d43274e52c6f5d2b9798939da
|
4
|
+
data.tar.gz: '08146067813084fe74e9c89b8cf4a242b2932a9c2c057144de1cf3a6893fa5a8'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02ca398a95c761881102ef4d1bf8e3dcc71b38ef65379651e2687dd583ea06bd5bd7fd7843745de1a4568055158cc10d021d9e510134d9d93d63c35578b09818
|
7
|
+
data.tar.gz: 55f7755051f8d26c407f4b0076975c20782d49b5427a8b55b7dad5e96f576e03519964a967665dd750e551765fc510551739a1a82b2a7582a308044f5fbb2cfd
|
@@ -30,7 +30,6 @@ module Rookout
|
|
30
30
|
@mutex.synchronize do
|
31
31
|
# Clean old windows
|
32
32
|
cleanup now_ns
|
33
|
-
|
34
33
|
# Increase active count
|
35
34
|
@active_count += 1
|
36
35
|
active = true
|
@@ -58,6 +57,8 @@ module Rookout
|
|
58
57
|
|
59
58
|
private
|
60
59
|
|
60
|
+
attr_reader :windows # will be used only in tests using <OBJ>.send(:windows)
|
61
|
+
|
61
62
|
def timestamp_to_window_keys now_ns
|
62
63
|
current_window_key = (now_ns / @window_size) * @window_size
|
63
64
|
prev_window_key = current_window_key - @window_size
|
@@ -90,15 +91,7 @@ module Rookout
|
|
90
91
|
end
|
91
92
|
|
92
93
|
def cleanup now_ns
|
93
|
-
|
94
|
-
return if @mutex.locked?
|
95
|
-
|
96
|
-
@mutex.synchronize do
|
97
|
-
# every 5 windows-times, clear windows older than 10 window-times
|
98
|
-
if @windows.length > 10
|
99
|
-
@windows.reject! { |key, _| key < (now_ns - @window_size * 5) }
|
100
|
-
end
|
101
|
-
end
|
94
|
+
@windows.reject! { |key, _| key < (now_ns - @window_size * 5) } if @windows.length > 10
|
102
95
|
end
|
103
96
|
end
|
104
97
|
end
|
@@ -25,7 +25,7 @@ module Rookout
|
|
25
25
|
|
26
26
|
attr_reader :pending_messages
|
27
27
|
|
28
|
-
def initialize output, agent_host, agent_port, proxy, token, labels
|
28
|
+
def initialize output, agent_host, agent_port, proxy, token, labels, print_on_connect
|
29
29
|
agent_host_with_protocl = agent_host.include?("://") ? agent_host : "ws://#{agent_host}"
|
30
30
|
@uri = "#{agent_host_with_protocl}:#{agent_port}/v1"
|
31
31
|
if proxy.nil? || proxy.empty?
|
@@ -48,6 +48,8 @@ module Rookout
|
|
48
48
|
@running = false
|
49
49
|
@ready_event = Concurrent::Event.new
|
50
50
|
once("Com::Rookout::InitialAugsCommand") { @ready_event.set }
|
51
|
+
|
52
|
+
@print_on_initial_connection = print_on_connect
|
51
53
|
end
|
52
54
|
|
53
55
|
def add message
|
@@ -101,6 +103,7 @@ module Rookout
|
|
101
103
|
|
102
104
|
private
|
103
105
|
|
106
|
+
# rubocop:disable Style/StderrPuts
|
104
107
|
def connection_thread
|
105
108
|
backoff = Backoff.new
|
106
109
|
|
@@ -108,6 +111,10 @@ module Rookout
|
|
108
111
|
begin
|
109
112
|
client = open_new_connection
|
110
113
|
|
114
|
+
if @print_on_initial_connection
|
115
|
+
@print_on_initial_connection = false
|
116
|
+
STDERR.puts "[Rookout] Successfully connected to controller"
|
117
|
+
end
|
111
118
|
Logger.instance.debug "WebSocket connected successfully"
|
112
119
|
Logger.instance.info "Finished initialization"
|
113
120
|
|
@@ -127,7 +134,10 @@ module Rookout
|
|
127
134
|
backoff.after_disconnect
|
128
135
|
Logger.instance.debug "Reconnecting"
|
129
136
|
end
|
137
|
+
rescue Exception => e
|
138
|
+
Logger.instance.error "Unexpected error in connection_thread", e
|
130
139
|
end
|
140
|
+
# rubocop:enable Style/StderrPuts
|
131
141
|
|
132
142
|
def open_new_connection
|
133
143
|
client = WebsocketClient.new @uri, @proxy, @token
|
@@ -149,7 +159,14 @@ module Rookout
|
|
149
159
|
].freeze
|
150
160
|
|
151
161
|
def connection_pump client
|
152
|
-
on_outgoing_exit = proc {
|
162
|
+
on_outgoing_exit = proc {
|
163
|
+
begin
|
164
|
+
client.close
|
165
|
+
rescue Exception => e
|
166
|
+
Logger.instance.error "Unexpected error exiting outgoing thread", e
|
167
|
+
end
|
168
|
+
}
|
169
|
+
|
153
170
|
@outgoing_thread = Thread.new { outgoing client, on_outgoing_exit }
|
154
171
|
@outgoing_thread.name = "rookout-outgoing-thread"
|
155
172
|
|
@@ -17,7 +17,7 @@ module Rookout
|
|
17
17
|
@labels["rookout_debug"] = "on" if Config.debug
|
18
18
|
|
19
19
|
k8_namespace = create_cluster_namespace k8s_file_path
|
20
|
-
unless k8_namespace == ""
|
20
|
+
unless k8_namespace == "" || @labels.key?("k8s_namespace")
|
21
21
|
@labels["k8s_namespace"] = k8_namespace
|
22
22
|
end
|
23
23
|
|
@@ -5,7 +5,6 @@ module Rookout
|
|
5
5
|
require "uri"
|
6
6
|
|
7
7
|
require_relative "../config"
|
8
|
-
require_relative "../logger"
|
9
8
|
require_relative "../exceptions"
|
10
9
|
|
11
10
|
class WebsocketClient
|
@@ -65,7 +64,7 @@ module Rookout
|
|
65
64
|
|
66
65
|
begin
|
67
66
|
@driver.close
|
68
|
-
rescue RuntimeError, Errno::EPIPE
|
67
|
+
rescue RuntimeError, Errno::EPIPE, OpenSSL::OpenSSLError
|
69
68
|
# Protocol close may fail if the connection is already closed
|
70
69
|
nil
|
71
70
|
end
|
data/lib/rookout/commit.rb
CHANGED
data/lib/rookout/interface.rb
CHANGED
data/lib/rookout/logger.rb
CHANGED
@@ -99,6 +99,7 @@ module Rookout
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
+
# rubocop:disable Style/RescueStandardError
|
102
103
|
def log level, message, args
|
103
104
|
level_no = LOG_LEVELS.index level
|
104
105
|
if level_no.nil?
|
@@ -110,7 +111,11 @@ module Rookout
|
|
110
111
|
|
111
112
|
record = LogRecord.new level, message, args
|
112
113
|
@handlers.each { |handler| handler.call record }
|
114
|
+
rescue
|
115
|
+
# Log may never throw
|
116
|
+
nil
|
113
117
|
end
|
118
|
+
# rubocop:enable Style/RescueStandardError
|
114
119
|
|
115
120
|
def build_handlers
|
116
121
|
if Config.logger_log_to_stderr
|
@@ -62,20 +62,20 @@ module Rookout
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def read_key key
|
65
|
-
if @obj.is_a?
|
65
|
+
if @obj.is_a?(Array) || @obj.is_a?(String)
|
66
66
|
key_int = key.to_i
|
67
67
|
return RubyObjectNamespace.new @obj[key_int] if key_int >= 0 && key_int < @obj.length
|
68
68
|
raise Exceptions::RookKeyNotFound, key
|
69
69
|
|
70
70
|
elsif @obj.is_a? Hash
|
71
71
|
return RubyObjectNamespace.new @obj[key] if @obj.key? key
|
72
|
-
return RubyObjectNamespace.new @obj[key.to_sym] if
|
72
|
+
return RubyObjectNamespace.new @obj[key.to_sym] if @obj.key? key.to_s.to_sym
|
73
73
|
|
74
74
|
@obj.each { |it, value| return RubyObjectNamespace.new value if it.to_s == key }
|
75
75
|
|
76
76
|
raise Exceptions::RookKeyNotFound, key
|
77
77
|
else
|
78
|
-
raise Exceptions::RookInvalidObjectForAccess.new(obj.class.to_s, "ReadKey")
|
78
|
+
raise Exceptions::RookInvalidObjectForAccess.new(@obj.class.to_s, "ReadKey")
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -40,7 +40,8 @@ module Rookout
|
|
40
40
|
@services_started = false
|
41
41
|
end
|
42
42
|
|
43
|
-
def connect token: nil, host: nil, port: nil, proxy: nil, labels: [], async_start: false, fork: false
|
43
|
+
def connect token: nil, host: nil, port: nil, proxy: nil, labels: [], async_start: false, fork: false,
|
44
|
+
throw_errors: false
|
44
45
|
raise Exceptions::RookInterfaceException, "Multiple connection attempts not supported!" unless @agent_com.nil?
|
45
46
|
|
46
47
|
if fork
|
@@ -52,7 +53,7 @@ module Rookout
|
|
52
53
|
|
53
54
|
Logger.instance.debug "Initiating AgentCom-\t#{host}:#{port}"
|
54
55
|
|
55
|
-
@agent_com = ComWs::AgentComWs.new @output, host, port, proxy, token, labels
|
56
|
+
@agent_com = ComWs::AgentComWs.new @output, host, port, proxy, token, labels, !throw_errors
|
56
57
|
@output.agent_com = @agent_com
|
57
58
|
@command_handler = ComWs::CommandHandler.new @agent_com, @aug_manager
|
58
59
|
|
@@ -18,6 +18,7 @@ module Rookout
|
|
18
18
|
def initialize tracer
|
19
19
|
@tracer = tracer
|
20
20
|
@augs = {}
|
21
|
+
@augs_lock = Mutex.new
|
21
22
|
@iseqs = []
|
22
23
|
@trace_point = TracePoint.new :script_compiled do |tp|
|
23
24
|
begin
|
@@ -41,7 +42,7 @@ module Rookout
|
|
41
42
|
def add_aug location
|
42
43
|
positions = evaluate_all_scripts_to_location location
|
43
44
|
@tracer.add_breakpoint_aug positions, location unless positions.empty?
|
44
|
-
@augs[location.id] = location
|
45
|
+
@augs_lock.synchronize { @augs[location.id] = location }
|
45
46
|
end
|
46
47
|
|
47
48
|
def remove_aug aug_id
|
@@ -73,11 +74,13 @@ module Rookout
|
|
73
74
|
filename = iseq.absolute_path
|
74
75
|
return if filename.nil?
|
75
76
|
|
76
|
-
@
|
77
|
-
|
78
|
-
|
77
|
+
@augs_lock.synchronize do
|
78
|
+
@augs.each_value do |location|
|
79
|
+
position = evaluate_script_to_location iseq, filename, location
|
80
|
+
next if position.nil?
|
79
81
|
|
80
|
-
|
82
|
+
@tracer.add_breakpoint_aug [position], location
|
83
|
+
end
|
81
84
|
end
|
82
85
|
end
|
83
86
|
|
@@ -101,7 +104,7 @@ module Rookout
|
|
101
104
|
PositionMarker.new lineno, iseq
|
102
105
|
elsif suggested_match? location, filename
|
103
106
|
warning = Exceptions::RookSourceFilePathSuggestion.new location.filename, filename
|
104
|
-
location.notify_warning warning
|
107
|
+
location.notify_warning Processor::RookError.new warning
|
105
108
|
# Must return nil in order to skip this script
|
106
109
|
nil
|
107
110
|
end
|
data/lib/rookout/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liran Haimovitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: binding_of_caller
|