Class: Roundhouse::JobSet

Inherits:
SortedSet show all
Defined in:
lib/roundhouse/api.rb

Direct Known Subclasses

DeadSet, RetrySet, ScheduledSet

Instance Attribute Summary

Attributes inherited from SortedSet

#name

Instance Method Summary collapse

Methods inherited from SortedSet

#clear, #initialize, #size

Constructor Details

This class inherits a constructor from Roundhouse::SortedSet

Instance Method Details

#delete_by_jid(score, jid) ⇒ Object Also known as: delete



586
587
588
589
590
591
592
593
594
595
596
597
598
599
# File 'lib/roundhouse/api.rb', line 586

def delete_by_jid(score, jid)
  Roundhouse.redis do |conn|
    elements = conn.zrangebyscore(name, score, score)
    elements.each do |element|
      message = Roundhouse.load_json(element)
      if message["jid"] == jid
        ret = conn.zrem(name, element)
        @_size -= 1 if ret
        break ret
      end
      false
    end
  end
end

#delete_by_value(name, value) ⇒ Object



578
579
580
581
582
583
584
# File 'lib/roundhouse/api.rb', line 578

def delete_by_value(name, value)
  Roundhouse.redis do |conn|
    ret = conn.zrem(name, value)
    @_size -= 1 if ret
    ret
  end
end

#eachObject



537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
# File 'lib/roundhouse/api.rb', line 537

def each
  initial_size = @_size
  offset_size = 0
  page = -1
  page_size = 50

  loop do
    range_start = page * page_size + offset_size
    range_end   = page * page_size + offset_size + (page_size - 1)
    elements = Roundhouse.redis do |conn|
      conn.zrange name, range_start, range_end, with_scores: true
    end
    break if elements.empty?
    page -= 1
    elements.each do |element, score|
      yield SortedEntry.new(self, score, element)
    end
    offset_size = initial_size - @_size
  end
end

#fetch(score, jid = nil) ⇒ Object



558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
# File 'lib/roundhouse/api.rb', line 558

def fetch(score, jid = nil)
  elements = Roundhouse.redis do |conn|
    conn.zrangebyscore(name, score, score)
  end

  elements.inject([]) do |result, element|
    entry = SortedEntry.new(self, score, element)
    if jid
      result << entry if entry.jid == jid
    else
      result << entry
    end
    result
  end
end

#find_job(jid) ⇒ Object



574
575
576
# File 'lib/roundhouse/api.rb', line 574

def find_job(jid)
  self.detect { |j| j.jid == jid }
end

#schedule(timestamp, message) ⇒ Object



531
532
533
534
535
# File 'lib/roundhouse/api.rb', line 531

def schedule(timestamp, message)
  Roundhouse.redis do |conn|
    conn.zadd(name, timestamp.to_f.to_s, Roundhouse.dump_json(message))
  end
end