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
.namespace ⇒ Object
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_classes ⇒ Object
52
53
54
|
# File 'lib/jober.rb', line 52
def auto_classes
classes.reject &:manual?
end
|
.call_after_fork ⇒ Object
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
|
.classes ⇒ Object
48
49
50
|
# File 'lib/jober.rb', line 48
def classes
@classes ||= []
end
|
.default_interval ⇒ Object
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)
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_names ⇒ Object
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
|
.llens ⇒ Object
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
|
.logger ⇒ Object
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
|
.names ⇒ Object
56
57
58
|
# File 'lib/jober.rb', line 56
def names
classes.map { |k| underscore(k.to_s.gsub('Jober::', '')) }
end
|
.redis ⇒ Object
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_redis ⇒ Object
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
|
.stats ⇒ Object
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
|