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.
@@ -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: