komrade-client 1.0.2 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/komrade-client.rb +3 -0
- data/lib/komrade-client/http_helpers.rb +5 -1
- data/lib/komrade-client/queue.rb +37 -3
- data/lib/komrade-client/tasks.rb +4 -3
- data/lib/komrade-client/worker.rb +10 -2
- data/readme.md +20 -2
- metadata +1 -1
data/lib/komrade-client.rb
CHANGED
@@ -17,6 +17,7 @@ module Komrade
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def log(data)
|
20
|
+
data.merge!(:lib => 'komrade-client')
|
20
21
|
result = nil
|
21
22
|
if data.key?(:measure)
|
22
23
|
data[:measure].insert(0, "komrade.")
|
@@ -34,3 +35,5 @@ module Komrade
|
|
34
35
|
end
|
35
36
|
|
36
37
|
end
|
38
|
+
|
39
|
+
require 'komrade-client/queue'
|
@@ -8,6 +8,10 @@ module Komrade
|
|
8
8
|
extend self
|
9
9
|
MAX_RETRY = 4
|
10
10
|
|
11
|
+
def post(path, body=nil)
|
12
|
+
make_request(Net::HTTP::Post.new(path), body)
|
13
|
+
end
|
14
|
+
|
11
15
|
def put(path, body=nil)
|
12
16
|
make_request(Net::HTTP::Put.new(path), body)
|
13
17
|
end
|
@@ -63,7 +67,7 @@ module Komrade
|
|
63
67
|
end
|
64
68
|
|
65
69
|
def http
|
66
|
-
|
70
|
+
Net::HTTP.new(Komrade.url.host, Komrade.url.port).tap do |h|
|
67
71
|
if Komrade.url.scheme == 'https'
|
68
72
|
h.use_ssl = true
|
69
73
|
h.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
data/lib/komrade-client/queue.rb
CHANGED
@@ -7,19 +7,53 @@ module Komrade
|
|
7
7
|
extend self
|
8
8
|
extend HttpHelpers
|
9
9
|
|
10
|
+
# Generates a UUID for the job and sends it to komrade.
|
11
|
+
#
|
12
|
+
# Fast operation.
|
10
13
|
def enqueue(method, *args)
|
11
14
|
SecureRandom.uuid.tap do |id|
|
12
|
-
|
15
|
+
log(:at => "enqueue-job", :job => id, :method => method) do
|
16
|
+
put("/jobs/#{id}", method: method, args: args)
|
17
|
+
end
|
13
18
|
end
|
14
19
|
end
|
15
20
|
|
21
|
+
# The jobs that are returned will be locked in komrade.
|
22
|
+
# This ensures that no other komrade clients can view them.
|
23
|
+
# If you dequeue a job, it is your responsiblity to update the job.
|
24
|
+
# Updates to jobs include: heartbeat, fail, and delete.
|
25
|
+
#
|
26
|
+
# Moderately fast operation.
|
16
27
|
def dequeue(opts={})
|
17
28
|
limit = opts[:limit] || 1
|
18
|
-
|
29
|
+
log(:at => "dequeue-job", :limit => limit) do
|
30
|
+
get("/jobs?limit=#{limit}")
|
31
|
+
end
|
19
32
|
end
|
20
33
|
|
34
|
+
# Idempotent call to delete a job from the queue.
|
35
|
+
#
|
36
|
+
# Fast operation.
|
21
37
|
def remove(id)
|
22
|
-
|
38
|
+
log(:at => "remove-job", :job => id) do
|
39
|
+
delete("/jobs/#{id}")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Delete all of the jobs in a queue.
|
44
|
+
# Returns the count of the jobs that were deleted.
|
45
|
+
#
|
46
|
+
# Slow operation.
|
47
|
+
def delete_all
|
48
|
+
log(:at => "cleat") do
|
49
|
+
post("/delete-all-jobs")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def log(data, &blk)
|
56
|
+
Komrade.log(data, &blk)
|
23
57
|
end
|
24
58
|
end
|
25
59
|
end
|
data/lib/komrade-client/tasks.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'komrade-client/worker'
|
2
|
+
require 'komrade-client/queue'
|
2
3
|
|
3
4
|
task :environment
|
4
5
|
|
@@ -11,8 +12,8 @@ namespace :komrade do
|
|
11
12
|
@worker.start
|
12
13
|
end
|
13
14
|
|
14
|
-
desc "
|
15
|
-
task :
|
16
|
-
$stdout.puts(Komrade::
|
15
|
+
desc "Deletes all jobs in the queue."
|
16
|
+
task :delete_all => :environment do
|
17
|
+
$stdout.puts(Komrade::Queue.delete_all)
|
17
18
|
end
|
18
19
|
end
|
@@ -30,12 +30,20 @@ module Komrade
|
|
30
30
|
until jobs.empty?
|
31
31
|
job = jobs.pop
|
32
32
|
begin
|
33
|
+
@finished, @beats = false, 0
|
34
|
+
Thread.new do
|
35
|
+
while @beats == 0 || !@finished
|
36
|
+
@beats += 1
|
37
|
+
HttpHelpers.post("/jobs/#{job['id']}/heartbeats")
|
38
|
+
sleep(1)
|
39
|
+
end
|
40
|
+
end
|
33
41
|
call(job["payload"])
|
42
|
+
@finished = true
|
34
43
|
rescue => e
|
35
44
|
handle_failure(job, e)
|
36
45
|
ensure
|
37
46
|
Queue.remove(job["id"])
|
38
|
-
log(:at => "remove-job", :job => job["id"])
|
39
47
|
end
|
40
48
|
end
|
41
49
|
end
|
@@ -54,7 +62,7 @@ module Komrade
|
|
54
62
|
# is raised during the execution of the job.
|
55
63
|
def handle_failure(job,e)
|
56
64
|
fid = SecureRandom.uuid
|
57
|
-
log(:at => "
|
65
|
+
log(:at => "handle-failure", :failure_id => fid)
|
58
66
|
b = {error: e.class, message: e.message}
|
59
67
|
HttpHelpers.put("/jobs/#{job['id']}/failures/#{fid}", b)
|
60
68
|
end
|
data/readme.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# Komrade
|
1
|
+
# Komrade Client
|
2
2
|
|
3
|
-
A
|
3
|
+
A small, Ruby superset of Komrade's [HTTP API](https://gist.github.com/4641301)
|
4
4
|
|
5
5
|
## Setup
|
6
6
|
|
@@ -16,6 +16,7 @@ $ gem install komrade-client
|
|
16
16
|
1. Install Gem
|
17
17
|
2. Enqueue
|
18
18
|
3. Dequeue
|
19
|
+
4. Komrade Dashboard
|
19
20
|
|
20
21
|
### Install
|
21
22
|
|
@@ -28,6 +29,14 @@ gem 'komrade-client', '1.0.1'
|
|
28
29
|
|
29
30
|
### Enqueue
|
30
31
|
|
32
|
+
Simple Example
|
33
|
+
|
34
|
+
```bash
|
35
|
+
$ export KOMRADE_URL=https://u:p@service.komrade.io
|
36
|
+
$ ruby -r komrade-client -e 'Komrade::Queue.enqueue("puts", "hello world")`
|
37
|
+
$ ruby -r komrade-client -e 'puts Komrade::Queue.dequeue`
|
38
|
+
```
|
39
|
+
|
31
40
|
Example Model
|
32
41
|
|
33
42
|
```ruby
|
@@ -62,3 +71,12 @@ Procfile
|
|
62
71
|
web: bundle exec rails s
|
63
72
|
worker: bundle exec rake komrade:work
|
64
73
|
```
|
74
|
+
|
75
|
+
### Komrade Dashboard
|
76
|
+
|
77
|
+
```bash
|
78
|
+
$ heroku addons:open komrade:test
|
79
|
+
```
|
80
|
+
|
81
|
+
![img](http://f.cl.ly/items/0G3f0B2J3J40451h0k3I/Screen%20Shot%202013-01-27%20at%2010.41.53%20PM.png)
|
82
|
+
|