simonmenke-shuttle 0.1.08 → 0.1.09
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.
- data/lib/shuttle.rb +2 -1
- data/lib/shuttle/apps/server.rb +0 -3
- data/lib/shuttle/daemon.rb +71 -0
- data/lib/shuttle/exception_handler.rb +29 -3
- data/lib/shuttle/server.rb +7 -5
- data/lib/shuttle/server/daemon.rb +9 -10
- metadata +2 -1
data/lib/shuttle.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
+
autoload :URI, 'uri'
|
3
4
|
autoload :Etc, 'etc'
|
4
5
|
autoload :DRb, 'drb'
|
5
6
|
autoload :TSort, 'tsort'
|
@@ -15,6 +16,7 @@ module Shuttle
|
|
15
16
|
autoload :Server, (base+'/shuttle/server')
|
16
17
|
autoload :Client, (base+'/shuttle/client')
|
17
18
|
autoload :System, (base+'/shuttle/system')
|
19
|
+
autoload :Daemon, (base+'/shuttle/daemon')
|
18
20
|
autoload :JobQueue, (base+'/shuttle/job_queue')
|
19
21
|
autoload :Satellite, (base+'/shuttle/satellite')
|
20
22
|
autoload :AppRunner, (base+'/shuttle/app_runner')
|
@@ -50,7 +52,6 @@ module Shuttle
|
|
50
52
|
|
51
53
|
THOR_VERSION = '>= 0.9.9'
|
52
54
|
RUBIGEN_VERSION = '>= 1.5.2'
|
53
|
-
SIMPLE_DEAMON_VERSION = '>= 0.1.2'
|
54
55
|
|
55
56
|
Shuttle::ExceptionHandler.setup
|
56
57
|
extend ExceptionHandler
|
data/lib/shuttle/apps/server.rb
CHANGED
@@ -8,7 +8,6 @@ module Shuttle
|
|
8
8
|
desc "start", 'start the server'
|
9
9
|
method_options :foreground => :boolean, :config => :optional
|
10
10
|
def start
|
11
|
-
Shuttle.runtime_gem('simple-daemon', Shuttle::SIMPLE_DEAMON_VERSION)
|
12
11
|
Shuttle.server? true
|
13
12
|
Shuttle::System.load!(options[:root_path])
|
14
13
|
|
@@ -24,11 +23,9 @@ module Shuttle
|
|
24
23
|
exit(1)
|
25
24
|
end
|
26
25
|
|
27
|
-
SimpleDaemon.const_set 'WORKING_DIRECTORY', Shuttle.system.root
|
28
26
|
if options[:foreground]
|
29
27
|
Shuttle::Server.start
|
30
28
|
else
|
31
|
-
ARGV.clear and ARGV.concat(%w( start ))
|
32
29
|
Shuttle::Server.daemonize
|
33
30
|
end
|
34
31
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
|
2
|
+
module Shuttle
|
3
|
+
module Daemon
|
4
|
+
class Base
|
5
|
+
|
6
|
+
def self.daemonize(&block)
|
7
|
+
Shuttle::Daemon::Controller.start(self,&block)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
module PidFile
|
13
|
+
def self.store(pid)
|
14
|
+
File.open(self.pid_file, 'w') {|f| f << pid}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.recall
|
18
|
+
IO.read(self.pid_file).to_i rescue nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.destroy
|
22
|
+
FileUtils.rm(self.pid_file) if self.exist?
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.pid_file
|
26
|
+
Shuttle.system.path("Server.pid")
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.exist?
|
30
|
+
File.file?(self.pid_file)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module Controller
|
35
|
+
|
36
|
+
def self.start(daemon, &block)
|
37
|
+
fork do
|
38
|
+
Process.setsid
|
39
|
+
exit if fork
|
40
|
+
if PidFile.exist?
|
41
|
+
puts "Pid file #{PidFile.pid_file} already exists. Not starting."
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
Shuttle::Daemon::PidFile.store(Process.pid)
|
45
|
+
Dir.chdir Shuttle.system.root
|
46
|
+
File.umask 0000
|
47
|
+
|
48
|
+
Shuttle::ExceptionHandler.redirect_std
|
49
|
+
|
50
|
+
trap("TERM") { daemon.stop; exit }
|
51
|
+
at_exit { Shuttle::Daemon::PidFile.destroy if $master }
|
52
|
+
at_exit(&block) if block
|
53
|
+
daemon.start
|
54
|
+
end
|
55
|
+
puts "Daemon started."
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.stop
|
59
|
+
if !Shuttle::Daemon::PidFile.exist?
|
60
|
+
puts "Pid file not found. Is the daemon started?"
|
61
|
+
exit
|
62
|
+
end
|
63
|
+
pid = Shuttle::Daemon::PidFile.recall
|
64
|
+
pid && Process.kill("TERM", pid)
|
65
|
+
rescue Errno::ESRCH
|
66
|
+
puts "Pid file found, but process was not running. The daemon may have died."
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -4,15 +4,21 @@ module Shuttle
|
|
4
4
|
|
5
5
|
def self.setup(out=STDOUT, err=STDERR)
|
6
6
|
if String === out
|
7
|
-
@out
|
7
|
+
@out = Logger.new(out, 'daily')
|
8
|
+
@stdout = @out.instance_variable_get('@logdev').instance_variable_get('@dev')
|
8
9
|
else
|
9
|
-
@out
|
10
|
+
@out = Logger.new(out)
|
11
|
+
@stdout = out
|
10
12
|
end
|
13
|
+
|
11
14
|
if String === err
|
12
15
|
@err = Logger.new(err, 'daily')
|
16
|
+
@stderr = @err.instance_variable_get('@logdev').instance_variable_get('@dev')
|
13
17
|
else
|
14
|
-
@err
|
18
|
+
@err = Logger.new(err)
|
19
|
+
@stderr = err
|
15
20
|
end
|
21
|
+
|
16
22
|
@out.level = Logger::DEBUG
|
17
23
|
@err.level = Logger::DEBUG
|
18
24
|
end
|
@@ -25,6 +31,26 @@ module Shuttle
|
|
25
31
|
@out
|
26
32
|
end
|
27
33
|
|
34
|
+
def self.stderr
|
35
|
+
@stderr
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.stdout
|
39
|
+
@stdout
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.redirect_std
|
43
|
+
if STDOUT != self.stdout
|
44
|
+
STDOUT.reopen self.stdout
|
45
|
+
end
|
46
|
+
|
47
|
+
if STDERR != self.stderr
|
48
|
+
STDERR.reopen self.stderr
|
49
|
+
end
|
50
|
+
|
51
|
+
STDIN.reopen "/dev/null"
|
52
|
+
end
|
53
|
+
|
28
54
|
def logger
|
29
55
|
Shuttle::ExceptionHandler
|
30
56
|
end
|
data/lib/shuttle/server.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
Shuttle.runtime_gem('simple-daemon', Shuttle::SIMPLE_DEAMON_VERSION)
|
2
1
|
|
3
2
|
module Shuttle
|
4
3
|
|
5
4
|
# the Server is supposed to be a simple DRb interface to the System.
|
6
|
-
class Server <
|
5
|
+
class Server < Shuttle::Daemon::Base
|
7
6
|
include DRbUndumped
|
8
7
|
|
9
8
|
autoload :Proxy, File.dirname(__FILE__)+'/server/proxy'
|
@@ -23,17 +22,20 @@ module Shuttle
|
|
23
22
|
|
24
23
|
def stop_server
|
25
24
|
Shuttle.log "stopping the server..."
|
26
|
-
|
25
|
+
$exitstatus = Shuttle::STOP_STATUS
|
26
|
+
DRb.stop_service
|
27
27
|
end
|
28
28
|
|
29
29
|
def restart_server
|
30
30
|
Shuttle.log "restarting the server..."
|
31
|
-
|
31
|
+
$exitstatus = Shuttle::RESTART_STATUS
|
32
|
+
DRb.stop_service
|
32
33
|
end
|
33
34
|
|
34
35
|
def reload_server
|
35
36
|
Shuttle.log "reloading the server..."
|
36
|
-
|
37
|
+
$exitstatus = Shuttle::RELOAD_STATUS
|
38
|
+
DRb.stop_service
|
37
39
|
end
|
38
40
|
|
39
41
|
def server_version
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'uri'
|
2
1
|
|
3
2
|
module Shuttle
|
4
3
|
class Server
|
@@ -19,7 +18,7 @@ module Shuttle
|
|
19
18
|
uri.to_s
|
20
19
|
end
|
21
20
|
|
22
|
-
# stop
|
21
|
+
# stop the server
|
23
22
|
def stop
|
24
23
|
Shuttle.client.stop_server
|
25
24
|
end
|
@@ -31,6 +30,7 @@ module Shuttle
|
|
31
30
|
|
32
31
|
# start the failsafe runner.
|
33
32
|
def start_with_failsafe
|
33
|
+
$master = true
|
34
34
|
stop_server = false
|
35
35
|
wait_before_start = 0
|
36
36
|
retries = 0
|
@@ -41,6 +41,7 @@ module Shuttle
|
|
41
41
|
end
|
42
42
|
|
43
43
|
pid = Process.fork { self.run_server }
|
44
|
+
return unless pid
|
44
45
|
Process.waitpid(pid, 0)
|
45
46
|
case $?.exitstatus
|
46
47
|
when Shuttle::STOP_STATUS
|
@@ -52,19 +53,18 @@ module Shuttle
|
|
52
53
|
when Shuttle::RELOAD_STATUS
|
53
54
|
stop_server = true
|
54
55
|
retries = 0
|
55
|
-
Shuttle
|
56
|
+
Shuttle::Daemon::PidFile.destroy
|
57
|
+
Shuttle.system.run %{#{Shuttle::BIN_PATH} #{ORIGINAL_ARGV.join(' ')}}
|
56
58
|
else
|
57
59
|
retries += 1
|
58
60
|
stop_server = true if retries >= 3
|
59
61
|
end
|
60
62
|
end
|
61
|
-
|
62
|
-
path = Shuttle.system.path('Server.pid')
|
63
|
-
File.unlink(path) if File.file?(path)
|
64
63
|
end
|
65
64
|
|
66
65
|
# start the actual DRb server
|
67
66
|
def run_server
|
67
|
+
$master = false
|
68
68
|
Dir.chdir(Shuttle.system.root)
|
69
69
|
|
70
70
|
Shuttle.log "Server started"
|
@@ -74,13 +74,12 @@ module Shuttle
|
|
74
74
|
make_client_cert_public!
|
75
75
|
|
76
76
|
at_exit do
|
77
|
-
|
78
|
-
|
79
|
-
Shuttle.log "Server stopped"
|
80
|
-
end
|
77
|
+
Shuttle.system.queue.stop!
|
78
|
+
Shuttle.log "Server stopped"
|
81
79
|
end
|
82
80
|
|
83
81
|
DRb.thread.join
|
82
|
+
exit($exitstatus || Shuttle::STOP_STATUS)
|
84
83
|
end
|
85
84
|
|
86
85
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simonmenke-shuttle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.09
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Menke
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/shuttle/apps/server.rb
|
43
43
|
- lib/shuttle/client/auth_token.rb
|
44
44
|
- lib/shuttle/client.rb
|
45
|
+
- lib/shuttle/daemon.rb
|
45
46
|
- lib/shuttle/exception_handler.rb
|
46
47
|
- lib/shuttle/extentions/rubygems_plugin.rb
|
47
48
|
- lib/shuttle/extentions/thor_extentions.rb
|