isono 0.2.3 → 0.2.6
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/Rakefile +1 -1
- data/isono.gemspec +11 -13
- data/lib/isono/amqp_client.rb +1 -2
- data/lib/isono/node_modules/job_worker.rb +26 -27
- data/lib/isono/node_modules/rpc_channel.rb +76 -45
- data/lib/isono/runner/rpc_server.rb +0 -1
- data/lib/isono/util.rb +1 -1
- data/lib/isono/version.rb +1 -1
- metadata +9 -11
data/Rakefile
CHANGED
data/isono.gemspec
CHANGED
|
@@ -2,35 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{isono}
|
|
5
|
-
s.version = "0.2.
|
|
5
|
+
s.version = "0.2.6"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
|
-
s.authors = [
|
|
9
|
-
s.date = %q{2011-
|
|
10
|
-
s.
|
|
11
|
-
s.
|
|
12
|
-
s.
|
|
13
|
-
s.files = [".gitignore", "LICENSE", "NOTICE", "Rakefile", "bin/cli", "isono.gemspec", "lib/ext/shellwords.rb", "lib/isono.rb", "lib/isono/amqp_client.rb", "lib/isono/daemonize.rb", "lib/isono/event_delegate_context.rb", "lib/isono/event_observable.rb", "lib/isono/logger.rb", "lib/isono/manifest.rb", "lib/isono/messaging_client.rb", "lib/isono/models/event_log.rb", "lib/isono/models/job_state.rb", "lib/isono/models/node_state.rb", "lib/isono/models/resource_instance.rb", "lib/isono/node.rb", "lib/isono/node_modules/base.rb", "lib/isono/node_modules/data_store.rb", "lib/isono/node_modules/event_channel.rb", "lib/isono/node_modules/event_logger.rb", "lib/isono/node_modules/job_channel.rb", "lib/isono/node_modules/job_collector.rb", "lib/isono/node_modules/job_worker.rb", "lib/isono/node_modules/node_collector.rb", "lib/isono/node_modules/node_heartbeat.rb", "lib/isono/node_modules/rpc_channel.rb", "lib/isono/rack.rb", "lib/isono/rack/builder.rb", "lib/isono/rack/data_store.rb", "lib/isono/rack/job.rb", "lib/isono/rack/map.rb", "lib/isono/rack/object_method.rb", "lib/isono/rack/proc.rb", "lib/isono/rack/thread_pass.rb", "lib/isono/resource_manifest.rb", "lib/isono/runner/base.rb", "lib/isono/runner/cli.rb", "lib/isono/runner/rpc_server.rb", "lib/isono/serializer.rb", "lib/isono/thread_pool.rb", "lib/isono/util.rb", "lib/isono/version.rb", "spec/amqp_client_spec.rb", "spec/event_observable_spec.rb", "spec/file_channel_spec.rb", "spec/job_channel_spec.rb", "spec/logger_spec.rb", "spec/manifest_spec.rb", "spec/node_spec.rb", "spec/resource_loader_spec.rb", "spec/rpc_channel_spec.rb", "spec/spec_helper.rb", "spec/thread_pool_spec.rb", "spec/util_spec.rb", "tasks/load_resource_manifest.rake"]
|
|
8
|
+
s.authors = [%q{axsh Ltd.}, %q{Masahiro Fujiwara}]
|
|
9
|
+
s.date = %q{2011-08-23}
|
|
10
|
+
s.email = [%q{dev@axsh.net}, %q{m-fujiwara@axsh.net}]
|
|
11
|
+
s.executables = [%q{cli}]
|
|
12
|
+
s.files = [%q{.gitignore}, %q{LICENSE}, %q{NOTICE}, %q{Rakefile}, %q{bin/cli}, %q{isono.gemspec}, %q{lib/ext/shellwords.rb}, %q{lib/isono.rb}, %q{lib/isono/amqp_client.rb}, %q{lib/isono/daemonize.rb}, %q{lib/isono/event_delegate_context.rb}, %q{lib/isono/event_observable.rb}, %q{lib/isono/logger.rb}, %q{lib/isono/manifest.rb}, %q{lib/isono/messaging_client.rb}, %q{lib/isono/models/event_log.rb}, %q{lib/isono/models/job_state.rb}, %q{lib/isono/models/node_state.rb}, %q{lib/isono/models/resource_instance.rb}, %q{lib/isono/node.rb}, %q{lib/isono/node_modules/base.rb}, %q{lib/isono/node_modules/data_store.rb}, %q{lib/isono/node_modules/event_channel.rb}, %q{lib/isono/node_modules/event_logger.rb}, %q{lib/isono/node_modules/job_channel.rb}, %q{lib/isono/node_modules/job_collector.rb}, %q{lib/isono/node_modules/job_worker.rb}, %q{lib/isono/node_modules/node_collector.rb}, %q{lib/isono/node_modules/node_heartbeat.rb}, %q{lib/isono/node_modules/rpc_channel.rb}, %q{lib/isono/rack.rb}, %q{lib/isono/rack/builder.rb}, %q{lib/isono/rack/data_store.rb}, %q{lib/isono/rack/job.rb}, %q{lib/isono/rack/map.rb}, %q{lib/isono/rack/object_method.rb}, %q{lib/isono/rack/proc.rb}, %q{lib/isono/rack/thread_pass.rb}, %q{lib/isono/resource_manifest.rb}, %q{lib/isono/runner/base.rb}, %q{lib/isono/runner/cli.rb}, %q{lib/isono/runner/rpc_server.rb}, %q{lib/isono/serializer.rb}, %q{lib/isono/thread_pool.rb}, %q{lib/isono/util.rb}, %q{lib/isono/version.rb}, %q{spec/amqp_client_spec.rb}, %q{spec/event_observable_spec.rb}, %q{spec/file_channel_spec.rb}, %q{spec/job_channel_spec.rb}, %q{spec/logger_spec.rb}, %q{spec/manifest_spec.rb}, %q{spec/node_spec.rb}, %q{spec/resource_loader_spec.rb}, %q{spec/rpc_channel_spec.rb}, %q{spec/spec_helper.rb}, %q{spec/thread_pool_spec.rb}, %q{spec/util_spec.rb}, %q{tasks/load_resource_manifest.rake}]
|
|
14
13
|
s.homepage = %q{http://github.com/axsh/isono}
|
|
15
|
-
s.require_paths = [
|
|
14
|
+
s.require_paths = [%q{lib}]
|
|
16
15
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
|
17
16
|
s.rubyforge_project = %q{isono}
|
|
18
|
-
s.rubygems_version = %q{1.
|
|
17
|
+
s.rubygems_version = %q{1.8.6}
|
|
19
18
|
s.summary = %q{Messaging and agent fabric}
|
|
20
19
|
|
|
21
20
|
if s.respond_to? :specification_version then
|
|
22
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
23
21
|
s.specification_version = 3
|
|
24
22
|
|
|
25
23
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
26
|
-
s.add_runtime_dependency(%q<amqp>, ["= 0.7.
|
|
24
|
+
s.add_runtime_dependency(%q<amqp>, ["= 0.7.4"])
|
|
27
25
|
s.add_runtime_dependency(%q<eventmachine>, ["= 1.0.0.beta.3"])
|
|
28
26
|
s.add_runtime_dependency(%q<statemachine>, [">= 1.0.0"])
|
|
29
27
|
s.add_runtime_dependency(%q<log4r>, [">= 0"])
|
|
30
28
|
s.add_development_dependency(%q<bacon>, [">= 0"])
|
|
31
29
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
|
32
30
|
else
|
|
33
|
-
s.add_dependency(%q<amqp>, ["= 0.7.
|
|
31
|
+
s.add_dependency(%q<amqp>, ["= 0.7.4"])
|
|
34
32
|
s.add_dependency(%q<eventmachine>, ["= 1.0.0.beta.3"])
|
|
35
33
|
s.add_dependency(%q<statemachine>, [">= 1.0.0"])
|
|
36
34
|
s.add_dependency(%q<log4r>, [">= 0"])
|
|
@@ -38,7 +36,7 @@ Gem::Specification.new do |s|
|
|
|
38
36
|
s.add_dependency(%q<rake>, [">= 0"])
|
|
39
37
|
end
|
|
40
38
|
else
|
|
41
|
-
s.add_dependency(%q<amqp>, ["= 0.7.
|
|
39
|
+
s.add_dependency(%q<amqp>, ["= 0.7.4"])
|
|
42
40
|
s.add_dependency(%q<eventmachine>, ["= 1.0.0.beta.3"])
|
|
43
41
|
s.add_dependency(%q<statemachine>, [">= 1.0.0"])
|
|
44
42
|
s.add_dependency(%q<log4r>, [">= 0"])
|
data/lib/isono/amqp_client.rb
CHANGED
|
@@ -4,7 +4,6 @@ require 'thread'
|
|
|
4
4
|
|
|
5
5
|
require 'eventmachine'
|
|
6
6
|
require 'amqp'
|
|
7
|
-
require 'mq'
|
|
8
7
|
|
|
9
8
|
require 'uri/generic'
|
|
10
9
|
|
|
@@ -155,7 +154,7 @@ module Isono
|
|
|
155
154
|
# @note Do not have to close by user. Channel close is performed
|
|
156
155
|
# as part of connection close.
|
|
157
156
|
def create_channel
|
|
158
|
-
|
|
157
|
+
AMQP::Channel.new(@amqp_client)
|
|
159
158
|
end
|
|
160
159
|
|
|
161
160
|
# Publish a message to the designated exchange.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
require 'statemachine'
|
|
4
|
-
|
|
5
3
|
module Isono
|
|
6
4
|
module NodeModules
|
|
7
5
|
class JobWorker < Base
|
|
@@ -55,14 +53,14 @@ module Isono
|
|
|
55
53
|
@thread_pool.pass {
|
|
56
54
|
begin
|
|
57
55
|
Thread.current[JOB_CTX_KEY]=job
|
|
58
|
-
job.
|
|
56
|
+
job.process_event(:on_start)
|
|
59
57
|
rpc.request('job-collector', 'update', job.to_hash) { |req|
|
|
60
58
|
req.oneshot = true
|
|
61
59
|
}
|
|
62
60
|
job.run_cb.call
|
|
63
|
-
job.
|
|
61
|
+
job.process_event(:on_done)
|
|
64
62
|
rescue Exception => e
|
|
65
|
-
job.
|
|
63
|
+
job.process_event(:on_fail, e)
|
|
66
64
|
if job.fail_cb
|
|
67
65
|
job.fail_cb.arity == 1 ? job.fail_cb.call(e) : job.fail_cb.call
|
|
68
66
|
end
|
|
@@ -109,35 +107,46 @@ module Isono
|
|
|
109
107
|
|
|
110
108
|
class JobContext < OpenStruct
|
|
111
109
|
include Logger
|
|
112
|
-
attr_reader :stm
|
|
113
110
|
attr_accessor :run_cb, :fail_cb
|
|
111
|
+
attr_reader :state
|
|
114
112
|
|
|
115
113
|
def initialize()
|
|
116
114
|
super({:job_id=>Util.gen_id,
|
|
117
115
|
:parent_job_id=>nil,
|
|
118
116
|
:started_at=>nil,
|
|
119
117
|
:finished_at=>nil,
|
|
118
|
+
:finish_status=>nil,
|
|
120
119
|
})
|
|
121
120
|
|
|
122
121
|
@run_cb=proc{}
|
|
123
122
|
@fail_cb=nil
|
|
124
123
|
|
|
125
|
-
@
|
|
126
|
-
startstate :init
|
|
127
|
-
trans :init, :on_start, :running, :on_start
|
|
128
|
-
trans :running, :on_done, :done, :on_done
|
|
129
|
-
trans :running, :on_fail, :failed, :on_fail
|
|
130
|
-
trans :init, :on_fail, :failed, :on_fail
|
|
131
|
-
}
|
|
132
|
-
@stm.context = self
|
|
124
|
+
@state = :init
|
|
133
125
|
end
|
|
134
126
|
|
|
135
|
-
def
|
|
136
|
-
|
|
127
|
+
def process_event(ev, *args)
|
|
128
|
+
case [ev,@state]
|
|
129
|
+
when [:on_start, :init]
|
|
130
|
+
@state = :running
|
|
131
|
+
self.started_at = Time.now
|
|
132
|
+
logger.info("Job start #{job_id}")
|
|
133
|
+
when [:on_done, :running]
|
|
134
|
+
@state = :done
|
|
135
|
+
self.finished_at = Time.now
|
|
136
|
+
logger.info("Job complete #{job_id}: #{elapsed_time} sec")
|
|
137
|
+
when [:on_fail, :running]
|
|
138
|
+
@state = :failed
|
|
139
|
+
on_fail(args[0])
|
|
140
|
+
when [:on_fail, :init]
|
|
141
|
+
@state = :failed
|
|
142
|
+
on_fail(args[0])
|
|
143
|
+
else
|
|
144
|
+
raise "Unknown state transition: #{ev}, #{@state}"
|
|
145
|
+
end
|
|
137
146
|
end
|
|
138
147
|
|
|
139
148
|
def to_hash
|
|
140
|
-
@table.dup.merge({:state=>@
|
|
149
|
+
@table.dup.merge({:state=>@state})
|
|
141
150
|
end
|
|
142
151
|
|
|
143
152
|
def elapsed_time
|
|
@@ -149,16 +158,6 @@ module Isono
|
|
|
149
158
|
end
|
|
150
159
|
|
|
151
160
|
private
|
|
152
|
-
def on_start
|
|
153
|
-
self.started_at = Time.now
|
|
154
|
-
logger.info("Job start #{job_id}")
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def on_done
|
|
158
|
-
self.finished_at = Time.now
|
|
159
|
-
logger.info("Job complete #{job_id}: #{elapsed_time} sec")
|
|
160
|
-
end
|
|
161
|
-
|
|
162
161
|
def on_fail(e)
|
|
163
162
|
self.finished_at = Time.now
|
|
164
163
|
logger.error("Job failed #{job_id}: #{e}")
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
3
|
require 'thread'
|
|
4
|
-
require 'statemachine'
|
|
5
4
|
require 'ostruct'
|
|
6
5
|
|
|
7
6
|
module Isono
|
|
@@ -16,13 +15,27 @@ module Isono
|
|
|
16
15
|
config_section do
|
|
17
16
|
desc "default timeout duration in second until receive response."
|
|
18
17
|
timeout_sec (60*3).to_f
|
|
18
|
+
desc "Prefetch size for receiver queue channel"
|
|
19
|
+
receiver_prefetch_size 10
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
initialize_hook do
|
|
22
23
|
@active_requests = {}
|
|
24
|
+
@stats = {
|
|
25
|
+
:total_request_count=>0,
|
|
26
|
+
:total_response_count=>0,
|
|
27
|
+
:peak_wait_response_size=>0,
|
|
28
|
+
:send_request_per_sec=>0,
|
|
29
|
+
:receive_response_per_sec=>0,
|
|
30
|
+
:per_sec_last_request_count=>0,
|
|
31
|
+
:per_sec_last_response_count=>0,
|
|
32
|
+
}
|
|
23
33
|
@endpoints = {}
|
|
24
34
|
@amq = node.create_channel
|
|
25
|
-
@amq.
|
|
35
|
+
@amq.prefetch(config_section.receiver_prefetch_size.to_i)
|
|
36
|
+
@amq.queue("command-recv.#{manifest.node_id}", {:exclusive=>true}).subscribe(:ack=>true) { |header, data|
|
|
37
|
+
header.ack
|
|
38
|
+
@stats[:total_response_count] += 1
|
|
26
39
|
req = @active_requests[header.message_id]
|
|
27
40
|
if req
|
|
28
41
|
data = Serializer.instance.unmarshal(data)
|
|
@@ -48,6 +61,26 @@ module Isono
|
|
|
48
61
|
end
|
|
49
62
|
}
|
|
50
63
|
|
|
64
|
+
# Cleanup timed out requests
|
|
65
|
+
EventMachine.add_periodic_timer(10) {
|
|
66
|
+
tnow = Time.now
|
|
67
|
+
@active_requests.each { |k,req|
|
|
68
|
+
next unless req.state == :waiting
|
|
69
|
+
if req.timeout_sec.to_f > 0.0 && req.timeout_sec.to_f > (tnow - req.sent_at)
|
|
70
|
+
@active_requests.delete(k)
|
|
71
|
+
req.error_cb.call(:timeout) if req.error_cb
|
|
72
|
+
end
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# Update stats
|
|
77
|
+
EventMachine.add_periodic_timer(5) {
|
|
78
|
+
@stats[:send_request_per_sec] = (@stats[:total_request_count] - @stats[:per_sec_last_request_count]) / 5
|
|
79
|
+
@stats[:per_sec_last_request_count] = @stats[:total_request_count]
|
|
80
|
+
@stats[:receive_response_per_sec] = (@stats[:total_response_count] - @stats[:per_sec_last_response_count]) / 5
|
|
81
|
+
@stats[:per_sec_last_response_count] = @stats[:total_response_count]
|
|
82
|
+
}
|
|
83
|
+
|
|
51
84
|
# RPC endpoint for statistics info of this node.
|
|
52
85
|
myinstance.register_endpoint("rpc-stats.#{manifest.node_id}", proc { |req, res|
|
|
53
86
|
case req.command
|
|
@@ -169,7 +202,7 @@ module Isono
|
|
|
169
202
|
end
|
|
170
203
|
|
|
171
204
|
def response_exchange
|
|
172
|
-
self.
|
|
205
|
+
self.default_exchange
|
|
173
206
|
end
|
|
174
207
|
}
|
|
175
208
|
ch.prefetch(opts[:prefetch].to_i) if opts[:prefetch].to_i > 0
|
|
@@ -220,27 +253,23 @@ module Isono
|
|
|
220
253
|
# set default timeout if no one updated the initial value.
|
|
221
254
|
req.timeout_sec = config_section.timeout_sec
|
|
222
255
|
end
|
|
223
|
-
|
|
224
|
-
if req.timeout_sec > 0.0
|
|
225
|
-
# register the timeout hook.
|
|
226
|
-
req.timer = EventMachine::Timer.new(req.timeout_sec) {
|
|
227
|
-
@active_requests.delete req.ticket
|
|
228
|
-
req.error_cb.call(:timeout) if req.error_cb
|
|
229
|
-
}
|
|
230
|
-
end
|
|
231
|
-
|
|
256
|
+
|
|
232
257
|
req.process_event(:on_ready)
|
|
233
258
|
|
|
234
259
|
EventMachine.schedule {
|
|
260
|
+
@stats[:total_request_count] += 1
|
|
261
|
+
if @stats[:peak_wait_response_size] < @active_requests.size
|
|
262
|
+
@stats[:peak_wait_response_size] = @active_requests.size
|
|
263
|
+
end
|
|
235
264
|
if !req.oneshot
|
|
236
265
|
@active_requests[req.ticket] = req
|
|
237
266
|
end
|
|
238
267
|
|
|
239
|
-
amq.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
268
|
+
amq.default_exchange.publish(Serializer.instance.marshal(req.request_hash),
|
|
269
|
+
{:message_id => req.ticket,
|
|
270
|
+
:key => endpoint_queue_name(req.endpoint),
|
|
271
|
+
:reply_to=>"command-recv.#{manifest.node_id}"}
|
|
272
|
+
)
|
|
244
273
|
req.process_event(:on_sent)
|
|
245
274
|
}
|
|
246
275
|
end
|
|
@@ -306,7 +335,7 @@ module Isono
|
|
|
306
335
|
class RequestContext < OpenStruct
|
|
307
336
|
# They are not to be appeared in @table so that won't be inspect().
|
|
308
337
|
attr_reader :error_cb, :success_cb, :progress_cb
|
|
309
|
-
|
|
338
|
+
attr_reader :state
|
|
310
339
|
|
|
311
340
|
def initialize(endpoint, command, args)
|
|
312
341
|
super({:request=>{
|
|
@@ -314,8 +343,6 @@ module Isono
|
|
|
314
343
|
:command => command,
|
|
315
344
|
:args => args
|
|
316
345
|
},
|
|
317
|
-
:endpoint=> endpoint,
|
|
318
|
-
:command => command,
|
|
319
346
|
:ticket => Util.gen_id,
|
|
320
347
|
:timeout_sec => -1.0,
|
|
321
348
|
:oneshot => false,
|
|
@@ -327,36 +354,40 @@ module Isono
|
|
|
327
354
|
@success_cb = nil
|
|
328
355
|
@progress_cb = nil
|
|
329
356
|
@error_cb = nil
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
@stm = Statemachine.build {
|
|
333
|
-
trans :init, :on_ready, :ready
|
|
334
|
-
trans :ready, :on_sent, :waiting, proc {
|
|
335
|
-
self.sent_at=Time.now
|
|
336
|
-
# freeze request hash not to be modified after sending.
|
|
337
|
-
self.request.freeze
|
|
338
|
-
}
|
|
339
|
-
trans :waiting, :on_received, :waiting
|
|
340
|
-
trans :waiting, :on_error, :done, proc {
|
|
341
|
-
self.completed_at=Time.now
|
|
342
|
-
@timer.cancel if @timer
|
|
343
|
-
self.complete_status = :fail
|
|
344
|
-
}
|
|
345
|
-
trans :waiting, :on_success, :done, proc {
|
|
346
|
-
self.completed_at=Time.now
|
|
347
|
-
@timer.cancel if @timer
|
|
348
|
-
self.complete_status = :success
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
@stm.context = self
|
|
357
|
+
|
|
358
|
+
@state = :init
|
|
352
359
|
end
|
|
353
360
|
|
|
354
|
-
def
|
|
355
|
-
|
|
361
|
+
def endpoint
|
|
362
|
+
self.request[:endpoint]
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def command
|
|
366
|
+
self.request[:command]
|
|
356
367
|
end
|
|
357
368
|
|
|
358
369
|
def process_event(ev, *args)
|
|
359
|
-
|
|
370
|
+
case [ev, @state]
|
|
371
|
+
when [:on_ready, :init]
|
|
372
|
+
@state = :ready
|
|
373
|
+
when [:on_sent, :ready]
|
|
374
|
+
@state = :waiting
|
|
375
|
+
self.sent_at=Time.now
|
|
376
|
+
# freeze request hash not to be modified after sending.
|
|
377
|
+
self.request.freeze
|
|
378
|
+
when [:on_received, :waiting]
|
|
379
|
+
@state = :waiting
|
|
380
|
+
when [:on_success, :waiting]
|
|
381
|
+
@state = :done
|
|
382
|
+
self.completed_at=Time.now
|
|
383
|
+
self.complete_status = :success
|
|
384
|
+
when [:on_error, :waiting]
|
|
385
|
+
@state = :done
|
|
386
|
+
self.completed_at=Time.now
|
|
387
|
+
self.complete_status = :fail
|
|
388
|
+
else
|
|
389
|
+
raise "Unknown state transition: #{ev}, #{@state}"
|
|
390
|
+
end
|
|
360
391
|
end
|
|
361
392
|
|
|
362
393
|
def elapsed_time
|
data/lib/isono/util.rb
CHANGED
data/lib/isono/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: isono
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
5
|
-
prerelease:
|
|
4
|
+
hash: 27
|
|
5
|
+
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 2
|
|
9
|
-
-
|
|
10
|
-
version: 0.2.
|
|
9
|
+
- 6
|
|
10
|
+
version: 0.2.6
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- axsh Ltd.
|
|
@@ -16,8 +16,7 @@ autorequire:
|
|
|
16
16
|
bindir: bin
|
|
17
17
|
cert_chain: []
|
|
18
18
|
|
|
19
|
-
date: 2011-
|
|
20
|
-
default_executable: cli
|
|
19
|
+
date: 2011-08-23 00:00:00 Z
|
|
21
20
|
dependencies:
|
|
22
21
|
- !ruby/object:Gem::Dependency
|
|
23
22
|
name: amqp
|
|
@@ -27,12 +26,12 @@ dependencies:
|
|
|
27
26
|
requirements:
|
|
28
27
|
- - "="
|
|
29
28
|
- !ruby/object:Gem::Version
|
|
30
|
-
hash:
|
|
29
|
+
hash: 11
|
|
31
30
|
segments:
|
|
32
31
|
- 0
|
|
33
32
|
- 7
|
|
34
|
-
-
|
|
35
|
-
version: 0.7.
|
|
33
|
+
- 4
|
|
34
|
+
version: 0.7.4
|
|
36
35
|
type: :runtime
|
|
37
36
|
version_requirements: *id001
|
|
38
37
|
- !ruby/object:Gem::Dependency
|
|
@@ -181,7 +180,6 @@ files:
|
|
|
181
180
|
- spec/thread_pool_spec.rb
|
|
182
181
|
- spec/util_spec.rb
|
|
183
182
|
- tasks/load_resource_manifest.rake
|
|
184
|
-
has_rdoc: true
|
|
185
183
|
homepage: http://github.com/axsh/isono
|
|
186
184
|
licenses: []
|
|
187
185
|
|
|
@@ -213,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
213
211
|
requirements: []
|
|
214
212
|
|
|
215
213
|
rubyforge_project: isono
|
|
216
|
-
rubygems_version: 1.
|
|
214
|
+
rubygems_version: 1.8.6
|
|
217
215
|
signing_key:
|
|
218
216
|
specification_version: 3
|
|
219
217
|
summary: Messaging and agent fabric
|