simple_worker 0.0.13 → 0.1.0

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/http_enabled.rb CHANGED
@@ -3,6 +3,7 @@ require 'active_support'
3
3
  require 'net/http'
4
4
  require 'base64'
5
5
 
6
+ require File.join(File.dirname(__FILE__), 'simple_worker_error')
6
7
 
7
8
  begin
8
9
  require 'digest/hmac'
@@ -86,11 +87,11 @@ module SimpleWorker
86
87
  when Net::HTTPSuccess
87
88
  # puts 'response body=' + res.body
88
89
  ret = res.body
90
+ when Net::HTTPClientError
91
+ raise SimpleWorker::ClientError.new(res.class.name, ActiveSupport::JSON.decode(res.body))
89
92
  else
90
93
  #res.error
91
- puts 'HTTP ERROR: ' + res.class.name
92
- puts res.body
93
- ret = res.body
94
+ raise SimpleWorker::ServiceError.new(res.class.name, res.body)
94
95
  end
95
96
  return ret
96
97
  end
data/lib/simple_worker.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require File.join(File.dirname(__FILE__), 'http_enabled')
2
2
  require File.join(File.dirname(__FILE__), 'api_auth')
3
3
  require File.join(File.dirname(__FILE__), 'worker')
4
+ require File.join(File.dirname(__FILE__), 'simple_worker_error')
5
+
4
6
 
5
7
  module SimpleWorker
6
8
 
@@ -9,6 +11,7 @@ module SimpleWorker
9
11
  include SimpleWorker::HttpEnabled
10
12
 
11
13
  def initialize(access_key, secret_key, options={})
14
+ puts 'Starting SimpleWorker::Service...'
12
15
  super(access_key, secret_key, options)
13
16
  end
14
17
 
@@ -22,7 +25,7 @@ module SimpleWorker
22
25
  options = {"code"=>mystring, "class_name"=>class_name}
23
26
  response = run_http(@host, @access_key, @secret_key, :post, "code/put", nil, options)
24
27
  # puts "response=" + response
25
- return ActiveSupport::JSON.decode(response)
28
+ parse_response response
26
29
  end
27
30
 
28
31
  #
@@ -36,10 +39,11 @@ module SimpleWorker
36
39
  hash_to_send = {}
37
40
  hash_to_send["data"] = data
38
41
  hash_to_send["class_name"] = class_name
39
- puts 'hash_to_send=' + hash_to_send.inspect
40
- response = run_http(@host, @access_key, @secret_key, :put, "queue/add", hash_to_send, params)
41
- puts "response=" + response
42
- return ActiveSupport::JSON.decode(response)
42
+ if defined?(RAILS_ENV)
43
+ hash_to_send["rails_env"] = RAILS_ENV
44
+ end
45
+ # puts 'hash_to_send=' + hash_to_send.inspect
46
+ return queue_raw(class_name, hash_to_send)
43
47
 
44
48
  end
45
49
 
@@ -49,7 +53,18 @@ module SimpleWorker
49
53
  # puts 'hash_to_send=' + hash_to_send.inspect
50
54
  response = run_http(@host, @access_key, @secret_key, :put, "queue/add", hash_to_send, params)
51
55
  # puts "response=" + response
52
- return ActiveSupport::JSON.decode(response)
56
+
57
+ parse_response response
58
+
59
+ end
60
+
61
+ def parse_response(response)
62
+ begin
63
+ return ActiveSupport::JSON.decode(response)
64
+ rescue => ex
65
+ puts 'response that caused error = ' + response.to_s
66
+ raise ex
67
+ end
53
68
  end
54
69
 
55
70
 
@@ -76,7 +91,7 @@ module SimpleWorker
76
91
  # puts 'hash_to_send=' + hash_to_send.inspect
77
92
  response = run_http(@host, @access_key, @secret_key, :put, "queue/schedule", hash_to_send, params)
78
93
  # puts "response=" + response
79
- return ActiveSupport::JSON.decode(response)
94
+ parse_response response
80
95
  end
81
96
 
82
97
  #
@@ -93,15 +108,25 @@ module SimpleWorker
93
108
  # puts 'hash_to_send=' + hash_to_send.inspect
94
109
  response = run_http(@host, @access_key, @secret_key, :put, "queue/add", hash_to_send, params)
95
110
  # puts "response=" + response
96
- return ActiveSupport::JSON.decode(response)
111
+ parse_response response
97
112
  end
98
113
 
99
114
  def status(task_id)
100
115
  data = {"task_id"=>task_id}
101
116
  #puts run_http(@access_key, @secret_key, :post, "queue/status", nil, {"task_id"=>@task_id})
102
- response = run_http(@host, @access_key, @secret_key, :get, "queue/status", nil, data)
117
+ response = run_http(@host, @access_key, @secret_key, :get, "task/status", nil, data)
118
+ # puts "response=" + response
119
+ parse_response response
120
+ end
121
+
122
+ def log(task_id)
123
+ data = {"task_id"=>task_id}
124
+ #puts run_http(@access_key, @secret_key, :post, "queue/status", nil, {"task_id"=>@task_id})
125
+ response = run_http(@host, @access_key, @secret_key, :get, "task/log", nil, data)
103
126
  # puts "response=" + response
104
- return ActiveSupport::JSON.decode(response)
127
+ ret = parse_response response
128
+ ret["log"] = Base64.decode64(ret["log"])
129
+ ret
105
130
  end
106
131
 
107
132
 
@@ -0,0 +1,22 @@
1
+ module SimpleWorker
2
+ class ClientError < StandardError
3
+
4
+ attr_reader :response_hash
5
+
6
+ def initialize(class_name, response_hash)
7
+ puts 'response-hash=' + response_hash.inspect
8
+ super("#{class_name} - #{response_hash["msg"]}")
9
+ @response_hash = response_hash
10
+ end
11
+ end
12
+
13
+ class ServiceError < StandardError
14
+ attr_reader :body
15
+
16
+ def initialize(class_name, body)
17
+ super("#{class_name}")
18
+ @body = body
19
+
20
+ end
21
+ end
22
+ end
data/lib/worker.rb CHANGED
@@ -2,6 +2,11 @@
2
2
  module SimpleWorker
3
3
 
4
4
  class Base
5
+
6
+ def log(str)
7
+ puts str.to_s
8
+ end
9
+
5
10
  def set_progress(hash)
6
11
  puts 'set_progress: ' + hash.inspect
7
12
  end
@@ -0,0 +1,9 @@
1
+ require 'simple_worker'
2
+
3
+ class ScheduledWorker < SimpleWorker::Base
4
+
5
+ def scheduled_run(data=nil)
6
+
7
+ end
8
+
9
+ end
@@ -1,46 +1,75 @@
1
- require 'test/unit'
2
- require 'yaml'
3
- require File.join(File.dirname(__FILE__), '../lib/simple_worker')
4
-
5
- class SimpleWorkerTests < Test::Unit::TestCase
6
-
7
- def setup
8
- @config = YAML::load(File.open(File.expand_path("~/.test-configs/simple_worker.yml")))
9
- #puts @config.inspect
10
- @access_key = @config['simple_worker']['access_key']
11
- @secret_key = @config['simple_worker']['secret_key']
12
- end
13
-
14
- def teardown
15
-
16
- end
17
-
18
- def test_queue
19
-
20
- worker = SimpleWorker::Service.new(@access_key, @secret_key)
21
-
22
- # Upload latest runner code
23
- worker.upload(File.join(File.dirname(__FILE__), "./test_runner.rb"), "TestRunner")
24
-
25
- # Add something to queue, get task ID back
26
- # Single task
27
- response_hash = worker.queue("TestRunner", {"s3_key"=>"single runner", "times"=>10})
28
- # task set
29
- response_hash = worker.queue("TestRunner", [{"id"=>"local_id", "s3_key"=>"some key", "times"=>4}, {"s3_key"=>"some key2", "times"=>3}, {"s3_key"=>"some key", "times"=>2}])
30
-
31
- # Check status
32
- tasks = response_hash["tasks"]
33
- while tasks.size > 0
34
- tasks.each do |t|
35
- status_response = worker.status(t["task_id"])
36
- puts 'status for ' + t["task_id"] + ' = ' + status_response["status"]
37
- if status_response["status"] == "complete"
38
- tasks.delete(t)
39
- end
40
- end
41
- end
42
-
43
-
44
- end
45
- end
46
-
1
+ require 'test/unit'
2
+ require 'yaml'
3
+ require File.join(File.dirname(__FILE__), '../lib/simple_worker')
4
+
5
+ class SimpleWorkerTests < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @config = YAML::load(File.open(File.expand_path("~/.test-configs/simple_worker.yml")))
9
+ #puts @config.inspect
10
+ @access_key = @config['simple_worker']['access_key']
11
+ @secret_key = @config['simple_worker']['secret_key']
12
+
13
+ @worker = SimpleWorker::Service.new(@access_key, @secret_key)
14
+ @worker.host = "http://localhost:3000/api/"
15
+ end
16
+
17
+ def teardown
18
+
19
+ end
20
+
21
+ def test_queue
22
+
23
+
24
+ # Upload latest runner code
25
+ @worker.upload(File.join(File.dirname(__FILE__), "./test_runner.rb"), "TestWorker")
26
+
27
+ # Add something to queue, get task ID back
28
+ # Single task
29
+ response_hash_single = @worker.queue("TestRunner", {"s3_key"=>"single runner", "times"=>10})
30
+
31
+ # task set
32
+ response_hash = @worker.queue("TestRunner", [{"id"=>"local_id", "s3_key"=>"some key", "times"=>4}, {"s3_key"=>"some key2", "times"=>3}, {"s3_key"=>"some key", "times"=>2}])
33
+ #
34
+ # Check status
35
+ tasks = response_hash["tasks"]
36
+ while tasks.size > 0
37
+ tasks.each do |t|
38
+ status_response = @worker.status(t["task_id"])
39
+ puts 'status for ' + t["task_id"] + ' = ' + status_response["status"]
40
+ if status_response["status"] == "complete" || status_response["status"] == "error" || status_response["status"] == "cancelled"
41
+ tasks.delete(t)
42
+ end
43
+ end
44
+ end
45
+
46
+ # lets try to get the log now too
47
+ task_id = response_hash_single["tasks"][0]["task_id"]
48
+ puts 'task_id=' + task_id
49
+ puts 'log=' + @worker.log(task_id).inspect
50
+
51
+ end
52
+
53
+ def test_scheduled
54
+
55
+ # Upload latest runner code
56
+ @worker.upload(File.join(File.dirname(__FILE__), "./scheduled_runner.rb"), "ScheduledWorker")
57
+
58
+ start_at = 10.seconds.since
59
+ #start_at = start_at.gmtime # testing different timezone
60
+ puts 'start_at =' + start_at.inspect
61
+ response_hash = @worker.schedule("TestRunner", {"msg"=>"One time test."}, {:start_at=>start_at})
62
+ puts 'response_hash=' + response_hash.inspect
63
+
64
+ start_at = 10.seconds.since
65
+ response_hash = @worker.schedule("TestRunner", {"msg"=>"Run times test"}, {:start_at=>start_at, :run_every=>30, :run_times=>3})
66
+ puts 'response_hash=' + response_hash.inspect
67
+
68
+ start_at = 10.seconds.since
69
+ end_at = 2.minutes.since
70
+ response_hash = @worker.schedule("TestRunner", {"msg"=>"End at test"}, {:start_at=>start_at, :run_every=>30, :end_at=>end_at, :run_times=>20})
71
+ puts 'response_hash=' + response_hash.inspect
72
+
73
+ end
74
+ end
75
+
@@ -1,19 +1,20 @@
1
1
  require 'simple_worker'
2
2
 
3
- class TestRunner < SimpleWorker::Base
3
+ # Bump for new checksum.
4
+ class TestWorker < SimpleWorker::Base
4
5
 
5
6
  def run(data=nil)
6
- puts 'running the runner for leroy '.upcase + ' with data: ' + data.inspect
7
+ log 'running the runner for leroy '.upcase + ' with data: ' + data.inspect
7
8
  @times = data["times"].to_i
8
9
  @times.times do |i|
9
- puts 'running at ' + i.to_s
10
+ log 'running at ' + i.to_s
10
11
  sleep 1
11
12
  set_progress(:percent=> (i / @times * 100))
12
13
  end
13
14
  end
14
15
 
15
16
  def set_complete(params=nil)
16
- puts 'SET COMPLETE YAY!' + params[:task_set_id]
17
+ log 'SET COMPLETE YAY!' + params[:task_set_id]
17
18
  end
18
19
 
19
20
  def progress
@@ -23,7 +24,5 @@ class TestRunner < SimpleWorker::Base
23
24
  return 0.0
24
25
  end
25
26
 
26
-
27
-
28
27
  end
29
28
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_worker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Reeder
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-18 00:00:00 -08:00
12
+ date: 2009-12-13 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -25,6 +25,7 @@ files:
25
25
  - lib/api_auth.rb
26
26
  - lib/http_enabled.rb
27
27
  - lib/simple_worker.rb
28
+ - lib/simple_worker_error.rb
28
29
  - lib/worker.rb
29
30
  - README.markdown
30
31
  has_rdoc: true
@@ -56,5 +57,6 @@ signing_key:
56
57
  specification_version: 3
57
58
  summary: Classified
58
59
  test_files:
60
+ - test/scheduled_worker.rb
59
61
  - test/simple_worker_tests.rb
60
- - test/test_runner.rb
62
+ - test/test_worker.rb