Class: QueueManager::Task

Inherits:
Object
  • Object
show all
Defined in:
lib/queue_manager/task.rb

Constant Summary collapse

MARKER =
'*'
MARKED_REGEXP =

/^*/

Regexp.new("^#{92.chr}#{MARKER}")

Class Method Summary collapse

Class Method Details

.add(id) ⇒ Fixnum

Add task in redis

Parameters:

  • id (String)

    Ebook ID

Returns:

  • (Fixnum)

    Score



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}") || timestamp
    score = time + QueueManager.config.delay

    redis.multi do
      redis.zadd(QueueManager.config.queue, score, id)
    end
    return score
  end
end

.handling_queueObject

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 > timestamp

    new_score = timestamp + 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

Parameters:

  • id (String)

    Ebook ID

  • score (String)

    Score of task



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