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.
@@ -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
- @http ||= Net::HTTP.new(Komrade.url.host, Komrade.url.port).tap do |h|
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
@@ -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
- put("/jobs/#{id}", method: method, args: args)
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
- get("/jobs?limit=#{limit}")
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
- delete("/jobs/#{id}")
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
@@ -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 "Returns the number of jobs in the (default or QUEUE) queue"
15
- task :count => :environment do
16
- $stdout.puts(Komrade::Worker.new.queue.count)
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 => "handle_failure", failure_id: fid)
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 client library for the komrade worker queue.
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
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komrade-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: