daemon-kit 0.1.8rc2 → 0.1.8rc3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/daemon-kit.gemspec +36 -36
- data/lib/daemon_kit.rb +1 -1
- data/lib/daemon_kit/amqp.rb +1 -0
- data/lib/daemon_kit/cron.rb +16 -0
- data/lib/daemon_kit/deployment/capistrano.rb +34 -0
- data/lib/daemon_kit/error_handlers/hoptoad.rb +8 -2
- data/lib/daemon_kit/generators.rb +1 -1
- data/lib/daemon_kit/generators/base.rb +1 -1
- data/lib/daemon_kit/ruote_participants.rb +7 -1
- data/lib/daemon_kit/ruote_workitem.rb +30 -20
- data/lib/daemon_kit/tasks/environment.rake +1 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/CHANGELOG.rdoc +9 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/LICENSE +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/README.rdoc +65 -2
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/Thorfile +14 -9
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor.rb +10 -8
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions.rb +34 -12
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions/create_file.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions/directory.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions/empty_directory.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions/file_manipulation.rb +1 -1
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/actions/inject_into_file.rb +9 -6
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/base.rb +45 -20
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/core_ext/file_binary_read.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/core_ext/ordered_hash.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/error.rb +3 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/group.rb +21 -21
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/invocation.rb +19 -17
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/parser.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/parser/argument.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/parser/arguments.rb +9 -4
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/parser/option.rb +0 -4
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/parser/options.rb +41 -14
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/rake_compat.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/runner.rb +20 -9
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/shell.rb +8 -3
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/shell/basic.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/shell/color.rb +0 -0
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/task.rb +24 -33
- data/lib/daemon_kit/vendor/{thor-0.12.3 → thor-0.13.6}/lib/thor/util.rb +9 -18
- data/lib/daemon_kit/vendor/thor-0.13.6/lib/thor/version.rb +3 -0
- data/lib/generators/daemon_kit/amqp/amqp_generator.rb +1 -1
- data/lib/generators/daemon_kit/amqp/templates/config/pre-daemonize/amqp.rb +1 -1
- data/lib/generators/daemon_kit/app/app_generator.rb +1 -1
- data/lib/generators/daemon_kit/app/templates/README.tt +58 -0
- data/lib/generators/daemon_kit/capistrano/capistrano_generator.rb +5 -0
- data/lib/generators/daemon_kit/cron/cron_generator.rb +1 -1
- data/lib/generators/daemon_kit/cron/templates/config/pre-daemonize/cron.rb +1 -1
- data/lib/generators/daemon_kit/nanite_agent/nanite_agent_generator.rb +1 -1
- data/lib/generators/daemon_kit/nanite_agent/templates/config/pre-daemonize/nanite_agent.rb +1 -1
- data/lib/generators/daemon_kit/ruote/ruote_generator.rb +2 -2
- data/lib/generators/daemon_kit/ruote/templates/config/pre-daemonize/ruote.rb +2 -2
- data/lib/generators/daemon_kit/xmpp/templates/config/pre-daemonize/xmpp.rb +1 -1
- data/lib/generators/daemon_kit/xmpp/xmpp_generator.rb +1 -1
- data/tasks/rspec.rake +6 -7
- metadata +77 -49
- data/lib/daemon_kit/vendor/thor-0.12.3/lib/thor/version.rb +0 -3
- data/lib/generators/daemon_kit/app/templates/README +0 -48
data/Rakefile
CHANGED
@@ -14,6 +14,7 @@ begin
|
|
14
14
|
gemspec.authors = ['kenneth.kalmer@gmail.com']
|
15
15
|
gemspec.post_install_message = IO.read('PostInstall.txt')
|
16
16
|
gemspec.extra_rdoc_files.include '*.txt'
|
17
|
+
gemspec.files.include("lib/generators/**/*", "lib/daemon_kit/vendor/**/*")
|
17
18
|
|
18
19
|
gemspec.add_dependency 'eventmachine', '>=0.12.10'
|
19
20
|
gemspec.add_development_dependency 'rspec'
|
data/daemon-kit.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{daemon-kit}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.8rc3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["kenneth.kalmer@gmail.com"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-02}
|
13
13
|
s.default_executable = %q{daemon-kit}
|
14
14
|
s.description = %q{daemon-kit aims to simplify creating Ruby daemons by providing a sound application skeleton (through a generator), task specific generators (jabber bot, etc) and robust environment management code.}
|
15
15
|
s.email = %q{kenneth.kalmer@gmail.com}
|
@@ -75,37 +75,37 @@ Gem::Specification.new do |s|
|
|
75
75
|
"lib/daemon_kit/tasks/god.rake",
|
76
76
|
"lib/daemon_kit/tasks/log.rake",
|
77
77
|
"lib/daemon_kit/tasks/monit.rake",
|
78
|
-
"lib/daemon_kit/vendor/thor-0.
|
79
|
-
"lib/daemon_kit/vendor/thor-0.
|
80
|
-
"lib/daemon_kit/vendor/thor-0.
|
81
|
-
"lib/daemon_kit/vendor/thor-0.
|
82
|
-
"lib/daemon_kit/vendor/thor-0.
|
83
|
-
"lib/daemon_kit/vendor/thor-0.
|
84
|
-
"lib/daemon_kit/vendor/thor-0.
|
85
|
-
"lib/daemon_kit/vendor/thor-0.
|
86
|
-
"lib/daemon_kit/vendor/thor-0.
|
87
|
-
"lib/daemon_kit/vendor/thor-0.
|
88
|
-
"lib/daemon_kit/vendor/thor-0.
|
89
|
-
"lib/daemon_kit/vendor/thor-0.
|
90
|
-
"lib/daemon_kit/vendor/thor-0.
|
91
|
-
"lib/daemon_kit/vendor/thor-0.
|
92
|
-
"lib/daemon_kit/vendor/thor-0.
|
93
|
-
"lib/daemon_kit/vendor/thor-0.
|
94
|
-
"lib/daemon_kit/vendor/thor-0.
|
95
|
-
"lib/daemon_kit/vendor/thor-0.
|
96
|
-
"lib/daemon_kit/vendor/thor-0.
|
97
|
-
"lib/daemon_kit/vendor/thor-0.
|
98
|
-
"lib/daemon_kit/vendor/thor-0.
|
99
|
-
"lib/daemon_kit/vendor/thor-0.
|
100
|
-
"lib/daemon_kit/vendor/thor-0.
|
101
|
-
"lib/daemon_kit/vendor/thor-0.
|
102
|
-
"lib/daemon_kit/vendor/thor-0.
|
103
|
-
"lib/daemon_kit/vendor/thor-0.
|
104
|
-
"lib/daemon_kit/vendor/thor-0.
|
105
|
-
"lib/daemon_kit/vendor/thor-0.
|
106
|
-
"lib/daemon_kit/vendor/thor-0.
|
107
|
-
"lib/daemon_kit/vendor/thor-0.
|
108
|
-
"lib/daemon_kit/vendor/thor-0.
|
78
|
+
"lib/daemon_kit/vendor/thor-0.13.6/CHANGELOG.rdoc",
|
79
|
+
"lib/daemon_kit/vendor/thor-0.13.6/LICENSE",
|
80
|
+
"lib/daemon_kit/vendor/thor-0.13.6/README.rdoc",
|
81
|
+
"lib/daemon_kit/vendor/thor-0.13.6/Thorfile",
|
82
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor.rb",
|
83
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions.rb",
|
84
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions/create_file.rb",
|
85
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions/directory.rb",
|
86
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions/empty_directory.rb",
|
87
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions/file_manipulation.rb",
|
88
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/actions/inject_into_file.rb",
|
89
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/base.rb",
|
90
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/core_ext/file_binary_read.rb",
|
91
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/core_ext/hash_with_indifferent_access.rb",
|
92
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/core_ext/ordered_hash.rb",
|
93
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/error.rb",
|
94
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/group.rb",
|
95
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/invocation.rb",
|
96
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/parser.rb",
|
97
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/parser/argument.rb",
|
98
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/parser/arguments.rb",
|
99
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/parser/option.rb",
|
100
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/parser/options.rb",
|
101
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/rake_compat.rb",
|
102
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/runner.rb",
|
103
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/shell.rb",
|
104
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/shell/basic.rb",
|
105
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/shell/color.rb",
|
106
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/task.rb",
|
107
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/util.rb",
|
108
|
+
"lib/daemon_kit/vendor/thor-0.13.6/lib/thor/version.rb",
|
109
109
|
"lib/daemon_kit/xmpp.rb",
|
110
110
|
"lib/generators/daemon_kit/amqp/USAGE",
|
111
111
|
"lib/generators/daemon_kit/amqp/amqp_generator.rb",
|
@@ -115,7 +115,7 @@ Gem::Specification.new do |s|
|
|
115
115
|
"lib/generators/daemon_kit/app/USAGE",
|
116
116
|
"lib/generators/daemon_kit/app/app_generator.rb",
|
117
117
|
"lib/generators/daemon_kit/app/templates/Gemfile",
|
118
|
-
"lib/generators/daemon_kit/app/templates/README",
|
118
|
+
"lib/generators/daemon_kit/app/templates/README.tt",
|
119
119
|
"lib/generators/daemon_kit/app/templates/Rakefile",
|
120
120
|
"lib/generators/daemon_kit/app/templates/bin/daemon.tt",
|
121
121
|
"lib/generators/daemon_kit/app/templates/config/arguments.rb",
|
@@ -220,7 +220,7 @@ To get started quickly run 'daemon-kit' without any arguments
|
|
220
220
|
}
|
221
221
|
s.rdoc_options = ["--charset=UTF-8"]
|
222
222
|
s.require_paths = ["lib"]
|
223
|
-
s.rubygems_version = %q{1.3.
|
223
|
+
s.rubygems_version = %q{1.3.7}
|
224
224
|
s.summary = %q{Opinionated framework for Ruby daemons}
|
225
225
|
s.test_files = [
|
226
226
|
"spec/abstract_logger_spec.rb",
|
@@ -247,7 +247,7 @@ To get started quickly run 'daemon-kit' without any arguments
|
|
247
247
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
248
248
|
s.specification_version = 3
|
249
249
|
|
250
|
-
if Gem::Version.new(Gem::
|
250
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
251
251
|
s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.10"])
|
252
252
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
253
253
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
data/lib/daemon_kit.rb
CHANGED
@@ -13,7 +13,7 @@ $:.unshift( File.dirname(__FILE__).to_absolute_path ) unless
|
|
13
13
|
$:.include?( File.dirname(__FILE__).to_absolute_path )
|
14
14
|
|
15
15
|
module DaemonKit
|
16
|
-
VERSION = '0.1.
|
16
|
+
VERSION = '0.1.8rc3'
|
17
17
|
|
18
18
|
autoload :Initializer, 'daemon_kit/initializer'
|
19
19
|
autoload :Application, 'daemon_kit/application'
|
data/lib/daemon_kit/amqp.rb
CHANGED
data/lib/daemon_kit/cron.rb
CHANGED
@@ -11,8 +11,10 @@ module DaemonKit
|
|
11
11
|
class Cron
|
12
12
|
|
13
13
|
@instance = nil
|
14
|
+
@exception_handler = nil
|
14
15
|
|
15
16
|
attr_reader :scheduler
|
17
|
+
attr_accessor :exception_handler
|
16
18
|
|
17
19
|
class << self
|
18
20
|
|
@@ -25,6 +27,10 @@ module DaemonKit
|
|
25
27
|
instance.scheduler
|
26
28
|
end
|
27
29
|
|
30
|
+
def handle_exception( &block )
|
31
|
+
instance.exception_handler = block
|
32
|
+
end
|
33
|
+
|
28
34
|
private :new
|
29
35
|
|
30
36
|
# Once the scheduler has been configured, call #run to block the
|
@@ -43,6 +49,16 @@ module DaemonKit
|
|
43
49
|
|
44
50
|
def initialize
|
45
51
|
@scheduler = Rufus::Scheduler.start_new
|
52
|
+
|
53
|
+
def @scheduler.handle_exception( job, exception )
|
54
|
+
DaemonKit::Cron.instance.handle_exception( job, exception )
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def handle_exception( job, exception )
|
59
|
+
DaemonKit.logger.error( "Cron: job #{job.job_id} caught exception: '#{exception}'" )
|
60
|
+
DaemonKit.logger.exception( exception )
|
61
|
+
@exception_handler.call( job, exception ) unless @exception_handler.nil?
|
46
62
|
end
|
47
63
|
end
|
48
64
|
end
|
@@ -67,6 +67,11 @@ _cset(:run_method) { fetch(:use_sudo, true) ? :sudo : :run }
|
|
67
67
|
# standalone case, or during deployment.
|
68
68
|
_cset(:latest_release) { exists?(:deploy_timestamped) ? release_path : current_release }
|
69
69
|
|
70
|
+
# =========================================================================
|
71
|
+
# Variables for bundler
|
72
|
+
# =========================================================================
|
73
|
+
_cset(:use_bundler, true)
|
74
|
+
|
70
75
|
# =========================================================================
|
71
76
|
# These are helper methods that will be available to your recipes.
|
72
77
|
# =========================================================================
|
@@ -198,11 +203,16 @@ namespace :deploy do
|
|
198
203
|
control software you are using (it defaults to :subversion), and the \
|
199
204
|
:deploy_via variable to the strategy you want to use to deploy (it \
|
200
205
|
defaults to :checkout).
|
206
|
+
|
207
|
+
Your bundles will also be installed/updated as part of this step. \
|
208
|
+
You can disable bundler on remote reployments with the :user_bundler \
|
209
|
+
variable.
|
201
210
|
DESC
|
202
211
|
task :update_code, :except => { :no_release => true } do
|
203
212
|
on_rollback { run "rm -rf #{release_path}; true" }
|
204
213
|
strategy.deploy!
|
205
214
|
finalize_update
|
215
|
+
bundler.bundle_new_release if fetch(:use_bundler, true)
|
206
216
|
end
|
207
217
|
|
208
218
|
desc <<-DESC
|
@@ -398,6 +408,8 @@ namespace :deploy do
|
|
398
408
|
task :check, :except => { :no_release => true } do
|
399
409
|
dependencies = strategy.check!
|
400
410
|
|
411
|
+
depend( :remote, :gem, "bundler", ">= 0.9.26" ) if fetch(:use_bundler, true)
|
412
|
+
|
401
413
|
other = fetch(:dependencies, {})
|
402
414
|
other.each do |location, types|
|
403
415
|
types.each do |type, calls|
|
@@ -480,3 +492,25 @@ namespace :deploy do
|
|
480
492
|
end
|
481
493
|
end
|
482
494
|
end
|
495
|
+
|
496
|
+
namespace :bundler do
|
497
|
+
task :create_symlink, :roles => :app do
|
498
|
+
shared_dir = File.join(shared_path, 'bundle')
|
499
|
+
release_dir = File.join(current_release, '.bundle')
|
500
|
+
run("mkdir -p #{shared_dir} && ln -s #{shared_dir} #{release_dir}")
|
501
|
+
end
|
502
|
+
|
503
|
+
task :bundle_new_release, :roles => :app do
|
504
|
+
bundler.create_symlink
|
505
|
+
run "cd #{release_path} && bundle install .bundle --without test"
|
506
|
+
end
|
507
|
+
|
508
|
+
task :lock, :roles => :app do
|
509
|
+
run "cd #{current_release} && bundle lock;"
|
510
|
+
end
|
511
|
+
|
512
|
+
task :unlock, :roles => :app do
|
513
|
+
run "cd #{current_release} && bundle unlock;"
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
@@ -52,7 +52,7 @@ module DaemonKit
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def to_xml
|
55
|
-
data = [ method, file, number ].map { |s| URI.escape( s, %q{"'<>&} ) }
|
55
|
+
data = [ method, file, number ].map { |s| URI.escape( s || 'unknown', %q{"'<>&} ) }
|
56
56
|
%q{<line method="%s" file="%s" number="%s" />} % data
|
57
57
|
end
|
58
58
|
|
@@ -144,6 +144,12 @@ module DaemonKit
|
|
144
144
|
|
145
145
|
def format_exception( exception )
|
146
146
|
lines = Backtrace.parse( exception.backtrace )
|
147
|
+
exception_message= exception.message
|
148
|
+
exception_message.gsub!("\"",""")
|
149
|
+
exception_message.gsub!("'","'")
|
150
|
+
exception_message.gsub!("&","&")
|
151
|
+
exception_message.gsub!("<","<")
|
152
|
+
exception_message.gsub!(">",">")
|
147
153
|
|
148
154
|
<<-EOF
|
149
155
|
<?xml version="1.0" encoding="UTF-8"?>
|
@@ -156,7 +162,7 @@ module DaemonKit
|
|
156
162
|
</notifier>
|
157
163
|
<error>
|
158
164
|
<class>#{exception.class.name}</class>
|
159
|
-
<message>#{
|
165
|
+
<message>#{exception_message}</message>
|
160
166
|
<backtrace>
|
161
167
|
#{Backtrace.parse( exception.backtrace ).lines.inject('') { |string,line| string << line.to_xml }}
|
162
168
|
</backtrace>
|
@@ -35,6 +35,7 @@ module DaemonKit
|
|
35
35
|
def initialize
|
36
36
|
@transports = []
|
37
37
|
@participants = {}
|
38
|
+
@runtime_queues = []
|
38
39
|
|
39
40
|
@configuration = Config.load('ruote')
|
40
41
|
end
|
@@ -80,12 +81,17 @@ module DaemonKit
|
|
80
81
|
run_amqp! if @transports.include?( :amqp )
|
81
82
|
end
|
82
83
|
|
84
|
+
# Subscribe to additional queues not specified in ruote.yml
|
85
|
+
def subscribe_to( queue )
|
86
|
+
@runtime_queues << queue
|
87
|
+
end
|
88
|
+
|
83
89
|
private
|
84
90
|
|
85
91
|
def run_amqp!
|
86
92
|
AMQP.run do
|
87
93
|
mq = ::MQ.new
|
88
|
-
queues = @configuration['amqp']['queues'].to_a
|
94
|
+
queues = @configuration['amqp']['queues'].to_a | @runtime_queues
|
89
95
|
|
90
96
|
queues.each do |q|
|
91
97
|
DaemonKit.logger.debug("Subscribing to #{q} for workitems")
|
@@ -7,10 +7,10 @@ module DaemonKit
|
|
7
7
|
|
8
8
|
class << self
|
9
9
|
|
10
|
-
|
10
|
+
# = Process incoming commands via an AMQP queue
|
11
11
|
#
|
12
12
|
# Expects a JSON workitem from ruote that has these fields set in
|
13
|
-
#
|
13
|
+
# fields key:
|
14
14
|
#
|
15
15
|
# {
|
16
16
|
# 'reply_queue' => 'queue to send replies to',
|
@@ -52,15 +52,16 @@ module DaemonKit
|
|
52
52
|
if target.nil? || method.nil?
|
53
53
|
msg = "Missing target/method in command parameter, or command parameter missing"
|
54
54
|
DaemonKit.logger.error( msg )
|
55
|
-
work["
|
55
|
+
work["__error__"] = msg
|
56
56
|
|
57
|
-
elsif target.public_methods.include?( method )
|
58
|
-
target.perform( method, work )
|
57
|
+
elsif target.public_methods.map { |m| m.to_s }.include?( method ) # 1.8.x => [ 'foo' ]
|
58
|
+
target.perform( method, work ) # 1.9.x => [ :foo ]
|
59
59
|
|
60
60
|
else
|
61
|
-
msg = "Workitem cannot be processes: #{method} not exposed by #{target.inspect}"
|
61
|
+
msg = "Workitem cannot be processes: '#{method}' not exposed by #{target.inspect}"
|
62
62
|
DaemonKit.logger.error( msg )
|
63
|
-
|
63
|
+
p [ :work, work.inspect ]
|
64
|
+
work["__error__"] = msg
|
64
65
|
end
|
65
66
|
|
66
67
|
reply_to_engine( transport, work )
|
@@ -90,8 +91,7 @@ module DaemonKit
|
|
90
91
|
|
91
92
|
def reply_via_amqp( response )
|
92
93
|
DaemonKit.logger.debug("Replying to engine via AMQP with #{response.inspect}")
|
93
|
-
|
94
|
-
::MQ.queue( response['reply_queue'] ).publish( response.to_json )
|
94
|
+
::MQ.queue( response['params']['reply_queue'] ).publish( response.to_json )
|
95
95
|
|
96
96
|
response
|
97
97
|
end
|
@@ -111,7 +111,7 @@ module DaemonKit
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def fei
|
114
|
-
@workitem['
|
114
|
+
@workitem['fei']
|
115
115
|
end
|
116
116
|
|
117
117
|
def short_fei
|
@@ -119,8 +119,8 @@ module DaemonKit
|
|
119
119
|
'(' + [
|
120
120
|
'fei', self.fei['owfe_version'], self.fei['engine_id'],
|
121
121
|
self.fei['workflow_definition_url'], self.fei['workflow_definition_name'],
|
122
|
-
self.fei['workflow_definition_revision'], self.fei['
|
123
|
-
self.fei['expression_name'], self.fei['
|
122
|
+
self.fei['workflow_definition_revision'], self.fei['wfid'],
|
123
|
+
self.fei['expression_name'], self.fei['expid']
|
124
124
|
].join(' ') + ')'
|
125
125
|
end
|
126
126
|
|
@@ -136,16 +136,26 @@ module DaemonKit
|
|
136
136
|
@workitem['participant_name']
|
137
137
|
end
|
138
138
|
|
139
|
-
def
|
140
|
-
|
139
|
+
def has_field?(a)
|
140
|
+
self.fields.keys.include?( a )
|
141
|
+
end
|
142
|
+
|
143
|
+
def fields
|
144
|
+
@workitem['fields'] ||= @workitem['attributes']
|
141
145
|
end
|
142
146
|
|
147
|
+
# backwards compatible..
|
148
|
+
|
149
|
+
alias :attributes :fields
|
150
|
+
alias :has_attribute? :has_field?
|
151
|
+
|
152
|
+
|
143
153
|
def []( key )
|
144
|
-
self.
|
154
|
+
self.fields[ key ]
|
145
155
|
end
|
146
156
|
|
147
157
|
def []=( key, value )
|
148
|
-
self.
|
158
|
+
self.fields[ key ] = value
|
149
159
|
end
|
150
160
|
|
151
161
|
def to_json
|
@@ -156,9 +166,9 @@ module DaemonKit
|
|
156
166
|
# has timed out or not. This method will only ever work if you used the
|
157
167
|
# +:timeout: parameter was set for the expression.
|
158
168
|
def timed_out?
|
159
|
-
key = fei['
|
169
|
+
key = fei['wfid'] + '__' + fei['expid']
|
160
170
|
|
161
|
-
if self.
|
171
|
+
if self.fields["__timeouts__"] && timeout = self.fields["__timeouts__"][ key ]
|
162
172
|
return Time.at( timeout.last ) < Time.now
|
163
173
|
end
|
164
174
|
|
@@ -166,8 +176,8 @@ module DaemonKit
|
|
166
176
|
end
|
167
177
|
|
168
178
|
def method_missing( method_name, *args )
|
169
|
-
if self.
|
170
|
-
return self.
|
179
|
+
if self.fields.keys.include?( method_name.to_s )
|
180
|
+
return self.fields[ method_name.to_s ]
|
171
181
|
end
|
172
182
|
|
173
183
|
super
|
@@ -1,5 +1,14 @@
|
|
1
|
+
== 0.13, released 2010-02-03
|
2
|
+
|
3
|
+
* Several bug fixes
|
4
|
+
* Decoupled Thor::Group and Thor, so it's easier to vendor
|
5
|
+
* Added check_unknown_options! in case you want error messages to be raised in valid switches.
|
6
|
+
* run(command) should return the results of command
|
7
|
+
|
1
8
|
== 0.12, released 2010-01-02
|
2
9
|
|
10
|
+
* Methods generated by attr_* are automatically not marked as tasks
|
11
|
+
* inject_into_file does not add the same content twice, unless :force is set
|
3
12
|
* Removed rr in favor to rspec mock framework
|
4
13
|
* Improved output for thor -T
|
5
14
|
* [#7] Do not force white color on status
|