ap4r 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -3
- data/MIT-LICENSE +1 -1
- data/README +196 -52
- data/Rakefile +133 -15
- data/bin/ap4r_setup +6 -0
- data/config/ap4r_settings.rb +5 -0
- data/{configs → config}/log4r.yaml +0 -0
- data/{configs → config}/queues.cfg +0 -0
- data/config/queues_disk.cfg +15 -0
- data/{configs → config}/queues_mysql.cfg +6 -2
- data/lib/ap4r.rb +7 -9
- data/lib/ap4r/message_store_ext.rb +26 -0
- data/lib/ap4r/multi_queue.rb +19 -0
- data/lib/ap4r/queue_manager_ext.rb +18 -4
- data/lib/ap4r/queue_manager_ext_debug.rb +13 -0
- data/lib/ap4r/retention_history.rb +7 -0
- data/lib/ap4r/script/base.rb +11 -0
- data/lib/ap4r/script/queue_manager_control.rb +27 -0
- data/lib/ap4r/script/setup.rb +17 -0
- data/lib/ap4r/script/workspace_generator.rb +65 -0
- data/lib/ap4r/start_with_log4r.rb +4 -0
- data/lib/ap4r/util/irm.rb +93 -0
- data/lib/ap4r/util/loc.rb +12 -0
- data/lib/ap4r/util/queue_client.rb +123 -0
- data/lib/ap4r/version.rb +15 -0
- data/rails_plugin/ap4r/init.rb +10 -0
- data/rails_plugin/ap4r/lib/async_controller.rb +64 -0
- data/script/irm +4 -0
- data/{bin → script}/loop.cmd +0 -0
- data/{bin → script}/loop.rb +0 -0
- data/script/start +5 -0
- data/script/stop +1 -0
- metadata +53 -31
- data/bin/ap4r +0 -0
- data/bin/irm.cmd +0 -2
- data/bin/queues.cmd +0 -2
- data/bin/queues.rb +0 -3
- data/bin/stop.cmd +0 -1
- data/configs/queues_disk.cfg +0 -15
- data/lib/ap4r/utils/irm.rb +0 -109
- data/lib/ap4r/utils/loc.rb +0 -8
@@ -0,0 +1,12 @@
|
|
1
|
+
# Author:: Shunichi Shinohara
|
2
|
+
# Copyright:: Copyright (c) 2006 Future System Consulting Corp.
|
3
|
+
# Licence:: MIT Licence
|
4
|
+
|
5
|
+
require 'active_support'
|
6
|
+
require 'code_statistics'
|
7
|
+
|
8
|
+
CodeStatistics.new(
|
9
|
+
["Core Sources", "lib"],
|
10
|
+
["Rails plugin", "rails_plugin"],
|
11
|
+
["Scripts", "script"],
|
12
|
+
).to_s
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# Author:: Shunichi Shinohara
|
2
|
+
# Copyright:: Copyright (c) 2006 Future System Consulting Corp.
|
3
|
+
# Licence:: MIT Licence
|
4
|
+
|
5
|
+
module AP4R::Util #:nodoc:
|
6
|
+
# This class is TOO EXPERIMENTAL
|
7
|
+
#
|
8
|
+
# Client class for +QueueManager+.
|
9
|
+
# This class wraps DRb client and provides some helper methods.
|
10
|
+
# TODO: many drb calls are executed in a method call such as +list_queues+.
|
11
|
+
# ParseTree is perhaps needed.
|
12
|
+
# TODO: +Proc+ object cannnot be passed via DRb. ParseTree also?
|
13
|
+
class QueueClient
|
14
|
+
CONFIG_DIR_DEFAULT = 'config'
|
15
|
+
CONFIG_FILE_DEFAULT = 'queues.cfg'
|
16
|
+
|
17
|
+
HOST_DEFAULT = 'localhost'
|
18
|
+
|
19
|
+
DEFAULT_QUEUE_PREFIX = 'queue.test.'
|
20
|
+
DEFAULT_QUEUE_SUFFIX = 'default'
|
21
|
+
DEFAULT_MULTI_QUEUE = DEFAULT_QUEUE_PREFIX + '*'
|
22
|
+
|
23
|
+
@@config_dir = CONFIG_DIR_DEFAULT
|
24
|
+
cattr_accessor :config_dir
|
25
|
+
|
26
|
+
attr_reader :name, :config
|
27
|
+
|
28
|
+
# Creates new client from a configuration file.
|
29
|
+
# Some options are supported.
|
30
|
+
# * <tt>:host</tt>
|
31
|
+
# * <tt>:port</tt>
|
32
|
+
# * <tt>:name</tt>
|
33
|
+
def initialize(config_file = CONFIG_FILE_DEFAULT,
|
34
|
+
options = {},
|
35
|
+
config_dir = @@config_dir)
|
36
|
+
@config = ReliableMsg::Config.new(File.join(config_dir, config_file))
|
37
|
+
@config.load_no_create
|
38
|
+
@host = options[:host] || @config.drb['host'] || 'localhost'
|
39
|
+
@port = options[:port] || @config.drb['port'] || 6438
|
40
|
+
@name = (options[:name]).to_sym
|
41
|
+
@qm = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def queue_manager
|
45
|
+
@qm ||= DRb::DRbObject.new_with_uri(drb_uri)
|
46
|
+
end
|
47
|
+
|
48
|
+
def queue_manager_stop
|
49
|
+
manager = queue_manager
|
50
|
+
begin
|
51
|
+
manager.stop
|
52
|
+
rescue DRb::DRbConnError => error
|
53
|
+
error.message
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def list_queues
|
58
|
+
qm.store.queues.keys
|
59
|
+
end
|
60
|
+
|
61
|
+
def list_messages(suffix = DEFAULT_QUEUE_SUFFIX,
|
62
|
+
prefix = DEFAULT_QUEUE_PREFIX)
|
63
|
+
qm.store.queues[prefix.to_s + suffix.to_s]
|
64
|
+
end
|
65
|
+
|
66
|
+
def make_queue(suffix = DEFAULT_QUEUE_SUFFIX,
|
67
|
+
prefix = DEFAULT_QUEUE_PREFIX)
|
68
|
+
ReliableMsg::Queue.new(prefix.to_s + suffix.to_s, :drb_uri => drb_uri)
|
69
|
+
end
|
70
|
+
|
71
|
+
def queue_get(suffix = DEFAULT_QUEUE_SUFFIX, selector = nil,
|
72
|
+
prefix = DEFAULT_QUEUE_PREFIX, &block)
|
73
|
+
q = make_queue suffix, prefix
|
74
|
+
q.get selector, &block
|
75
|
+
end
|
76
|
+
|
77
|
+
def queue_put(suffix = DEFAULT_QUEUE_SUFFIX,
|
78
|
+
message = nil, prefix = DEFAULT_QUEUE_PREFIX,
|
79
|
+
headers = nil)
|
80
|
+
unless message
|
81
|
+
t = Time.now
|
82
|
+
message = sprintf("test message %s,%s",
|
83
|
+
t.strftime("%Y/%m/%d %H:%M:%S"), t.usec)
|
84
|
+
end
|
85
|
+
q = make_queue suffix, prefix
|
86
|
+
q.put message, headers
|
87
|
+
end
|
88
|
+
|
89
|
+
def make_multi_queue multi_queue = DEFAULT_MULTI_QUEUE
|
90
|
+
ReliableMsg::MultiQueue.new(multi_queue.to_s, :drb_uri => drb_uri)
|
91
|
+
end
|
92
|
+
|
93
|
+
def multi_queue_get(selector = nil,
|
94
|
+
multi_queue = DEFAULT_MULTI_QUEUE, &block)
|
95
|
+
mq = make_multi_queue multi_queue, :drb_uri => irm_drb_uri
|
96
|
+
mq.get selector, &block
|
97
|
+
end
|
98
|
+
|
99
|
+
def drb_uri
|
100
|
+
"druby://#{@host}:#{@port}"
|
101
|
+
end
|
102
|
+
|
103
|
+
def to_s
|
104
|
+
@name.to_s
|
105
|
+
end
|
106
|
+
|
107
|
+
alias qm queue_manager
|
108
|
+
alias stop queue_manager_stop
|
109
|
+
|
110
|
+
alias lsq list_queues
|
111
|
+
alias lsm list_messages
|
112
|
+
|
113
|
+
alias mkq make_queue
|
114
|
+
alias qg queue_get
|
115
|
+
alias qp queue_put
|
116
|
+
|
117
|
+
alias mkmq make_multi_queue
|
118
|
+
alias mqg multi_queue_get
|
119
|
+
|
120
|
+
alias uri drb_uri
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
data/lib/ap4r/version.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Author:: Kiwamu Kato
|
2
|
+
# Copyright:: Copyright (c) 2006 Future System Consulting Corp.
|
3
|
+
# Licence:: MIT Licence
|
4
|
+
|
5
|
+
module AP4R
|
6
|
+
# Defines version number contants, and provides
|
7
|
+
# its string expression.
|
8
|
+
module VERSION #:nodoc:
|
9
|
+
MAJOR = 0
|
10
|
+
MINOR = 1
|
11
|
+
TINY = 1
|
12
|
+
|
13
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Author:: Shunichi Shinohara
|
2
|
+
# Copyright:: Copyright (c) 2006 Future System Consulting Corp.
|
3
|
+
# Licence:: MIT Licence
|
4
|
+
|
5
|
+
require 'reliable-msg'
|
6
|
+
|
7
|
+
module AP4R
|
8
|
+
# This +asyncController+ is the Rails plugin for asynchronous processing.
|
9
|
+
# Asynchronous logics are called via various protocols, such as XML-RPC,
|
10
|
+
# SOAP, HTTP PUT, and more. Now implemented jsut as XML-RPC.
|
11
|
+
#
|
12
|
+
# Examples: The part of calling next asynchronous logics in a controller in the HelloWorld Sample.
|
13
|
+
#
|
14
|
+
# req = WorldRequest.new
|
15
|
+
# req.world_id = 1
|
16
|
+
# req.message = "World"
|
17
|
+
#
|
18
|
+
# req_hash = {}
|
19
|
+
# req.each_pair{|k,v| req_hash[k.to_sym]=v}
|
20
|
+
#
|
21
|
+
# render :action => 'response'
|
22
|
+
#
|
23
|
+
# async_dispatch(req_hash,
|
24
|
+
# :controller => 'async_world', :action => 'execute',
|
25
|
+
# :mode => :XMLRPC)
|
26
|
+
#
|
27
|
+
module AsyncController
|
28
|
+
#DEFAULT_DISPATCH_MODE = :SOAP
|
29
|
+
DEFAULT_DISPATCH_MODE = :XMLRPC
|
30
|
+
|
31
|
+
# Queue a message for next asynchronous logic. Some options are supported.
|
32
|
+
# * :controller (name of next logic)
|
33
|
+
# * :action (name of next logic)
|
34
|
+
# * :mode (protocol)
|
35
|
+
def async_dispatch(object, options = {})
|
36
|
+
target_url = url_for(:controller => options[:controller],
|
37
|
+
:action => nil)
|
38
|
+
options[:mode] = options[:mode] || dispatch_mode
|
39
|
+
options[:target_url] = target_url_name(target_url, options[:mode])
|
40
|
+
target_action = action_api_name(options.delete(:action), options[:mode])
|
41
|
+
options[:target_action] = target_action
|
42
|
+
|
43
|
+
queue_name = "queue.".concat(options[:controller].to_s).
|
44
|
+
concat('.').concat(target_action)
|
45
|
+
|
46
|
+
q = ReliableMsg::Queue.new(queue_name)
|
47
|
+
mid = q.put(object, options)
|
48
|
+
mid
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def dispatch_mode
|
53
|
+
DEFAULT_DISPATCH_MODE
|
54
|
+
end
|
55
|
+
|
56
|
+
def target_url_name(target_url, mode)
|
57
|
+
target_url + "/api"
|
58
|
+
end
|
59
|
+
|
60
|
+
def action_api_name(action_method_name, mode)
|
61
|
+
action_method_name.capitalize
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/script/irm
ADDED
data/{bin → script}/loop.cmd
RENAMED
File without changes
|
data/{bin → script}/loop.rb
RENAMED
File without changes
|
data/script/start
ADDED
data/script/stop
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
metadata
CHANGED
@@ -3,18 +3,17 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ap4r
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2006-10-05 00:00:00 +09:00
|
8
8
|
summary: Asynchronous Processing for Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
|
-
email:
|
11
|
+
email: shinohara.shunichi@future.co.jp, kato.kiwamu@future.co.jp
|
12
12
|
homepage: http://rubyforge.org/projects/ap4r/
|
13
13
|
rubyforge_project: ap4r
|
14
14
|
description: Asynchronous Processing for Ruby.
|
15
15
|
autorequire: ap4r.rb
|
16
|
-
default_executable:
|
17
|
-
- ap4r
|
16
|
+
default_executable: ap4r_setup
|
18
17
|
bindir: bin
|
19
18
|
has_rdoc: true
|
20
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
@@ -27,19 +26,33 @@ platform: ruby
|
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
29
28
|
authors:
|
30
|
-
- Shunichi Shinohara
|
29
|
+
- Shunichi Shinohara
|
30
|
+
- Kiwamu Kato
|
31
31
|
files:
|
32
|
-
- bin
|
33
|
-
-
|
34
|
-
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
-
|
32
|
+
- bin
|
33
|
+
- CHANGELOG
|
34
|
+
- config
|
35
|
+
- lib
|
36
|
+
- MIT-LICENSE
|
37
|
+
- rails_plugin
|
38
|
+
- Rakefile
|
39
|
+
- README
|
40
|
+
- script
|
41
|
+
- bin/ap4r_setup
|
42
|
+
- config/ap4r_settings.rb
|
43
|
+
- config/log4r.yaml
|
44
|
+
- config/queues.cfg
|
45
|
+
- config/queues_disk.cfg
|
46
|
+
- config/queues_mysql.cfg
|
47
|
+
- rails_plugin/ap4r
|
48
|
+
- rails_plugin/ap4r/init.rb
|
49
|
+
- rails_plugin/ap4r/lib
|
50
|
+
- rails_plugin/ap4r/lib/async_controller.rb
|
51
|
+
- script/irm
|
52
|
+
- script/loop.cmd
|
53
|
+
- script/loop.rb
|
54
|
+
- script/start
|
55
|
+
- script/stop
|
43
56
|
- lib/ap4r
|
44
57
|
- lib/ap4r.rb
|
45
58
|
- lib/ap4r/message_store_ext.rb
|
@@ -47,26 +60,35 @@ files:
|
|
47
60
|
- lib/ap4r/queue_manager_ext.rb
|
48
61
|
- lib/ap4r/queue_manager_ext_debug.rb
|
49
62
|
- lib/ap4r/retention_history.rb
|
63
|
+
- lib/ap4r/script
|
50
64
|
- lib/ap4r/start_with_log4r.rb
|
51
|
-
- lib/ap4r/
|
52
|
-
- lib/ap4r/
|
53
|
-
- lib/ap4r/
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
65
|
+
- lib/ap4r/util
|
66
|
+
- lib/ap4r/version.rb
|
67
|
+
- lib/ap4r/script/base.rb
|
68
|
+
- lib/ap4r/script/queue_manager_control.rb
|
69
|
+
- lib/ap4r/script/setup.rb
|
70
|
+
- lib/ap4r/script/workspace_generator.rb
|
71
|
+
- lib/ap4r/util/irm.rb
|
72
|
+
- lib/ap4r/util/loc.rb
|
73
|
+
- lib/ap4r/util/queue_client.rb
|
58
74
|
test_files: []
|
59
75
|
|
60
|
-
rdoc_options:
|
61
|
-
|
62
|
-
|
63
|
-
|
76
|
+
rdoc_options:
|
77
|
+
- --main
|
78
|
+
- README
|
79
|
+
- --title
|
80
|
+
- Asynchronous Processing for Ruby
|
81
|
+
- --line-numbers
|
82
|
+
extra_rdoc_files:
|
83
|
+
- README
|
84
|
+
- CHANGELOG
|
85
|
+
- rails_plugin
|
64
86
|
executables:
|
65
|
-
-
|
87
|
+
- ap4r_setup
|
66
88
|
extensions: []
|
67
89
|
|
68
|
-
requirements:
|
69
|
-
|
90
|
+
requirements: []
|
91
|
+
|
70
92
|
dependencies:
|
71
93
|
- !ruby/object:Gem::Dependency
|
72
94
|
name: reliable-msg
|
data/bin/ap4r
DELETED
File without changes
|
data/bin/irm.cmd
DELETED
data/bin/queues.cmd
DELETED
data/bin/queues.rb
DELETED
data/bin/stop.cmd
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
./queues manager stop
|
data/configs/queues_disk.cfg
DELETED
data/lib/ap4r/utils/irm.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
# interactive reliable message
|
2
|
-
# version 0.1.1
|
3
|
-
# written by shino
|
4
|
-
|
5
|
-
require 'reliable-msg-hack'
|
6
|
-
|
7
|
-
require 'pathname'
|
8
|
-
require 'uri'
|
9
|
-
|
10
|
-
$KCODE = 'u'
|
11
|
-
|
12
|
-
$config = 'queues.cfg'
|
13
|
-
$drb_host = 'localhost'
|
14
|
-
$drb_port = 6438
|
15
|
-
|
16
|
-
module Kernel
|
17
|
-
DEFAULT_QUEUE_PREFIX = 'queue.test.'
|
18
|
-
DEFAULT_QUEUE_SUFFIX = 'default'
|
19
|
-
DEFAULT_MULTI_QUEUE = DEFAULT_QUEUE_PREFIX + '*'
|
20
|
-
|
21
|
-
def irm_queue_manager config = $config
|
22
|
-
raise "NOT exist : #{config}" unless Pathname.new(config).exist?
|
23
|
-
DRb::DRbObject.new_with_uri irm_drb_uri
|
24
|
-
end
|
25
|
-
|
26
|
-
def irm_queue_manager_stop config = $config
|
27
|
-
manager = irm_queue_manager config
|
28
|
-
begin
|
29
|
-
manager.stop
|
30
|
-
rescue DRb::DRbConnError => error
|
31
|
-
error.message
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
def irm_list_queues
|
37
|
-
qm.store.queues.keys
|
38
|
-
end
|
39
|
-
|
40
|
-
def irm_list_messages suffix = DEFAULT_QUEUE_SUFFIX,
|
41
|
-
prefix = DEFAULT_QUEUE_PREFIX
|
42
|
-
qm.store.queues[prefix.to_s + suffix.to_s]
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
def irm_make_queue suffix = DEFAULT_QUEUE_SUFFIX,
|
47
|
-
prefix = DEFAULT_QUEUE_PREFIX
|
48
|
-
ReliableMsg::Queue.new prefix.to_s + suffix.to_s, :drb_uri => irm_drb_uri
|
49
|
-
end
|
50
|
-
|
51
|
-
def irm_queue_get suffix = DEFAULT_QUEUE_SUFFIX, selector = nil,
|
52
|
-
prefix = DEFAULT_QUEUE_PREFIX, &block
|
53
|
-
q = irm_make_queue suffix, prefix
|
54
|
-
q.get selector, &block
|
55
|
-
end
|
56
|
-
|
57
|
-
def irm_queue_put suffix = DEFAULT_QUEUE_SUFFIX,
|
58
|
-
message = nil, prefix = DEFAULT_QUEUE_PREFIX,
|
59
|
-
headers = nil
|
60
|
-
unless message
|
61
|
-
t = Time.now
|
62
|
-
message = sprintf("test message %s,%s",
|
63
|
-
t.strftime("%Y/%m/%d %H:%M:%S"), t.usec)
|
64
|
-
end
|
65
|
-
q = irm_make_queue suffix, prefix
|
66
|
-
q.put message, headers
|
67
|
-
end
|
68
|
-
|
69
|
-
def irm_make_multi_queue multi_queue = DEFAULT_MULTI_QUEUE
|
70
|
-
ReliableMsg::MultiQueue.new multi_queue.to_s
|
71
|
-
end
|
72
|
-
|
73
|
-
def irm_multi_queue_get selector = nil,
|
74
|
-
multi_queue = DEFAULT_MULTI_QUEUE, &block
|
75
|
-
mq = irm_make_multi_queue multi_queue, :drb_uri => irm_drb_uri
|
76
|
-
mq.get selector, &block
|
77
|
-
end
|
78
|
-
|
79
|
-
def irm_set_config arg
|
80
|
-
if arg.is_a? Integer
|
81
|
-
$config = "queues#{arg.to_s}.cfg"
|
82
|
-
else
|
83
|
-
$config = arg.to_s
|
84
|
-
end
|
85
|
-
config = ReliableMsg::Config.new($config)
|
86
|
-
config.load_no_create
|
87
|
-
$drb_port = config.drb['port']
|
88
|
-
end
|
89
|
-
|
90
|
-
def irm_drb_uri
|
91
|
-
"druby://#{$drb_host}:#{$drb_port}"
|
92
|
-
end
|
93
|
-
|
94
|
-
alias qm irm_queue_manager
|
95
|
-
alias qm_stop irm_queue_manager_stop
|
96
|
-
|
97
|
-
alias lsq irm_list_queues
|
98
|
-
alias lsm irm_list_messages
|
99
|
-
|
100
|
-
alias mkq irm_make_queue
|
101
|
-
alias qg irm_queue_get
|
102
|
-
alias qp irm_queue_put
|
103
|
-
alias mkmq irm_make_multi_queue
|
104
|
-
alias mqg irm_multi_queue_get
|
105
|
-
|
106
|
-
alias cfg irm_set_config
|
107
|
-
alias uri irm_drb_uri
|
108
|
-
end
|
109
|
-
|