class Sidekiq::Tip::Server::Middleware

Public Class Methods

new(options={}) click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 5
def initialize(options={})
  @start_at  = options.fetch(:start_at,  [0, 0, 0]) # hour, minutes, second
  @finish_at = options.fetch(:finish_at, [23, 59, 59]) # hour, minutes, second
end

Public Instance Methods

call(worker, msg, queue) { || ... } click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 10
def call(worker, msg, queue)
  fetch_times(msg)

  if appropriate_time_interval?
    yield
  else
    reenqueue(msg, queue)
  end
end

Private Instance Methods

appropriate_time_interval?() click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 35
def appropriate_time_interval?
  current_time.between?(start_time, finish_time)
end
current_time() click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 49
def current_time
  Time.now.utc
end
fetch_times(msg) click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 30
def fetch_times(msg)
  @start_at = msg.fetch('start_at', @start_at)
  @finish_at = msg.fetch('finish_at', @finish_at)
end
finish_time() click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 44
def finish_time
  hour, min, sec = @finish_at
  Time.utc(current_time.year, current_time.month, current_time.day, hour, min, sec)
end
next_start_time() click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 53
def next_start_time
  start_time + 86400
end
reenqueue(msg, queue) click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 22
def reenqueue(msg, queue)
  payload = Sidekiq.dump_json(msg)

  Sidekiq.redis do |conn|
    conn.zadd(queue, next_start_time.to_f.to_s, payload)
  end
end
start_time() click to toggle source
# File lib/sidekiq/tip/server/middleware.rb, line 39
def start_time
  hour, min, sec = @start_at
  Time.utc(current_time.year, current_time.month, current_time.day, hour, min, sec)
end