servitude 0.2.0 → 0.3.0
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/README.md +17 -8
- data/examples/3_echo_server_with_cli_and_daemon +3 -8
- data/examples/4_echo_server_with_cli_daemon_and_file_config +3 -8
- data/examples/5_echo_server_with_cli_daemon_and_env_config +3 -8
- data/lib/servitude/cli/base.rb +6 -0
- data/lib/servitude/cli/service.rb +74 -0
- data/lib/servitude/cli.rb +4 -125
- data/lib/servitude/config_helper.rb +0 -2
- data/lib/servitude/version.rb +1 -1
- data/servitude.gemspec +1 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d92cd3bbaeb18254224bf3d04c90ef1076d16d6
|
4
|
+
data.tar.gz: d821dac504ebe7db88da0d37566908f5625b3e48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 225a9fe42a13c8114c2574596a7a9540ccbc2e3a191e7b2a2fb53335ecf53f03ca8a62db6a4afddc1fc70ddf5470173f2c024d9bfa8bde11acc0de098b003a82
|
7
|
+
data.tar.gz: 734f32e55b8eb623eca14dad76e552b6ae6ef9c1e757c9bfcdedbbec2ea5677e7d5aa3d631e5b1f1eba12600aa998faf6d52fac538b830008a1be22b636d10ec
|
data/README.md
CHANGED
@@ -20,8 +20,6 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
For executable examples see the [examples folder](https://github.com/midas/servitude/tree/master/examples).
|
24
|
-
|
25
23
|
To build a server with Servitude only a couple of steps are required.
|
26
24
|
|
27
25
|
* Include the Servitude::Base module in the base module of your server project.
|
@@ -30,7 +28,8 @@ To build a server with Servitude only a couple of steps are required.
|
|
30
28
|
* If a single threaded server, implement your functionality in the Server#run method.
|
31
29
|
* If a multi-threaded server, implement your functionality in a handler class that includes the Servitude::Actor module and call the handler from the Server#run method.
|
32
30
|
|
33
|
-
For
|
31
|
+
For executable examples see the [examples folder](https://github.com/midas/servitude/tree/master/examples). To run the examples, clone the project,
|
32
|
+
install the bundle and follow the usage instructions in each example.
|
34
33
|
|
35
34
|
The rest of this document will discuss the functionality each module provides.
|
36
35
|
|
@@ -79,11 +78,11 @@ If you do not call ::boot, an error is raised before your server can be started.
|
|
79
78
|
|
80
79
|
### Servitude::Cli
|
81
80
|
|
82
|
-
The Cli module provides
|
81
|
+
The Cli module provides several classes with Command Line Interface functionality for your server. The Cli::Service class provides standard unix service
|
82
|
+
sub-commands: start, stop, status and restart.
|
83
83
|
|
84
84
|
module AwesomeServer
|
85
|
-
class Cli
|
86
|
-
include Servitude::Cli
|
85
|
+
class Cli < Servitude::Cli::Service
|
87
86
|
end
|
88
87
|
end
|
89
88
|
|
@@ -91,7 +90,17 @@ In your CLI file (bin/awesome-server):
|
|
91
90
|
|
92
91
|
#!/usr/bin/env ruby
|
93
92
|
require 'awesome_server'
|
94
|
-
AwesomeServer::Cli.
|
93
|
+
AwesomeServer::Cli.start
|
94
|
+
|
95
|
+
To build a custom CLI, you can inherit from Cli::Base.
|
96
|
+
|
97
|
+
module AwesomeServer
|
98
|
+
class Cli < Servitude::Cli::Base
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
For details on how to add commands to your custom or standard service CLIs see the [Thor documentation](http://whatisthor.com/).
|
103
|
+
|
95
104
|
|
96
105
|
### Servitude::Configuration
|
97
106
|
|
@@ -258,7 +267,7 @@ The Server module provides callbacks to utilize in your server implementation:
|
|
258
267
|
|
259
268
|
* __before_initialize__: executes just before the initilaization of the server
|
260
269
|
* __after_initialize__: executes immediately after initilaization of the server
|
261
|
-
*
|
270
|
+
* __before_run__: executes just before the run method is called
|
262
271
|
* __before_sleep__: executes just before the main thread sleeps to avoid exiting
|
263
272
|
* __finalize__: executes before server exits
|
264
273
|
|
@@ -3,8 +3,6 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'servitude'
|
5
5
|
require 'socket'
|
6
|
-
require 'trollop'
|
7
|
-
require 'pry'
|
8
6
|
|
9
7
|
# The echo server accepts with CLI builds on the 2_echo_server example, addiing a command line interface.
|
10
8
|
#
|
@@ -21,7 +19,7 @@ require 'pry'
|
|
21
19
|
#
|
22
20
|
# Usage:
|
23
21
|
# Help:
|
24
|
-
# bundle exec examples/3_echo_server_with_cli_and_daemon
|
22
|
+
# bundle exec examples/3_echo_server_with_cli_and_daemon help
|
25
23
|
#
|
26
24
|
# Start (interactive):
|
27
25
|
# bundle exec examples/3_echo_server_with_cli_and_daemon start -i
|
@@ -52,10 +50,7 @@ module EchoServer
|
|
52
50
|
default_thread_count: nil,
|
53
51
|
version_copyright: "v#{VERSION} \u00A9#{Time.now.year} LFE"
|
54
52
|
|
55
|
-
class Cli
|
56
|
-
|
57
|
-
include Servitude::Cli
|
58
|
-
|
53
|
+
class Cli < Servitude::Cli::Service
|
59
54
|
end
|
60
55
|
|
61
56
|
class Server
|
@@ -95,4 +90,4 @@ module EchoServer
|
|
95
90
|
end
|
96
91
|
end
|
97
92
|
|
98
|
-
EchoServer::Cli.
|
93
|
+
EchoServer::Cli.start
|
@@ -3,8 +3,6 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'servitude'
|
5
5
|
require 'socket'
|
6
|
-
require 'trollop'
|
7
|
-
require 'pry'
|
8
6
|
|
9
7
|
# The echo server accepts with CLI builds on the 2_echo_server example, addiing a command line interface.
|
10
8
|
#
|
@@ -21,7 +19,7 @@ require 'pry'
|
|
21
19
|
#
|
22
20
|
# Usage:
|
23
21
|
# Help:
|
24
|
-
# bundle exec examples/4_echo_server_with_cli_daemon_and_config
|
22
|
+
# bundle exec examples/4_echo_server_with_cli_daemon_and_config help
|
25
23
|
#
|
26
24
|
# Start (interactive):
|
27
25
|
# bundle exec examples/4_echo_server_with_cli_daemon_and_config start -i
|
@@ -52,10 +50,7 @@ module EchoServer
|
|
52
50
|
default_thread_count: nil,
|
53
51
|
version_copyright: "v#{VERSION} \u00A9#{Time.now.year} LFE"
|
54
52
|
|
55
|
-
class Cli
|
56
|
-
|
57
|
-
include Servitude::Cli
|
58
|
-
|
53
|
+
class Cli < Servitude::Cli::Service
|
59
54
|
end
|
60
55
|
|
61
56
|
class Server
|
@@ -95,4 +90,4 @@ module EchoServer
|
|
95
90
|
end
|
96
91
|
end
|
97
92
|
|
98
|
-
EchoServer::Cli.
|
93
|
+
EchoServer::Cli.start
|
@@ -3,8 +3,6 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'servitude'
|
5
5
|
require 'socket'
|
6
|
-
require 'trollop'
|
7
|
-
require 'pry'
|
8
6
|
|
9
7
|
# The echo server accepts with CLI builds on the 2_echo_server example, addiing a command line interface.
|
10
8
|
#
|
@@ -21,7 +19,7 @@ require 'pry'
|
|
21
19
|
#
|
22
20
|
# Usage:
|
23
21
|
# Help:
|
24
|
-
# bundle exec examples/5_echo_server_with_cli_daemon_and_env_config
|
22
|
+
# bundle exec examples/5_echo_server_with_cli_daemon_and_env_config help
|
25
23
|
#
|
26
24
|
# Start (interactive):
|
27
25
|
# bundle exec examples/5_echo_server_with_cli_daemon_and_env_config start -i
|
@@ -60,10 +58,7 @@ module EchoServer
|
|
60
58
|
default_thread_count: nil,
|
61
59
|
version_copyright: "v#{VERSION} \u00A9#{Time.now.year} LFE"
|
62
60
|
|
63
|
-
class Cli
|
64
|
-
|
65
|
-
include Servitude::Cli
|
66
|
-
|
61
|
+
class Cli < Servitude::Cli::Service
|
67
62
|
end
|
68
63
|
|
69
64
|
class Server
|
@@ -111,4 +106,4 @@ module EchoServer
|
|
111
106
|
end
|
112
107
|
end
|
113
108
|
|
114
|
-
EchoServer::Cli.
|
109
|
+
EchoServer::Cli.start
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Servitude
|
2
|
+
module Cli
|
3
|
+
class Service < Base
|
4
|
+
|
5
|
+
def self.environment_option
|
6
|
+
method_option :environment, desc: "The environment to execute in", type: :string, aliases: '-e'
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.pid_option
|
10
|
+
method_option :pid, desc: "The path for the PID file", type: :string, default: Servitude::NS::DEFAULT_PID_PATH
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.common_start_options
|
14
|
+
method_option :config, type: :string, aliases: '-c', desc: "The path for the config file", default: Servitude::NS::DEFAULT_CONFIG_PATH
|
15
|
+
environment_option
|
16
|
+
method_option :log_level, desc: "The log level", type: :string, aliases: '-o', default: 'info'
|
17
|
+
method_option :log, desc: "The path for the log file", type: :string, aliases: '-l', default: Servitude::NS::DEFAULT_LOG_PATH
|
18
|
+
method_option :threads, desc: "The number of threads", type: :numeric, aliases: '-t', default: Servitude::NS::DEFAULT_THREAD_COUNT
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "restart", "Stop and start the server"
|
22
|
+
common_start_options
|
23
|
+
pid_option
|
24
|
+
def restart
|
25
|
+
stop
|
26
|
+
start_daemon
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "start", "Start the server"
|
30
|
+
common_start_options
|
31
|
+
pid_option
|
32
|
+
method_option :interactive, type: :boolean, aliases: '-i', desc: "Start the server in interactive mode", default: false
|
33
|
+
def start
|
34
|
+
if options[:interactive]
|
35
|
+
start_interactive
|
36
|
+
else
|
37
|
+
start_daemon
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
no_commands do
|
42
|
+
|
43
|
+
def start_interactive
|
44
|
+
server = Servitude::NS::Server.new( options.merge( use_config: Servitude::NS::USE_CONFIG, log: 'STDOUT' ))
|
45
|
+
server.start
|
46
|
+
end
|
47
|
+
|
48
|
+
def start_daemon
|
49
|
+
server = Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG ))
|
50
|
+
server.start
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "status", "Check the status of the server daemon"
|
56
|
+
pid_option
|
57
|
+
def status
|
58
|
+
Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG )).status
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "stop", "Stop the server daemon"
|
62
|
+
pid_option
|
63
|
+
def stop
|
64
|
+
server = Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG ))
|
65
|
+
server.stop
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.handle_no_command_error( name )
|
69
|
+
puts "Unrecognized command: #{name}"
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/servitude/cli.rb
CHANGED
@@ -1,135 +1,14 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'servitude'
|
3
|
-
require '
|
3
|
+
require 'thor'
|
4
4
|
require 'yell'
|
5
5
|
|
6
|
+
|
6
7
|
module Servitude
|
7
8
|
module Cli
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
attr_reader :cmd,
|
12
|
-
:options
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
SUB_COMMANDS = %w(
|
17
|
-
restart
|
18
|
-
start
|
19
|
-
status
|
20
|
-
stop
|
21
|
-
)
|
22
|
-
|
23
|
-
def initialize( args )
|
24
|
-
unless Servitude.boot_called
|
25
|
-
raise 'You must call boot before starting server'
|
26
|
-
end
|
27
|
-
|
28
|
-
Trollop::options do
|
29
|
-
version Servitude::NS::VERSION_COPYRIGHT
|
30
|
-
banner <<-EOS
|
31
|
-
#{Servitude::NS::APP_NAME} #{Servitude::NS::VERSION_COPYRIGHT}
|
32
|
-
|
33
|
-
Usage:
|
34
|
-
#{Servitude::NS::APP_ID} [command] [options]
|
35
|
-
|
36
|
-
commands:
|
37
|
-
#{SUB_COMMANDS.map { |sub_cmd| " #{sub_cmd}" }.join( "\n" )}
|
38
|
-
|
39
|
-
(For help with a command: #{Servitude::NS::APP_ID} [command] -h)
|
40
|
-
|
41
|
-
options:
|
42
|
-
EOS
|
43
|
-
stop_on SUB_COMMANDS
|
44
|
-
end
|
45
|
-
|
46
|
-
# Get the sub-command and its options
|
47
|
-
#
|
48
|
-
@cmd = ARGV.shift || ''
|
49
|
-
@options = case( cmd )
|
50
|
-
when ''
|
51
|
-
Trollop::die 'No command provided'
|
52
|
-
when "restart"
|
53
|
-
Trollop::options do
|
54
|
-
opt :config, "The path for the config file", :type => String, :short => '-c', :default => Servitude::NS::DEFAULT_CONFIG_PATH
|
55
|
-
opt :environment, "The log level", :type => String, :short => '-e'
|
56
|
-
opt :log_level, "The log level", :type => String, :default => 'info', :short => '-o'
|
57
|
-
opt :log, "The path for the log file", :type => String, :short => '-l', :default => Servitude::NS::DEFAULT_LOG_PATH
|
58
|
-
opt :pid, "The path for the PID file", :type => String, :default => Servitude::NS::DEFAULT_PID_PATH
|
59
|
-
opt :threads, "The number of threads", :type => Integer, :default => Servitude::NS::DEFAULT_THREAD_COUNT, :short => '-t'
|
60
|
-
end
|
61
|
-
when "start"
|
62
|
-
Trollop::options do
|
63
|
-
opt :config, "The path for the config file", :type => String, :short => '-c', :default => Servitude::NS::DEFAULT_CONFIG_PATH
|
64
|
-
opt :environment, "The log level", :type => String, :short => '-e'
|
65
|
-
opt :interactive, "Execute the server in interactive mode", :short => '-i'
|
66
|
-
opt :log_level, "The log level", :type => String, :default => 'info', :short => '-o'
|
67
|
-
opt :log, "The path for the log file", :type => String, :short => '-l', :default => Servitude::NS::DEFAULT_LOG_PATH
|
68
|
-
opt :pid, "The path for the PID file", :type => String, :default => Servitude::NS::DEFAULT_PID_PATH
|
69
|
-
opt :threads, "The number of threads", :type => Integer, :default => Servitude::NS::DEFAULT_THREAD_COUNT, :short => '-t'
|
70
|
-
end
|
71
|
-
when "status"
|
72
|
-
Trollop::options do
|
73
|
-
opt :pid, "The path for the PID file", :type => String, :default => Servitude::NS::DEFAULT_PID_PATH
|
74
|
-
end
|
75
|
-
when "stop"
|
76
|
-
Trollop::options do
|
77
|
-
opt :pid, "The path for the PID file", :type => String, :default => Servitude::NS::DEFAULT_PID_PATH
|
78
|
-
end
|
79
|
-
else
|
80
|
-
Trollop::die "unknown command #{cmd.inspect}"
|
81
|
-
end
|
82
|
-
|
83
|
-
if cmd == 'start'
|
84
|
-
unless options[:interactive]
|
85
|
-
Trollop::die( :config, "is required when running as daemon" ) unless options[:config]
|
86
|
-
Trollop::die( :log, "is required when running as daemon" ) unless options[:log]
|
87
|
-
Trollop::die( :pid, "is required when running as daemon" ) unless options[:pid]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
if %w(restart status stop).include?( cmd )
|
92
|
-
Trollop::die( :pid, "is required" ) unless options[:pid]
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def run
|
97
|
-
send( cmd )
|
98
|
-
end
|
99
|
-
|
100
|
-
protected
|
101
|
-
|
102
|
-
def start
|
103
|
-
if options[:interactive]
|
104
|
-
start_interactive
|
105
|
-
else
|
106
|
-
start_daemon
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def start_interactive
|
111
|
-
server = Servitude::NS::Server.new( options.merge( use_config: Servitude::NS::USE_CONFIG, log: 'STDOUT' ))
|
112
|
-
server.start
|
113
|
-
end
|
114
|
-
|
115
|
-
def start_daemon
|
116
|
-
server = Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG ))
|
117
|
-
server.start
|
118
|
-
end
|
119
|
-
|
120
|
-
def stop
|
121
|
-
server = Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG ))
|
122
|
-
server.stop
|
123
|
-
end
|
124
|
-
|
125
|
-
def restart
|
126
|
-
stop
|
127
|
-
start_daemon
|
128
|
-
end
|
129
|
-
|
130
|
-
def status
|
131
|
-
Servitude::Daemon.new( options.merge( use_config: Servitude::NS::USE_CONFIG )).status
|
132
|
-
end
|
10
|
+
autoload :Base, 'servitude/cli/base'
|
11
|
+
autoload :Service, 'servitude/cli/service'
|
133
12
|
|
134
13
|
end
|
135
14
|
end
|
data/lib/servitude/version.rb
CHANGED
data/servitude.gemspec
CHANGED
@@ -28,6 +28,6 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency "hooks", "~> 0"
|
29
29
|
spec.add_dependency "oj", "~> 2"
|
30
30
|
spec.add_dependency "rainbow", "~> 2"
|
31
|
-
spec.add_dependency "
|
31
|
+
spec.add_dependency "thor"
|
32
32
|
spec.add_dependency "yell", "~> 1"
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: servitude
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Harrelson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -137,19 +137,19 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '2'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: thor
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '0'
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
152
|
+
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: yell
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,6 +191,8 @@ files:
|
|
191
191
|
- lib/servitude/actor.rb
|
192
192
|
- lib/servitude/base.rb
|
193
193
|
- lib/servitude/cli.rb
|
194
|
+
- lib/servitude/cli/base.rb
|
195
|
+
- lib/servitude/cli/service.rb
|
194
196
|
- lib/servitude/config_helper.rb
|
195
197
|
- lib/servitude/configuration.rb
|
196
198
|
- lib/servitude/daemon.rb
|