rookout 0.1.4 → 0.1.9

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: a3a993062399dcf0f6408e5cd2d000227505057a3a2275f71fa9846ba19d428c
4
- data.tar.gz: 6c1de8cc013b75819c51bbd0ef9171777805534d78a9d9d35c2a14a8fc8c2b8c
3
+ metadata.gz: bd5c74f51143ba52e7cda082e0202b1408e90d570f310c36e1669477667931a8
4
+ data.tar.gz: 0ae53bf98ff8f9c91e159e0e2187a57c4841493874950b43a64731c026fc5d9c
5
5
  SHA512:
6
- metadata.gz: a11af9b274e600aeb0a8c7625002812a6fcdf039de6090351e019b3627344893475766481858c8cfd102d1bc3e3f468ee86bf4c4bcd90609a2c0bcac40db17bc
7
- data.tar.gz: aad7c874a9e5ad677b47c763864fa6ad84794d749d2a087f83d332ede065ac3186192afffc6bfa5c9077c02c6f488c8b9fc59248dfa9c1f1a549e49e45063f6c
6
+ metadata.gz: 31764b2a5805fdb3063d050c8f20f6b4819132ec432af6e160bcd77fb73a96b1552fede6654a786d2c5f7b67cad3596d85a2ff2150b67fd891c935e313ce0551
7
+ data.tar.gz: f790ea9db6c948bfc7581f661bb96a6e8300de8b5740e42a9d5d9024a614f2ffc1fc73c7aa04c28e1c48d1593499e6bfbfd0b4ee325da88da5ba05b653784d42
@@ -0,0 +1,30 @@
1
+ require "rubygems"
2
+ require "rubygems/command.rb"
3
+ require "rubygems/dependency_installer.rb"
4
+
5
+ # We override platform comparison to only match source gems
6
+ class Gem::Platform
7
+ def self.match platform
8
+ platform.nil? || platform == Gem::Platform::RUBY
9
+ end
10
+ end
11
+
12
+ inst = Gem::DependencyInstaller.new
13
+ begin
14
+ puts "[Rookout] installing appropriate google-protobuf gem"
15
+ if File.exist? "/etc/alpine-release"
16
+ # Versions from 3.10 onwards don't compile on Alpine
17
+ installed = inst.install "google-protobuf", [">= 3.0.0", "< 3.10.0"]
18
+ else
19
+ installed = inst.install "google-protobuf", ">= 3.0.0"
20
+ end
21
+ puts "[Rookout] Installed additional dependencies:"
22
+ installed.each { |dep| puts dep.name }
23
+ rescue
24
+ exit 1
25
+ end
26
+
27
+ # create dummy rakefile to indicate success
28
+ f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")
29
+ f.write("task :default\n")
30
+ f.close
@@ -0,0 +1,73 @@
1
+ module Rookout
2
+ class ForkManager
3
+ require "singleton"
4
+ include Singleton
5
+
6
+ def initialize
7
+ @active = false
8
+ end
9
+
10
+ def activate!
11
+ @active = true
12
+ end
13
+
14
+ def disable!
15
+ @active = false
16
+ end
17
+
18
+ def active?
19
+ @active
20
+ end
21
+
22
+ def fork_hook original_fork
23
+ if block_given?
24
+ original_fork.call do
25
+ post_fork_child if active?
26
+ yield
27
+ end
28
+ else
29
+ res = original_fork.call
30
+ post_fork_child if active? && !res
31
+ res
32
+ end
33
+ end
34
+
35
+ def post_fork_child
36
+ require_relative "rookout_singleton"
37
+ require_relative "interface"
38
+
39
+ RookoutSingleton.instance.post_fork_clean
40
+ Interface.instance.stop
41
+ Interface.instance.start post_fork: true
42
+
43
+ # Disable fork handler in child process
44
+ disable!
45
+ end
46
+ end
47
+ end
48
+
49
+ alias _rookout_original_fork fork
50
+
51
+ def self.fork &block
52
+ Rookout::ForkManager.instance.fork_hook method(:_rookout_original_fork), &block
53
+ end
54
+
55
+ def fork &block
56
+ Rookout::ForkManager.instance.fork_hook method(:_rookout_original_fork), &block
57
+ end
58
+
59
+ module Kernel
60
+ alias _rookout_original_fork fork
61
+
62
+ def self.fork &block
63
+ Rookout::ForkManager.instance.fork_hook method(:_rookout_original_fork), &block
64
+ end
65
+ end
66
+
67
+ module Process
68
+ alias _rookout_original_fork fork
69
+
70
+ def self.fork &block
71
+ Rookout::ForkManager.instance.fork_hook method(:_rookout_original_fork), &block
72
+ end
73
+ end
@@ -39,7 +39,8 @@ module Rookout
39
39
  @info = Information.new labels
40
40
  reset_id
41
41
 
42
- @thread = nil
42
+ @main_thread = nil
43
+ @outgoing_thread = nil
43
44
  @pending_messages = Queue.new
44
45
 
45
46
  @running = false
@@ -64,8 +65,17 @@ module Rookout
64
65
  def connect
65
66
  @running = true
66
67
 
67
- @thread = Thread.new { connection_thread }
68
- @thread.name = "rookout-connection-thread"
68
+ @main_thread = Thread.new { connection_thread }
69
+ @main_thread.name = "rookout-connection-thread"
70
+ end
71
+
72
+ def stop
73
+ @running = false
74
+
75
+ # Ask outgoing thread to exit (if running)
76
+ @pending_messages << ExitMessage.new(@outgoing_thread)
77
+
78
+ @main_thread.join
69
79
  end
70
80
 
71
81
  def wait_for_ready
@@ -133,8 +143,8 @@ module Rookout
133
143
 
134
144
  def connection_pump client
135
145
  on_outgoing_exit = proc { client.close }
136
- send_thread = Thread.new { outgoing client, on_outgoing_exit }
137
- send_thread.name = "rookout-outgoing-thread"
146
+ @outgoing_thread = Thread.new { outgoing client, on_outgoing_exit }
147
+ @outgoing_thread.name = "rookout-outgoing-thread"
138
148
 
139
149
  message_handler = proc do |raw_message|
140
150
  envelope = Com::Rookout::Envelope.decode raw_message.pack("c*")
@@ -150,7 +160,8 @@ module Rookout
150
160
  Logger.instance.debug "Incoming loop - socket disconnected"
151
161
 
152
162
  @pending_messages.push ExitMessage.new(send_thread)
153
- send_thread.join
163
+ @outgoing_thread.join
164
+ @outgoing_thread = nil
154
165
  end
155
166
 
156
167
  def outgoing client, on_exit
@@ -105,7 +105,7 @@ module Rookout
105
105
  end
106
106
 
107
107
  class RookInvalidToken < ToolException
108
- def initialize token
108
+ def initialize token = ""
109
109
  super "The Rookout token supplied #{token[0..6]} is not valid; please check the token and try again",
110
110
  { token: token[0...6] }
111
111
  end
@@ -9,6 +9,7 @@ module Rookout
9
9
 
10
10
  def initialize
11
11
  @rook = nil
12
+ @start_options = nil
12
13
  end
13
14
 
14
15
  def start options = {}
@@ -19,14 +20,20 @@ module Rookout
19
20
  begin
20
21
  require_relative "rookout_singleton"
21
22
 
22
- configure_logging options
23
- configure_git options
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
24
30
 
25
- start_options = configure_start_options options
26
- print_config start_options
31
+ @start_options = configure_start_options options
32
+ print_config @start_options
33
+ end
27
34
 
28
35
  rook = RookoutSingleton.instance
29
- rook.connect(**start_options)
36
+ rook.connect(**@start_options)
30
37
  rescue RookMissingToken, RookInvalidToken, RookInvalidOptions, RookVersionNotSupported => e
31
38
  raise if throw_errors
32
39
  STDERR.puts "[Rookout] Failed to start Rookout: #{e.message}"
@@ -12,6 +12,7 @@ module Rookout
12
12
  end
13
13
 
14
14
  def read_attribute name
15
+ return RubyObjectNamespace.new @binding.receiver if name == "self"
15
16
  raise Exceptions::RookAttributeNotFound, name unless @binding.local_variable_defined? name
16
17
  RubyObjectNamespace.new @binding.local_variable_get name
17
18
  end
@@ -123,6 +123,7 @@ module Rookout
123
123
  end
124
124
 
125
125
  def dump_string obj, variant, config
126
+ obj = obj.to_s
126
127
  if obj.length > config.max_string
127
128
  final_obj = obj[0...config.max_string]
128
129
  else
@@ -40,9 +40,14 @@ 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, **_
43
+ def connect token: nil, host: nil, port: nil, proxy: nil, labels: [], async_start: false, fork: false
44
44
  raise Exceptions::RookInterfaceException, "Multiple connection attempts not supported!" unless @agent_com.nil?
45
45
 
46
+ if fork
47
+ require_relative "atfork"
48
+ Rookout::ForkManager.instance.activate!
49
+ end
50
+
46
51
  start_trigger_services
47
52
 
48
53
  Logger.instance.debug "Initiating AgentCom-\t#{host}:#{port}"
@@ -61,6 +66,16 @@ module Rookout
61
66
  @output.flush_messages if !@output.nil && !@agent_com.nil?
62
67
  end
63
68
 
69
+ def post_fork_clean
70
+ @agent_com.stop
71
+ @agent_com = nil
72
+
73
+ @command_handler = nil
74
+
75
+ # We don't disable services because we will lose all loaded scripts
76
+ @services.clear_augs
77
+ end
78
+
64
79
  attr_reader :services
65
80
 
66
81
  private
@@ -1,3 +1,3 @@
1
1
  module Rookout
2
- VERSION = "0.1.4".freeze
2
+ VERSION = "0.1.9".freeze
3
3
  end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require_relative "lib/rookout/version"
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rookout"
6
+ spec.version = Rookout::VERSION
7
+
8
+ spec.authors = ["Liran Haimovitch"]
9
+ spec.email = ["support@rookout.com"]
10
+ spec.description = "rookout is the Ruby SDK for the Rookout Debugging Platform"
11
+ spec.summary = "rookout is the Ruby SDK for the Rookout Debugging Platform"
12
+ spec.homepage = "https://rookout.com"
13
+ spec.license = "Proprietary"
14
+
15
+ spec.metadata["homepage_uri"] = spec.homepage
16
+
17
+ spec.files = `git ls-files -- ext/* lib/* bin/*`.split("\n") +
18
+ ["lib/rookout/commit.rb", "LICENSE", "rookout.gemspec"]
19
+ spec.extensions = ["ext/mkrf_conf.rb"]
20
+ spec.executables = ["rookout"]
21
+
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.required_ruby_version = ">= 2.6"
25
+
26
+ spec.add_dependency "binding_of_caller", ">= 0.7"
27
+ spec.add_dependency "concurrent-ruby", ">= 1.1"
28
+ spec.add_dependency "websocket-driver", ">= 0.5.0"
29
+ spec.add_dependency "event_emitter", ">= 0.2.6"
30
+
31
+ spec.add_development_dependency "google-protobuf", ">= 3.0.0"
32
+ spec.add_development_dependency "google-style", ">= 1.24.0"
33
+ spec.add_development_dependency "minitest", ">= 5.14"
34
+ spec.add_development_dependency "minitest-autotest", ">= 1.0"
35
+ spec.add_development_dependency "minitest-focus", ">= 1.1"
36
+ spec.add_development_dependency "minitest-rg", ">= 5.2"
37
+ spec.add_development_dependency "autotest-suffix", ">= 1.1"
38
+ spec.add_development_dependency "rake-compiler", ">= 1.0"
39
+ 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.4
4
+ version: 0.1.9
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-09 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: binding_of_caller
@@ -53,33 +53,33 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.5.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: google-protobuf
56
+ name: event_emitter
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 3.0.0
61
+ version: 0.2.6
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 3.0.0
68
+ version: 0.2.6
69
69
  - !ruby/object:Gem::Dependency
70
- name: event_emitter
70
+ name: google-protobuf
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.6
76
- type: :runtime
75
+ version: 3.0.0
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.6
82
+ version: 3.0.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: google-style
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -183,12 +183,15 @@ email:
183
183
  - support@rookout.com
184
184
  executables:
185
185
  - rookout
186
- extensions: []
186
+ extensions:
187
+ - ext/mkrf_conf.rb
187
188
  extra_rdoc_files: []
188
189
  files:
189
190
  - LICENSE
190
191
  - bin/rookout
192
+ - ext/mkrf_conf.rb
191
193
  - lib/rookout.rb
194
+ - lib/rookout/atfork.rb
192
195
  - lib/rookout/augs/actions/action.rb
193
196
  - lib/rookout/augs/actions/action_run_processor.rb
194
197
  - lib/rookout/augs/aug.rb
@@ -247,6 +250,7 @@ files:
247
250
  - lib/rookout/user_warnings.rb
248
251
  - lib/rookout/utils.rb
249
252
  - lib/rookout/version.rb
253
+ - rookout.gemspec
250
254
  homepage: https://rookout.com
251
255
  licenses:
252
256
  - Proprietary