background_queue 0.3.0 → 0.6.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.
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: