simple_worker 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -28,6 +28,19 @@ You really just need your access keys.
28
28
  config.access_key = ACCESS_KEY
29
29
  config.secret_key = SECRET_KEY
30
30
  end
31
+
32
+ Generate a Worker with Rails
33
+ ----------------------------
34
+ If you're rolling on Rails, use the following:
35
+
36
+ rails generate simple_worker worker_class_in_underscore_format
37
+
38
+ This will set you up with a worker in ```app/workers```
39
+ However, this is not autorequired, so a line similar to this will be required in your initializer:
40
+
41
+ Dir.glob("#{Rails.root}/app/workers/*.rb").each{|w| require w}
42
+
43
+ This one-liner requires all ```.rb``` files in ```app/workers```
31
44
 
32
45
  Write a Worker
33
46
  --------------
@@ -0,0 +1,13 @@
1
+ class SimpleWorkerGenerator < Rails::Generators::NamedBase
2
+ source_root File.expand_path("../templates", __FILE__)
3
+
4
+ desc "Creates a new skeleton worker - NAME is camelized"
5
+ def create_worker_file
6
+ # file_name needs to be classified
7
+ @camel = file_name.camelize
8
+ if not File.directory? "#{Rails.root}/app/workers"
9
+ Dir.mkdir "#{Rails.root}/app/workers"
10
+ end
11
+ template "template_worker.erb", "app/workers/#{file_name}.rb"
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+ require 'rest_client'
2
+
1
3
  module SimpleWorker
2
4
  module Api
3
5
 
@@ -45,9 +47,9 @@ module SimpleWorker
45
47
 
46
48
  def process_ex(ex)
47
49
  body = ex.http_body
48
- puts 'EX BODY=' + body.to_s
49
- decoded_ex = JSON.parse(ex.http_body)
50
- exception = Exception.new(ex.message+":"+decoded_ex["msg"])
50
+ @@logger.debug 'EX BODY=' + body.to_s
51
+ decoded_ex = JSON.parse(body)
52
+ exception = Exception.new(ex.message + ": " + decoded_ex["msg"])
51
53
  exception.set_backtrace(decoded_ex["backtrace"].split(",")) if decoded_ex["backtrace"]
52
54
  raise exception
53
55
  end
@@ -56,7 +58,7 @@ module SimpleWorker
56
58
  begin
57
59
  # ClientHelper.run_http(host, access_key, secret_key, :get, method, nil, params)
58
60
  parse_response RestClient.get(append_params(url(method), add_params(method, params)), headers), options
59
- rescue RestClient::BadRequest, RestClient::InternalServerError => ex
61
+ rescue RestClient::Exception => ex
60
62
  process_ex(ex)
61
63
  end
62
64
  end
@@ -64,7 +66,7 @@ module SimpleWorker
64
66
  def post_file(method, file, params={}, options={})
65
67
  begin
66
68
  parse_response RestClient.post(url(method), add_params(method, params).merge!({:file=>file}), :multipart => true), options
67
- rescue RestClient::BadRequest, RestClient::InternalServerError => ex
69
+ rescue RestClient::Exception => ex
68
70
  process_ex(ex)
69
71
  end
70
72
  end
@@ -73,7 +75,7 @@ module SimpleWorker
73
75
  begin
74
76
  parse_response RestClient.post(url(method), add_params(method, params).to_json, headers), options
75
77
  #ClientHelper.run_http(host, access_key, secret_key, :post, method, nil, params)
76
- rescue RestClient::BadRequest, RestClient::InternalServerError => ex
78
+ rescue RestClient::Exception => ex
77
79
  process_ex(ex)
78
80
  end
79
81
  end
@@ -83,7 +85,7 @@ module SimpleWorker
83
85
  begin
84
86
  parse_response RestClient.put(url(method), add_params(method, body).to_json, headers), options
85
87
  #ClientHelper.run_http(host, access_key, secret_key, :put, method, body, nil)
86
- rescue RestClient::BadRequest, RestClient::InternalServerError => ex
88
+ rescue RestClient::Exception => ex
87
89
  process_ex(ex)
88
90
  end
89
91
  end
@@ -91,7 +93,7 @@ module SimpleWorker
91
93
  def delete(method, params={}, options={})
92
94
  begin
93
95
  parse_response RestClient.delete(append_params(url(method), add_params(method, params))), options
94
- rescue RestClient::BadRequest, RestClient::InternalServerError => ex
96
+ rescue RestClient::Exception => ex
95
97
  process_ex(ex)
96
98
  end
97
99
  end
@@ -238,21 +238,9 @@ module SimpleWorker
238
238
  # todo: add a :timeout option
239
239
  def wait_until_complete
240
240
  check_service
241
- tries = 0
242
- status = nil
243
- sleep 1
244
- while tries < 100
245
- status = self.status
246
- puts "Waiting... status=" + status["status"]
247
- if status["status"] != "queued" && status["status"] != "running"
248
- break
249
- end
250
- sleep 2
251
- end
252
- status
241
+ SimplerWorker.service.wait_until_complete(self.task_id)
253
242
  end
254
243
 
255
-
256
244
  def upload
257
245
  upload_if_needed
258
246
  end
File without changes
@@ -1,12 +1,9 @@
1
-
2
1
  # This is used when a bad worker is uploaded.
3
- class InvalidWorkerError < StandardError
4
-
5
- end
6
-
7
2
 
8
3
  module SimpleWorker
9
4
 
5
+ class InvalidWorkerError < StandardError; end
6
+
10
7
  class << self
11
8
  def running_class=(rc)
12
9
  @@running_class = rc
@@ -110,7 +107,7 @@ module SimpleWorker
110
107
 
111
108
  def user_dir
112
109
  # puts 'user_dir=' + @context.user_dir.to_s
113
- @context.user_dir
110
+ @user_dir || "./"
114
111
  end
115
112
 
116
113
  def sw_set_data(data)
@@ -13,21 +13,35 @@ def init_database_connection(sw_config)
13
13
  end
14
14
 
15
15
  def get_class_to_run(class_name)
16
- runner_class = Kernel.const_get(class_name)
16
+ runner_class = constantize(class_name)
17
17
  return runner_class
18
18
  end
19
19
 
20
- def init_runner(runner_class, job_data)
20
+ # File activesupport/lib/active_support/inflector/methods.rb, line 107
21
+ # Shoutout to the MIT License
22
+ def constantize(camel_cased_word)
23
+ names = camel_cased_word.split('::')
24
+ names.shift if names.empty? || names.first.empty?
25
+
26
+ constant = Object
27
+ names.each do |name|
28
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
29
+ end
30
+ constant
31
+ end
32
+
33
+ def init_runner(runner_class, job_data, user_dir)
21
34
  # ensure initialize takes no arguments
22
35
  init_arity = runner_class.instance_method(:initialize).arity
23
36
  if init_arity == 0 || init_arity == -1
24
37
  # good. -1 can be if it's not defined at all
25
38
  else
26
- raise InvalidWorkerError, "Worker initialize method must accept zero arguments."
39
+ raise SimpleWorker::InvalidWorkerError, "Worker initialize method must accept zero arguments."
27
40
  end
28
41
  runner = runner_class.new
29
42
  runner.instance_variable_set(:@job_data, job_data)
30
43
  runner.instance_variable_set(:@sw_config, job_data['sw_config'])
44
+ runner.instance_variable_set(:@user_dir, user_dir)
31
45
  runner.sw_set_data(job_data)
32
46
  runner
33
47
  end
@@ -84,7 +98,7 @@ begin
84
98
  SimpleWorker.disable_queueing()
85
99
  runner_class = get_class_to_run(job_data['class_name'])
86
100
  SimpleWorker.running_class = runner_class
87
- runner = init_runner(runner_class, job_data)
101
+ runner = init_runner(runner_class, job_data, dirname)
88
102
  init_worker_service_for_runner(job_data)
89
103
  SimpleWorker.enable_queueing()
90
104
 
@@ -56,20 +56,9 @@ module SimpleWorker
56
56
  begin
57
57
 
58
58
  zip_filename = build_merged_file(filename, options[:merge], options[:unmerge], options[:merged_gems], options[:merged_mailers], options[:merged_folders])
59
- SimpleWorker.logger.info 'file size to upload: ' + File.size(zip_filename).to_s
60
59
 
61
60
  if new_code
62
- options = {
63
- "class_name"=>class_name,
64
- "name"=>name,
65
- "standalone"=>true,
66
- "file_name"=> "runner.rb" # File.basename(filename)
67
- }
68
- #puts 'options for upload=' + options.inspect
69
- SimpleWorker.logger.info "Uploading now..."
70
- ret = post_file("code/put", File.new(zip_filename), options)
71
- SimpleWorker.logger.info "Done uploading."
72
- return ret
61
+ upload_code(name, zip_filename, 'runner.rb', :runtime=>'ruby')
73
62
  end
74
63
 
75
64
  rescue => ex
@@ -252,7 +241,7 @@ end
252
241
  # todo: should only continue if the gem was auto merged.
253
242
  SimpleWorker.logger.warn "Gem #{gem[:name]} #{gem[:version]} was not found, continuing anyways."
254
243
  else
255
- raise "Gem #{gem[:name]} #{gem[:version]} was not found, continuing anyways."
244
+ raise "Gem #{gem[:name]} #{gem[:version]} was not found. This will occour when gem_name.gemspec is not the same as the gems primary require."
256
245
  end
257
246
 
258
247
  end
@@ -292,6 +281,52 @@ end
292
281
  fname2
293
282
  end
294
283
 
284
+ # This will package up files into a zip file ready for uploading.
285
+ def package_code(files)
286
+ fname2 = "package.zip"
287
+ File.delete(fname2) if File.exist?(fname2)
288
+ Zip::ZipFile.open(fname2, 'w') do |f|
289
+ files.each do |file|
290
+ f.add(file, file)
291
+ end
292
+ end
293
+ fname2
294
+ end
295
+
296
+ # options:
297
+ # :runtime => 'ruby', 'python', 'node', 'java', 'go'
298
+ def upload_code(name, package_file, exec_file, options={})
299
+ SimpleWorker.logger.info 'file size to upload: ' + File.size(package_file).to_s
300
+ options = {
301
+ "name"=>name,
302
+ "class_name"=>name, # todo: remove this shortly
303
+ "standalone"=>true,
304
+ "runtime"=>options[:runtime],
305
+ "file_name"=> exec_file # File.basename(filename)
306
+ }
307
+ #puts 'options for upload=' + options.inspect
308
+ SimpleWorker.logger.info "Uploading now..."
309
+ ret = post_file("code/put", File.new(package_file), options)
310
+ SimpleWorker.logger.info "Done uploading."
311
+ return ret
312
+
313
+ end
314
+
315
+ def wait_until_complete(task_id)
316
+ tries = 0
317
+ status = nil
318
+ sleep 1
319
+ while tries < 100
320
+ status = status(task_id)
321
+ puts "Waiting... status=" + status["status"]
322
+ if status["status"] != "queued" && status["status"] != "running"
323
+ break
324
+ end
325
+ sleep 2
326
+ end
327
+ status
328
+ end
329
+
295
330
  def add_sw_params(hash_to_send)
296
331
  # todo: remove secret key?? Can use worker service from within a worker without it now
297
332
  hash_to_send["sw_access_key"] = self.access_key
data/lib/simple_worker.rb CHANGED
@@ -40,8 +40,8 @@ if defined?(Rails)
40
40
  # puts 'Rails=' + Rails.inspect
41
41
  # puts 'vers=' + Rails::VERSION::MAJOR.inspect
42
42
  if Rails::VERSION::MAJOR == 2
43
- require_relative 'rails2_init.rb'
43
+ require_relative 'simple_worker/rails2_init.rb'
44
44
  else
45
- require_relative 'railtie'
45
+ require_relative 'simple_worker/railtie'
46
46
  end
47
47
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: simple_worker
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.5
5
+ version: 1.0.6
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-08-22 00:00:00 Z
13
+ date: 2011-08-26 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: zip
@@ -43,12 +43,13 @@ extensions: []
43
43
  extra_rdoc_files:
44
44
  - README.markdown
45
45
  files:
46
- - lib/rails2_init.rb
47
- - lib/railtie.rb
46
+ - lib/generators/simple_worker/simple_worker_generator.rb
48
47
  - lib/simple_worker.rb
49
48
  - lib/simple_worker/api.rb
50
49
  - lib/simple_worker/base.rb
51
50
  - lib/simple_worker/config.rb
51
+ - lib/simple_worker/rails2_init.rb
52
+ - lib/simple_worker/railtie.rb
52
53
  - lib/simple_worker/server/overrides.rb
53
54
  - lib/simple_worker/server/runner.rb
54
55
  - lib/simple_worker/service.rb
@@ -79,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  requirements: []
80
81
 
81
82
  rubyforge_project:
82
- rubygems_version: 1.8.5
83
+ rubygems_version: 1.8.8
83
84
  signing_key:
84
85
  specification_version: 3
85
86
  summary: The official SimpleWorker gem for http://www.simpleworker.com