queue_dispatcher 1.2.0 → 1.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 +3 -3
- data/app/views/queue_dispatcher_views/_task_event.html.haml +2 -2
- data/app/views/queue_dispatcher_views/_task_my_event.html.haml +2 -2
- data/app/views/queue_dispatcher_views/my_events.html.haml +13 -3
- data/app/views/queue_dispatcher_views/update_events.js.erb +1 -1
- data/lib/generators/queue_dispatcher/migration/templates/task_queues.rb +1 -0
- data/lib/generators/queue_dispatcher/migration/templates/tasks.rb +1 -1
- data/lib/queue_dispatcher/acts_as_task_queue.rb +19 -0
- data/lib/queue_dispatcher/version.rb +1 -1
- data/script/queue_worker_dispatcher +7 -7
- metadata +2 -3
- data/app/views/queue_dispatcher_views/expand_event.js.rjs +0 -1
data/README.rdoc
CHANGED
@@ -32,11 +32,11 @@ Please check if all those requirements are satisfied on your environment.
|
|
32
32
|
== Inside your application
|
33
33
|
|
34
34
|
To enqueue a long running task, simple call a method through enque.
|
35
|
-
E.g.:
|
35
|
+
E.g.:
|
36
36
|
Assume, you have a long running job:
|
37
37
|
LongRunningMailJob.send_mail
|
38
38
|
|
39
|
-
Now we'd like to execute it in the background by simply calling:
|
39
|
+
Now we'd like to execute it in the background by simply calling:
|
40
40
|
task = LongRunningMailJob.enqueue.send_mail
|
41
41
|
|
42
42
|
If you like to put the job in a queue, you can do this by execute it the following way:
|
@@ -56,4 +56,4 @@ To start the QueueWorkerDispatcher as a daemon, use the option -b.
|
|
56
56
|
This project is licenced under the MIT license.
|
57
57
|
|
58
58
|
== Author
|
59
|
-
Philip Kurmann (philip (at) kman.ch)
|
59
|
+
Philip Kurmann (philip (at) kman.ch)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
- event_onclick = ""
|
4
4
|
- else
|
5
5
|
- event_class = "event pointer"
|
6
|
-
- event_onclick =
|
6
|
+
- event_onclick = "jQuery('#task_#{task.id}_details').toggle(300);"
|
7
7
|
|
8
8
|
- if @expanded_events.include? task.id
|
9
9
|
- event_style = ""
|
@@ -20,7 +20,7 @@
|
|
20
20
|
#{id_prefix}#{task.id}:
|
21
21
|
= task.prosa
|
22
22
|
- unless task.error_msg.blank?
|
23
|
-
= image_tag 'icon_expand.gif'
|
23
|
+
= image_tag 'icon_expand.gif'
|
24
24
|
%div{:id => "task_#{task.id}_details", :class => 'qd_error_msg', :style => event_style}
|
25
25
|
= task.error_msg
|
26
26
|
%br
|
@@ -3,7 +3,7 @@
|
|
3
3
|
- event_onclick = ""
|
4
4
|
- else
|
5
5
|
- event_class = "event pointer"
|
6
|
-
- event_onclick =
|
6
|
+
- event_onclick = "jQuery('#task_#{task.id}_details').toggle(300);"
|
7
7
|
|
8
8
|
- if @expanded_events.include? task.id
|
9
9
|
- event_style = ""
|
@@ -20,7 +20,7 @@
|
|
20
20
|
#{id_prefix}#{task.id}:
|
21
21
|
= task.prosa
|
22
22
|
- unless task.error_msg.blank?
|
23
|
-
= image_tag 'icon_expand.gif'
|
23
|
+
= image_tag 'icon_expand.gif'
|
24
24
|
%div{:id => "task_#{task.id}_details", :class => 'qd_error_msg', :style => event_style}
|
25
25
|
= task.error_msg
|
26
26
|
%br
|
@@ -1,7 +1,17 @@
|
|
1
1
|
- title "Tasks and Events"
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
:javascript
|
3
|
+
$(document).ready(function(){
|
4
|
+
setInterval(update_task_list, 5000);
|
5
|
+
});
|
6
|
+
|
7
|
+
function update_task_list(){
|
8
|
+
if (running_task_queues == true) {
|
9
|
+
$.ajax({url: "#{url_for :action => 'my_events'}", type: "POST", dataType: "script" });
|
10
|
+
}
|
11
|
+
running_task_queues = #{TaskQueue.any_running?};
|
12
|
+
|
13
|
+
};
|
14
|
+
|
5
15
|
= render :partial => 'queue_dispatcher_views/search_results_my_events'
|
6
16
|
%br/
|
7
17
|
= will_paginate @tasks
|
@@ -14,6 +14,7 @@ module QueueDispatcher
|
|
14
14
|
attr_reader :leave_running_tasks_in_queue
|
15
15
|
attr_reader :leave_finished_tasks_in_queue
|
16
16
|
attr_reader :idle_wait_time
|
17
|
+
attr_reader :task_finish_wait_time
|
17
18
|
attr_reader :poll_time
|
18
19
|
attr_reader :debug
|
19
20
|
|
@@ -23,6 +24,7 @@ module QueueDispatcher
|
|
23
24
|
@leave_running_tasks_in_queue = args[:leave_running_tasks_in_queue].nil? ? false : args[:leave_running_tasks_in_queue]
|
24
25
|
@leave_running_tasks_in_queue = true if @leave_finished_tasks_in_queue
|
25
26
|
@idle_wait_time = args[:idle_wait_time] || 0
|
27
|
+
@task_finish_wait_time = args[:task_finish_wait_time] || 0
|
26
28
|
@poll_time = args[:poll_time] || 2.seconds
|
27
29
|
@debug = args[:debug]
|
28
30
|
end
|
@@ -41,6 +43,7 @@ module QueueDispatcher
|
|
41
43
|
@acts_as_task_queue_config = QueueDispatcher::ActsAsTaskQueue::Config.new(args)
|
42
44
|
|
43
45
|
has_many acts_as_task_queue_config.task_class_name.pluralize, :order => [:priority, :id]
|
46
|
+
serialize :interrupts, Array
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
@@ -331,6 +334,9 @@ module QueueDispatcher
|
|
331
334
|
cleanup_locks_after_error_for task
|
332
335
|
task.update_attribute :task_queue_id, nil unless acts_as_task_queue_config.leave_finished_tasks_in_queue
|
333
336
|
log :msg => "#{name}: Task #{task.id} (#{task.target.class.name}.#{task.method_name}) finished with state '#{task.state}'.", :print_log => print_log
|
337
|
+
|
338
|
+
# Wait between tasks
|
339
|
+
sleep acts_as_task_queue_config.task_finish_wait_time
|
334
340
|
end
|
335
341
|
else
|
336
342
|
# We couldn't fetch a task out of the queue but there should still exists some. Maybe some are waiting for dependent tasks.
|
@@ -338,6 +344,9 @@ module QueueDispatcher
|
|
338
344
|
sleep acts_as_task_queue_config.poll_time
|
339
345
|
end
|
340
346
|
|
347
|
+
# Interrupts
|
348
|
+
handle_interrupts print_log: print_log
|
349
|
+
|
341
350
|
# Reload task_queue to get all updates
|
342
351
|
task_queue = TaskQueue.find_by_id task_queue.id
|
343
352
|
|
@@ -472,6 +481,16 @@ module QueueDispatcher
|
|
472
481
|
#log :msg => "#{name}: Reloading config...", :print_log => args[:print_log]
|
473
482
|
end
|
474
483
|
|
484
|
+
|
485
|
+
# Interrupt handler
|
486
|
+
def handle_interrupts(args = {})
|
487
|
+
interrupts.each { |int| send int.to_sym }
|
488
|
+
update_attributes interrupts: []
|
489
|
+
rescue => exception
|
490
|
+
backtrace = exception.backtrace.join("\n ")
|
491
|
+
log :msg => "Fatal error in method 'handle_interrupts': #{$!}\n #{backtrace}", :sev => :error, :print_log => arg[:print_log]
|
492
|
+
end
|
493
|
+
|
475
494
|
end
|
476
495
|
end
|
477
496
|
end
|
@@ -142,7 +142,7 @@ def daemon_start
|
|
142
142
|
File.delete($daemon[:pid_file])
|
143
143
|
end
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
146
|
daemon_log :msg => "Starting process..."
|
147
147
|
if $daemon[:background]
|
148
148
|
spawn_block { daemon_runner }
|
@@ -227,30 +227,30 @@ def daemon_show_usage
|
|
227
227
|
end
|
228
228
|
|
229
229
|
|
230
|
-
# Parse command line options
|
230
|
+
# Parse command line options
|
231
231
|
def daemon_parse_opts
|
232
232
|
start = true
|
233
233
|
|
234
|
-
unless DAEMON_ARGV.length == 0
|
234
|
+
unless DAEMON_ARGV.length == 0
|
235
235
|
case DAEMON_ARGV[0]
|
236
236
|
when '-b', '--background'
|
237
237
|
$daemon[:background] = true;
|
238
|
-
|
238
|
+
|
239
239
|
when '-v', '--version'
|
240
240
|
daemon_show_version
|
241
241
|
start = false
|
242
|
-
|
242
|
+
|
243
243
|
when '-h', '--help'
|
244
244
|
daemon_show_usage
|
245
245
|
start = false
|
246
|
-
|
246
|
+
|
247
247
|
else
|
248
248
|
puts "Invalid argument: #{DAEMON_ARGV[0]}" if !DAEMON_ARGV[0].nil?
|
249
249
|
daemon_show_usage
|
250
250
|
start = false
|
251
251
|
end
|
252
252
|
end
|
253
|
-
|
253
|
+
|
254
254
|
start
|
255
255
|
end
|
256
256
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queue_dispatcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sys-proctable
|
@@ -137,7 +137,6 @@ files:
|
|
137
137
|
- app/views/queue_dispatcher_views/_task_footer.html.erb
|
138
138
|
- app/views/queue_dispatcher_views/_task_header.html.erb
|
139
139
|
- app/views/queue_dispatcher_views/_task_my_event.html.haml
|
140
|
-
- app/views/queue_dispatcher_views/expand_event.js.rjs
|
141
140
|
- app/views/queue_dispatcher_views/my_events.html.haml
|
142
141
|
- app/views/queue_dispatcher_views/my_events.js.erb
|
143
142
|
- app/views/queue_dispatcher_views/update_events.js.erb
|
@@ -1 +0,0 @@
|
|
1
|
-
page.visual_effect :toggle_blind, "task_#{@task.id}_details", :duration => 0.1
|