rookout 0.1.11 → 0.1.16

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: 60302a56b6a812ebcbffa6f737d09c489451469d81faf3dc7dd40c2e8d00d47f
4
- data.tar.gz: ffc57878db1619dacd3b3e9d742f319aa9ddd95644b0aae70cd7dd9d554b12c8
3
+ metadata.gz: e08815efb5a89029e091fe5cd252dce182407411e6025de9db8e5ae2659d77d7
4
+ data.tar.gz: 60bba85497d1f9253e3447283fa1adb97096cb21213b5911ba90371323f1de26
5
5
  SHA512:
6
- metadata.gz: 72955273e9f425aa5f21ed5bb6325e5806550b466eea822383d81df7adf3374f8c436036be04aed4bddb117465fd577c9ecf5f0c7f7a35449d11c6d5916d601f
7
- data.tar.gz: 2ab2e8e7478a46bd06b42b9e346afa30bb9f4a405caa6342d4fd0bbe95dc601d37e0af5e3c9f8d58fca08125cc1e78cc12a5166c7f9da52c5c6697ef0765d7d4
6
+ metadata.gz: 3d4744c8a0eda6615c1c9b503503d67a1ee647ac7dbf4607fe75b1d9aeff90f8ad98dd497df23eab4488f692f26266d5fd048db566a88a8713272ad072843200
7
+ data.tar.gz: 7aec7fcff6e9637319f5867b19f2a5eb15d1a0c560a7e1ed212f21b730ed67253db853eff0d3aeacb89a66a6b558f06fbb9049c68d2a8d052cc6787630859247
@@ -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
@@ -66,7 +66,7 @@ module Rookout
66
66
  # rubocop:enable Style/ParallelAssignment
67
67
 
68
68
  def create_scm_information
69
- user_git_origin = Config.user_git_origin || ENV["ROOKOUT_ORIGIN"]
69
+ user_git_origin = Config.user_git_origin || ENV["ROOKOUT_REMOTE_ORIGIN"]
70
70
  user_git_commit = Config.user_git_commit || ENV["ROOKOUT_COMMIT"]
71
71
 
72
72
  if user_git_origin.nil? && user_git_commit.nil?
@@ -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 = "abb2cf931a9859b4fd334a6b11940cd4819cd41d".freeze
2
+ COMMIT = "809b0c180b1861b5f90a7ed0a14ccdd356e7edcf".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
 
@@ -177,5 +177,17 @@ module Rookout
177
177
  super "Error from Websocket #{error}", { "error" => error }
178
178
  end
179
179
  end
180
+
181
+ class RookProxyException < ToolException
182
+ def initialize error
183
+ super "Error from proxy #{error}", { "error" => error }
184
+ end
185
+ end
186
+
187
+ class RookBadProtobuf < ToolException
188
+ def initialize
189
+ super 'Bad protobuf version. Please execute "bundle config force_ruby_platform true" before "bundler install".'
190
+ end
191
+ end
180
192
  end
181
193
  end
@@ -17,24 +17,22 @@ module Rookout
17
17
  throw_errors = options[:throw_errors] == true
18
18
  Config.debug = evaluate_flag options[:debug], "ROOKOUT_DEBUG"
19
19
 
20
+ puts "[Rookout] Running in debug mode" if Config.debug
21
+
20
22
  begin
21
- require_relative "rookout_singleton"
23
+ verify_env
22
24
 
23
- # If we are running post fork, use previous start_options
24
- if options[:post_fork]
25
- # Don't re-enable the fork handler
26
- @start_options[:fork] = false
27
- else
28
- configure_logging options
29
- configure_git options
25
+ require_relative "rookout_singleton"
30
26
 
31
- @start_options = configure_start_options options
32
- print_config @start_options
33
- end
27
+ configure options
34
28
 
35
29
  rook = RookoutSingleton.instance
36
30
  rook.connect(**@start_options)
37
- rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported => e
31
+ rescue LoadError
32
+ raise if throw_errors
33
+ STDERR.puts "[Rookout] Failed to load Rookout. Please make sure to force build native extensions by setting" \
34
+ "'bundle config force_ruby_platform true'"
35
+ rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported, RookBadProtobuf => e
38
36
  raise if throw_errors
39
37
  STDERR.puts "[Rookout] Failed to start Rookout: #{e.message}"
40
38
  rescue RookCommunicationException => e
@@ -61,7 +59,28 @@ module Rookout
61
59
 
62
60
  TRUE_VALUE = [true, "y", "Y", "yes", "Yes", "YES", "true", "True", "TRUE", "1"].freeze
63
61
 
64
- def configure_logging options
62
+ def configure options
63
+ # If we are running post fork, use previous start_options
64
+ if options[:post_fork]
65
+ # Don't re-enable the fork handler
66
+ @start_options[:fork] = false
67
+ else
68
+ configure_globals options
69
+
70
+ @start_options = configure_start_options options
71
+ print_config @start_options
72
+ end
73
+ end
74
+
75
+ def verify_env
76
+ # Only test alpine
77
+ return unless File.exist? "/etc/alpine-release"
78
+
79
+ protobuf = Gem::Specification.find_by_path "google/protobuf"
80
+ raise RookBadProtobuf if protobuf.nil? || protobuf.platform != "ruby"
81
+ end
82
+
83
+ def configure_globals options
65
84
  if Config.debug
66
85
  log_to_stderr = true
67
86
  log_level = :DEBUG
@@ -75,9 +94,7 @@ module Rookout
75
94
  Config.logger_log_to_stderr = log_to_stderr unless log_to_stderr.nil?
76
95
  Config.logger_filename = log_file unless log_file.nil?
77
96
  Config.logger_log_level = log_level unless log_level.nil?
78
- end
79
97
 
80
- def configure_git options
81
98
  Config.user_git_origin = options[:git_origin] if options[:git_origin]
82
99
  Config.user_git_commit = options[:git_commit] if options[:git_commit]
83
100
  end
@@ -88,7 +105,7 @@ module Rookout
88
105
  proxy = evaluate_config options[:proxy], "ROOKOUT_PROXY"
89
106
  token = evaluate_config options[:token], "ROOKOUT_TOKEN"
90
107
 
91
- raise RookMissingToken if token.nil? && host == "wss://control.rookout.com"
108
+ raise RookMissingToken if token.nil? && !(host_specified options)
92
109
  verify_token token if token
93
110
 
94
111
  labels = stringify_labels(options[:labels]) || parse_labels(ENV["ROOKOUT_LABELS"])
@@ -100,6 +117,10 @@ module Rookout
100
117
  { host: host, port: port, proxy: proxy, token: token, labels: labels, async_start: async_start, fork: fork }
101
118
  end
102
119
 
120
+ def host_specified options
121
+ !options[:host].nil? || !ENV["ROOKOUT_CONTROLLER_HOST"].nil? || !ENV["ROOKOUT_AGENT_HOST"].nil?
122
+ end
123
+
103
124
  def evaluate_flag argument, env_var_name
104
125
  return true? argument unless argument.nil?
105
126
  true? ENV[env_var_name]
@@ -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.11".freeze
2
+ VERSION = "0.1.16".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.11
4
+ version: 0.1.16
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-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: binding_of_caller