rookout 0.1.5 → 0.1.10
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 +4 -4
- data/lib/rookout/atfork.rb +73 -0
- data/lib/rookout/augs/aug.rb +2 -0
- data/lib/rookout/com_ws/agent_com_ws.rb +17 -6
- data/lib/rookout/commit.rb +1 -1
- data/lib/rookout/exceptions.rb +2 -2
- data/lib/rookout/interface.rb +12 -5
- data/lib/rookout/rookout_singleton.rb +16 -1
- data/lib/rookout/services/position.rb +4 -1
- data/lib/rookout/version.rb +1 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb5339cdc9cb66af897ace6857663f6c784809a17948e17a854f7b204fc9c4a1
|
4
|
+
data.tar.gz: d80f3651e6284b7b2262a4f092b7f41b96d7fc45ada08ff1b70a4e1a1efe1304
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05c9290a00720940c4f3782126dd3d59d346bddf417e41334b00a3386d7ab14274a06f4744ddb89dad81ab65c0074ae99a13e799dceddd57c54c33a93ffef81a
|
7
|
+
data.tar.gz: 50f822a8bac76ead40a06595a8467661c4ac6718d72e270d2c5b88abbadd1e4754e06ff54d3e8d89a9397faabb2a208f9b97ef3d808c1ecd9c890560e781277b
|
@@ -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
|
data/lib/rookout/augs/aug.rb
CHANGED
@@ -7,6 +7,7 @@ module Rookout
|
|
7
7
|
require_relative "../processor/namespaces/container_namespace"
|
8
8
|
require_relative "../processor/namespaces/ruby_utils_namespace"
|
9
9
|
require_relative "../processor/namespaces/noop_namespace"
|
10
|
+
require_relative "../logger"
|
10
11
|
|
11
12
|
class Aug
|
12
13
|
def initialize aug_id, action, condition, rate_limiter, _max_aug_time
|
@@ -32,6 +33,7 @@ module Rookout
|
|
32
33
|
|
33
34
|
@rate_limiter.with_limit do
|
34
35
|
report_id = Utils.uuid
|
36
|
+
Logger.instance.info "Executing aug-\t#{id} (msg ID #{report_id})"
|
35
37
|
@action.execute @id, report_id, namespace, output
|
36
38
|
end
|
37
39
|
end
|
@@ -39,7 +39,8 @@ module Rookout
|
|
39
39
|
@info = Information.new labels
|
40
40
|
reset_id
|
41
41
|
|
42
|
-
@
|
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
|
-
@
|
68
|
-
@
|
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
|
-
|
137
|
-
|
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
|
-
|
163
|
+
@outgoing_thread.join
|
164
|
+
@outgoing_thread = nil
|
154
165
|
end
|
155
166
|
|
156
167
|
def outgoing client, on_exit
|
data/lib/rookout/commit.rb
CHANGED
data/lib/rookout/exceptions.rb
CHANGED
@@ -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
|
@@ -114,7 +114,7 @@ module Rookout
|
|
114
114
|
class RookSourceFilePathSuggestion < ToolException
|
115
115
|
def initialize wanted_path, matching_path
|
116
116
|
super "Rookout found alternative file path: #{matching_path}",
|
117
|
-
{ wanted_path
|
117
|
+
{ "wanted_path" => wanted_path, "matching_path" => matching_path }
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
data/lib/rookout/interface.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
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
|
-
|
26
|
-
|
31
|
+
@start_options = configure_start_options options
|
32
|
+
print_config @start_options
|
33
|
+
end
|
27
34
|
|
28
35
|
rook = RookoutSingleton.instance
|
29
|
-
rook.connect(
|
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}"
|
@@ -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
|
@@ -102,13 +102,16 @@ module Rookout
|
|
102
102
|
elsif suggested_match? location, filename
|
103
103
|
warning = Exceptions::RookSourceFilePathSuggestion.new location.filename, filename
|
104
104
|
location.notify_warning warning
|
105
|
+
# Must return nil in order to skip this script
|
106
|
+
nil
|
105
107
|
end
|
106
108
|
end
|
107
109
|
|
108
110
|
#########################################################################################
|
109
111
|
# Utils
|
110
112
|
def exact_match? location_filename, script_filename
|
111
|
-
script_filename.end_with? location_filename
|
113
|
+
return unless script_filename.end_with? location_filename
|
114
|
+
File.basename(script_filename) == File.basename(location_filename)
|
112
115
|
end
|
113
116
|
|
114
117
|
def suggested_match? location, filename
|
data/lib/rookout/version.rb
CHANGED
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
|
+
version: 0.1.10
|
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-
|
11
|
+
date: 2020-12-17 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:
|
56
|
+
name: event_emitter
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
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:
|
68
|
+
version: 0.2.6
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: google-protobuf
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 3.9.2
|
76
76
|
type: :runtime
|
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:
|
82
|
+
version: 3.9.2
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: google-style
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,6 +189,7 @@ files:
|
|
189
189
|
- LICENSE
|
190
190
|
- bin/rookout
|
191
191
|
- lib/rookout.rb
|
192
|
+
- lib/rookout/atfork.rb
|
192
193
|
- lib/rookout/augs/actions/action.rb
|
193
194
|
- lib/rookout/augs/actions/action_run_processor.rb
|
194
195
|
- lib/rookout/augs/aug.rb
|