simple_worker 2.0.0.beta.7 → 2.0.0.beta.8
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/api.rb
CHANGED
@@ -33,17 +33,18 @@ module SimpleWorker
|
|
33
33
|
attr_accessor :host, :port, :token, :version, :config
|
34
34
|
|
35
35
|
def initialize(host, token, options={})
|
36
|
-
@host = host
|
37
36
|
@config = options[:config]
|
37
|
+
@scheme = options[:scheme] || @config.scheme || "https"
|
38
|
+
@host = options[:host] || @config.host || host
|
38
39
|
@port = options[:port] || @config.port || 80
|
39
|
-
@token = token
|
40
|
+
@token = options[:token] || @config.token || token
|
40
41
|
@version = options[:version]
|
41
42
|
@logger = options[:logger]
|
42
43
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def url(command_path)
|
46
|
-
url = "
|
47
|
+
url = "#{@scheme}://#{host}:#{port}/#{@version}/#{command_path}"
|
47
48
|
# @logger.debug "url: " + url.to_s
|
48
49
|
url
|
49
50
|
end
|
@@ -73,10 +74,12 @@ module SimpleWorker
|
|
73
74
|
def post_file(method, file, params={}, options={})
|
74
75
|
begin
|
75
76
|
data = add_params(method, params).to_json
|
77
|
+
url = url(method) + "?oauth=" + token
|
78
|
+
@logger.debug "post_file url = " + url
|
76
79
|
@logger.debug "data = " + data
|
77
80
|
@logger.debug "params = " + params.inspect
|
78
81
|
@logger.debug "options = " + options.inspect
|
79
|
-
parse_response RestClient.post(url
|
82
|
+
parse_response RestClient.post(url, {:data => data, :file => file}, :content_type => 'application/json', :accept => :json), options
|
80
83
|
#parse_response(RestClient.post(append_params(url(method), add_params(method, params)), {:data => data, :file => file}, :content_type => 'application/json'), options)
|
81
84
|
rescue RestClient::Exception => ex
|
82
85
|
process_ex(ex)
|
@@ -90,7 +93,7 @@ module SimpleWorker
|
|
90
93
|
@logger.debug "token = "+ token.inspect
|
91
94
|
begin
|
92
95
|
url = url(method) + "?oauth=" + token
|
93
|
-
@logger.
|
96
|
+
@logger.warn 'post url=' + url
|
94
97
|
parse_response(RestClient.post(url, add_params(method, params).to_json, headers.merge!({:content_type=>'application/json', :accept => "json"})), options)
|
95
98
|
rescue RestClient::Exception => ex
|
96
99
|
@logger.warn("Exception in post! #{ex.message}")
|
data/lib/simple_worker/config.rb
CHANGED
@@ -12,6 +12,7 @@ module SimpleWorker
|
|
12
12
|
class Config
|
13
13
|
attr_accessor :token,
|
14
14
|
:project_id,
|
15
|
+
:scheme,
|
15
16
|
:host,
|
16
17
|
:port,
|
17
18
|
:global_attributes,
|
@@ -157,6 +158,7 @@ module SimpleWorker
|
|
157
158
|
config_data['database'] = self.database if self.database
|
158
159
|
config_data['mailer'] = self.mailer if self.mailer
|
159
160
|
config_data['global_attributes'] = self.global_attributes if self.global_attributes
|
161
|
+
config_data['scheme'] = self.scheme if self.scheme
|
160
162
|
config_data['host'] = self.host if self.host
|
161
163
|
config_data['port'] = self.port if self.port
|
162
164
|
config_data
|
@@ -98,7 +98,8 @@ module SimpleWorker
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def set_progress(hash)
|
101
|
-
|
101
|
+
#puts 'set_progress self=' + self.inspect
|
102
|
+
SimpleWorker.service.set_progress(self.task_id, hash)
|
102
103
|
end
|
103
104
|
|
104
105
|
def something
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# This is the file that gets executed on the server.
|
2
2
|
|
3
|
-
|
4
3
|
def init_database_connection(sw_config)
|
5
4
|
if sw_config
|
6
5
|
db_config = sw_config['database']
|
@@ -42,7 +41,7 @@ def constantize(camel_cased_word)
|
|
42
41
|
constant
|
43
42
|
end
|
44
43
|
|
45
|
-
def init_runner(runner_class, job_data, user_dir)
|
44
|
+
def init_runner(runner_class, job_data, user_dir, task_id)
|
46
45
|
# ensure initialize takes no arguments
|
47
46
|
init_arity = runner_class.instance_method(:initialize).arity
|
48
47
|
if init_arity == 0 || init_arity == -1
|
@@ -51,6 +50,7 @@ def init_runner(runner_class, job_data, user_dir)
|
|
51
50
|
raise SimpleWorker::InvalidWorkerError, "Worker initialize method must accept zero arguments."
|
52
51
|
end
|
53
52
|
runner = runner_class.new
|
53
|
+
runner.instance_variable_set(:@task_id, task_id)
|
54
54
|
runner.instance_variable_set(:@job_data, job_data)
|
55
55
|
runner.instance_variable_set(:@sw_config, job_data['sw_config'])
|
56
56
|
runner.instance_variable_set(:@user_dir, user_dir)
|
@@ -63,7 +63,7 @@ def init_worker_service_for_runner(job_data)
|
|
63
63
|
sw_config = job_data['sw_config']
|
64
64
|
config.token = sw_config['token']
|
65
65
|
config.project_id = sw_config['project_id']
|
66
|
-
|
66
|
+
config.scheme = sw_config['scheme'] if sw_config['scheme']
|
67
67
|
config.host = sw_config['host'] if sw_config['host']
|
68
68
|
config.port = sw_config['port'] if sw_config['port']
|
69
69
|
db_config = sw_config['database']
|
@@ -78,22 +78,3 @@ def init_worker_service_for_runner(job_data)
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
# SimpleWorker.logger.level == Logger::DEBUG
|
82
|
-
run_data = JSON.load(File.open(run_data_file))
|
83
|
-
# Load in job data
|
84
|
-
job_data = JSON.load(File.open(job_data_file))
|
85
|
-
job_data.merge!(run_data)
|
86
|
-
SimpleWorker.logger.debug 'job_data=' + job_data.inspect
|
87
|
-
|
88
|
-
sw_config = job_data['sw_config']
|
89
|
-
init_database_connection(sw_config)
|
90
|
-
init_mailer(sw_config)
|
91
|
-
SimpleWorker.disable_queueing()
|
92
|
-
runner_class = get_class_to_run(job_data['class_name'])
|
93
|
-
SimpleWorker.running_class = runner_class
|
94
|
-
runner = init_runner(runner_class, job_data, dirname)
|
95
|
-
init_worker_service_for_runner(job_data)
|
96
|
-
SimpleWorker.enable_queueing()
|
97
|
-
|
98
|
-
# Let's run it!
|
99
|
-
runner_return_data = runner.run
|
@@ -125,38 +125,72 @@ module SimpleWorker
|
|
125
125
|
#tmp_file = File.join(Dir.tmpdir(), File.basename(filename))
|
126
126
|
tmp_file = File.join(Dir.tmpdir(), 'runner.rb')
|
127
127
|
File.open(tmp_file, "w") do |f|
|
128
|
+
File.open(File.join(File.dirname(__FILE__), "server", 'runner.rb'), 'r') do |fr|
|
129
|
+
while line = fr.gets
|
130
|
+
f.write line
|
131
|
+
end
|
132
|
+
end
|
128
133
|
f.write("begin\n")#error handling block start
|
129
134
|
f.write("
|
130
135
|
# Find environment (-e)
|
131
136
|
dirname = ''
|
132
137
|
i = 0
|
133
|
-
|
138
|
+
task_data_file = nil
|
139
|
+
task_id = nil
|
134
140
|
#puts \"args for single file=\" + ARGV.inspect
|
135
141
|
ARGV.each do |arg|
|
136
142
|
if arg == \"-d\"
|
137
143
|
# the user's writable directory
|
138
144
|
dirname = ARGV[i+1]
|
139
145
|
end
|
140
|
-
if arg == \"-
|
141
|
-
#
|
142
|
-
|
146
|
+
if arg == \"-id\"
|
147
|
+
# task_id
|
148
|
+
task_id = ARGV[i+1]
|
143
149
|
end
|
144
|
-
if arg == \"-
|
145
|
-
# path to
|
146
|
-
|
150
|
+
if arg == \"-payload\"
|
151
|
+
# path to job data
|
152
|
+
task_data_file = ARGV[i+1]
|
147
153
|
end
|
148
154
|
i+=1
|
149
155
|
end
|
156
|
+
require 'json'
|
157
|
+
")
|
158
|
+
# require merged gems
|
159
|
+
merged_gems.each_pair do |k, gem|
|
160
|
+
SimpleWorker.logger.debug "Bundling gem #{gem[:name]}..."
|
161
|
+
if gem[:merge]
|
162
|
+
f.write "$LOAD_PATH << File.join(File.dirname(__FILE__), '/gems/#{gem[:name]}/lib')\n"
|
163
|
+
end
|
164
|
+
# unless gem[:no_require]
|
165
|
+
SimpleWorker.logger.debug 'writing requires: ' + gem[:require].inspect
|
166
|
+
if gem[:require].nil?
|
167
|
+
gem[:require] = []
|
168
|
+
elsif gem[:require].is_a?(String)
|
169
|
+
gem[:require] = [gem[:require]]
|
170
|
+
end
|
171
|
+
SimpleWorker.logger.debug "gem[:require]: " + gem[:require].inspect
|
172
|
+
gem[:require].each do |r|
|
173
|
+
SimpleWorker.logger.debug 'adding require to file ' + r.to_s
|
174
|
+
f.write "require '#{r}'\n"
|
175
|
+
end
|
176
|
+
# end
|
177
|
+
end
|
150
178
|
|
179
|
+
# load job data
|
180
|
+
f.write("
|
151
181
|
# Change to user directory
|
152
182
|
#puts 'dirname=' + dirname.inspect
|
153
183
|
Dir.chdir(dirname)
|
184
|
+
# Load in job data
|
185
|
+
job_data = JSON.load(File.open(task_data_file))
|
186
|
+
puts 'job_data=' + job_data.inspect
|
187
|
+
sw_config = job_data['sw_config']
|
188
|
+
init_database_connection(sw_config)
|
189
|
+
init_mailer(sw_config)
|
154
190
|
")
|
155
191
|
|
156
|
-
|
157
192
|
f.write("require 'simple_worker'\n")
|
158
193
|
|
159
|
-
|
160
194
|
# add some rails stuff if using Rails
|
161
195
|
if defined?(Rails)
|
162
196
|
f.write "module Rails
|
@@ -180,25 +214,6 @@ end
|
|
180
214
|
f.write "ActionMailer::Base.prepend_view_path('templates')\n"
|
181
215
|
end
|
182
216
|
#if SimpleWorker.config.auto_merge
|
183
|
-
merged_gems.each_pair do |k, gem|
|
184
|
-
SimpleWorker.logger.debug "Bundling gem #{gem[:name]}..."
|
185
|
-
if gem[:merge]
|
186
|
-
f.write "$LOAD_PATH << File.join(File.dirname(__FILE__), '/gems/#{gem[:name]}/lib')\n"
|
187
|
-
end
|
188
|
-
# unless gem[:no_require]
|
189
|
-
SimpleWorker.logger.debug 'writing requires: ' + gem[:require].inspect
|
190
|
-
if gem[:require].nil?
|
191
|
-
gem[:require] = []
|
192
|
-
elsif gem[:require].is_a?(String)
|
193
|
-
gem[:require] = [gem[:require]]
|
194
|
-
end
|
195
|
-
SimpleWorker.logger.debug "gem[:require]: " + gem[:require].inspect
|
196
|
-
gem[:require].each do |r|
|
197
|
-
SimpleWorker.logger.debug 'adding require to file ' + r.to_s
|
198
|
-
f.write "require '#{r}'\n"
|
199
|
-
end
|
200
|
-
# end
|
201
|
-
end
|
202
217
|
|
203
218
|
if SimpleWorker.config.extra_requires
|
204
219
|
SimpleWorker.config.extra_requires.each do |r|
|
@@ -224,11 +239,20 @@ end
|
|
224
239
|
#f.write File.open(filename, 'r') { |mo| mo.read }
|
225
240
|
f.write("require_relative '#{File.basename(filename)}'")
|
226
241
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
242
|
+
|
243
|
+
|
244
|
+
f.write("
|
245
|
+
SimpleWorker.disable_queueing()
|
246
|
+
runner_class = get_class_to_run(job_data['class_name'])
|
247
|
+
SimpleWorker.running_class = runner_class
|
248
|
+
runner = init_runner(runner_class, job_data, dirname, task_id)
|
249
|
+
init_worker_service_for_runner(job_data)
|
250
|
+
SimpleWorker.enable_queueing()
|
251
|
+
|
252
|
+
# Let's run it!
|
253
|
+
runner_return_data = runner.run
|
254
|
+
")
|
255
|
+
|
232
256
|
#error handling block - end
|
233
257
|
f.write("\nrescue Exception => ex
|
234
258
|
$stderr.puts '_error_from_sw_'
|
@@ -343,7 +367,7 @@ end
|
|
343
367
|
}
|
344
368
|
#puts 'options for upload=' + options.inspect
|
345
369
|
SimpleWorker.logger.info "Uploading now..."
|
346
|
-
ret = post_file("#{project_url_prefix(get_project_id(options))}
|
370
|
+
ret = post_file("#{project_url_prefix(get_project_id(options))}codes", File.new(package_file), options)
|
347
371
|
SimpleWorker.logger.info "Done uploading."
|
348
372
|
return ret
|
349
373
|
end
|
@@ -420,7 +444,7 @@ end
|
|
420
444
|
hash_to_send = data
|
421
445
|
hash_to_send["class_name"] = class_name unless hash_to_send["class_name"]
|
422
446
|
hash_to_send["name"] = class_name unless hash_to_send["name"]
|
423
|
-
uri = project_url_prefix(get_project_id(options)) + "
|
447
|
+
uri = project_url_prefix(get_project_id(options)) + "tasks"
|
424
448
|
SimpleWorker.logger.debug 'queue_raw , uri = ' + uri
|
425
449
|
ret = post(uri, hash_to_send)
|
426
450
|
ret
|
@@ -480,9 +504,9 @@ end
|
|
480
504
|
ret
|
481
505
|
end
|
482
506
|
|
483
|
-
def
|
507
|
+
def get_codes(options={})
|
484
508
|
hash_to_send = {}
|
485
|
-
uri = "projects/" + get_project_id(options) + "/
|
509
|
+
uri = "projects/" + get_project_id(options) + "/codes/"
|
486
510
|
ret = get(uri, hash_to_send)
|
487
511
|
ret
|
488
512
|
end
|
@@ -496,7 +520,7 @@ end
|
|
496
520
|
|
497
521
|
def get_jobs(options={})
|
498
522
|
hash_to_send = {}
|
499
|
-
uri = "projects/" + get_project_id(options) + "/
|
523
|
+
uri = "projects/" + get_project_id(options) + "/tasks/"
|
500
524
|
ret = get(uri, hash_to_send)
|
501
525
|
ret
|
502
526
|
end
|
@@ -507,14 +531,14 @@ end
|
|
507
531
|
|
508
532
|
def log(task_id, options={})
|
509
533
|
data = {}
|
510
|
-
ret = get("#{project_url_prefix(get_project_id(options))}
|
534
|
+
ret = get("#{project_url_prefix(get_project_id(options))}tasks/#{task_id}/log", data, :parse=>false)
|
511
535
|
ret
|
512
536
|
end
|
513
537
|
|
514
538
|
|
515
539
|
def status(task_id, options={})
|
516
540
|
data = {"task_id"=>task_id}
|
517
|
-
ret = get("#{project_url_prefix(get_project_id(options))}
|
541
|
+
ret = get("#{project_url_prefix(get_project_id(options))}tasks/#{task_id}", data)
|
518
542
|
ret
|
519
543
|
end
|
520
544
|
|
@@ -527,7 +551,7 @@ end
|
|
527
551
|
# data is a hash, should include 'percent' and 'msg'
|
528
552
|
def set_progress(task_id, options={})
|
529
553
|
#data={"data"=>data, "task_id"=>task_id}
|
530
|
-
post("#{project_url_prefix(get_project_id(options))}
|
554
|
+
post("#{project_url_prefix(get_project_id(options))}tasks/#{task_id}/progress", options)
|
531
555
|
end
|
532
556
|
|
533
557
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: simple_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: 6
|
5
|
-
version: 2.0.0.beta.
|
5
|
+
version: 2.0.0.beta.8
|
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-10-
|
13
|
+
date: 2011-10-15 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: zip
|