Module: Jober

Defined in:
lib/jober.rb,
lib/jober/version.rb

Defined Under Namespace

Modules: Exception, Logger, QueueBatchFeature Classes: ARLoop, AbstractTask, Manager, Queue, QueueBatch, SharedObject, SlowQueue, Task, ThreadedManager, UniqueQueue, UniqueQueueBatch

Constant Summary collapse

VERSION =
"0.3.41"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.namespaceObject

Returns the value of attribute namespace.



127
128
129
# File 'lib/jober.rb', line 127

def namespace
  @namespace
end

Class Method Details

.add_class(klass) ⇒ Object



60
61
62
# File 'lib/jober.rb', line 60

def add_class(klass)
  classes << klass unless internal_classes_names.include?(klass.to_s)
end

.after_fork(&block) ⇒ Object



64
65
66
# File 'lib/jober.rb', line 64

def after_fork(&block)
  @after_fork = block
end

.auto_classesObject



52
53
54
# File 'lib/jober.rb', line 52

def auto_classes
  classes.reject &:manual?
end

.call_after_forkObject



68
69
70
# File 'lib/jober.rb', line 68

def call_after_fork
  @after_fork.call if @after_fork
end

.catch(&block) ⇒ Object



158
159
160
161
162
163
# File 'lib/jober.rb', line 158

def catch(&block)
  yield
rescue Object => ex
  Jober.exception(ex)
  nil
end

.classesObject



48
49
50
# File 'lib/jober.rb', line 48

def classes
  @classes ||= []
end

.default_intervalObject



146
147
148
# File 'lib/jober.rb', line 146

def default_interval
  @default_interval ||= 5 * 60
end

.default_interval=(di) ⇒ Object



150
151
152
# File 'lib/jober.rb', line 150

def default_interval=(di)
  @default_interval = di
end

.dump(obj) ⇒ Object



72
73
74
# File 'lib/jober.rb', line 72

def dump(obj)
  Marshal.dump(obj)
end

.dump_args(*args) ⇒ Object



80
81
82
# File 'lib/jober.rb', line 80

def dump_args(*args)
  dump(args)
end

.enqueue(queue_name, *args) ⇒ Object



154
155
156
# File 'lib/jober.rb', line 154

def enqueue(queue_name, *args)
  Jober.redis.rpush(queue_name, Jober.dump_args(*args))
end

.exception(ex) ⇒ Object



84
85
86
87
# File 'lib/jober.rb', line 84

def exception(ex)
  # redefine me
  logger.error "#{ex.message} #{ex.backtrace}"
end

.find_class(klass_name) ⇒ Object



133
134
135
136
137
138
139
140
# 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_namesObject



43
44
45
46
# 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) ⇒ Object



129
130
131
# File 'lib/jober.rb', line 129

def key(k)
  "Jober:#{@namespace}:#{k}"
end

.llensObject



100
101
102
103
104
105
106
107
# 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) ⇒ Object



76
77
78
# File 'lib/jober.rb', line 76

def load(obj)
  Marshal.load(obj)
end

.loggerObject



22
23
24
# File 'lib/jober.rb', line 22

def logger
  @logger ||= ::Logger.new(STDOUT)
end

.logger=(l) ⇒ Object



26
27
28
# File 'lib/jober.rb', line 26

def logger=(l)
  @logger = l
end

.namesObject



56
57
58
# File 'lib/jober.rb', line 56

def names
  classes.map { |k| underscore(k.to_s.gsub('Jober::', '')) }
end

.redisObject



30
31
32
# File 'lib/jober.rb', line 30

def redis
  Thread.current[:__jober_redis__] ||= (@redis || Redis.new).dup
end

.redis=(r) ⇒ Object



34
35
36
37
# File 'lib/jober.rb', line 34

def redis=(r)
  @redis = r
  reset_redis
end

.reset_redisObject



39
40
41
# File 'lib/jober.rb', line 39

def reset_redis
  Thread.current[:__jober_redis__] = nil
end

.skip_delay!Object



142
143
144
# File 'lib/jober.rb', line 142

def skip_delay!
  classes.each &:skip_delay!
end

.statsObject



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# 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) ⇒ Object



89
90
91
92
93
94
95
96
97
98
# 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