rookout 0.1.25 → 0.1.29
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/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
|