Class: QueueManager::Task
- Inherits:
-
Object
- Object
- QueueManager::Task
- Defined in:
- lib/queue_manager/task.rb
Constant Summary collapse
- MARKER =
'*'- MARKED_REGEXP =
/^*/
Regexp.new("^#{92.chr}#{MARKER}")
Class Method Summary collapse
-
.add(id) ⇒ Fixnum
Add task in redis.
-
.handling_queue ⇒ Object
Check queue and run tasks.
-
.remove(id, score) ⇒ Object
Remove task from redis by score.
Class Method Details
.add(id) ⇒ Fixnum
Add task in redis
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/queue_manager/task.rb', line 19 def add(id) transaction do time = redis.zscore(QueueManager.config.queue, "#{MARKER}#{id}") || score = time + QueueManager.config.delay redis.multi do redis.zadd(QueueManager.config.queue, score, id) end return score end end |
.handling_queue ⇒ Object
Check queue and run tasks
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/queue_manager/task.rb', line 53 def handling_queue transaction do # Return the first element from range id, score = redis.zrange(QueueManager.config.queue, 0, 0, with_scores: true).flatten return false if id.blank? && score.blank? return false if score > new_score = + QueueManager.config.timeout redis.multi do if MARKED_REGEXP =~ id redis.zadd(QueueManager.config.queue, new_score, id) else redis.zrem(QueueManager.config.queue, id) redis.zadd(QueueManager.config.queue, new_score, "#{MARKER}#{id}") end end if QueueManager.config.worker.present? QueueManager.config.worker.constantize.perform_async id.gsub(MARKED_REGEXP, '') end end end |
.remove(id, score) ⇒ Object
Remove task from redis by score
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/queue_manager/task.rb', line 37 def remove(id, score) transaction do marked_id = "#{MARKER}#{id}" redis_score = redis.zscore(QueueManager.config.queue, marked_id) if score.to_i == redis_score.to_i redis.multi do redis.zrem(QueueManager.config.queue, marked_id) end end end end |