rookout 0.1.13 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
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