rookout 0.1.4 → 0.1.9

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: 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