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.
- data/bin/qless-campfire +106 -0
- metadata +96 -0
data/bin/qless-campfire
ADDED
|
@@ -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: []
|