drbqs 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/bin/drbqs-node +100 -0
- data/drbqs.gemspec +11 -2
- data/lib/drbqs.rb +2 -0
- data/lib/drbqs/acl_file.rb +13 -0
- data/lib/drbqs/server.rb +20 -5
- data/spec/acl_file_spec.rb +9 -0
- data/spec/data/acl.txt +3 -0
- data/spec/server_spec.rb +17 -0
- metadata +13 -6
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/bin/drbqs-node
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'drbqs'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
Version = '0.0.1'
|
7
|
+
|
8
|
+
help_message =<<HELP
|
9
|
+
#{File.basename(__FILE__)} [uri] [process_number]
|
10
|
+
HELP
|
11
|
+
|
12
|
+
LOG_PREFIX_DEFAULT = 'drbqs_node'
|
13
|
+
LOG_LEVEL_DEFAULT = Logger::ERROR
|
14
|
+
|
15
|
+
options = {
|
16
|
+
:log_prefix => LOG_PREFIX_DEFAULT,
|
17
|
+
:log_level => LOG_LEVEL_DEFAULT,
|
18
|
+
:load => []
|
19
|
+
}
|
20
|
+
|
21
|
+
begin
|
22
|
+
OptionParser.new(help_message) do |opt|
|
23
|
+
opt.on('-l', '--load FILE', String, 'Add a file to load.') do |v|
|
24
|
+
options[:load] << File.expand_path(v)
|
25
|
+
end
|
26
|
+
opt.on('--log-prefix STR', String, "Set the prefix of log files. The default is '#{LOG_PREFIX_DEFAULT}'.") do |v|
|
27
|
+
options[:log_prefix] = v
|
28
|
+
end
|
29
|
+
opt.on('--log-level LEVEL', String,
|
30
|
+
"Set the log level. The value accepts 'fatal', 'error', 'warn', 'info', and 'debug'. The default is 'error'.") do |v|
|
31
|
+
if /^(fatal)|(error)|(warn)|(info)|(debug)$/i =~ v
|
32
|
+
options[:log_level] = eval("Logger::#{v.upcase}")
|
33
|
+
else
|
34
|
+
raise "Invalid log level."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
opt.on('--log-stdout', 'Use stdout for outputting logs. This option cancels --log-prefix.') do |v|
|
38
|
+
options[:log_prefix] = nil
|
39
|
+
end
|
40
|
+
opt.parse!(ARGV)
|
41
|
+
end
|
42
|
+
rescue OptionParser::InvalidOption
|
43
|
+
$stderr.print <<MES
|
44
|
+
error: Invalid Option
|
45
|
+
#{help_message}
|
46
|
+
MES
|
47
|
+
exit(2)
|
48
|
+
rescue OptionParser::InvalidArgument
|
49
|
+
$stderr.print <<MES
|
50
|
+
error: Invalid Argument
|
51
|
+
#{help_message}
|
52
|
+
MES
|
53
|
+
exit(2)
|
54
|
+
end
|
55
|
+
|
56
|
+
if ARGV.size > 2
|
57
|
+
raise "Too many arguments. Please refer '#{File.basename(__FILE__)} -h'."
|
58
|
+
end
|
59
|
+
|
60
|
+
process_num = 1
|
61
|
+
uri = "druby://localhost:#{DRbQS::ROOT_DEFAULT_PORT}"
|
62
|
+
|
63
|
+
ARGV.each do |arg|
|
64
|
+
if /^\d+$/ =~ arg
|
65
|
+
process_num = arg.to_i
|
66
|
+
else
|
67
|
+
uri = arg
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
options[:load].each do |v|
|
72
|
+
puts "load #{v}"
|
73
|
+
load v
|
74
|
+
end
|
75
|
+
|
76
|
+
puts "Connect to #{uri}"
|
77
|
+
puts "Execute #{process_num} processes"
|
78
|
+
|
79
|
+
if options[:log_prefix]
|
80
|
+
if /\/$/ =~ options[:log_prefix]
|
81
|
+
options[:log_prefix] += 'out'
|
82
|
+
end
|
83
|
+
options[:log_prefix] = File.expand_path(options[:log_prefix])
|
84
|
+
FileUtils.mkdir_p(File.dirname(options[:log_prefix]))
|
85
|
+
end
|
86
|
+
|
87
|
+
process_num.times do |i|
|
88
|
+
fork do
|
89
|
+
if options[:log_prefix]
|
90
|
+
logfile = "#{options[:log_prefix]}_#{Time.now.strftime("%Y%m%d%H%M")}_#{Process.pid}.log"
|
91
|
+
else
|
92
|
+
logfile = STDOUT
|
93
|
+
end
|
94
|
+
client = DRbQS::Client.new(uri, :log_level => options[:log_level], :log_file => logfile)
|
95
|
+
client.connect
|
96
|
+
client.calculate
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
Process.waitall
|
data/drbqs.gemspec
CHANGED
@@ -5,13 +5,15 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{drbqs}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Takayuki YAMAGUCHI"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-28}
|
13
|
+
s.default_executable = %q{drbqs-node}
|
13
14
|
s.description = %q{Queuing system over network that is implemented by dRuby.}
|
14
15
|
s.email = %q{d@ytak.info}
|
16
|
+
s.executables = ["drbqs-node"]
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"LICENSE.txt",
|
17
19
|
"README.rdoc"
|
@@ -24,15 +26,20 @@ Gem::Specification.new do |s|
|
|
24
26
|
"README.rdoc",
|
25
27
|
"Rakefile",
|
26
28
|
"VERSION",
|
29
|
+
"bin/drbqs-node",
|
27
30
|
"drbqs.gemspec",
|
28
31
|
"lib/drbqs.rb",
|
32
|
+
"lib/drbqs/acl_file.rb",
|
29
33
|
"lib/drbqs/client.rb",
|
30
34
|
"lib/drbqs/connection.rb",
|
31
35
|
"lib/drbqs/message.rb",
|
32
36
|
"lib/drbqs/queue.rb",
|
33
37
|
"lib/drbqs/server.rb",
|
34
38
|
"lib/drbqs/task_client.rb",
|
39
|
+
"spec/acl_file_spec.rb",
|
40
|
+
"spec/data/acl.txt",
|
35
41
|
"spec/drbqs_spec.rb",
|
42
|
+
"spec/server_spec.rb",
|
36
43
|
"spec/spec_helper.rb"
|
37
44
|
]
|
38
45
|
s.homepage = %q{http://github.com/ytaka/drbqs}
|
@@ -41,7 +48,9 @@ Gem::Specification.new do |s|
|
|
41
48
|
s.rubygems_version = %q{1.5.2}
|
42
49
|
s.summary = %q{dRuby Queueing System}
|
43
50
|
s.test_files = [
|
51
|
+
"spec/acl_file_spec.rb",
|
44
52
|
"spec/drbqs_spec.rb",
|
53
|
+
"spec/server_spec.rb",
|
45
54
|
"spec/spec_helper.rb"
|
46
55
|
]
|
47
56
|
|
data/lib/drbqs.rb
CHANGED
data/lib/drbqs/server.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'drbqs/message'
|
2
2
|
require 'drbqs/queue'
|
3
|
+
require 'drbqs/acl_file'
|
3
4
|
|
4
5
|
module DRbQS
|
5
6
|
class CheckAlive
|
@@ -17,27 +18,41 @@ module DRbQS
|
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
|
-
ROOT_DEFAULT_PORT = 13500
|
21
|
-
|
22
21
|
class Server
|
23
22
|
attr_reader :queue
|
24
23
|
|
25
24
|
def initialize(opts = {})
|
26
25
|
@port = opts[:port] || ROOT_DEFAULT_PORT
|
27
|
-
@acl = opts[:acl]
|
26
|
+
@acl = acl_init(opts[:acl])
|
28
27
|
@ts = {
|
29
28
|
:message => Rinda::TupleSpace.new,
|
30
29
|
:queue => Rinda::TupleSpace.new,
|
31
30
|
:result => Rinda::TupleSpace.new
|
32
31
|
}
|
33
|
-
|
34
|
-
|
32
|
+
if opts[:log_file]
|
33
|
+
@logger = Logger.new(opts[:log_file])
|
34
|
+
@logger.level = opts[:log_level] || Logger::ERROR
|
35
|
+
else
|
36
|
+
@logger = nil
|
37
|
+
end
|
35
38
|
@message = MessageServer.new(@ts[:message], @logger)
|
36
39
|
@queue= QueueServer.new(@ts[:queue], @ts[:result], @logger)
|
37
40
|
@check_alive = CheckAlive.new(opts[:check_alive])
|
38
41
|
@empty_queue_hook = nil
|
39
42
|
end
|
40
43
|
|
44
|
+
def acl_init(acl_arg)
|
45
|
+
case acl_arg
|
46
|
+
when Array
|
47
|
+
ACL.new(acl_arg)
|
48
|
+
when String
|
49
|
+
ACLFile.load(acl_arg)
|
50
|
+
else
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
private :acl_init
|
55
|
+
|
41
56
|
def start
|
42
57
|
DRb.install_acl(@acl) if @acl
|
43
58
|
uri = "druby://:#{@port}"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'drbqs/acl_file'
|
3
|
+
|
4
|
+
describe DRbQS::ACLFile do
|
5
|
+
it "should return an ACL object" do
|
6
|
+
acl = DRbQS::ACLFile.load(File.dirname(__FILE__) + '/data/acl.txt')
|
7
|
+
acl.should be_an_instance_of ACL
|
8
|
+
end
|
9
|
+
end
|
data/spec/data/acl.txt
ADDED
data/spec/server_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe DRbQS::Server do
|
4
|
+
context "when we setup ACL objects" do
|
5
|
+
it "should initialize an ACL object by ACLFile.load" do
|
6
|
+
path = File.dirname(__FILE__) + '/data/acl.txt'
|
7
|
+
DRbQS::ACLFile.should_receive(:load).with(path)
|
8
|
+
DRbQS::Server.new(:acl => path, :log_file => nil)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should initialize an ACL object by ACL.new" do
|
12
|
+
ary = ['deny', 'all', 'allow', 'localhost']
|
13
|
+
ACL.should_receive(:new).with(ary)
|
14
|
+
DRbQS::Server.new(:acl => ary, :log_file => nil)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: drbqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Takayuki YAMAGUCHI
|
@@ -10,8 +10,8 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-02-28 00:00:00 +09:00
|
14
|
+
default_executable: drbqs-node
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
@@ -70,8 +70,8 @@ dependencies:
|
|
70
70
|
version_requirements: *id005
|
71
71
|
description: Queuing system over network that is implemented by dRuby.
|
72
72
|
email: d@ytak.info
|
73
|
-
executables:
|
74
|
-
|
73
|
+
executables:
|
74
|
+
- drbqs-node
|
75
75
|
extensions: []
|
76
76
|
|
77
77
|
extra_rdoc_files:
|
@@ -85,15 +85,20 @@ files:
|
|
85
85
|
- README.rdoc
|
86
86
|
- Rakefile
|
87
87
|
- VERSION
|
88
|
+
- bin/drbqs-node
|
88
89
|
- drbqs.gemspec
|
89
90
|
- lib/drbqs.rb
|
91
|
+
- lib/drbqs/acl_file.rb
|
90
92
|
- lib/drbqs/client.rb
|
91
93
|
- lib/drbqs/connection.rb
|
92
94
|
- lib/drbqs/message.rb
|
93
95
|
- lib/drbqs/queue.rb
|
94
96
|
- lib/drbqs/server.rb
|
95
97
|
- lib/drbqs/task_client.rb
|
98
|
+
- spec/acl_file_spec.rb
|
99
|
+
- spec/data/acl.txt
|
96
100
|
- spec/drbqs_spec.rb
|
101
|
+
- spec/server_spec.rb
|
97
102
|
- spec/spec_helper.rb
|
98
103
|
has_rdoc: true
|
99
104
|
homepage: http://github.com/ytaka/drbqs
|
@@ -109,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
114
|
requirements:
|
110
115
|
- - ">="
|
111
116
|
- !ruby/object:Gem::Version
|
112
|
-
hash:
|
117
|
+
hash: 4288822500604112980
|
113
118
|
segments:
|
114
119
|
- 0
|
115
120
|
version: "0"
|
@@ -127,5 +132,7 @@ signing_key:
|
|
127
132
|
specification_version: 3
|
128
133
|
summary: dRuby Queueing System
|
129
134
|
test_files:
|
135
|
+
- spec/acl_file_spec.rb
|
130
136
|
- spec/drbqs_spec.rb
|
137
|
+
- spec/server_spec.rb
|
131
138
|
- spec/spec_helper.rb
|