komrade-client 1.0.2 → 1.0.5
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/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
|
+

|
82
|
+
|