qpush 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
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: