ap4r 0.1.0 → 0.1.1
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/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
|
-
|