module Jober

Constants

VERSION

Attributes

namespace[RW]

Public Class Methods

add_class(klass) click to toggle source
# File lib/jober.rb, line 60
def add_class(klass)
  classes << klass unless internal_classes_names.include?(klass.to_s)
end
after_fork(&block) click to toggle source
# File lib/jober.rb, line 64
def after_fork(&block)
  @after_fork = block
end
auto_classes() click to toggle source
# File lib/jober.rb, line 52
def auto_classes
  classes.reject &:manual?
end
call_after_fork() click to toggle source
# File lib/jober.rb, line 68
def call_after_fork
  @after_fork.call if @after_fork
end
catch() { || ... } click to toggle source
# File lib/jober.rb, line 158
def catch(&block)
  yield
rescue Object => ex
  Jober.exception(ex)
  nil
end
classes() click to toggle source
# File lib/jober.rb, line 48
def classes
  @classes ||= []
end
default_interval() click to toggle source
# File lib/jober.rb, line 146
def default_interval
  @default_interval ||= 5 * 60
end
default_interval=(di) click to toggle source
# File lib/jober.rb, line 150
def default_interval=(di)
  @default_interval = di
end
dump(obj) click to toggle source
# File lib/jober.rb, line 72
def dump(obj)
  Marshal.dump(obj)
end
dump_args(*args) click to toggle source
# File lib/jober.rb, line 80
def dump_args(*args)
  dump(args)
end
enqueue(queue_name, *args) click to toggle source
# File lib/jober.rb, line 154
def enqueue(queue_name, *args)
  Jober.redis.rpush(queue_name, Jober.dump_args(*args))
end
exception(ex) click to toggle source
# File lib/jober.rb, line 84
def exception(ex)
  # redefine me
  logger.error "#{ex.message} #{ex.backtrace}"
end
find_class(klass_name) click to toggle source
# File lib/jober.rb, line 133
def find_class(klass_name)
  names = classes.map(&:to_s)
  return eval(klass_name) if names.include?(klass_name)
  klass_name = "Jober::#{klass_name}"
  return eval(klass_name) if names.include?(klass_name)
  klass_name = "Jobs::#{klass_name}"
  return eval(klass_name) if names.include?(klass_name)
end
internal_classes_names() click to toggle source
# File lib/jober.rb, line 43
def internal_classes_names
  @internal_classes_names ||= (%w{Manager ThreadedManager AbstractTask Task Queue SlowQueue} +
    %w{QueueBatch UniqueQueue UniqueQueueBatch Logger SharedObject ARLoop Exception}).map { |k| "Jober::#{k}" }
end
key(k) click to toggle source
# File lib/jober.rb, line 129
def key(k)
  "Jober:#{@namespace}:#{k}"
end
llens() click to toggle source
# File lib/jober.rb, line 100
def llens
  h = {}
  auto_classes.each do |klass|
    next unless klass.ancestors.include?(Jober::Queue)
    h[klass.queue_name_base] = klass.len
  end
  h
end
load(obj) click to toggle source
# File lib/jober.rb, line 76
def load(obj)
  Marshal.load(obj)
end
logger() click to toggle source
# File lib/jober.rb, line 22
def logger
  @logger ||= ::Logger.new(STDOUT)
end
logger=(l) click to toggle source
# File lib/jober.rb, line 26
def logger=(l)
  @logger = l
end
names() click to toggle source
# File lib/jober.rb, line 56
def names
  classes.map { |k| underscore(k.to_s.gsub('Jober::', '')) }
end
redis() click to toggle source
# File lib/jober.rb, line 30
def redis
  Thread.current[:__jober_redis__] ||= (@redis || Redis.new).dup
end
redis=(r) click to toggle source
# File lib/jober.rb, line 34
def redis=(r)
  @redis = r
  reset_redis
end
reset_redis() click to toggle source
# File lib/jober.rb, line 39
def reset_redis
  Thread.current[:__jober_redis__] = nil
end
skip_delay!() click to toggle source
# File lib/jober.rb, line 142
def skip_delay!
  classes.each &:skip_delay!
end
stats() click to toggle source
# File lib/jober.rb, line 109
def stats
  h = {}
  auto_classes.each do |klass|
    started = klass.read_timestamp(:started)
    finished = klass.read_timestamp(:finished)
    crashed = klass.read_timestamp(:crashed)
    stopped = klass.read_timestamp(:stopped)
    h[klass.short_name] = {
      :started => started,
      :finished => finished,
      :crashed => crashed,
      :stopped => stopped,
      :duration => (finished && started && finished >= started) ? (finished - started) : nil
    }
  end
  h
end
underscore(str) click to toggle source
# File lib/jober.rb, line 89
def underscore(str)
  word = str.dup
  word.gsub!('::', '/')
  word.gsub!(/(?:([A-Za-z\d])|^)((?=a)b)(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
  word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  word.tr!("-", "_")
  word.downcase!
  word
end