modern_times 0.2.11 → 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.
- data/README.rdoc +114 -80
- data/VERSION +1 -1
- data/examples/advanced_requestor/README +15 -0
- data/examples/advanced_requestor/base_request_worker.rb +13 -0
- data/examples/advanced_requestor/char_count_worker.rb +11 -0
- data/examples/advanced_requestor/exception_raiser_worker.rb +10 -0
- data/examples/advanced_requestor/length_worker.rb +9 -0
- data/examples/advanced_requestor/manager.rb +22 -0
- data/examples/advanced_requestor/modern_times.yml +32 -0
- data/examples/advanced_requestor/print_worker.rb +9 -0
- data/examples/advanced_requestor/publish.rb +46 -0
- data/examples/advanced_requestor/reverse_worker.rb +9 -0
- data/examples/advanced_requestor/triple_worker.rb +9 -0
- data/examples/requestor/request.rb +3 -3
- data/examples/requestor/reverse_echo_worker.rb +1 -2
- data/lib/modern_times.rb +1 -1
- data/lib/modern_times/base/supervisor.rb +2 -0
- data/lib/modern_times/base/worker.rb +5 -3
- data/lib/modern_times/jms.rb +2 -0
- data/lib/modern_times/jms/connection.rb +7 -0
- data/lib/modern_times/jms/publish_handle.rb +219 -0
- data/lib/modern_times/jms/publisher.rb +55 -29
- data/lib/modern_times/{jms_requestor/worker.rb → jms/request_worker.rb} +29 -51
- data/lib/modern_times/jms/supervisor.rb +30 -0
- data/lib/modern_times/jms/supervisor_mbean.rb +17 -1
- data/lib/modern_times/jms/worker.rb +43 -40
- data/lib/modern_times/manager.rb +6 -2
- data/lib/modern_times/marshal_strategy.rb +14 -17
- data/lib/modern_times/marshal_strategy/bson.rb +2 -0
- data/lib/modern_times/marshal_strategy/json.rb +3 -0
- data/lib/modern_times/marshal_strategy/ruby.rb +3 -0
- data/lib/modern_times/marshal_strategy/string.rb +3 -0
- data/lib/modern_times/marshal_strategy/yaml.rb +3 -0
- data/lib/modern_times/railsable.rb +7 -14
- data/lib/modern_times/time_track.rb +84 -0
- data/test/jms.yml +1 -0
- data/test/jms_failure_test.rb +128 -0
- data/test/jms_requestor_block_test.rb +275 -0
- data/test/jms_requestor_test.rb +71 -96
- data/test/jms_test.rb +59 -78
- data/test/marshal_strategy_test.rb +1 -3
- metadata +29 -14
- data/examples/exception_test/bar_worker.rb +0 -8
- data/examples/exception_test/base_worker.rb +0 -23
- data/examples/exception_test/manager.rb +0 -11
- data/lib/modern_times/jms_requestor.rb +0 -10
- data/lib/modern_times/jms_requestor/request_handle.rb +0 -42
- data/lib/modern_times/jms_requestor/requestor.rb +0 -56
- data/lib/modern_times/jms_requestor/supervisor.rb +0 -45
- data/lib/modern_times/jms_requestor/supervisor_mbean.rb +0 -21
@@ -22,7 +22,7 @@ module SpockMarshalStrategy
|
|
22
22
|
(i.to_i * 24).to_s
|
23
23
|
end
|
24
24
|
|
25
|
-
# Change
|
25
|
+
# Change hours to days
|
26
26
|
def self.unmarshal(str)
|
27
27
|
str.to_i / 24
|
28
28
|
end
|
@@ -39,7 +39,6 @@ class MarshalStrategyTest < Test::Unit::TestCase
|
|
39
39
|
@string = ModernTimes::MarshalStrategy.find(:string)
|
40
40
|
@yaml = ModernTimes::MarshalStrategy.find(:string)
|
41
41
|
@spock = ModernTimes::MarshalStrategy.find(:spock)
|
42
|
-
@spock2 = ModernTimes::MarshalStrategy.find(SpockMarshalStrategy)
|
43
42
|
end
|
44
43
|
|
45
44
|
should 'marshal and unmarshal correctly' do
|
@@ -53,7 +52,6 @@ class MarshalStrategyTest < Test::Unit::TestCase
|
|
53
52
|
assert_equal str, @string.unmarshal(@string.marshal(str))
|
54
53
|
assert_equal obj.hello, @ruby.unmarshal(@ruby.marshal(obj)).hello
|
55
54
|
assert_equal i, @spock.unmarshal(@spock.marshal(i))
|
56
|
-
assert_equal i, @spock2.unmarshal(@spock2.marshal(i))
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: modern_times
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brad Pardee
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-05-
|
14
|
+
date: 2011-05-17 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -53,6 +53,17 @@ files:
|
|
53
53
|
- Rakefile
|
54
54
|
- VERSION
|
55
55
|
- examples/README
|
56
|
+
- examples/advanced_requestor/README
|
57
|
+
- examples/advanced_requestor/base_request_worker.rb
|
58
|
+
- examples/advanced_requestor/char_count_worker.rb
|
59
|
+
- examples/advanced_requestor/exception_raiser_worker.rb
|
60
|
+
- examples/advanced_requestor/length_worker.rb
|
61
|
+
- examples/advanced_requestor/manager.rb
|
62
|
+
- examples/advanced_requestor/modern_times.yml
|
63
|
+
- examples/advanced_requestor/print_worker.rb
|
64
|
+
- examples/advanced_requestor/publish.rb
|
65
|
+
- examples/advanced_requestor/reverse_worker.rb
|
66
|
+
- examples/advanced_requestor/triple_worker.rb
|
56
67
|
- examples/consumer/consumer.rb
|
57
68
|
- examples/jms.yml
|
58
69
|
- examples/requestor/.gitignore
|
@@ -74,16 +85,12 @@ files:
|
|
74
85
|
- lib/modern_times/jms.rb
|
75
86
|
- lib/modern_times/jms/connection.rb
|
76
87
|
- lib/modern_times/jms/consumer.rb
|
88
|
+
- lib/modern_times/jms/publish_handle.rb
|
77
89
|
- lib/modern_times/jms/publisher.rb
|
90
|
+
- lib/modern_times/jms/request_worker.rb
|
78
91
|
- lib/modern_times/jms/supervisor.rb
|
79
92
|
- lib/modern_times/jms/supervisor_mbean.rb
|
80
93
|
- lib/modern_times/jms/worker.rb
|
81
|
-
- lib/modern_times/jms_requestor.rb
|
82
|
-
- lib/modern_times/jms_requestor/request_handle.rb
|
83
|
-
- lib/modern_times/jms_requestor/requestor.rb
|
84
|
-
- lib/modern_times/jms_requestor/supervisor.rb
|
85
|
-
- lib/modern_times/jms_requestor/supervisor_mbean.rb
|
86
|
-
- lib/modern_times/jms_requestor/worker.rb
|
87
94
|
- lib/modern_times/loggable.rb
|
88
95
|
- lib/modern_times/manager.rb
|
89
96
|
- lib/modern_times/manager_mbean.rb
|
@@ -95,14 +102,14 @@ files:
|
|
95
102
|
- lib/modern_times/marshal_strategy/yaml.rb
|
96
103
|
- lib/modern_times/railsable.rb
|
97
104
|
- lib/modern_times/remote_exception.rb
|
105
|
+
- lib/modern_times/time_track.rb
|
98
106
|
- test/base_test.rb
|
99
107
|
- test/jms.yml
|
108
|
+
- test/jms_failure_test.rb
|
109
|
+
- test/jms_requestor_block_test.rb
|
100
110
|
- test/jms_requestor_test.rb
|
101
111
|
- test/jms_test.rb
|
102
112
|
- test/marshal_strategy_test.rb
|
103
|
-
- examples/exception_test/bar_worker.rb
|
104
|
-
- examples/exception_test/base_worker.rb
|
105
|
-
- examples/exception_test/manager.rb
|
106
113
|
has_rdoc: true
|
107
114
|
homepage: http://github.com/ClarityServices/modern_times
|
108
115
|
licenses: []
|
@@ -132,10 +139,16 @@ signing_key:
|
|
132
139
|
specification_version: 3
|
133
140
|
summary: Asynchronous task library
|
134
141
|
test_files:
|
142
|
+
- examples/advanced_requestor/base_request_worker.rb
|
143
|
+
- examples/advanced_requestor/char_count_worker.rb
|
144
|
+
- examples/advanced_requestor/exception_raiser_worker.rb
|
145
|
+
- examples/advanced_requestor/length_worker.rb
|
146
|
+
- examples/advanced_requestor/manager.rb
|
147
|
+
- examples/advanced_requestor/print_worker.rb
|
148
|
+
- examples/advanced_requestor/publish.rb
|
149
|
+
- examples/advanced_requestor/reverse_worker.rb
|
150
|
+
- examples/advanced_requestor/triple_worker.rb
|
135
151
|
- examples/consumer/consumer.rb
|
136
|
-
- examples/exception_test/bar_worker.rb
|
137
|
-
- examples/exception_test/base_worker.rb
|
138
|
-
- examples/exception_test/manager.rb
|
139
152
|
- examples/requestor/manager.rb
|
140
153
|
- examples/requestor/request.rb
|
141
154
|
- examples/requestor/reverse_echo_worker.rb
|
@@ -144,6 +157,8 @@ test_files:
|
|
144
157
|
- examples/simple/manager.rb
|
145
158
|
- examples/simple/publish.rb
|
146
159
|
- test/base_test.rb
|
160
|
+
- test/jms_failure_test.rb
|
161
|
+
- test/jms_requestor_block_test.rb
|
147
162
|
- test/jms_requestor_test.rb
|
148
163
|
- test/jms_test.rb
|
149
164
|
- test/marshal_strategy_test.rb
|
@@ -1,23 +0,0 @@
|
|
1
|
-
class BaseWorker
|
2
|
-
include ModernTimes::Base::Worker
|
3
|
-
|
4
|
-
def start
|
5
|
-
while true do
|
6
|
-
sleep 1
|
7
|
-
perform
|
8
|
-
end
|
9
|
-
rescue Exception => e
|
10
|
-
puts "Caught #{e.inspect}"
|
11
|
-
end
|
12
|
-
|
13
|
-
def perform
|
14
|
-
raise "Need to override perform method in #{self.class.name}"
|
15
|
-
end
|
16
|
-
|
17
|
-
def stop
|
18
|
-
end
|
19
|
-
|
20
|
-
def status
|
21
|
-
"Need to override status method in #{self.class.name}"
|
22
|
-
end
|
23
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# Allow examples to be run in-place without requiring a gem install
|
2
|
-
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
|
3
|
-
|
4
|
-
require 'rubygems'
|
5
|
-
require 'modern_times'
|
6
|
-
require 'bar_worker'
|
7
|
-
|
8
|
-
manager = ModernTimes::Manager.new
|
9
|
-
manager.stop_on_signal
|
10
|
-
manager.add(BarWorker, 2, {})
|
11
|
-
manager.join
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'modern_times/jms_requestor/request_handle'
|
2
|
-
require 'modern_times/jms_requestor/requestor'
|
3
|
-
require 'modern_times/jms_requestor/supervisor_mbean'
|
4
|
-
require 'modern_times/jms_requestor/supervisor'
|
5
|
-
require 'modern_times/jms_requestor/worker'
|
6
|
-
|
7
|
-
module ModernTimes
|
8
|
-
module JMSRequestor
|
9
|
-
end
|
10
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'timeout'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module ModernTimes
|
5
|
-
module JMSRequestor
|
6
|
-
class RequestHandle
|
7
|
-
def initialize(requestor, jms_message_id, start, timeout, &reconstruct_block)
|
8
|
-
@requestor = requestor
|
9
|
-
@reply_queue = requestor.reply_queue
|
10
|
-
@jms_message_id = jms_message_id
|
11
|
-
@start = start
|
12
|
-
@timeout = timeout
|
13
|
-
@reconstruct_block = reconstruct_block
|
14
|
-
end
|
15
|
-
|
16
|
-
def read_response
|
17
|
-
response = nil
|
18
|
-
opts = { :destination => @reply_queue, :selector => "JMSCorrelationID = '#{@jms_message_id}'" }
|
19
|
-
#opts = { :destination => @reply_queue }
|
20
|
-
#opts = {:queue_name => 'foobarzulu'}
|
21
|
-
ModernTimes::JMS::Connection.session_pool.consumer(opts) do |session, consumer|
|
22
|
-
leftover_timeout = ((@start + @timeout - Time.now) * 1000).to_i
|
23
|
-
if leftover_timeout > 100
|
24
|
-
response = consumer.receive(leftover_timeout)
|
25
|
-
else
|
26
|
-
#response = consumer.receive_no_wait
|
27
|
-
response = consumer.receive(100)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
raise Timeout::Error, "Timeout waiting for for response from message #{@jms_message_id} on queue #{@reply_queue}" unless response
|
31
|
-
if error_yaml = response['Exception']
|
32
|
-
raise ModernTimes::RemoteException.from_hash(YAML.load(error_yaml))
|
33
|
-
end
|
34
|
-
response = @requestor.marshaler.unmarshal(response.data)
|
35
|
-
if @reconstruct_block
|
36
|
-
response = @reconstruct_block.call(response)
|
37
|
-
end
|
38
|
-
return response
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
module ModernTimes
|
2
|
-
module JMSRequestor
|
3
|
-
class Requestor < ModernTimes::JMS::Publisher
|
4
|
-
attr_reader :reply_queue
|
5
|
-
|
6
|
-
@@dummy_requesting = false
|
7
|
-
|
8
|
-
def initialize(options)
|
9
|
-
super
|
10
|
-
return if @@dummy_requesting
|
11
|
-
raise "ModernTimes::JMS::Connection has not been initialized" unless ModernTimes::JMS::Connection.inited?
|
12
|
-
ModernTimes::JMS::Connection.session_pool.session do |session|
|
13
|
-
@reply_queue = session.create_destination(:queue_name => :temporary)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def request(object, timeout, &reconstruct_block)
|
18
|
-
start = Time.now
|
19
|
-
jms_message_id = publish(object, :jms_reply_to => @reply_queue)
|
20
|
-
return RequestHandle.new(self, jms_message_id, start, timeout, &reconstruct_block)
|
21
|
-
end
|
22
|
-
|
23
|
-
# For non-configured Rails projects, The above request method will be overridden to
|
24
|
-
# call this request method instead which calls all the JMS workers that
|
25
|
-
# operate on the given address.
|
26
|
-
def dummy_request(object, timeout, &reconstruct_block)
|
27
|
-
@@worker_instances.each do |worker|
|
28
|
-
if worker.kind_of?(Worker) && ModernTimes::JMS.same_destination?(producer_options, worker.class.destination_options)
|
29
|
-
ModernTimes.logger.debug "Dummy requesting #{object} to #{worker}"
|
30
|
-
response = worker.request(object)
|
31
|
-
if reconstruct_block
|
32
|
-
response = reconstruct_block.call(response)
|
33
|
-
end
|
34
|
-
return OpenStruct.new(:read_response => response)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
raise "No worker to handle #{address} request of #{object}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.setup_dummy_requesting(workers)
|
41
|
-
require 'ostruct'
|
42
|
-
@@dummy_requesting = true
|
43
|
-
@@worker_instances = workers.map {|worker| worker.new}
|
44
|
-
alias_method :real_request, :request
|
45
|
-
alias_method :request, :dummy_request
|
46
|
-
end
|
47
|
-
|
48
|
-
# For testing
|
49
|
-
def self.clear_dummy_requesting
|
50
|
-
@@dummy_requesting = false
|
51
|
-
alias_method :dummy_request, :request
|
52
|
-
alias_method :request, :real_request
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module ModernTimes
|
2
|
-
module JMSRequestor
|
3
|
-
class Supervisor < ModernTimes::JMS::Supervisor
|
4
|
-
|
5
|
-
def initialize(manager, worker_name, supervisor_options, worker_options)
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def average_response_time
|
10
|
-
count = 0
|
11
|
-
total = 0.0
|
12
|
-
workers.each do |w|
|
13
|
-
pair = w.total_time
|
14
|
-
count += pair.first
|
15
|
-
total += pair.last
|
16
|
-
end
|
17
|
-
return 0.0 if count == 0
|
18
|
-
return total / count
|
19
|
-
end
|
20
|
-
|
21
|
-
def min_response_time
|
22
|
-
min_time = nil
|
23
|
-
workers.each do |w|
|
24
|
-
wmin_time = w.min_time
|
25
|
-
min_time = wmin_time if wmin_time && (!min_time || wmin_time < min_time)
|
26
|
-
end
|
27
|
-
return min_time || 0.0
|
28
|
-
end
|
29
|
-
|
30
|
-
def max_response_time
|
31
|
-
max_time = 0.0
|
32
|
-
workers.each do |w|
|
33
|
-
wmax_time = w.max_time
|
34
|
-
max_time = wmax_time if wmax_time > max_time
|
35
|
-
end
|
36
|
-
return max_time
|
37
|
-
end
|
38
|
-
|
39
|
-
# Make JMSRequestor::SupervisorMBean our mbean
|
40
|
-
def create_mbean(domain)
|
41
|
-
SupervisorMBean.new(mbean_name(domain), mbean_description, self, {})
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module ModernTimes
|
2
|
-
module JMSRequestor
|
3
|
-
class SupervisorMBean < ModernTimes::JMS::SupervisorMBean
|
4
|
-
r_attribute :average_response_time, :float, 'Average response time', :average_response_time
|
5
|
-
r_attribute :min_response_time, :float, 'Minimum response time', :min_response_time
|
6
|
-
r_attribute :max_response_time, :float, 'Maximum response time', :max_response_time
|
7
|
-
|
8
|
-
def average_response_time
|
9
|
-
supervisor.average_response_time
|
10
|
-
end
|
11
|
-
|
12
|
-
def min_response_time
|
13
|
-
supervisor.min_response_time
|
14
|
-
end
|
15
|
-
|
16
|
-
def max_response_time
|
17
|
-
supervisor.max_response_time
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|