worker-army 0.5.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.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/Rakefile +10 -7
- data/VERSION +1 -1
- data/lib/worker-army.rb +1 -0
- data/lib/worker_army/another_job.rb +10 -0
- data/lib/worker_army/example_job.rb +1 -1
- data/lib/worker_army/queue.rb +2 -2
- data/lib/worker_army/worker.rb +18 -11
- data/worker-army.gemspec +4 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d99e9dc0f645797ece237c3c921c8347ef296704
|
4
|
+
data.tar.gz: a6a474a23035b5aadcb5429bbba28b04155dbb06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 393216db68a6b8a97d091750bf12ee5e5fe532cf16de6ceb3e63bce3e495869e3ba5b576c26f5c5959a0f8537bdffee01b39b748e8baa82123c59ff9dc54cf3a
|
7
|
+
data.tar.gz: 2cc3f0ad6f50383db1a026d4b4afa99e0de14e62d2ba48fa6e0c5be1931acde14da565d321a34a208f6735103d97533562c40c1ca8b2a8785f7860164104165b
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ or use Foreman (checkout `Procfile`)
|
|
42
42
|
|
43
43
|
$ foreman start
|
44
44
|
|
45
|
-
You easily run the worker-army server on heroku. It should work out of the box. You're just going to have provide the configuration environment variables.
|
45
|
+
You easily run the worker-army server on heroku. It should work out of the box (you'll need to setup a redis database though). You're just going to have provide the configuration environment variables.
|
46
46
|
|
47
47
|
You can open the server status overview by calling the server root url:
|
48
48
|
|
@@ -64,9 +64,9 @@ Provide an (optional) URL as the last argument and worker-army will return the j
|
|
64
64
|
|
65
65
|
## Workers
|
66
66
|
|
67
|
-
You can start up a worker with
|
67
|
+
You can start up a worker with numerous job classes assigned to it with the following:
|
68
68
|
|
69
|
-
$ rake start_worker[ExampleJob]
|
69
|
+
$ rake start_worker[ExampleJob,AnotherJob]
|
70
70
|
|
71
71
|
## Jobs
|
72
72
|
|
data/Rakefile
CHANGED
@@ -42,14 +42,17 @@ Rake::RDocTask.new do |rdoc|
|
|
42
42
|
end
|
43
43
|
|
44
44
|
require File.dirname(__FILE__) + '/lib/worker-army'
|
45
|
-
task '
|
46
|
-
WorkerArmy::Worker.new(ExampleJob.new).process_queue
|
45
|
+
task 'start_example_workers' do
|
46
|
+
WorkerArmy::Worker.new([ExampleJob.new, AnotherJob.new]).process_queue
|
47
47
|
end
|
48
48
|
|
49
|
-
desc "Start a worker-army worker to execute
|
50
|
-
task :start_worker, :
|
51
|
-
if args[:
|
52
|
-
|
53
|
-
|
49
|
+
desc "Start a worker-army worker to execute job classes"
|
50
|
+
task :start_worker, :job_classes do |t, args|
|
51
|
+
if args[:job_classes]
|
52
|
+
clazzes = []
|
53
|
+
args[:job_classes].to_s.split(",").each do |jc|
|
54
|
+
clazzes << Object.const_get(jc.lstrip.rstrip).new
|
55
|
+
end
|
56
|
+
WorkerArmy::Worker.new(clazzes).process_queue
|
54
57
|
end
|
55
58
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
data/lib/worker-army.rb
CHANGED
@@ -7,3 +7,4 @@ require File.dirname(__FILE__) + '/worker_army/queue'
|
|
7
7
|
require File.dirname(__FILE__) + '/worker_army/worker'
|
8
8
|
require File.dirname(__FILE__) + '/worker_army/client'
|
9
9
|
require File.dirname(__FILE__) + '/worker_army/example_job'
|
10
|
+
require File.dirname(__FILE__) + '/worker_army/another_job'
|
data/lib/worker_army/queue.rb
CHANGED
@@ -48,9 +48,9 @@ module WorkerArmy
|
|
48
48
|
queue_name: queue_name }
|
49
49
|
end
|
50
50
|
|
51
|
-
def pop(
|
51
|
+
def pop(job_instances, queue_prefix = "queue")
|
52
52
|
raise "No redis connection!" unless Queue.redis_instance
|
53
|
-
return Queue.redis_instance.blpop("#{queue_prefix}_#{
|
53
|
+
return Queue.redis_instance.blpop(job_instances.collect {|j| "#{queue_prefix}_#{j.class.name}"})
|
54
54
|
end
|
55
55
|
|
56
56
|
def save_result(data)
|
data/lib/worker_army/worker.rb
CHANGED
@@ -6,26 +6,33 @@ require File.dirname(__FILE__) + '/base'
|
|
6
6
|
|
7
7
|
module WorkerArmy
|
8
8
|
class Worker < Base
|
9
|
-
attr_accessor :queue, :
|
10
|
-
def initialize(
|
9
|
+
attr_accessor :queue, :jobs, :job_names, :worker_name, :processed, :failed
|
10
|
+
def initialize(jobs, worker_name = nil)
|
11
11
|
@queue = WorkerArmy::Queue.new
|
12
|
-
@
|
12
|
+
@log = WorkerArmy::Log.new.log
|
13
|
+
@job_names = []
|
14
|
+
@jobs = jobs
|
15
|
+
if @jobs and @jobs.size > 0
|
16
|
+
@jobs.each do |job|
|
17
|
+
job.log = @log if job.respond_to?(:log)
|
18
|
+
@job_names << job.class.name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
@job_names = @job_names.uniq
|
13
22
|
@worker_name = worker_name
|
14
23
|
@host_name = Socket.gethostname
|
15
24
|
@processed = 0
|
16
25
|
@failed = 0
|
17
26
|
@config = self.config
|
18
|
-
@log = WorkerArmy::Log.new.log
|
19
27
|
end
|
20
28
|
|
21
29
|
def process_queue
|
22
|
-
raise "No job
|
23
|
-
@
|
24
|
-
@queue.ping(worker_pid: Process.pid, job_name: @job.class.name, host_name: @host_name,
|
30
|
+
raise "No job classes set!" if @jobs.nil? or @jobs.size == 0
|
31
|
+
@queue.ping(worker_pid: Process.pid, job_names: @job_names.join(", "), host_name: @host_name,
|
25
32
|
timestamp: Time.now.utc.to_i)
|
26
|
-
@log.info("Worker #{@host_name}-#{Process.pid} => Queue: queue_#{
|
33
|
+
@job_names.each {|job| @log.info("Worker #{@host_name}-#{Process.pid} => Queue: queue_#{job.class.name}")}
|
27
34
|
@log.info("Worker #{@host_name}-#{Process.pid} => Processed: #{@processed} - Failed: #{@failed}")
|
28
|
-
list, element = @queue.pop(@
|
35
|
+
list, element = @queue.pop(@jobs)
|
29
36
|
if list and element
|
30
37
|
execute_job(list, element, 0)
|
31
38
|
end
|
@@ -40,10 +47,10 @@ module WorkerArmy
|
|
40
47
|
data = JSON.parse(element)
|
41
48
|
job_id = data['job_id']
|
42
49
|
callback_url = data['callback_url']
|
43
|
-
if @
|
50
|
+
if @jobs and @job_names.include?(data['job_class'])
|
44
51
|
@queue.add_current_job(job_id)
|
45
52
|
started_at = Time.now.utc.to_i
|
46
|
-
response_data = @
|
53
|
+
response_data = @jobs.select {|j| j.class.name == data['job_class']}.first.perform(data)
|
47
54
|
response_data = {} unless response_data
|
48
55
|
if callback_url and not callback_url.empty?
|
49
56
|
response_data.merge!(callback_url: callback_url)
|
data/worker-army.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: worker-army 0.
|
5
|
+
# stub: worker-army 0.6.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "worker-army"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.6.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Oliver Kiessler"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-07-24"
|
15
15
|
s.description = "Simple redis based worker queue with a HTTP/Rest interface"
|
16
16
|
s.email = "kiessler@inceedo.com"
|
17
17
|
s.executables = ["worker_army"]
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
"bin/worker_army",
|
33
33
|
"config.ru",
|
34
34
|
"lib/worker-army.rb",
|
35
|
+
"lib/worker_army/another_job.rb",
|
35
36
|
"lib/worker_army/base.rb",
|
36
37
|
"lib/worker_army/client.rb",
|
37
38
|
"lib/worker_army/example_job.rb",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: worker-army
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oliver Kiessler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- bin/worker_army
|
172
172
|
- config.ru
|
173
173
|
- lib/worker-army.rb
|
174
|
+
- lib/worker_army/another_job.rb
|
174
175
|
- lib/worker_army/base.rb
|
175
176
|
- lib/worker_army/client.rb
|
176
177
|
- lib/worker_army/example_job.rb
|