background_queue 0.3.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/TODO +13 -0
  2. data/VERSION +1 -1
  3. data/background_queue.gemspec +8 -2
  4. data/lib/background_queue/client.rb +31 -3
  5. data/lib/background_queue/client_lib/connection.rb +9 -0
  6. data/lib/background_queue/client_lib/job_handle.rb +34 -1
  7. data/lib/background_queue/config.rb +1 -11
  8. data/lib/background_queue/server_lib/balanced_queue.rb +22 -0
  9. data/lib/background_queue/server_lib/event_connection.rb +7 -1
  10. data/lib/background_queue/server_lib/job.rb +46 -7
  11. data/lib/background_queue/server_lib/priority_queue.rb +7 -0
  12. data/lib/background_queue/server_lib/queue_registry.rb +20 -5
  13. data/lib/background_queue/server_lib/task.rb +28 -0
  14. data/lib/background_queue/server_lib/task_registry.rb +7 -0
  15. data/lib/background_queue/server_lib/worker_client.rb +5 -2
  16. data/lib/background_queue/server_lib/worker_thread.rb +1 -1
  17. data/lib/background_queue/utils.rb +25 -1
  18. data/lib/background_queue/worker/base.rb +41 -0
  19. data/lib/background_queue/worker/calling.rb +24 -1
  20. data/lib/background_queue/worker/config.rb +20 -0
  21. data/lib/background_queue/worker/environment.rb +25 -1
  22. data/lib/background_queue/worker/logger.rb +114 -0
  23. data/lib/background_queue/worker/progress.rb +152 -0
  24. data/lib/background_queue/worker/worker_loader.rb +1 -1
  25. data/lib/background_queue_worker.rb +2 -0
  26. data/spec/background_queue/client_lib/connection_spec.rb +7 -1
  27. data/spec/background_queue/client_spec.rb +2 -1
  28. data/spec/background_queue/config_spec.rb +11 -23
  29. data/spec/background_queue/server_lib/integration/error_handling_spec.rb +85 -0
  30. data/spec/background_queue/server_lib/integration/full_test_spec.rb +76 -3
  31. data/spec/background_queue/server_lib/integration/queue_integration_spec.rb +6 -3
  32. data/spec/background_queue/server_lib/job_spec.rb +44 -3
  33. data/spec/background_queue/server_lib/worker_thread_spec.rb +2 -2
  34. data/spec/background_queue/utils_spec.rb +30 -0
  35. data/spec/background_queue/worker/calling_spec.rb +3 -1
  36. data/spec/background_queue/worker/environment_spec.rb +3 -1
  37. data/spec/background_queue/worker/logger_spec.rb +58 -0
  38. data/spec/background_queue/worker/progress_spec.rb +82 -0
  39. data/spec/background_queue/worker/worker_loader_spec.rb +1 -1
  40. data/spec/resources/summary_worker.rb +18 -0
  41. data/spec/shared/queue_registry_shared.rb +4 -3
  42. data/spec/support/simple_task.rb +24 -0
  43. metadata +33 -27
@@ -88,9 +88,9 @@ describe "Queue Integration" do
88
88
 
89
89
  task2.get_job.total_tasks.should eq(2)
90
90
 
91
- subject.next_item.should be_nil
92
- subject.finish_item(task)
93
91
  subject.next_item.id.should eq(:task_id2)
92
+ subject.finish_item(task)
93
+ #subject.next_item.id.should eq(:task_id2)
94
94
 
95
95
  end
96
96
  end
@@ -103,6 +103,7 @@ describe "Queue Integration" do
103
103
  subject.add_task(SimpleTask.new(:owner_id, :job_id, :task_id, 3, {:synchronous=>true}))
104
104
  task = subject.next_item
105
105
  task.id.should be(:task_id)
106
+ subject.finish_item(task)
106
107
  subject.next_item.should be_nil
107
108
  end
108
109
 
@@ -110,10 +111,12 @@ describe "Queue Integration" do
110
111
  subject.add_task(SimpleTask.new(:owner_id, :job_id, :task_id, 3, {:synchronous=>true}))
111
112
  task = subject.next_item
112
113
  task.id.should be(:task_id)
114
+ task.running = true
113
115
  subject.next_item.should be_nil
114
116
  subject.add_task(SimpleTask.new(:owner_id, :job_id, :task_id, 3, {:synchronous=>true}))
115
117
  subject.next_item.should be_nil
116
- subject.finish_item(task)
118
+ task.running = false
119
+ subject.finish_task(task)
117
120
  task = subject.next_item
118
121
  task.id.should be(:task_id)
119
122
  end
@@ -9,14 +9,14 @@ describe BackgroundQueue::ServerLib::Job do
9
9
 
10
10
  it "#add_item uses normal priority queue" do
11
11
  task.should_receive(:set_job).with(subject)
12
- task.should_receive(:synchronous?).and_return(false)
12
+ #task.should_receive(:synchronous?).and_return(false)
13
13
  BackgroundQueue::ServerLib::Job.any_instance.should_receive(:push).with(task).and_return(nil)
14
14
  subject.add_item(task)
15
15
  end
16
16
 
17
17
  it "#next_item uses normal priority queue" do
18
- BackgroundQueue::ServerLib::Job.any_instance.should_receive(:pop).and_return(:task)
19
- subject.next_item.should eq(:task)
18
+ BackgroundQueue::ServerLib::Job.any_instance.should_receive(:pop).and_return(task)
19
+ subject.next_item.should eq(task)
20
20
  end
21
21
 
22
22
  context "#add_item" do
@@ -320,6 +320,47 @@ describe BackgroundQueue::ServerLib::Job do
320
320
  end
321
321
  end
322
322
 
323
+ context "#update_summary_meta" do
324
+ it "will append data" do
325
+ subject.update_summary_meta({:summary=>"app", :type=>"test", :data=>1})
326
+ subject.update_summary_meta({:summary=>"app", :type=>"test", :data=>2})
327
+ subject.summary[:test].should eq([1,2])
328
+ end
329
+
330
+ it "will set data" do
331
+ subject.update_summary_meta({:summary=>"set", :type=>"test", :key=>'a', :data=>1})
332
+ subject.update_summary_meta({:summary=>"set", :type=>"test", :key=>'b', :data=>2})
333
+ subject.summary[:test].should eq({'a'=>1, 'b'=>2})
334
+ end
335
+
336
+ it "will increment data" do
337
+ subject.update_summary_meta({:summary=>"inc", :type=>"test", :data=>1})
338
+ subject.summary[:test].should eq(1)
339
+ subject.update_summary_meta({:summary=>"inc", :type=>"test", :data=>2})
340
+ subject.summary[:test].should eq(3)
341
+ end
342
+
343
+ it "will decrement data" do
344
+ subject.update_summary_meta({:summary=>"inc", :type=>"test", :data=>4})
345
+ subject.summary[:test].should eq(4)
346
+ subject.update_summary_meta({:summary=>"dec", :type=>"test", :data=>2})
347
+ subject.summary[:test].should eq(2)
348
+ end
349
+
350
+ it "will reset data" do
351
+ subject.update_summary_meta({:summary=>"inc", :type=>"test", :data=>4})
352
+ subject.summary[:test].should eq(4)
353
+ subject.update_summary_meta({:summary=>"res", :type=>"test"})
354
+ subject.summary[:test].should be_nil
355
+ subject.update_summary_meta({:summary=>"inc", :type=>"test", :data=>4})
356
+ subject.update_summary_meta({:summary=>"inc", :type=>"test2", :data=>4})
357
+ subject.summary[:test].should eq(4)
358
+ subject.summary[:test2].should eq(4)
359
+ subject.update_summary_meta({:summary=>"res", :type=>"all"})
360
+ subject.summary.should eq({})
361
+ end
362
+ end
363
+
323
364
  context "integration" do
324
365
  it "will track progress" do
325
366
  task0 = BackgroundQueue::ServerLib::Task.new(:owner_id, :job_id, :id0, 1, :worker, {}, {:exclude=>true})
@@ -64,7 +64,7 @@ describe BackgroundQueue::ServerLib::WorkerThread do
64
64
  server.stub('running?'=>true)
65
65
  worker = double("worker")
66
66
  task = DefaultTask.new
67
- server.error_tasks.should_receive(:add_task).with(task)
67
+ server.task_queue.should_receive(:add_task_to_error_list).with(task)
68
68
  worker_client = double("worker_client")
69
69
  subject.should_receive(:build_client).and_return(worker_client)
70
70
  worker_client.should_receive(:send_request).with(worker, task, :secret).and_return(:fatal_error)
@@ -77,7 +77,7 @@ describe BackgroundQueue::ServerLib::WorkerThread do
77
77
  server.stub('running?'=>true)
78
78
  worker = double("worker")
79
79
  task = DefaultTask.new
80
- server.error_tasks.should_receive(:add_task).with(task)
80
+ server.task_queue.should_receive(:add_task_to_error_list).with(task)
81
81
  worker_client = double("worker_client")
82
82
  subject.should_receive(:build_client).and_return(worker_client)
83
83
  worker_client.should_receive(:send_request).with(worker, task, :secret).and_return(:worker_error)
@@ -23,5 +23,35 @@ describe "Utils" do
23
23
  any_hash["a"].should eq(:b)
24
24
  end
25
25
  end
26
+
27
+
28
+ context "#current_environment" do
29
+ it "gets_the_current environment from env" do
30
+ ENV.should_receive(:has_key?).with("RAILS_ENV") { true }
31
+ ENV.should_receive(:[]).with("RAILS_ENV") { :the_env }
32
+ BackgroundQueue::Utils.current_environment.should eq(:the_env)
33
+ end
34
+
35
+ it "gets_the_current environment from Rails" do
36
+ ENV.should_receive(:has_key?).with("RAILS_ENV") { false }
37
+ Rails.should_receive(:env) { :the_env }
38
+ BackgroundQueue::Utils.current_environment.should eq(:the_env)
39
+ end
40
+
41
+ context "with development environment" do
42
+ before do
43
+ BackgroundQueue::Config.stub(:current_environment) { 'development' }
44
+ end
45
+
46
+ it "extracts the correct environment entry from the hash" do
47
+ BackgroundQueue::Config.__prv__extract_enviroment_entry({:development=>:test}, :path_that_exists).should eq(:test)
48
+ end
49
+
50
+ it "errors if the YAML does not define environment entry" do
51
+ File.stub(:expand_path) { :expanded_path }
52
+ expect { BackgroundQueue::Config.__prv__extract_enviroment_entry({:test=>:test}, :path_that_exists).should eq(:test)}.to raise_error(BackgroundQueue::LoadError, "Error loading YAML for background_queue configuration file at 'expanded_path': missing enviroment root entry: development")
53
+ end
54
+ end
55
+ end
26
56
 
27
57
  end
@@ -87,9 +87,11 @@ describe "Calling" do
87
87
 
88
88
  context "#call_worker" do
89
89
  it "will call worker.run within a render block" do
90
- env = double("env")
90
+ env = double("env", :step=>nil)
91
91
  worker = double("worker")
92
92
  worker.should_receive(:set_environment).with(nil)
93
+ subject.should_receive(:set_process_name).with(env)
94
+ subject.should_receive(:revert_process_name)
93
95
  env.should_receive(:set_output).with(:output)
94
96
  worker.should_receive(:run)
95
97
  subject.should_receive(:render) { |opts|
@@ -17,7 +17,8 @@ describe BackgroundQueue::Worker::Environment do
17
17
  {
18
18
  :auth=>"ABCD",
19
19
  :task=>{:params=>{:a=>"b"}, :owner_id=>'oid', :job_id=>'jid', :id=>'tid', :priority=>1}.to_json,
20
- :server_port=>213
20
+ :server_port=>213,
21
+ :step=>"start"
21
22
  }
22
23
  }
23
24
 
@@ -42,6 +43,7 @@ describe BackgroundQueue::Worker::Environment do
42
43
  subject.job_id.should eq("jid")
43
44
  subject.task_id.should eq("tid")
44
45
  subject.priority.should eq(1)
46
+ subject.step.should eq("start")
45
47
  end
46
48
 
47
49
  it "will error if the task definition is not valid json" do
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'background_queue_worker'
3
+
4
+
5
+ module ActiveRecord
6
+ class Base
7
+ @@logger = :ar_logger
8
+
9
+ def self.logger
10
+ @@logger
11
+ end
12
+
13
+ def self.logger=(other)
14
+ @@logger = other
15
+ end
16
+ end
17
+ end
18
+
19
+ describe BackgroundQueue::Worker::Logger do
20
+
21
+ let(:faux_logger) {
22
+ double("logger")
23
+ }
24
+
25
+ context "#build_logger" do
26
+ it "will init a logger object" do
27
+ logger = BackgroundQueue::Worker::Logger.build_logger("/tmp/bgq_test1.log", "task_key", Logger::DEBUG)
28
+ end
29
+ end
30
+
31
+ context "#init_logger" do
32
+ it "will reset the system loggers" do
33
+ BackgroundQueue::Utils.should_receive(:current_root).and_return("ROOT")
34
+ BackgroundQueue::Worker::Logger.should_receive(:build_logger).with("ROOT/log/workers/worker_name-owner_key-job_key.log", "task_key", :level).and_return(faux_logger)
35
+
36
+ faux_logger.should_receive(:set_previous_state).with({:ar_base=>:ar_logger, :rails_default_logger=>:abc})
37
+
38
+ RAILS_DEFAULT_LOGGER = :abc
39
+
40
+ logger = BackgroundQueue::Worker::Logger.init_logger("worker_name", "owner_key", "job_key", "task_key", :level)
41
+
42
+ RAILS_DEFAULT_LOGGER.should be(logger)
43
+ ActiveRecord::Base.logger.should be(logger)
44
+
45
+ end
46
+ end
47
+
48
+ context "#revert_to_previous_state" do
49
+ it "will set the state back" do
50
+ logger = BackgroundQueue::Worker::Logger.new("/tmp/bgq_test1.log", "task_key")
51
+ logger.set_previous_state({:ar_base=>:ar_logger1, :rails_default_logger=>:abc1})
52
+ logger.revert_to_previous_state
53
+ RAILS_DEFAULT_LOGGER.should be(:abc1)
54
+ ActiveRecord::Base.logger.should be(:ar_logger1)
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,82 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'background_queue_worker'
3
+
4
+
5
+ describe BackgroundQueue::Worker::Progress do
6
+
7
+ let(:callback_object) {
8
+ double("callback_object")
9
+ }
10
+
11
+ subject { BackgroundQueue::Worker::Progress.new(callback_object) }
12
+
13
+ context "#start" do
14
+ it "will start at zero with the caption" do
15
+ callback_object.should_receive(:set_progress).with("test", 0.0, subject)
16
+ subject.start("test")
17
+ end
18
+
19
+ it "will start at zero with no caption" do
20
+ callback_object.should_receive(:set_progress).with("", 0.0, subject)
21
+ subject.start("")
22
+ end
23
+ end
24
+
25
+ context "#set_main_caption" do
26
+ it "will update the main caption" do
27
+ callback_object.should_receive(:set_progress).with("test", 0.0, subject)
28
+ callback_object.should_receive(:set_progress).with("test2", 0.0, subject)
29
+ subject.start("test")
30
+ subject.set_main_caption("test2")
31
+ end
32
+ end
33
+
34
+ context "#finish" do
35
+ it "will set the progress to 100% and reset the caption" do
36
+ callback_object.should_receive(:set_progress).with("test", 100.0, subject)
37
+ subject.finish("test")
38
+ end
39
+ end
40
+
41
+ context "#register_task" do
42
+ it "will store the weight against the key" do
43
+ subject.register_task(:key, 10)
44
+ subject.registered_tasks[:key].should eq(10)
45
+ end
46
+ end
47
+
48
+ context "#get_task_size" do
49
+ it "will get the size of the task" do
50
+ subject.register_task(:key, 10)
51
+ subject.register_task(:key2, 10)
52
+ subject.get_task_size(:key).should eq(50)
53
+ end
54
+
55
+ end
56
+
57
+ context "#start_task" do
58
+ it "will finish any existing task" do
59
+ callback_object.stub(:set_progress)
60
+ subject.register_task(:key, 10)
61
+ subject.register_task(:key2, 10)
62
+ subject.start("main")
63
+ subject.start_task(:key,"sub")
64
+ subject.get_percent.should eq(0)
65
+ subject.get_caption.should eq("main: sub")
66
+ subject.start_task(:key2, "sub2")
67
+ subject.get_percent.should eq(50)
68
+ subject.get_caption.should eq("main: sub2")
69
+ end
70
+ end
71
+
72
+ context "#set_task_steps" do
73
+ it "will calculate the step size" do
74
+ callback_object.stub(:set_progress)
75
+ subject.register_task(:key, 10)
76
+ subject.start_task(:key,"sub")
77
+ subject.set_task_steps(50)
78
+ subject.inc
79
+ subject.get_percent.should eq(2)
80
+ end
81
+ end
82
+ end
@@ -72,7 +72,7 @@ describe BackgroundQueue::Worker::WorkerLoader do
72
72
  it "will reload the worker if the filestamp has changed" do
73
73
  File.should_receive(:mtime).with(:path).and_return(Time.at(11))
74
74
  subject.should_receive(:load_file).with(:path).and_return(true)
75
- subject.should_receive(:load_class).with(:worker_name).and_return(:new_worker)
75
+ subject.should_receive(:load_class).with(:worker_name, :path).and_return(:new_worker)
76
76
 
77
77
  subject.reload_if_updated(worker_entry)
78
78
  worker_entry.worker.should eq(:new_worker)
@@ -0,0 +1,18 @@
1
+ class SummaryWorker < BackgroundQueue::Worker::Base
2
+
3
+ def run
4
+ begin
5
+ if params[:mode] == "summary"
6
+ raise "Invalid Summary (#{summary.inspect})" if summary[:test] != [1, 2] && summary[:test] != [2, 1]
7
+ else
8
+ raise "Missing TestId" if params[:test_id].nil?
9
+ add_progress_meta(:meta, {:test_meta=>"something"})
10
+ append_summary(:test, params[:test_id])
11
+ end
12
+ set_progress("Done", 100)
13
+ rescue Exception=>e
14
+ puts e.message
15
+ puts e.backtrace.join("\n")
16
+ end
17
+ end
18
+ end
@@ -99,13 +99,14 @@ shared_examples "a queue registry" do
99
99
  bg.add_item(task2)
100
100
  bg
101
101
  }
102
+
102
103
 
103
104
  it "will add to stalled items if no items left for queue" do
104
- subject.should_receive(:remove_item_from_queue).with(any_args) { [true, 2, :task]}
105
+ subject.should_receive(:remove_item_from_queue).with(any_args) { [true, 2, task1]}
105
106
  queue_class.any_instance.stub(:empty?) { true }
106
107
  subject.should_receive(:stall_queue)
107
108
  subject.__prv__get_queue_for_priority(2, false)
108
- subject.next_item.should eq(:task)
109
+ subject.next_item.should eq(task1)
109
110
  subject.__prv__get_queues.should have(1).items
110
111
  subject.__prv__get_queues.first.priority.should eq(3)
111
112
  #make sure the owner was removed
@@ -115,7 +116,7 @@ shared_examples "a queue registry" do
115
116
 
116
117
 
117
118
  it "will lower priority when items left are lower priority" do
118
- subject.should_receive(:remove_item_from_queue).with(any_args) { [true, 2, :task]}
119
+ subject.should_receive(:remove_item_from_queue).with(any_args) { [true, 2, task1]}
119
120
  queue_class.any_instance.stub(:empty?) { false }
120
121
 
121
122
  subject.__prv__get_queue(:owner_id2, true).last.set_priority(3)
@@ -55,4 +55,28 @@ class SimpleTask
55
55
  def initial_progress_caption
56
56
  @options[:initial_progress_caption]
57
57
  end
58
+
59
+ def send_summary?
60
+ @options[:send_summary]
61
+ end
62
+
63
+ def step
64
+ @options[:step]
65
+ end
66
+
67
+ def set_error_status(e_status)
68
+ @error_status = e_status
69
+ end
70
+
71
+ def get_error_status
72
+ @error_status
73
+ end
74
+
75
+ def waiting_to_retry?
76
+ @error_status == :waiting_to_retry
77
+ end
78
+
79
+ def replaced_while_waiting_to_retry?
80
+ @error_status == :replaced_while_waiting_to_retry
81
+ end
58
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: background_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-17 00:00:00.000000000 Z
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &19238880 !ruby/object:Gem::Requirement
16
+ requirement: &4758140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *19238880
24
+ version_requirements: *4758140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rufus-scheduler
27
- requirement: &20184220 !ruby/object:Gem::Requirement
27
+ requirement: &4769420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *20184220
35
+ version_requirements: *4769420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: eventmachine
38
- requirement: &20182860 !ruby/object:Gem::Requirement
38
+ requirement: &5013180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.12.10
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *20182860
46
+ version_requirements: *5013180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: ipaddress
49
- requirement: &20180600 !ruby/object:Gem::Requirement
49
+ requirement: &5020560 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.8.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *20180600
57
+ version_requirements: *5020560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: ipaddress
60
- requirement: &20178440 !ruby/object:Gem::Requirement
60
+ requirement: &5033300 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.8.0
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *20178440
68
+ version_requirements: *5033300
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: algorithms
71
- requirement: &20177140 !ruby/object:Gem::Requirement
71
+ requirement: &5030560 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.5.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *20177140
79
+ version_requirements: *5030560
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &19623560 !ruby/object:Gem::Requirement
82
+ requirement: &5028420 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.9.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *19623560
90
+ version_requirements: *5028420
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &19621540 !ruby/object:Gem::Requirement
93
+ requirement: &5027080 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.8.3
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *19621540
101
+ version_requirements: *5027080
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: yard
104
- requirement: &19617840 !ruby/object:Gem::Requirement
104
+ requirement: &5042180 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0.7'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *19617840
112
+ version_requirements: *5042180
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rdoc
115
- requirement: &19615920 !ruby/object:Gem::Requirement
115
+ requirement: &5041260 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '3.12'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *19615920
123
+ version_requirements: *5041260
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: bundler
126
- requirement: &20601320 !ruby/object:Gem::Requirement
126
+ requirement: &5038300 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 1.0.0
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *20601320
134
+ version_requirements: *5038300
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: redcarpet
137
- requirement: &20599700 !ruby/object:Gem::Requirement
137
+ requirement: &5036560 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: 2.1.1
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *20599700
145
+ version_requirements: *5036560
146
146
  description: Organise background tasks so they will not overload the machine(s) running
147
147
  the tasks, while still giving a fair, balanced allocation of running time to members
148
148
  in the queue
@@ -199,6 +199,8 @@ files:
199
199
  - lib/background_queue/worker/calling.rb
200
200
  - lib/background_queue/worker/config.rb
201
201
  - lib/background_queue/worker/environment.rb
202
+ - lib/background_queue/worker/logger.rb
203
+ - lib/background_queue/worker/progress.rb
202
204
  - lib/background_queue/worker/worker_loader.rb
203
205
  - lib/background_queue_server.rb
204
206
  - lib/background_queue_worker.rb
@@ -213,6 +215,7 @@ files:
213
215
  - spec/background_queue/server_lib/error_task_list_spec.rb
214
216
  - spec/background_queue/server_lib/event_connection_spec.rb
215
217
  - spec/background_queue/server_lib/event_server_spec.rb
218
+ - spec/background_queue/server_lib/integration/error_handling_spec.rb
216
219
  - spec/background_queue/server_lib/integration/full_test_spec.rb
217
220
  - spec/background_queue/server_lib/integration/queue_integration_spec.rb
218
221
  - spec/background_queue/server_lib/integration/serialize_spec.rb
@@ -232,12 +235,15 @@ files:
232
235
  - spec/background_queue/worker/base_spec.rb
233
236
  - spec/background_queue/worker/calling_spec.rb
234
237
  - spec/background_queue/worker/environment_spec.rb
238
+ - spec/background_queue/worker/logger_spec.rb
239
+ - spec/background_queue/worker/progress_spec.rb
235
240
  - spec/background_queue/worker/worker_loader_spec.rb
236
241
  - spec/resources/config-client.yml
237
242
  - spec/resources/config-serialize.yml
238
243
  - spec/resources/config.yml
239
244
  - spec/resources/example_worker.rb
240
245
  - spec/resources/example_worker_with_error.rb
246
+ - spec/resources/summary_worker.rb
241
247
  - spec/resources/test_worker.rb
242
248
  - spec/shared/queue_registry_shared.rb
243
249
  - spec/spec_helper.rb
@@ -261,7 +267,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
261
267
  version: '0'
262
268
  segments:
263
269
  - 0
264
- hash: 613144620285186166
270
+ hash: 1524954307267393348
265
271
  required_rubygems_version: !ruby/object:Gem::Requirement
266
272
  none: false
267
273
  requirements: