simple_worker 0.1.0 → 0.1.1
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.rb +32 -60
- data/test/scheduled_worker.rb +2 -1
- data/test/{simple_worker_tests.rb → test_simple_worker.rb} +11 -10
- metadata +26 -11
- data/lib/api_auth.rb +0 -15
- data/lib/http_enabled.rb +0 -119
- data/lib/simple_worker_error.rb +0 -22
data/lib/simple_worker.rb
CHANGED
@@ -1,18 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require File.join(File.dirname(__FILE__), 'api_auth')
|
1
|
+
require 'appoxy_api'
|
3
2
|
require File.join(File.dirname(__FILE__), 'worker')
|
4
|
-
require File.join(File.dirname(__FILE__), 'simple_worker_error')
|
5
3
|
|
6
4
|
|
7
5
|
module SimpleWorker
|
8
6
|
|
9
|
-
class Service <
|
10
|
-
|
11
|
-
include SimpleWorker::HttpEnabled
|
7
|
+
class Service < Appoxy::Api::Client
|
12
8
|
|
13
9
|
def initialize(access_key, secret_key, options={})
|
14
10
|
puts 'Starting SimpleWorker::Service...'
|
15
|
-
super(access_key, secret_key, options)
|
11
|
+
super("http://api.simpleworkr.com/api/", access_key, secret_key, options)
|
16
12
|
end
|
17
13
|
|
18
14
|
# Options:
|
@@ -23,26 +19,22 @@ module SimpleWorker
|
|
23
19
|
mystring = f.read
|
24
20
|
end
|
25
21
|
options = {"code"=>mystring, "class_name"=>class_name}
|
26
|
-
|
27
|
-
|
28
|
-
parse_response response
|
22
|
+
ret = post("code/put", options)
|
23
|
+
ret
|
29
24
|
end
|
30
25
|
|
31
26
|
#
|
32
27
|
# data:
|
33
28
|
def queue(class_name, data={})
|
34
|
-
|
35
|
-
params = nil
|
36
29
|
if !data.is_a?(Array)
|
37
30
|
data = [data]
|
38
31
|
end
|
39
32
|
hash_to_send = {}
|
40
|
-
hash_to_send["
|
33
|
+
hash_to_send["payload"] = data
|
41
34
|
hash_to_send["class_name"] = class_name
|
42
35
|
if defined?(RAILS_ENV)
|
43
36
|
hash_to_send["rails_env"] = RAILS_ENV
|
44
37
|
end
|
45
|
-
# puts 'hash_to_send=' + hash_to_send.inspect
|
46
38
|
return queue_raw(class_name, hash_to_send)
|
47
39
|
|
48
40
|
end
|
@@ -50,21 +42,10 @@ module SimpleWorker
|
|
50
42
|
def queue_raw(class_name, data={})
|
51
43
|
params = nil
|
52
44
|
hash_to_send = data
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
parse_response response
|
58
|
-
|
59
|
-
end
|
45
|
+
hash_to_send["class_name"] = class_name
|
46
|
+
ret = post("queue/add", hash_to_send)
|
47
|
+
ret
|
60
48
|
|
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
|
68
49
|
end
|
69
50
|
|
70
51
|
|
@@ -80,52 +61,43 @@ module SimpleWorker
|
|
80
61
|
#
|
81
62
|
def schedule(class_name, data, schedule)
|
82
63
|
raise "Schedule must be a hash." if !schedule.is_a? Hash
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
64
|
+
# if !data.is_a?(Array)
|
65
|
+
# data = [data]
|
66
|
+
# end
|
87
67
|
hash_to_send = {}
|
88
|
-
hash_to_send["
|
68
|
+
hash_to_send["payload"] = data
|
89
69
|
hash_to_send["class_name"] = class_name
|
90
70
|
hash_to_send["schedule"] = schedule
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
parse_response response
|
71
|
+
puts 'about to send ' + hash_to_send.inspect
|
72
|
+
ret = post("scheduler/schedule", hash_to_send)
|
73
|
+
ret
|
95
74
|
end
|
96
75
|
|
97
|
-
|
98
|
-
|
99
|
-
#
|
100
|
-
def get_scheduled_tasks(schedule_id)
|
101
|
-
params = nil
|
102
|
-
if !data.is_a?(Array)
|
103
|
-
data = [data]
|
104
|
-
end
|
76
|
+
def cancel_schedule(scheduled_task_id)
|
77
|
+
raise "Must include a schedule id." if scheduled_task_id.blank?
|
105
78
|
hash_to_send = {}
|
106
|
-
hash_to_send["
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
79
|
+
hash_to_send["scheduled_task_id"] = scheduled_task_id
|
80
|
+
ret = post("scheduler/cancel", hash_to_send)
|
81
|
+
ret
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_schedules()
|
85
|
+
hash_to_send = {}
|
86
|
+
ret = get("scheduler/list", hash_to_send)
|
87
|
+
ret
|
112
88
|
end
|
113
89
|
|
114
90
|
def status(task_id)
|
115
91
|
data = {"task_id"=>task_id}
|
116
|
-
|
117
|
-
|
118
|
-
# puts "response=" + response
|
119
|
-
parse_response response
|
92
|
+
ret = get("task/status", data)
|
93
|
+
ret
|
120
94
|
end
|
121
95
|
|
122
96
|
def log(task_id)
|
123
97
|
data = {"task_id"=>task_id}
|
124
|
-
|
125
|
-
|
126
|
-
#
|
127
|
-
ret = parse_response response
|
128
|
-
ret["log"] = Base64.decode64(ret["log"])
|
98
|
+
ret = get("task/log", data)
|
99
|
+
puts 'ret=' + ret.inspect
|
100
|
+
# ret["log"] = Base64.decode64(ret["log"])
|
129
101
|
ret
|
130
102
|
end
|
131
103
|
|
data/test/scheduled_worker.rb
CHANGED
@@ -22,16 +22,16 @@ class SimpleWorkerTests < Test::Unit::TestCase
|
|
22
22
|
|
23
23
|
|
24
24
|
# Upload latest runner code
|
25
|
-
@worker.upload(File.join(File.dirname(__FILE__), "./
|
25
|
+
@worker.upload(File.join(File.dirname(__FILE__), "./test_worker.rb"), "TestWorker")
|
26
26
|
|
27
27
|
# Add something to queue, get task ID back
|
28
28
|
# Single task
|
29
|
-
response_hash_single = @worker.queue("
|
29
|
+
response_hash_single = @worker.queue("TestWorker", {"s3_key"=>"single runner", "times"=>10})
|
30
30
|
|
31
31
|
# task set
|
32
|
-
response_hash = @worker.queue("
|
33
|
-
|
34
|
-
# Check status
|
32
|
+
response_hash = @worker.queue("TestWorker", [{"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
35
|
tasks = response_hash["tasks"]
|
36
36
|
while tasks.size > 0
|
37
37
|
tasks.each do |t|
|
@@ -46,28 +46,29 @@ class SimpleWorkerTests < Test::Unit::TestCase
|
|
46
46
|
# lets try to get the log now too
|
47
47
|
task_id = response_hash_single["tasks"][0]["task_id"]
|
48
48
|
puts 'task_id=' + task_id
|
49
|
-
|
49
|
+
status_with_log = @worker.log(task_id)
|
50
|
+
puts 'log=' + status_with_log.inspect
|
50
51
|
|
51
52
|
end
|
52
53
|
|
53
54
|
def test_scheduled
|
54
55
|
|
55
56
|
# Upload latest runner code
|
56
|
-
@worker.upload(File.join(File.dirname(__FILE__), "./
|
57
|
+
@worker.upload(File.join(File.dirname(__FILE__), "./scheduled_worker.rb"), "ScheduledWorker")
|
57
58
|
|
58
59
|
start_at = 10.seconds.since
|
59
60
|
#start_at = start_at.gmtime # testing different timezone
|
60
61
|
puts 'start_at =' + start_at.inspect
|
61
|
-
response_hash = @worker.schedule("
|
62
|
+
response_hash = @worker.schedule("ScheduledWorker", {"msg"=>"One time test."}, {:start_at=>start_at})
|
62
63
|
puts 'response_hash=' + response_hash.inspect
|
63
64
|
|
64
65
|
start_at = 10.seconds.since
|
65
|
-
response_hash = @worker.schedule("
|
66
|
+
response_hash = @worker.schedule("ScheduledWorker", {"msg"=>"Run times test"}, {:start_at=>start_at, :run_every=>30, :run_times=>3})
|
66
67
|
puts 'response_hash=' + response_hash.inspect
|
67
68
|
|
68
69
|
start_at = 10.seconds.since
|
69
70
|
end_at = 2.minutes.since
|
70
|
-
response_hash = @worker.schedule("
|
71
|
+
response_hash = @worker.schedule("ScheduledWorker", {"msg"=>"End at test"}, {:start_at=>start_at, :run_every=>30, :end_at=>end_at, :run_times=>20})
|
71
72
|
puts 'response_hash=' + response_hash.inspect
|
72
73
|
|
73
74
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Travis Reeder
|
@@ -9,10 +14,21 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-04-16 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: appoxy_api
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
16
32
|
description: I could tell you, but then I'd have to...
|
17
33
|
email: travis@appoxy.com
|
18
34
|
executables: []
|
@@ -22,10 +38,7 @@ extensions: []
|
|
22
38
|
extra_rdoc_files:
|
23
39
|
- README.markdown
|
24
40
|
files:
|
25
|
-
- lib/api_auth.rb
|
26
|
-
- lib/http_enabled.rb
|
27
41
|
- lib/simple_worker.rb
|
28
|
-
- lib/simple_worker_error.rb
|
29
42
|
- lib/worker.rb
|
30
43
|
- README.markdown
|
31
44
|
has_rdoc: true
|
@@ -41,22 +54,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
41
54
|
requirements:
|
42
55
|
- - ">="
|
43
56
|
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 0
|
44
59
|
version: "0"
|
45
|
-
version:
|
46
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
61
|
requirements:
|
48
62
|
- - ">="
|
49
63
|
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 0
|
50
66
|
version: "0"
|
51
|
-
version:
|
52
67
|
requirements: []
|
53
68
|
|
54
69
|
rubyforge_project:
|
55
|
-
rubygems_version: 1.3.
|
70
|
+
rubygems_version: 1.3.6
|
56
71
|
signing_key:
|
57
72
|
specification_version: 3
|
58
73
|
summary: Classified
|
59
74
|
test_files:
|
60
75
|
- test/scheduled_worker.rb
|
61
|
-
- test/
|
76
|
+
- test/test_simple_worker.rb
|
62
77
|
- test/test_worker.rb
|
data/lib/api_auth.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
module SimpleWorker
|
2
|
-
|
3
|
-
class ApiAuth
|
4
|
-
|
5
|
-
attr_accessor :host
|
6
|
-
|
7
|
-
def initialize(access_key, secret_key, options={})
|
8
|
-
@access_key = access_key
|
9
|
-
@secret_key = secret_key
|
10
|
-
@host = options[:host] || "http://simpleworker.appoxy.com/api/"
|
11
|
-
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
data/lib/http_enabled.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_support'
|
3
|
-
require 'net/http'
|
4
|
-
require 'base64'
|
5
|
-
|
6
|
-
require File.join(File.dirname(__FILE__), 'simple_worker_error')
|
7
|
-
|
8
|
-
begin
|
9
|
-
require 'digest/hmac'
|
10
|
-
USE_EMBEDDED_HMAC = false
|
11
|
-
rescue
|
12
|
-
puts "HMAC, not found in standard lib." + $!.message
|
13
|
-
require 'hmac-sha1'
|
14
|
-
USE_EMBEDDED_HMAC = true
|
15
|
-
end
|
16
|
-
|
17
|
-
module SimpleWorker
|
18
|
-
|
19
|
-
|
20
|
-
module HttpEnabled
|
21
|
-
|
22
|
-
# body is a hash
|
23
|
-
def run_http(host, access_key, secret_key, http_method, command_path, body=nil, parameters={}, extra_headers=nil)
|
24
|
-
ts = generate_timestamp(Time.now.gmtime)
|
25
|
-
# puts 'timestamp = ' + ts
|
26
|
-
sig = generate_signature_v0(command_path, ts, secret_key)
|
27
|
-
# puts "My signature = " + sig
|
28
|
-
url = host + command_path
|
29
|
-
# puts url
|
30
|
-
|
31
|
-
user_agent = "Ruby Client"
|
32
|
-
headers = {'User-Agent' => user_agent}
|
33
|
-
|
34
|
-
if !extra_headers.nil?
|
35
|
-
extra_headers.each_pair do |k, v|
|
36
|
-
headers[k] = v
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
extra_params = {'sigv'=>"0.1", 'sig' => sig, 'timestamp' => ts, 'access_key' => access_key}
|
41
|
-
if http_method == :put
|
42
|
-
body.update(extra_params)
|
43
|
-
else
|
44
|
-
parameters = {} if parameters.nil?
|
45
|
-
parameters.update(extra_params)
|
46
|
-
# puts 'params=' + parameters.inspect
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
uri = URI.parse(url)
|
52
|
-
#puts 'body=' + body.to_s
|
53
|
-
if (http_method == :put)
|
54
|
-
req = Net::HTTP::Put.new(uri.path)
|
55
|
-
body = ActiveSupport::JSON.encode(body)
|
56
|
-
req.body = body unless body.nil?
|
57
|
-
elsif (http_method == :post)
|
58
|
-
req = Net::HTTP::Post.new(uri.path)
|
59
|
-
if !parameters.nil?
|
60
|
-
req.set_form_data(parameters)
|
61
|
-
else
|
62
|
-
req.body = body unless body.nil?
|
63
|
-
end
|
64
|
-
elsif (http_method == :delete)
|
65
|
-
req = Net::HTTP::Delete.new(uri.path)
|
66
|
-
if !parameters.nil?
|
67
|
-
req.set_form_data(parameters)
|
68
|
-
end
|
69
|
-
else
|
70
|
-
req = Net::HTTP::Get.new(uri.path)
|
71
|
-
if !parameters.nil?
|
72
|
-
req.set_form_data(parameters)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
headers.each_pair do |k, v|
|
76
|
-
req[k] = v
|
77
|
-
end
|
78
|
-
# req.each_header do |k, v|
|
79
|
-
# puts 'header ' + k + '=' + v
|
80
|
-
#end
|
81
|
-
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
82
|
-
http.request(req)
|
83
|
-
end
|
84
|
-
|
85
|
-
ret = ''
|
86
|
-
case res
|
87
|
-
when Net::HTTPSuccess
|
88
|
-
# puts 'response body=' + res.body
|
89
|
-
ret = res.body
|
90
|
-
when Net::HTTPClientError
|
91
|
-
raise SimpleWorker::ClientError.new(res.class.name, ActiveSupport::JSON.decode(res.body))
|
92
|
-
else
|
93
|
-
#res.error
|
94
|
-
raise SimpleWorker::ServiceError.new(res.class.name, res.body)
|
95
|
-
end
|
96
|
-
return ret
|
97
|
-
end
|
98
|
-
|
99
|
-
def generate_timestamp(gmtime)
|
100
|
-
return gmtime.strftime("%Y-%m-%dT%H:%M:%SZ")
|
101
|
-
end
|
102
|
-
|
103
|
-
def generate_signature_v0(operation, timestamp, secret_key)
|
104
|
-
HttpEnabled.generate_signature_v0(operation, timestamp, secret_key)
|
105
|
-
end
|
106
|
-
|
107
|
-
def self.generate_signature_v0(operation, timestamp, secret_key)
|
108
|
-
if USE_EMBEDDED_HMAC
|
109
|
-
my_sha_hmac = HMAC::SHA1.digest(secret_key, operation + timestamp)
|
110
|
-
else
|
111
|
-
my_sha_hmac = Digest::HMAC.digest(operation + timestamp, secret_key, Digest::SHA1)
|
112
|
-
end
|
113
|
-
my_b64_hmac_digest = Base64.encode64(my_sha_hmac).strip
|
114
|
-
return my_b64_hmac_digest
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
119
|
-
|
data/lib/simple_worker_error.rb
DELETED
@@ -1,22 +0,0 @@
|
|
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
|