rookout 0.1.13 → 0.1.18
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/com_ws/agent_com_ws.rb +5 -4
- data/lib/rookout/com_ws/backoff.rb +5 -10
- data/lib/rookout/com_ws/websocket_client.rb +43 -16
- data/lib/rookout/commit.rb +1 -1
- data/lib/rookout/exceptions.rb +19 -1
- data/lib/rookout/interface.rb +35 -12
- data/lib/rookout/logger.rb +2 -1
- data/lib/rookout/processor/namespaces/noop_namespace.rb +3 -3
- 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: 49455f2ecaae2121f3abefd5b746a89374e980b91c1bea8af891afffb197238c
|
4
|
+
data.tar.gz: 04d208ab7bcbd7434dbfcbcc61023f8720592e3f9a41a083ea49637fa8df1b51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f996d2549273e91c247caf4e12a2c77f7e673750f21cd1dde9defd34a2529f8eb11fee23f642a19ba464210d196dee07d9bc38236436307d6abf08d48ebc8eac
|
7
|
+
data.tar.gz: 0fcc91dd1f6f534045e51c62fa01cc69480496d4df22381670cdf2630daa11bfa3e448efc53734ac73a6f2108df40fb7ae0f6a5952350d72c232dd81b33a8c34
|
@@ -51,11 +51,11 @@ module Rookout
|
|
51
51
|
def add message
|
52
52
|
buffer = wrap_in_envelope message
|
53
53
|
if buffer.length > Config.agent_com_max_message_limit
|
54
|
-
exc = Exceptions::RookMessageSizeExceeded.new buffer.length,
|
55
|
-
warning = RookError.new exc
|
54
|
+
exc = Exceptions::RookMessageSizeExceeded.new buffer.length, Config.agent_com_max_message_limit
|
55
|
+
warning = Processor::RookError.new exc
|
56
56
|
UserWarnings.notify_warning warning
|
57
57
|
|
58
|
-
Logger.instance.
|
58
|
+
Logger.instance.warning "Dropping message, size was #{buffer.length} which is over the message size limit"
|
59
59
|
return
|
60
60
|
end
|
61
61
|
|
@@ -100,10 +100,11 @@ module Rookout
|
|
100
100
|
|
101
101
|
while @running
|
102
102
|
begin
|
103
|
-
backoff.before_connection_attempt
|
104
103
|
client = open_new_connection
|
105
104
|
|
106
105
|
Logger.instance.debug "WebSocket connected successfully"
|
106
|
+
Logger.instance.info "Finished initialization"
|
107
|
+
|
107
108
|
@token_valid = true
|
108
109
|
backoff.after_connect
|
109
110
|
|
@@ -4,25 +4,20 @@ module Rookout
|
|
4
4
|
|
5
5
|
class Backoff
|
6
6
|
def initialize
|
7
|
-
@
|
8
|
-
@last_successful_connection = Time.mktime 1970
|
9
|
-
reset_backoff
|
10
|
-
end
|
11
|
-
|
12
|
-
def before_connection_attempt
|
13
|
-
return unless Time.new > @last_successful_connection + Config.backoff_reset_time
|
7
|
+
@connect_time = nil
|
14
8
|
reset_backoff
|
15
9
|
end
|
16
10
|
|
17
11
|
def after_disconnect
|
18
|
-
@
|
12
|
+
reset_backoff if @connect_time && Time.new > @connect_time + Config.backoff_reset_time
|
13
|
+
@connect_time = nil
|
14
|
+
|
19
15
|
sleep @next_backoff
|
20
16
|
@next_backoff = [@next_backoff * 2, Config.backoff_max_time].min
|
21
17
|
end
|
22
18
|
|
23
19
|
def after_connect
|
24
|
-
@
|
25
|
-
@last_successful_connection = Time.now
|
20
|
+
@connect_time = Time.now
|
26
21
|
end
|
27
22
|
|
28
23
|
private
|
@@ -2,6 +2,7 @@ module Rookout
|
|
2
2
|
module ComWs
|
3
3
|
require "openssl"
|
4
4
|
require "websocket/driver"
|
5
|
+
require "uri"
|
5
6
|
|
6
7
|
require_relative "../config"
|
7
8
|
require_relative "../logger"
|
@@ -11,14 +12,13 @@ module Rookout
|
|
11
12
|
def initialize url, proxy, token
|
12
13
|
@token = token
|
13
14
|
@connection = WebsocketConnection.new url, proxy
|
15
|
+
@proxy = proxy
|
14
16
|
@driver = nil
|
15
|
-
@error = nil
|
16
17
|
@last_ping = nil
|
17
18
|
end
|
18
19
|
|
19
20
|
def connect
|
20
|
-
|
21
|
-
@connection.connect
|
21
|
+
connection_error = nil
|
22
22
|
@driver = WebSocket::Driver.client @connection
|
23
23
|
|
24
24
|
headers.each do |key, value|
|
@@ -26,18 +26,20 @@ module Rookout
|
|
26
26
|
end
|
27
27
|
|
28
28
|
@driver.on :error do |error|
|
29
|
-
|
29
|
+
connection_error = error
|
30
30
|
end
|
31
31
|
|
32
32
|
# Connect to the remote server
|
33
|
-
@driver.start
|
34
33
|
# TODO: ADD CONNECT TIMEOUT
|
34
|
+
@connection.connect @driver
|
35
|
+
@driver.start
|
36
|
+
|
35
37
|
while @driver.state == :connecting
|
36
38
|
recv_data = @connection.read_char
|
37
39
|
@driver.parse recv_data
|
38
40
|
end
|
39
41
|
|
40
|
-
raise Exceptions::RookWebsocketException,
|
42
|
+
raise Exceptions::RookWebsocketException, connection_error if @driver.state != :open
|
41
43
|
end
|
42
44
|
|
43
45
|
def connection_pump message_handler
|
@@ -88,14 +90,36 @@ module Rookout
|
|
88
90
|
@secure = %w[https wss].include? @uri.scheme
|
89
91
|
|
90
92
|
@socket = nil
|
93
|
+
|
94
|
+
@proxy_connected = false
|
91
95
|
end
|
92
96
|
|
93
|
-
def connect
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
97
|
+
def connect driver
|
98
|
+
@socket = tcp_connect
|
99
|
+
|
100
|
+
proxy_connect driver if @proxy
|
101
|
+
|
102
|
+
@socket = ssl_connect @socket if @secure
|
103
|
+
end
|
104
|
+
|
105
|
+
def proxy_connect driver
|
106
|
+
connection_error = nil
|
107
|
+
@proxy_connected = false
|
108
|
+
proxy = driver.proxy @proxy
|
109
|
+
|
110
|
+
proxy.on :connect do
|
111
|
+
@proxy_connected = true
|
98
112
|
end
|
113
|
+
|
114
|
+
proxy.on :error do |error|
|
115
|
+
connection_error = error
|
116
|
+
end
|
117
|
+
|
118
|
+
proxy.start
|
119
|
+
|
120
|
+
proxy.parse read_char until @proxy_connected == true || !connection_error.nil?
|
121
|
+
|
122
|
+
raise Exceptions::RookProxyException, connection_error unless connection_error.nil?
|
99
123
|
end
|
100
124
|
|
101
125
|
attr_reader :url
|
@@ -118,13 +142,16 @@ module Rookout
|
|
118
142
|
private
|
119
143
|
|
120
144
|
def tcp_connect
|
121
|
-
|
122
|
-
|
145
|
+
if @proxy
|
146
|
+
uri = URI(@proxy)
|
147
|
+
TCPSocket.new uri.host, uri.port
|
148
|
+
else
|
149
|
+
TCPSocket.new @uri.host,
|
150
|
+
@uri.port || (@secure ? 443 : 80)
|
151
|
+
end
|
123
152
|
end
|
124
153
|
|
125
|
-
def ssl_connect
|
126
|
-
tcp_socket = tcp_connect
|
127
|
-
|
154
|
+
def ssl_connect tcp_socket
|
128
155
|
ctx = ::OpenSSL::SSL::SSLContext.new
|
129
156
|
ctx.min_version = ::OpenSSL::SSL::TLS1_2_VERSION
|
130
157
|
cert_store = ::OpenSSL::X509::Store.new
|
data/lib/rookout/commit.rb
CHANGED
data/lib/rookout/exceptions.rb
CHANGED
@@ -94,7 +94,7 @@ module Rookout
|
|
94
94
|
super "Message size of #{message_size} exceeds max size limit of #{max_message_size}. " \
|
95
95
|
"Change the depth of collection or change the default by setting ROOKOUT_MAX_MESSAGE_SIZE " \
|
96
96
|
"as environment variable or system property",
|
97
|
-
{ message_size
|
97
|
+
{ "message_size" => message_size, "max_message_size" => max_message_size }
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -144,6 +144,12 @@ module Rookout
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
+
class RookInvalidLabel < ToolException
|
148
|
+
def initialize label_name
|
149
|
+
super "Invalid label: must not start with the '$' character (#{label_name})"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
147
153
|
class RookCrcMismatchException < ToolException
|
148
154
|
def initialize filepath, expected, calculated
|
149
155
|
super "Line CRC32s do not match! path: #{filepath}, expected: #{expected}, calculated:#{calculated}",
|
@@ -178,10 +184,22 @@ module Rookout
|
|
178
184
|
end
|
179
185
|
end
|
180
186
|
|
187
|
+
class RookProxyException < ToolException
|
188
|
+
def initialize error
|
189
|
+
super "Error from proxy #{error}", { "error" => error }
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
181
193
|
class RookBadProtobuf < ToolException
|
182
194
|
def initialize
|
183
195
|
super 'Bad protobuf version. Please execute "bundle config force_ruby_platform true" before "bundler install".'
|
184
196
|
end
|
185
197
|
end
|
198
|
+
|
199
|
+
class RookBadProtobufPlatform < ToolException
|
200
|
+
def initialize platform
|
201
|
+
super "Bad protobuf platform: #{platform}"
|
202
|
+
end
|
203
|
+
end
|
186
204
|
end
|
187
205
|
end
|
data/lib/rookout/interface.rb
CHANGED
@@ -12,29 +12,31 @@ module Rookout
|
|
12
12
|
@start_options = nil
|
13
13
|
end
|
14
14
|
|
15
|
+
def print_debug_messages
|
16
|
+
puts "[Rookout] Running in debug mode"
|
17
|
+
puts "[Rookout] Rookout SDK for ruby: " + Config.rookout_version
|
18
|
+
end
|
19
|
+
|
15
20
|
def start options = {}
|
16
21
|
return unless @rook.nil?
|
17
22
|
throw_errors = options[:throw_errors] == true
|
18
23
|
Config.debug = evaluate_flag options[:debug], "ROOKOUT_DEBUG"
|
19
24
|
|
25
|
+
print_debug_messages if Config.debug
|
26
|
+
|
20
27
|
begin
|
21
28
|
verify_env
|
22
29
|
|
23
30
|
require_relative "rookout_singleton"
|
24
31
|
|
25
|
-
|
26
|
-
if options[:post_fork]
|
27
|
-
# Don't re-enable the fork handler
|
28
|
-
@start_options[:fork] = false
|
29
|
-
else
|
30
|
-
configure_globals options
|
31
|
-
|
32
|
-
@start_options = configure_start_options options
|
33
|
-
print_config @start_options
|
34
|
-
end
|
32
|
+
configure options
|
35
33
|
|
36
34
|
rook = RookoutSingleton.instance
|
37
35
|
rook.connect(**@start_options)
|
36
|
+
rescue LoadError
|
37
|
+
raise if throw_errors
|
38
|
+
STDERR.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
|
39
|
+
"'bundle config force_ruby_platform true'"
|
38
40
|
rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported, RookBadProtobuf => e
|
39
41
|
raise if throw_errors
|
40
42
|
STDERR.puts "[Rookout] Failed to start Rookout: #{e.message}"
|
@@ -62,12 +64,29 @@ module Rookout
|
|
62
64
|
|
63
65
|
TRUE_VALUE = [true, "y", "Y", "yes", "Yes", "YES", "true", "True", "TRUE", "1"].freeze
|
64
66
|
|
67
|
+
def configure options
|
68
|
+
# If we are running post fork, use previous start_options
|
69
|
+
if options[:post_fork]
|
70
|
+
# Don't re-enable the fork handler
|
71
|
+
@start_options[:fork] = false
|
72
|
+
else
|
73
|
+
configure_globals options
|
74
|
+
|
75
|
+
@start_options = configure_start_options options
|
76
|
+
print_config @start_options
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
65
80
|
def verify_env
|
66
81
|
# Only test alpine
|
67
82
|
return unless File.exist? "/etc/alpine-release"
|
68
83
|
|
69
84
|
protobuf = Gem::Specification.find_by_path "google/protobuf"
|
70
|
-
|
85
|
+
STDERR.puts RookBadProtobuf.new.message if protobuf.nil?
|
86
|
+
return unless protobuf.platform != "ruby"
|
87
|
+
|
88
|
+
error = RookBadProtobufPlatform.new protobuf.platform
|
89
|
+
STDERR.puts error.message
|
71
90
|
end
|
72
91
|
|
73
92
|
def configure_globals options
|
@@ -95,7 +114,7 @@ module Rookout
|
|
95
114
|
proxy = evaluate_config options[:proxy], "ROOKOUT_PROXY"
|
96
115
|
token = evaluate_config options[:token], "ROOKOUT_TOKEN"
|
97
116
|
|
98
|
-
raise RookMissingToken if token.nil? &&
|
117
|
+
raise RookMissingToken if token.nil? && !(host_specified options)
|
99
118
|
verify_token token if token
|
100
119
|
|
101
120
|
labels = stringify_labels(options[:labels]) || parse_labels(ENV["ROOKOUT_LABELS"])
|
@@ -107,6 +126,10 @@ module Rookout
|
|
107
126
|
{ host: host, port: port, proxy: proxy, token: token, labels: labels, async_start: async_start, fork: fork }
|
108
127
|
end
|
109
128
|
|
129
|
+
def host_specified options
|
130
|
+
!options[:host].nil? || !ENV["ROOKOUT_CONTROLLER_HOST"].nil? || !ENV["ROOKOUT_AGENT_HOST"].nil?
|
131
|
+
end
|
132
|
+
|
110
133
|
def evaluate_flag argument, env_var_name
|
111
134
|
return true? argument unless argument.nil?
|
112
135
|
true? ENV[env_var_name]
|
data/lib/rookout/logger.rb
CHANGED
@@ -12,7 +12,8 @@ module Rookout
|
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
# Detect unit tests
|
15
|
-
if (
|
15
|
+
if (Config.debug ||
|
16
|
+
$PROGRAM_NAME.end_with?("minitest_runner.rb") ||
|
16
17
|
$PROGRAM_NAME.end_with?("tunit_or_minitest_in_folder_runner.rb")) &&
|
17
18
|
Dir.pwd.end_with?("ruby-sdk")
|
18
19
|
Config.logger_log_level = :DEBUG
|
@@ -12,15 +12,15 @@ module Rookout
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def call_method _name, _args
|
15
|
-
RubyObjectNamespace nil
|
15
|
+
Rookout::Processor::Namespaces::RubyObjectNamespace.new nil
|
16
16
|
end
|
17
17
|
|
18
18
|
def read_attribute _name
|
19
|
-
RubyObjectNamespace nil
|
19
|
+
Rookout::Processor::Namespaces::RubyObjectNamespace.new nil
|
20
20
|
end
|
21
21
|
|
22
22
|
def read_key _key
|
23
|
-
RubyObjectNamespace nil
|
23
|
+
Rookout::Processor::Namespaces::RubyObjectNamespace.new nil
|
24
24
|
end
|
25
25
|
|
26
26
|
def dump _log_object_errors
|
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.18
|
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: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: binding_of_caller
|