qless-campfire 0.9.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.
Files changed (2) hide show
  1. data/bin/qless-campfire +106 -0
  2. metadata +96 -0
@@ -0,0 +1,106 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+
5
+ require 'qless'
6
+ require 'tinder'
7
+ require 'micro-optparse'
8
+
9
+ @options = Parser.new do |p|
10
+ p.banner = 'This agent lets you get campfire notifications for the progress of tracked jobs'
11
+ p.option :subdomain, 'campfire subdomain' , :default => '', :value_satisfies => lambda { |subdomain| subdomain.is_a?(String) }
12
+ p.option :token , 'campfire token for bot', :default => '', :value_satisfies => lambda { |subdomain| subdomain.is_a?(String) }
13
+ p.option :room , 'campfire room to talk in (defaults to first room)', :default => ''
14
+ p.option :host , 'host:port for your qless redis instance', :default => 'localhost:6379'
15
+ p.option :web , 'host:port for your qless web ui', :default => 'localhost:5678'
16
+ end.process!
17
+
18
+ # Get a campfire object, and room
19
+ puts 'Connecting to campfire...'
20
+ @campfire = Tinder::Campfire.new @options[:subdomain], :token => @options[:token]
21
+ if not @options[:room]
22
+ @room = @campfire.rooms.first
23
+ else
24
+ @room = @campfire.find_room_by_name(@options[:room])
25
+ end
26
+
27
+ # And now qless stuff
28
+ puts 'Connecting to qless...'
29
+ @client = Qless::Client.new(:host => @options[:host])
30
+
31
+ def speak(message)
32
+ @room.speak message
33
+ puts "Said '#{message}'"
34
+ end
35
+
36
+ def paste(message)
37
+ @room.paste message
38
+ puts "Pasted '#{message}'"
39
+ end
40
+
41
+ def event(jid, &block)
42
+ job = @client.jobs[jid]
43
+ if job.nil?
44
+ speak("#{jid[0...8]} #{yield job} | http://#{@options[:host]}/jobs/#{jid}]")
45
+ else
46
+ speak("#{jid[0...8]} #{yield job} [#{job.tags.join(', ')}] | http://#{@options[:host]}/jobs/#{jid}")
47
+ end
48
+ end
49
+
50
+ @client.events.listen do |on|
51
+ on.canceled { |jid| event(jid) { |job| 'canceled' } }
52
+ on.stalled { |jid| event(jid) { |job| 'stalled' } }
53
+ on.track { |jid| event(jid) { |job| 'is being tracked' } }
54
+ on.untrack { |jid| event(jid) { |job| 'not longer tracked' } }
55
+
56
+ on.completed do |jid|
57
+ event(jid) do |job|
58
+ if job
59
+ if job.queue_name.empty?
60
+ 'completed'
61
+ else
62
+ "advanced to #{job.queue_name}"
63
+ end
64
+ else
65
+ 'completed'
66
+ end
67
+ end
68
+ end
69
+
70
+ on.popped do |jid|
71
+ event(jid) do |job|
72
+ if job
73
+ "popped by #{job.worker_name}"
74
+ else
75
+ 'popped'
76
+ end
77
+ end
78
+ end
79
+
80
+ on.put do |jid|
81
+ event(jid) do |job|
82
+ if job
83
+ "moved to #{job.queue_name}"
84
+ else
85
+ 'moved'
86
+ end
87
+ end
88
+ end
89
+
90
+ on.failed do |jid|
91
+ job = @client.jobs[jid]
92
+ if job
93
+ speak("#{jid} failed by #{job.failure['worker']} | http://#{@options[:web]}/jobs/#{jid}")
94
+ paste job.failure['message']
95
+ else
96
+ speak("#{jid} failed")
97
+ end
98
+ end
99
+
100
+ puts 'Listening...'
101
+
102
+ Signal.trap("INT") do
103
+ puts 'Exiting'
104
+ Process.exit(0)
105
+ end
106
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qless-campfire
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dan Lecocq
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: qless
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.9'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.9'
30
+ - !ruby/object:Gem::Dependency
31
+ name: tinder
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.8'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.8'
46
+ - !ruby/object:Gem::Dependency
47
+ name: micro-optparse
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ description: ! "\n Get Campfire notifications for jobs you're tracking in your
63
+ qless\n queue.\n "
64
+ email:
65
+ - dan@seomoz.org
66
+ executables:
67
+ - qless-campfire
68
+ extensions: []
69
+ extra_rdoc_files: []
70
+ files:
71
+ - bin/qless-campfire
72
+ homepage: http://github.com/seomoz/qless
73
+ licenses: []
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project: qless-campfire
92
+ rubygems_version: 1.8.24
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: Campfire Notifications for Qless
96
+ test_files: []