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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ac3806c0aa70b513faec4681c8c66c6a15fa73d95b0d8c049e6370b4da4594f
4
- data.tar.gz: a06b067ece4a6b18344c78681912cb98790b4551014eb1598e0f2259884ade4b
3
+ metadata.gz: 49455f2ecaae2121f3abefd5b746a89374e980b91c1bea8af891afffb197238c
4
+ data.tar.gz: 04d208ab7bcbd7434dbfcbcc61023f8720592e3f9a41a083ea49637fa8df1b51
5
5
  SHA512:
6
- metadata.gz: eb2bf01a3ea09427695506cb91630de1a7a26a768e189b575f18ee2456f2ea4782a4a16819e3bb34e901d4c887fac72a886108b3cccd2b9afdb32045c773d27d
7
- data.tar.gz: e2de34569161a2d96c7ffe5a7090637b082107b1c9bd41095c65eab23764c39a20d863132c9685cd6b43d5e3e7474cd8c9dc2b011f0488bc21417680f5ab6068
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, Coonfig.agent_com_max_message_limit
55
- warning = RookError.new exc, message
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.warn "Dropping message, size was #{buffer.length} which is over the message size limit"
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
- @connected = false
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
- @connected = false
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
- @connected = true
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
- # TODO: add proxy support
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
- @error = error
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, @error if @driver.state != :open
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
- if @secure
95
- @socket = ssl_connect
96
- else
97
- @socket = tcp_connect
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
- TCPSocket.new @uri.host,
122
- @uri.port || (@secure ? 443 : 80)
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
@@ -1,3 +1,3 @@
1
1
  module Rookout
2
- COMMIT = "ce81f2f19f47dfc13e4321d1c64ae2107ace3fa3".freeze
2
+ COMMIT = "f803c4b88c8cdacd2201420927e5646b15adbe01".freeze
3
3
  end
@@ -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: message_size, max_message_size: max_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
@@ -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
- # If we are running post fork, use previous start_options
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
- raise RookBadProtobuf if protobuf.nil? || protobuf.platform != "ruby"
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? && host == "wss://control.rookout.com"
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]
@@ -12,7 +12,8 @@ module Rookout
12
12
 
13
13
  def initialize
14
14
  # Detect unit tests
15
- if ($PROGRAM_NAME.end_with?("minitest_runner.rb") ||
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
@@ -1,3 +1,3 @@
1
1
  module Rookout
2
- VERSION = "0.1.13".freeze
2
+ VERSION = "0.1.18".freeze
3
3
  end
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.13
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: 2020-12-22 00:00:00.000000000 Z
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