daemon-kit 0.1.8rc2 → 0.1.8rc3
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 -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
|