qpush 0.1.7 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4dd90aa194184f401041a0aacdd7f9a2d63615b2
4
- data.tar.gz: e4215be59cbe6de524c3b29f9afed23be68c70a5
3
+ metadata.gz: 5b7af474af17142a61d366bd6f9112b2abede127
4
+ data.tar.gz: 7ad15b8b50d6a129f5dff7ec7039f554fc7f11d0
5
5
  SHA512:
6
- metadata.gz: 30432e4910a60a4d82acfec8ba806ba8b1671ac9de0bdad3feff9fb573e87417a90182f51325c1994befb35f6bf709b179e6b2d4ee846088d2c285c8c6238180
7
- data.tar.gz: 19de3dfc8b141ce765894b0614994a5db361b268d566e96696373f6223a4e9590a53bcbddea94e04109ec03328f6319e62e4a69461416d1485df3e35c54156da
6
+ metadata.gz: f85e768b6f01d936fe3a156abee7a815d7a5a9965a970c9d62caffed9ca08262b74410fcef22d91c1f98cfb5b69226f8466d37e52cbae8a4c17fdc32ebb40aca
7
+ data.tar.gz: 86c720933d37d2bfbd3a9633c07bf5c691e8c85aaceaba3cbe280fd9bc05ec06c63948fdf755a20aa698117897f53d6ea0909acb060a061e60aa7239afb1320a
@@ -1,4 +1,10 @@
1
1
  c
2
+ job.valid?
3
+ job.setup
4
+ job
5
+ c
6
+ json
7
+ c
2
8
  self.config
3
9
  config
4
10
  Server.config
Binary file
@@ -11,7 +11,7 @@ module QPush
11
11
  yield(config)
12
12
  end
13
13
 
14
- def reset_
14
+ def reset
15
15
  @config = nil
16
16
  @redis_pool = nil
17
17
  end
@@ -15,41 +15,37 @@ module QPush
15
15
  end
16
16
  end
17
17
 
18
- # The ApiWrapper provides simple wrapper functions for all the API
18
+ # The ApiWrapper provides simple functions for all the API
19
19
  # classes available for jobs. This provides a single entry point to
20
20
  # the API's for job objects.
21
21
  #
22
- class ApiWrapper
23
- def initialize(job)
24
- @job = job
25
- end
26
-
22
+ module ApiWrapper
27
23
  def queue
28
- Apis::Queue.call(@job)
24
+ Apis::Queue.call(self)
29
25
  end
30
26
 
31
27
  def perform
32
- Apis::Perform.call(@job)
28
+ Apis::Perform.call(self)
33
29
  end
34
30
 
35
31
  def execute
36
- Apis::Execute.call(@job)
32
+ Apis::Execute.call(self)
37
33
  end
38
34
 
39
35
  def delay
40
- Apis::Delay.call(@job, :delay)
36
+ Apis::Delay.call(self, :delay)
41
37
  end
42
38
 
43
39
  def retry
44
- Apis::Delay.call(@job, :retry)
40
+ Apis::Delay.call(self, :retry)
45
41
  end
46
42
 
47
43
  def morgue
48
- Apis::Morgue.call(@job)
44
+ Apis::Morgue.call(self)
49
45
  end
50
46
 
51
47
  def setup
52
- Apis::Setup.call(@job)
48
+ Apis::Setup.call(self)
53
49
  end
54
50
  end
55
51
  end
@@ -18,8 +18,8 @@ module QPush
18
18
 
19
19
  def delay_job
20
20
  Server.redis do |conn|
21
- conn.hincrby(Server.keys.stats, @stat, 1)
22
- conn.zadd(Server.keys.delay, @time, @job.to_json)
21
+ conn.hincrby(Server.keys[:stats], @stat, 1)
22
+ conn.zadd(Server.keys[:delay], @time, @job.to_json)
23
23
  end
24
24
  end
25
25
 
@@ -23,7 +23,7 @@ module QPush
23
23
  end
24
24
 
25
25
  def stat_increment
26
- Server.redis { |c| c.hincrby(Server.keys.stats, 'failed', 1) }
26
+ Server.redis { |c| c.hincrby(Server.keys[:stats], 'failed', 1) }
27
27
  end
28
28
 
29
29
  def log_error
@@ -18,8 +18,8 @@ module QPush
18
18
 
19
19
  def update_history
20
20
  Server.redis do |c|
21
- c.lpush(Server.keys.history, to_json)
22
- c.ltrim(Server.keys.history, 0, 10)
21
+ c.lpush(Server.keys[:history], to_json)
22
+ c.ltrim(Server.keys[:history], 0, 10)
23
23
  end
24
24
  end
25
25
 
@@ -10,8 +10,8 @@ module QPush
10
10
 
11
11
  def send_to_morgue
12
12
  Server.redis do |conn|
13
- conn.hincrby(Server.keys.stats, 'dead', 1)
14
- conn.lpush(Server.keys.morgue, @job.to_json)
13
+ conn.hincrby(Server.keys[:stats], 'dead', 1)
14
+ conn.lpush(Server.keys[:morgue], @job.to_json)
15
15
  end
16
16
  end
17
17
  end
@@ -10,8 +10,8 @@ module QPush
10
10
 
11
11
  def perform_job
12
12
  Server.redis do |conn|
13
- conn.hincrby(Server.keys.stats, 'performed', 1)
14
- conn.lpush("#{Server.keys.perform}:#{@job.priority}", @job.to_json)
13
+ conn.hincrby(Server.keys[:stats], 'performed', 1)
14
+ conn.lpush("#{Server.keys[:perform]}:#{@job.priority}", @job.to_json)
15
15
  end
16
16
  end
17
17
  end
@@ -10,8 +10,8 @@ module QPush
10
10
 
11
11
  def queue_job
12
12
  Server.redis do |conn|
13
- conn.hincrby(Server.keys.stats, 'queued', 1)
14
- conn.lpush(Server.keys.queue, @job.to_json)
13
+ conn.hincrby(Server.keys[:stats], 'queued', 1)
14
+ conn.lpush(Server.keys[:queue], @job.to_json)
15
15
  end
16
16
  end
17
17
  end
@@ -18,7 +18,7 @@ module QPush
18
18
 
19
19
  def stat_increment
20
20
  Server.redis do |c|
21
- c.hincrby(Server.keys.stats, 'success', 1)
21
+ c.hincrby(Server.keys[:stats], 'success', 1)
22
22
  end
23
23
  end
24
24
 
@@ -8,6 +8,12 @@ module QPush
8
8
  def config
9
9
  @config ||= Config.new
10
10
  end
11
+
12
+ def build_worker
13
+ worker = WorkerConfig.new
14
+ yield worker
15
+ worker
16
+ end
11
17
  end
12
18
 
13
19
  class WorkerConfig
@@ -34,7 +34,7 @@ module QPush
34
34
  # If any are found, begin to update them.
35
35
  #
36
36
  def retrieve_delays
37
- delays = @conn.zrangebyscore(Server.keys.delay, 0, Time.now.to_i)
37
+ delays = @conn.zrangebyscore(Server.keys[:delay], 0, Time.now.to_i)
38
38
  delays.any? ? update_delays(delays) : @conn.unwatch
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ module QPush
42
42
  #
43
43
  def update_delays(delays)
44
44
  @conn.multi do |multi|
45
- multi.zrem(Server.keys.delay, delays)
45
+ multi.zrem(Server.keys[:delay], delays)
46
46
  delays.each { |job| perform_job(job) }
47
47
  end
48
48
  end
@@ -59,7 +59,7 @@ module QPush
59
59
  # Performs a watch on our delay list
60
60
  #
61
61
  def watch_delay
62
- @conn.watch(Server.keys.delay) do
62
+ @conn.watch(Server.keys[:delay]) do
63
63
  yield if block_given?
64
64
  end
65
65
  end
@@ -13,7 +13,7 @@ module QPush
13
13
  #
14
14
  def start
15
15
  until @done
16
- Server.redis { |c| c.setex(Server.keys.heart, 30, true) }
16
+ Server.redis { |c| c.setex(Server.keys[:heart], 30, true) }
17
17
  sleep 15
18
18
  end
19
19
  end
@@ -7,12 +7,19 @@ module QPush
7
7
  end
8
8
 
9
9
  def _register_job(base)
10
- Server.redis { |c| c.sadd(QPush::Base::KEY + ':jobs', base.name) }
10
+ Server.redis { |c| c.sadd("#{QPush::Base::KEY}:jobs", base.name) }
11
11
  end
12
12
  end
13
13
  end
14
14
 
15
- module JobHelpers
15
+ class Job < QPush::Base::Job
16
+ include QPush::Server::ApiWrapper
17
+ include ObjectValidator::Validate
18
+
19
+ def initialize(options)
20
+ super
21
+ end
22
+
16
23
  def mark_success
17
24
  @failed = false
18
25
  @total_success += 1
@@ -58,22 +65,6 @@ module QPush
58
65
  end
59
66
  end
60
67
 
61
- class Job < QPush::Base::Job
62
- extend Forwardable
63
-
64
- include QPush::Server::JobHelpers
65
- include ObjectValidator::Validate
66
-
67
-
68
- def initialize(options)
69
- super
70
- @api = ApiWrapper.new(self)
71
- end
72
-
73
- def_delegators :@api, :queue, :execute, :perform,
74
- :delay, :retry, :morgue, :setup
75
- end
76
-
77
68
  class JobValidator
78
69
  include ObjectValidator::Validator
79
70
 
@@ -28,7 +28,7 @@ module QPush
28
28
  # Performs a 'blocking pop' on our redis job list.
29
29
  #
30
30
  def retrieve_job
31
- json = Server.redis { |c| c.brpop(Server.keys.perform_list) }
31
+ json = Server.redis { |c| c.brpop(Server.keys[:perform_list]) }
32
32
  Job.new(JSON.parse(json.last))
33
33
  rescue => e
34
34
  raise ServerError, e.message
@@ -29,7 +29,7 @@ module QPush
29
29
  # Performs a 'blocking pop' on our redis job list.
30
30
  #
31
31
  def retrieve_job
32
- json = Server.redis { |c| c.brpop(Server.keys.queue) }
32
+ json = Server.redis { |c| c.brpop(Server.keys[:queue]) }
33
33
  Job.new(JSON.parse(json.last))
34
34
  rescue => e
35
35
  raise ServerError, e.message
@@ -13,7 +13,7 @@ module QPush
13
13
  end
14
14
  end
15
15
 
16
- class RedisKeys
16
+ module RedisKeys
17
17
  KEYS = [:delay,
18
18
  :queue,
19
19
  :perform,
@@ -23,25 +23,11 @@ module QPush
23
23
  :history,
24
24
  :morgue]
25
25
 
26
- attr_reader :delay, :queue, :perform, :stats, :heart,
27
- :crons, :history, :morgue
28
-
29
- def initialize(options)
30
- @namespace = options[:namespace] || 'default'
31
- @priorities = options[:priorities] || 5
32
- build_keyspaces
33
- end
34
-
35
- def perform_list
36
- @perform_list ||= (1..@priorities).collect { |num| "#{perform}:#{num}" }
37
- end
38
-
39
- private
40
-
41
- def build_keyspaces
42
- KEYS.each do |key|
43
- instance_variable_set("@#{key}", "#{QPush::Base::KEY}:#{@namespace}:#{key}")
44
- end
26
+ def self.build(namespace, priorities)
27
+ name = "#{QPush::Base::KEY}:#{namespace}"
28
+ keys = Hash[KEYS.collect { |key| [key, "#{name}:#{key}"] }]
29
+ keys[:perform_list] = (1..5).collect { |num| "#{keys[:perform]}:#{num}" }
30
+ keys
45
31
  end
46
32
  end
47
33
  end
@@ -97,7 +97,7 @@ module QPush
97
97
  end
98
98
 
99
99
  def assign_globals
100
- Server.keys = RedisKeys.new(@config.for_keys)
100
+ Server.keys = RedisKeys.build(@config.namespace, @config.priorities)
101
101
  Server.worker = self
102
102
  end
103
103
 
@@ -1,4 +1,4 @@
1
1
  module QPush
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  CODENAME = 'Sun Soaked Salamander'
4
4
  end
@@ -17,7 +17,7 @@ module QPush
17
17
 
18
18
  def retrieve_delays
19
19
  @jobs = Web.redis do |conn|
20
- conn.zrange(Web.keys.delay, 0, -1, with_scores: true)
20
+ conn.zrange(Web.keys[:delay], 0, -1, with_scores: true)
21
21
  end
22
22
  end
23
23
 
@@ -3,7 +3,7 @@ module QPush
3
3
  module Apis
4
4
  class Heart
5
5
  def call
6
- heart = Web.redis { |c| c.get(Web.keys.heart) }
6
+ heart = Web.redis { |c| c.get(Web.keys[:heart]) }
7
7
  { status: !heart.nil?, namespace: 'default' }
8
8
  end
9
9
  end
@@ -15,7 +15,7 @@ module QPush
15
15
 
16
16
  def retrieve_jobs
17
17
  @jobs = Web.redis do |conn|
18
- conn.lrange(Web.keys.history, 0, 10)
18
+ conn.lrange(Web.keys[:history], 0, 10)
19
19
  end
20
20
  end
21
21
 
@@ -17,7 +17,7 @@ module QPush
17
17
 
18
18
  def retrieve_morgue
19
19
  @morgue = Web.redis do |conn|
20
- conn.lrange(Web.keys.morgue, @start, @start + @count)
20
+ conn.lrange(Web.keys[:morgue], @start, @start + @count)
21
21
  end
22
22
  end
23
23
 
@@ -17,13 +17,13 @@ module QPush
17
17
  private
18
18
 
19
19
  def retrieve_delay
20
- delays = @conn.zrangebyscore(Web.keys.delay, @score, @score)
20
+ delays = @conn.zrangebyscore(Web.keys[:delay], @score, @score)
21
21
  delays.each
22
22
 
23
23
  # Performs a watch on our delay list
24
24
  #
25
25
  def watch_delay
26
- @conn.watch(Web.keys.delay) do
26
+ @conn.watch(Web.keys[:delay]) do
27
27
  yield if block_given?
28
28
  end
29
29
  end
@@ -18,7 +18,7 @@ module QPush
18
18
 
19
19
  def retrieve_jobs
20
20
  @jobs = Web.redis do |conn|
21
- conn.zrange(Web.keys.delay, 0, -1, with_scores: true)
21
+ conn.zrange(Web.keys[:delay], 0, -1, with_scores: true)
22
22
  end
23
23
  end
24
24
 
@@ -29,7 +29,7 @@ module QPush
29
29
 
30
30
  def retrieve_stats
31
31
  @stats = Web.redis do |conn|
32
- conn.hgetall(Web.keys.stats)
32
+ conn.hgetall(Web.keys[:stats])
33
33
  end
34
34
  end
35
35
 
@@ -49,7 +49,7 @@ module QPush
49
49
 
50
50
  def calculate_current
51
51
  Web.redis do |c|
52
- Web.keys.perform_list.collect { |list| c.llen(list) }.reduce(:+)
52
+ Web.keys[:perform_list].collect { |list| c.llen(list) }.reduce(:+)
53
53
  end
54
54
  end
55
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qpush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Sweeting
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-07 00:00:00.000000000 Z
11
+ date: 2016-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -200,6 +200,7 @@ files:
200
200
  - bin/qpush-server
201
201
  - bin/qpush-web
202
202
  - bin/setup
203
+ - dump.rdb
203
204
  - jobs/fail_job.rb
204
205
  - jobs/test_job.rb
205
206
  - lib/qpush.rb
@@ -290,9 +291,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
290
291
  version: '0'
291
292
  requirements: []
292
293
  rubyforge_project:
293
- rubygems_version: 2.5.0
294
+ rubygems_version: 2.5.1
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: Fast and simple job queue microservice for Ruby.
297
298
  test_files: []
298
- has_rdoc: