simple_worker 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/simple_worker/base.rb +87 -64
- data/lib/simple_worker/config.rb +5 -0
- data/lib/simple_worker/runner.rb +1 -0
- data/lib/simple_worker/service.rb +26 -16
- metadata +3 -2
data/lib/simple_worker/base.rb
CHANGED
@@ -9,21 +9,21 @@ module SimpleWorker
|
|
9
9
|
|
10
10
|
class << self
|
11
11
|
attr_accessor :subclass, :caller_file
|
12
|
-
@merged =
|
13
|
-
@merged_workers =
|
12
|
+
@merged = {}
|
13
|
+
@merged_workers = {}
|
14
14
|
@merged_gems = []
|
15
15
|
@merged_mailers = []
|
16
16
|
@merged_folders = {}
|
17
|
-
@unmerged =
|
17
|
+
@unmerged = {}
|
18
18
|
@unmerged_gems = []
|
19
19
|
|
20
20
|
def reset!
|
21
|
-
@merged =
|
22
|
-
@merged_workers =
|
21
|
+
@merged = {}
|
22
|
+
@merged_workers = {}
|
23
23
|
@merged_gems = []
|
24
24
|
@merged_mailers = []
|
25
25
|
@merged_folders = {}
|
26
|
-
@unmerged =
|
26
|
+
@unmerged = {}
|
27
27
|
@unmerged_gems = []
|
28
28
|
end
|
29
29
|
|
@@ -45,6 +45,7 @@ module SimpleWorker
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def check_for_file(f)
|
48
|
+
SimpleWorker.logger.debug 'Checking for ' + f.to_s
|
48
49
|
f = f.to_str
|
49
50
|
unless ends_with?(f, ".rb")
|
50
51
|
f << ".rb"
|
@@ -56,7 +57,7 @@ module SimpleWorker
|
|
56
57
|
# try relative
|
57
58
|
# p caller
|
58
59
|
f2 = File.join(File.dirname(caller[3]), f)
|
59
|
-
|
60
|
+
puts 'f2=' + f2
|
60
61
|
if File.exist? f2
|
61
62
|
exists = true
|
62
63
|
f = f2
|
@@ -70,7 +71,7 @@ module SimpleWorker
|
|
70
71
|
f
|
71
72
|
end
|
72
73
|
|
73
|
-
|
74
|
+
# merges the specified gem.
|
74
75
|
def merge_gem(gem_name, options={})
|
75
76
|
gem_info = {:name=>gem_name, :merge=>true}
|
76
77
|
if options.is_a?(Hash)
|
@@ -85,9 +86,12 @@ module SimpleWorker
|
|
85
86
|
end
|
86
87
|
gem_info[:path] = path
|
87
88
|
@merged_gems << gem_info
|
88
|
-
puts 'before require ' + (options[:require] || gem_name)
|
89
|
-
|
90
|
-
|
89
|
+
#puts 'before require ' + (options[:require] || gem_name)
|
90
|
+
begin
|
91
|
+
require options[:require] || gem_name
|
92
|
+
rescue LoadError=>ex
|
93
|
+
raise "Gem #{gem_name} was found, but we could not load the file '#{options[:require] || gem_name}.rb'. You may need to use :require=>x.........."
|
94
|
+
end
|
91
95
|
end
|
92
96
|
|
93
97
|
|
@@ -96,7 +100,7 @@ module SimpleWorker
|
|
96
100
|
@unmerged_gems << gem_info
|
97
101
|
end
|
98
102
|
|
99
|
-
|
103
|
+
#merge action_mailer mailers
|
100
104
|
def merge_mailer(mailer, params={})
|
101
105
|
check_for_file mailer
|
102
106
|
basename = File.basename(mailer, File.extname(mailer))
|
@@ -106,29 +110,45 @@ module SimpleWorker
|
|
106
110
|
|
107
111
|
def merge_folder(path)
|
108
112
|
files = []
|
109
|
-
|
110
|
-
|
111
|
-
|
113
|
+
#puts "caller_file=" + caller_file
|
114
|
+
if path[0, 1] == '/'
|
115
|
+
abs_dir = path
|
116
|
+
else # relative
|
117
|
+
abs_dir = File.join(File.dirname(caller_file), path)
|
118
|
+
end
|
119
|
+
#puts 'abs_dir=' + abs_dir
|
120
|
+
raise "Folder not found for merge_folder #{path}!" unless File.directory?(abs_dir)
|
121
|
+
rbfiles = File.join(abs_dir, "*.rb")
|
122
|
+
Dir[rbfiles].each do |f|
|
123
|
+
#f2 = check_for_file(f)
|
124
|
+
#puts "f2=#{f2}"
|
125
|
+
merge(f)
|
126
|
+
#files << f
|
127
|
+
#@merged[f]
|
112
128
|
end
|
113
|
-
|
114
|
-
SimpleWorker.logger.info "Merged folders! #{@merged_folders.inspect}"
|
129
|
+
#@merged_folders[path] = files unless files.empty?
|
130
|
+
#SimpleWorker.logger.info "Merged folders! #{@merged_folders.inspect}"
|
115
131
|
end
|
116
132
|
|
117
|
-
|
118
|
-
|
133
|
+
# merges the specified file.
|
134
|
+
#
|
135
|
+
# Example: merge 'models/my_model'
|
119
136
|
def merge(*files)
|
137
|
+
ret = nil
|
120
138
|
files.each do |f|
|
121
|
-
|
122
|
-
|
139
|
+
f2 = check_for_file(f)
|
140
|
+
ret = {:name=>f, :path=>f2}
|
141
|
+
@merged[File.basename(f2)] = ret
|
123
142
|
end
|
143
|
+
ret
|
124
144
|
end
|
125
145
|
|
126
|
-
|
127
|
-
|
146
|
+
# Opposite of merge, this will omit the files you specify from being merged in. Useful in Rails apps
|
147
|
+
# where a lot of things are auto-merged by default like your models.
|
128
148
|
def unmerge(*files)
|
129
149
|
files.each do |f|
|
130
|
-
|
131
|
-
@unmerged
|
150
|
+
f2 = check_for_file(f)
|
151
|
+
@unmerged[File.basename(f2)] = {:name=>f, :path=>f2}
|
132
152
|
end
|
133
153
|
end
|
134
154
|
|
@@ -137,15 +157,18 @@ module SimpleWorker
|
|
137
157
|
s[-suffix.length, suffix.length] == suffix
|
138
158
|
end
|
139
159
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
160
|
+
# Use this to merge in other workers. These are treated differently the normal merged files because
|
161
|
+
# they will be uploaded separately and treated as distinctly separate workers.
|
162
|
+
#
|
163
|
+
# file: This is the path to the file, just like merge.
|
164
|
+
# class_name: eg: 'MyWorker'.
|
145
165
|
def merge_worker(file, class_name)
|
146
166
|
# puts 'merge_worker in ' + self.name
|
147
|
-
merge(file)
|
148
|
-
|
167
|
+
ret = merge(file)
|
168
|
+
ret[:class_name] = class_name
|
169
|
+
#[File.expand_path(file), class_name]
|
170
|
+
@merged_workers[file] = ret
|
171
|
+
ret
|
149
172
|
end
|
150
173
|
end
|
151
174
|
|
@@ -170,7 +193,7 @@ module SimpleWorker
|
|
170
193
|
self.class.instance_variable_defined?(:@uploaded) && self.class.instance_variable_get(:@uploaded)
|
171
194
|
end
|
172
195
|
|
173
|
-
|
196
|
+
# Call this if you want to run locally and get some extra features from this gem like global attributes.
|
174
197
|
def run_local
|
175
198
|
# puts 'run_local'
|
176
199
|
set_auto_attributes
|
@@ -216,11 +239,11 @@ module SimpleWorker
|
|
216
239
|
queue(options)
|
217
240
|
end
|
218
241
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
242
|
+
# Call this to queue up your job to SimpleWorker cloud.
|
243
|
+
# options:
|
244
|
+
# :priority => 0, 1 or 2. Default is 0.
|
245
|
+
# :recursive => true/false. Default is false. If you queue up a worker that is the same class as the currently
|
246
|
+
# running worker, it will be rejected unless you set this explicitly so we know you meant to do it.
|
224
247
|
def queue(options={})
|
225
248
|
# puts 'in queue'
|
226
249
|
set_auto_attributes
|
@@ -257,9 +280,9 @@ module SimpleWorker
|
|
257
280
|
false
|
258
281
|
end
|
259
282
|
|
260
|
-
|
261
|
-
|
262
|
-
|
283
|
+
# will return after job has completed or errored out.
|
284
|
+
# Returns status.
|
285
|
+
# todo: add a :timeout option
|
263
286
|
def wait_until_complete
|
264
287
|
check_service
|
265
288
|
tries = 0
|
@@ -281,17 +304,17 @@ module SimpleWorker
|
|
281
304
|
upload_if_needed
|
282
305
|
end
|
283
306
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
307
|
+
#
|
308
|
+
# schedule: hash of scheduling options that can include:
|
309
|
+
# Required:
|
310
|
+
# - start_at: Time of first run - DateTime or Time object.
|
311
|
+
# Optional:
|
312
|
+
# - run_every: Time in seconds between runs. If ommitted, task will only run once.
|
313
|
+
# - delay_type: Fixed Rate or Fixed Delay. Default is fixed_delay.
|
314
|
+
# - end_at: Scheduled task will stop running after this date (optional, if ommitted, runs forever or until cancelled)
|
315
|
+
# - run_times: Task will run exactly :run_times. For instance if :run_times is 5, then the task will run 5 times.
|
316
|
+
# - name: Provide a name for the schedule, defaults to class name. Use this if you want more than one schedule per worker class.
|
317
|
+
#
|
295
318
|
def schedule(schedule)
|
296
319
|
set_global_attributes
|
297
320
|
upload_if_needed(schedule)
|
@@ -306,12 +329,12 @@ module SimpleWorker
|
|
306
329
|
SimpleWorker.service.schedule_status(schedule_id)
|
307
330
|
end
|
308
331
|
|
309
|
-
|
332
|
+
# Retrieves the log for this worker from the SimpleWorker service.
|
310
333
|
def get_log
|
311
334
|
SimpleWorker.service.log(task_id)
|
312
335
|
end
|
313
336
|
|
314
|
-
|
337
|
+
# Callbacks for developer
|
315
338
|
def before_upload
|
316
339
|
|
317
340
|
end
|
@@ -358,7 +381,7 @@ module SimpleWorker
|
|
358
381
|
#puts 'superclass=' + superclass.name
|
359
382
|
break if superclass.name == SimpleWorker::Base.name
|
360
383
|
super_merged = superclass.instance_variable_get(:@merged)
|
361
|
-
|
384
|
+
#puts 'merging caller file: ' + superclass.instance_variable_get(:@caller_file).inspect
|
362
385
|
super_merged << superclass.instance_variable_get(:@caller_file)
|
363
386
|
merged = super_merged + merged
|
364
387
|
#puts 'merged with superclass=' + merged.inspect
|
@@ -369,11 +392,11 @@ module SimpleWorker
|
|
369
392
|
def self.extract_merged_workers(worker)
|
370
393
|
merged_workers = worker.class.instance_variable_get(:@merged_workers)
|
371
394
|
SimpleWorker.logger.debug "Looking for merged_workers in #{worker.class.name}: #{merged_workers.inspect}"
|
372
|
-
ret =
|
395
|
+
ret = {}
|
373
396
|
if merged_workers && merged_workers.size > 0
|
374
397
|
merged_workers.each do |mw|
|
375
398
|
SimpleWorker.logger.debug "merged worker found in #{worker.class.name}: #{mw.inspect}"
|
376
|
-
ret
|
399
|
+
ret[mw[:name]] = mw
|
377
400
|
end
|
378
401
|
end
|
379
402
|
ret
|
@@ -387,17 +410,17 @@ module SimpleWorker
|
|
387
410
|
|
388
411
|
merged = self.class.instance_variable_get(:@merged)
|
389
412
|
|
390
|
-
|
413
|
+
# do merged_workers first because we need to get their subclasses and what not too
|
391
414
|
merged_workers = self.class.instance_variable_get(:@merged_workers)
|
392
415
|
if merged_workers && merged_workers.size > 0
|
393
416
|
SimpleWorker.logger.debug 'now uploading merged workers ' + merged_workers.inspect
|
394
|
-
merged_workers.
|
395
|
-
SimpleWorker.logger.debug 'Instantiating and uploading ' +
|
396
|
-
mw_instantiated = Kernel.const_get(
|
417
|
+
merged_workers.each_pair do |mw, v|
|
418
|
+
SimpleWorker.logger.debug 'Instantiating and uploading ' + v.inspect
|
419
|
+
mw_instantiated = Kernel.const_get(v[:class_name]).new
|
397
420
|
mw_instantiated.upload
|
398
421
|
|
399
422
|
merged, rfile, subclass = SimpleWorker::Base.extract_superclasses_merges(mw_instantiated, merged)
|
400
|
-
merged
|
423
|
+
merged.merge!(SimpleWorker::Base.extract_merged_workers(mw_instantiated))
|
401
424
|
|
402
425
|
end
|
403
426
|
end
|
@@ -424,7 +447,7 @@ module SimpleWorker
|
|
424
447
|
merged_gems = gems_to_merge(merged_gems)
|
425
448
|
merged_gems.uniq!
|
426
449
|
end
|
427
|
-
merged.uniq!
|
450
|
+
#merged.uniq!
|
428
451
|
merged_mailers.uniq!
|
429
452
|
options_for_upload = {:merge=>merged, :unmerge=>unmerged, :merged_gems=>merged_gems, :merged_mailers=>merged_mailers, :merged_folders=>merged_folders}
|
430
453
|
options_for_upload[:name] = options[:name] if options[:name]
|
@@ -442,7 +465,7 @@ module SimpleWorker
|
|
442
465
|
data = {}
|
443
466
|
|
444
467
|
payload = {}
|
445
|
-
|
468
|
+
# todo: should put these down a layer, eg: payload[:attributes]
|
446
469
|
self.instance_variables.each do |iv|
|
447
470
|
payload[iv] = instance_variable_get(iv)
|
448
471
|
end
|
data/lib/simple_worker/config.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
# This is the file that gets executed on the server.
|
@@ -40,7 +40,7 @@ module SimpleWorker
|
|
40
40
|
if File.exists?(f)
|
41
41
|
existing_md5 = IO.read(f)
|
42
42
|
end
|
43
|
-
|
43
|
+
# Check for code changes.
|
44
44
|
md5 = Digest::MD5.hexdigest(File.read(filename))
|
45
45
|
new_code = false
|
46
46
|
if md5 != existing_md5
|
@@ -60,7 +60,7 @@ module SimpleWorker
|
|
60
60
|
options = {
|
61
61
|
"class_name"=>class_name,
|
62
62
|
"name"=>name,
|
63
|
-
"file_name"=> File.basename(filename)
|
63
|
+
"file_name"=> "runner.rb" # File.basename(filename)
|
64
64
|
}
|
65
65
|
#puts 'options for upload=' + options.inspect
|
66
66
|
SimpleWorker.logger.info "Uploading now..."
|
@@ -84,7 +84,7 @@ module SimpleWorker
|
|
84
84
|
gem_name =(gem_info[:name].match(/^[a-zA-Z0-9\-_]+/)[0])
|
85
85
|
#puts "Searching for #{gem_name}..."
|
86
86
|
gems= Gem::Specification.respond_to?(:each) ? Gem::Specification.find_all_by_name(gem_name) : Gem::GemPathSearcher.new.find_all(gem_name)
|
87
|
-
# gems = searcher.init_gemspecs.select { |gem| gem.name==gem_name }
|
87
|
+
# gems = searcher.init_gemspecs.select { |gem| gem.name==gem_name }
|
88
88
|
logger.debug 'gems found=' + gems.inspect
|
89
89
|
gems = gems.select { |g| g.version.version==gem_info[:version] } if gem_info[:version]
|
90
90
|
if !gems.empty?
|
@@ -100,17 +100,24 @@ module SimpleWorker
|
|
100
100
|
# unless (merge && merge.size > 0) || (rged_gems && merged_gems.size > 0)
|
101
101
|
# return filename
|
102
102
|
# end
|
103
|
-
merge = merge.nil? ?
|
103
|
+
merge = merge.nil? ? {} : merge.dup
|
104
|
+
SimpleWorker.logger.debug "merge"
|
104
105
|
if unmerge
|
105
|
-
unmerge.
|
106
|
+
unmerge.each_pair do |x, y|
|
106
107
|
deleted = merge.delete x
|
107
|
-
|
108
|
+
SimpleWorker.logger.debug "Unmerging #{x}. Success? #{deleted}"
|
108
109
|
end
|
109
110
|
end
|
110
|
-
|
111
|
-
tmp_file = File.join(Dir.tmpdir(),
|
111
|
+
#tmp_file = File.join(Dir.tmpdir(), File.basename(filename))
|
112
|
+
tmp_file = File.join(Dir.tmpdir(), 'runner.rb')
|
112
113
|
File.open(tmp_file, "w") do |f|
|
113
114
|
# add some rails stuff if using Rails
|
115
|
+
|
116
|
+
merge.each_pair do |k,v|
|
117
|
+
SimpleWorker.logger.debug "merging #{k} into #{filename}"
|
118
|
+
f.write("require_relative '#{k}'\n") # add(File.basename(m), m)
|
119
|
+
end
|
120
|
+
|
114
121
|
if defined?(Rails)
|
115
122
|
f.write "module Rails
|
116
123
|
def self.version
|
@@ -121,7 +128,6 @@ module SimpleWorker
|
|
121
128
|
end
|
122
129
|
end
|
123
130
|
"
|
124
|
-
|
125
131
|
end
|
126
132
|
if SimpleWorker.config.extra_requires
|
127
133
|
SimpleWorker.config.extra_requires.each do |r|
|
@@ -164,9 +170,13 @@ end
|
|
164
170
|
end
|
165
171
|
end
|
166
172
|
end
|
167
|
-
f.write File.open(filename, 'r') { |mo| mo.read }
|
173
|
+
#f.write File.open(filename, 'r') { |mo| mo.read }
|
174
|
+
f.write("require_relative '#{File.basename(filename)}'")
|
168
175
|
end
|
169
|
-
|
176
|
+
#puts 'funner.rb=' + tmp_file
|
177
|
+
merge['runner.rb'] = {:path=>tmp_file}
|
178
|
+
#puts 'filename=' + filename
|
179
|
+
merge[File.basename(filename)] = {:path=>filename}
|
170
180
|
#puts "merge before uniq! " + merge.inspect
|
171
181
|
# puts "merge after uniq! " + merge.inspect
|
172
182
|
|
@@ -185,11 +195,11 @@ end
|
|
185
195
|
SimpleWorker.logger.debug "Collecting gem #{path}"
|
186
196
|
Dir["#{path}/*", "#{path}/lib/**/**"].each do |file|
|
187
197
|
# todo: could check if directory and it not lib, skip it
|
188
|
-
|
198
|
+
SimpleWorker.logger.debug 'file for gem=' + file.inspect
|
189
199
|
# puts 'gem2=' + gem.inspect
|
190
200
|
zdest = "gems/#{gem[:name]}/#{file.sub(path+'/', '')}"
|
191
201
|
# puts 'gem file=' + file.to_s
|
192
|
-
|
202
|
+
SimpleWorker.logger.debug 'zip dest=' + zdest
|
193
203
|
f.add(zdest, file)
|
194
204
|
end
|
195
205
|
else
|
@@ -209,16 +219,16 @@ end
|
|
209
219
|
if files and files.size>0
|
210
220
|
files.each do |file|
|
211
221
|
zdest = "#{Digest::MD5.hexdigest(folder)}/#{file.sub(':', '_').sub('/', '_')}"
|
212
|
-
|
222
|
+
SimpleWorker.logger.debug 'put file to=' + zdest
|
213
223
|
f.add(zdest, file)
|
214
224
|
end
|
215
225
|
end
|
216
226
|
end
|
217
227
|
end
|
218
228
|
|
219
|
-
merge.
|
229
|
+
merge.each_pair do |k,v|
|
220
230
|
# puts "merging #{m} into #{filename}"
|
221
|
-
f.add(File.basename(
|
231
|
+
f.add(File.basename(v[:path]), v[:path])
|
222
232
|
end
|
223
233
|
if merged_mailers && merged_mailers.size > 0
|
224
234
|
# puts " MERGED MAILERS" + merged_mailers.inspect
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: simple_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Travis Reeder
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-01 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: zip
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/simple_worker/api.rb
|
50
50
|
- lib/simple_worker/base.rb
|
51
51
|
- lib/simple_worker/config.rb
|
52
|
+
- lib/simple_worker/runner.rb
|
52
53
|
- lib/simple_worker/service.rb
|
53
54
|
- lib/simple_worker/used_in_worker.rb
|
54
55
|
- rails/init.rb
|