proby_notifier 1.0.0
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/.gitignore +6 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +25 -0
- data/README.md +53 -0
- data/Rakefile +38 -0
- data/lib/proby_notifier/proby_notifier.rb +88 -0
- data/lib/proby_notifier/resque_plugin.rb +58 -0
- data/lib/proby_notifier/version.rb +3 -0
- data/lib/proby_notifier.rb +2 -0
- data/proby_notifier.gemspec +30 -0
- data/test/proby_notifier_test.rb +50 -0
- data/test/test_helper.rb +16 -0
- metadata +178 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
proby_notifier (1.0.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
bluecloth (2.1.0)
|
10
|
+
fakeweb (1.3.0)
|
11
|
+
rake (0.8.7)
|
12
|
+
shoulda (2.11.3)
|
13
|
+
yard (0.6.8)
|
14
|
+
|
15
|
+
PLATFORMS
|
16
|
+
ruby
|
17
|
+
|
18
|
+
DEPENDENCIES
|
19
|
+
bluecloth (~> 2.1.0)
|
20
|
+
bundler (~> 1.0.0)
|
21
|
+
fakeweb (~> 1.3.0)
|
22
|
+
proby_notifier!
|
23
|
+
rake (~> 0.8.7)
|
24
|
+
shoulda (~> 2.11.3)
|
25
|
+
yard (~> 0.6.4)
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# ProbyNotifier
|
2
|
+
A simple library for working with the Proby task monitoring application.
|
3
|
+
|
4
|
+
|
5
|
+
Setup
|
6
|
+
-----
|
7
|
+
Before notifications can be sent, you must tell ProbyNotifier your API key. This only needs to be done once,
|
8
|
+
and should ideally be done inside your apps initialization code.
|
9
|
+
|
10
|
+
ProbyNotifier.api_key = "b4fe1200c105012efde3482a1411a947"
|
11
|
+
|
12
|
+
In addition, you can optionally give ProbyNotifier a logger to use.
|
13
|
+
|
14
|
+
ProbyNotifier.logger = Rails.logger
|
15
|
+
|
16
|
+
|
17
|
+
Sending Notifications
|
18
|
+
---------------------
|
19
|
+
To send a start notification
|
20
|
+
|
21
|
+
ProbyNotifier.send_start_notification(task_api_id)
|
22
|
+
|
23
|
+
To send a finish notification
|
24
|
+
|
25
|
+
ProbyNotifier.send_finish_notification(task_api_id)
|
26
|
+
|
27
|
+
Specifying the `task_api_id` when calling the notification methods is optional. If it is not provided,
|
28
|
+
ProbyNotifier will use the value of the `PROBY_TASK_ID` environment variable. If no task id is specified
|
29
|
+
in the method call, and no value is set in the `PROBY_TASK_ID` environment variable, then no notification
|
30
|
+
will be sent.
|
31
|
+
|
32
|
+
|
33
|
+
The Resque Plugin
|
34
|
+
-----------------
|
35
|
+
The Resque plugin will automatically send start and finish notifications to Proby when your job
|
36
|
+
starts and finishes. Simply `extend ProbyNotifier::ResquePlugin` in your Resque job. The task id
|
37
|
+
can either be pulled from the `PROBY_TASK_ID` environment variable, or specified in the job itself
|
38
|
+
by setting the `@proby_id` attribute to the task id.
|
39
|
+
|
40
|
+
class SomeJob
|
41
|
+
extend ProbyNotifier::ResquePlugin
|
42
|
+
@proby_id = 'abc123' # Or simply let it use the value in the PROBY_TASK_ID environment variable
|
43
|
+
|
44
|
+
self.perform
|
45
|
+
do_stuff
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
API Doc
|
51
|
+
-------
|
52
|
+
[http://rdoc.info/github/signal/proby_notifier/master/frames](http://rdoc.info/github/signal/proby_notifier/master/frames)
|
53
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
|
+
|
6
|
+
begin
|
7
|
+
Bundler.setup(:default, :development)
|
8
|
+
rescue Bundler::BundlerError => e
|
9
|
+
$stderr.puts e.message
|
10
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
11
|
+
exit e.status_code
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'rake'
|
15
|
+
require 'rake/testtask'
|
16
|
+
require 'yard'
|
17
|
+
|
18
|
+
task :default => :test
|
19
|
+
|
20
|
+
Rake::TestTask.new(:test) do |test|
|
21
|
+
test.libs << 'lib' << 'test'
|
22
|
+
test.pattern = ENV['TEST'] || "test/**/*_test.rb"
|
23
|
+
test.verbose = true
|
24
|
+
end
|
25
|
+
|
26
|
+
YARD::Rake::YardocTask.new do |t|
|
27
|
+
t.files = ['lib/**/*.rb']
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Delete yard, and other generated files'
|
31
|
+
task :clobber => [:clobber_yard]
|
32
|
+
|
33
|
+
desc 'Delete yard generated files'
|
34
|
+
task :clobber_yard do
|
35
|
+
puts 'rm -rf doc .yardoc'
|
36
|
+
FileUtils.rm_rf ['doc', '.yardoc']
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
module ProbyNotifier
|
5
|
+
|
6
|
+
BASE_URL = "https://proby.signalhq.com/tasks/"
|
7
|
+
|
8
|
+
# Deliver start and finish notifications to Proby.
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# Set your Proby API key.
|
12
|
+
#
|
13
|
+
# @param [String] api_key Your Proby API key
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# ProbyNotifier.api_key = '1234567890abcdefg'
|
17
|
+
def api_key=(api_key)
|
18
|
+
@api_key = api_key
|
19
|
+
end
|
20
|
+
|
21
|
+
# Set the logger to be used by Proby.
|
22
|
+
#
|
23
|
+
# @param [Logger] logger The logger you would like ProbyNotifier to use
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# ProbyNotifier.logger = Rails.logger
|
27
|
+
# ProbyNotifier.logger = Logger.new(STDERR)
|
28
|
+
def logger=(logger)
|
29
|
+
@logger = logger
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get the logger used by Proby.
|
33
|
+
def logger
|
34
|
+
@logger || Logger.new("/dev/null")
|
35
|
+
end
|
36
|
+
|
37
|
+
# Send a start notification for this task to Proby.
|
38
|
+
#
|
39
|
+
# @param [String] proby_task_id The id of the task to be notified. If nil, the
|
40
|
+
# value of the +PROBY_TASK_ID+ environment variable will be used.
|
41
|
+
def send_start_notification(proby_task_id=nil)
|
42
|
+
send_notification('/start', proby_task_id)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Send a finish notification for this task to Proby
|
46
|
+
#
|
47
|
+
# @param [String] proby_task_id The id of the task to be notified. If nil, the
|
48
|
+
# value of the +PROBY_TASK_ID+ environment variable will be used.
|
49
|
+
def send_finish_notification(proby_task_id=nil)
|
50
|
+
send_notification('/finish', proby_task_id)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def send_notification(type, proby_task_id)
|
56
|
+
if @api_key.nil?
|
57
|
+
logger.warn "ProbyNotifier: No notification sent because API key is not set"
|
58
|
+
return nil
|
59
|
+
end
|
60
|
+
|
61
|
+
proby_task_id = ENV['PROBY_TASK_ID'] if is_blank?(proby_task_id)
|
62
|
+
if is_blank?(proby_task_id)
|
63
|
+
logger.warn "ProbyNotifier: No notification sent because task ID was not specified"
|
64
|
+
return nil
|
65
|
+
end
|
66
|
+
|
67
|
+
url = BASE_URL + proby_task_id + type
|
68
|
+
uri = URI.parse(url)
|
69
|
+
req = Net::HTTP::Post.new(uri.path, {'api_key' => @api_key})
|
70
|
+
|
71
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
72
|
+
http.open_timeout = 3
|
73
|
+
http.read_timeout = 3
|
74
|
+
http.use_ssl = true
|
75
|
+
res = http.start { |h| h.request(req) }
|
76
|
+
return res.code.to_i
|
77
|
+
rescue Exception => e
|
78
|
+
logger.error "ProbyNotifier: Proby notification failed: #{e.message}"
|
79
|
+
logger.error e.backtrace
|
80
|
+
end
|
81
|
+
|
82
|
+
def is_blank?(string)
|
83
|
+
string.nil? || string.strip == ''
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module ProbyNotifier
|
2
|
+
# Automatically notifies Proby when this job starts and finishes.
|
3
|
+
#
|
4
|
+
# class SomeJob
|
5
|
+
# extend ProbyNotifier::ResquePlugin
|
6
|
+
#
|
7
|
+
# self.perform
|
8
|
+
# do_stuff
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# The Proby Task ID can be set in one of two ways. The most common way is to
|
13
|
+
# put the ID in an ENV variable that is set in your crontab. This ID will be
|
14
|
+
# transparently passed to the Resque job via Redis.
|
15
|
+
#
|
16
|
+
# 0 0 * * * PROBY_TASK_ID=abc123 ./queue_some_job
|
17
|
+
#
|
18
|
+
# Alternatively, if you're not using cron and therefore don't want that
|
19
|
+
# support, you can just set the @proby_id ivar in the class, like so.
|
20
|
+
#
|
21
|
+
# class SomeJob
|
22
|
+
# extend ProbyNotifier::ResquePlugin
|
23
|
+
# @proby_id = 'abc123'
|
24
|
+
#
|
25
|
+
# self.perform
|
26
|
+
# do_stuff
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# Setting the @proby_id variable will take precendence over the ENV variable.
|
31
|
+
#
|
32
|
+
module ResquePlugin
|
33
|
+
def proby_id_bucket(*args)
|
34
|
+
"proby_id:#{name}-#{args.to_s}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def before_enqueue_proby(*args)
|
38
|
+
return true if @proby_id
|
39
|
+
|
40
|
+
env_proby_id = ENV['PROBY_TASK_ID']
|
41
|
+
Resque.redis.setex(proby_id_bucket(*args), 24.hours, env_proby_id)
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
def proby_id(*args)
|
46
|
+
@proby_id || Resque.redis.get(proby_id_bucket(*args))
|
47
|
+
end
|
48
|
+
|
49
|
+
def around_perform_proby(*args)
|
50
|
+
_proby_id = proby_id(*args)
|
51
|
+
ProbyNotifier.send_start_notification(_proby_id)
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
ProbyNotifier.send_finish_notification(_proby_id)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/proby_notifier/version", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "proby_notifier"
|
6
|
+
s.license = "MIT"
|
7
|
+
s.version = ProbyNotifier::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["John Wood", "Doug Barth"]
|
10
|
+
s.email = ["john@signalhq.com", "doug@signalhq.com"]
|
11
|
+
s.homepage = "http://github.com/signal/proby_notifier"
|
12
|
+
s.summary = %Q{A simple library for working with the Proby task monitoring application.}
|
13
|
+
s.description = %Q{A simple library for working with the Proby task monitoring application.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "proby_notifier"
|
16
|
+
|
17
|
+
s.required_rubygems_version = ">= 1.3.6"
|
18
|
+
|
19
|
+
s.add_development_dependency "bundler", "~> 1.0.0"
|
20
|
+
s.add_development_dependency "rake", "~> 0.8.7"
|
21
|
+
s.add_development_dependency "yard", "~> 0.6.4"
|
22
|
+
s.add_development_dependency "bluecloth", "~> 2.1.0"
|
23
|
+
s.add_development_dependency "fakeweb", "~> 1.3.0"
|
24
|
+
s.add_development_dependency "shoulda", "~> 2.11.3"
|
25
|
+
|
26
|
+
s.files = `git ls-files`.split("\n")
|
27
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
28
|
+
s.require_path = 'lib'
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ProbyNotifierTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
ENV['PROBY_TASK_ID'] = nil
|
7
|
+
FakeWeb.clean_registry
|
8
|
+
end
|
9
|
+
|
10
|
+
should "not send the notification if the api_key is not set" do
|
11
|
+
assert_nil ProbyNotifier.send_start_notification("abc123")
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with an api key set" do
|
15
|
+
setup do
|
16
|
+
ProbyNotifier.api_key = '1234567890abcdefg'
|
17
|
+
end
|
18
|
+
|
19
|
+
should "not send the notification if a task id was not specified" do
|
20
|
+
assert_nil ProbyNotifier.send_start_notification
|
21
|
+
end
|
22
|
+
|
23
|
+
should "not send the notification if a task id is blank" do
|
24
|
+
assert_nil ProbyNotifier.send_start_notification(" ")
|
25
|
+
end
|
26
|
+
|
27
|
+
should "send a start notification if a task_id is specified in the call" do
|
28
|
+
FakeWeb.register_uri(:post, "https://proby.signalhq.com/tasks/abc123xyz456/start", :status => ["200", "Success"])
|
29
|
+
assert_equal 200, ProbyNotifier.send_start_notification("abc123xyz456")
|
30
|
+
end
|
31
|
+
|
32
|
+
should "send a start notification if a task_id is specified in an environment variable" do
|
33
|
+
ENV['PROBY_TASK_ID'] = "uuu777sss999"
|
34
|
+
FakeWeb.register_uri(:post, "https://proby.signalhq.com/tasks/uuu777sss999/start", :status => ["200", "Success"])
|
35
|
+
assert_equal 200, ProbyNotifier.send_start_notification
|
36
|
+
end
|
37
|
+
|
38
|
+
should "send a finish notification if a task_id is specified in the call" do
|
39
|
+
FakeWeb.register_uri(:post, "https://proby.signalhq.com/tasks/abc123xyz456/finish", :status => ["200", "Success"])
|
40
|
+
assert_equal 200, ProbyNotifier.send_finish_notification("abc123xyz456")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "send a finish notification if a task_id is specified in an environment variable" do
|
44
|
+
ENV['PROBY_TASK_ID'] = "iii999ooo222"
|
45
|
+
FakeWeb.register_uri(:post, "https://proby.signalhq.com/tasks/iii999ooo222/finish", :status => ["200", "Success"])
|
46
|
+
assert_equal 200, ProbyNotifier.send_finish_notification
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'test/unit'
|
12
|
+
require 'fakeweb'
|
13
|
+
require 'shoulda'
|
14
|
+
|
15
|
+
require 'proby_notifier'
|
16
|
+
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: proby_notifier
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- John Wood
|
14
|
+
- Doug Barth
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-09-17 00:00:00 -05:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 23
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 0
|
32
|
+
- 0
|
33
|
+
version: 1.0.0
|
34
|
+
name: bundler
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
requirement: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 49
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 8
|
48
|
+
- 7
|
49
|
+
version: 0.8.7
|
50
|
+
name: rake
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
requirement: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 15
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
- 6
|
64
|
+
- 4
|
65
|
+
version: 0.6.4
|
66
|
+
name: yard
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
requirement: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 11
|
77
|
+
segments:
|
78
|
+
- 2
|
79
|
+
- 1
|
80
|
+
- 0
|
81
|
+
version: 2.1.0
|
82
|
+
name: bluecloth
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
requirement: *id004
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ~>
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 27
|
93
|
+
segments:
|
94
|
+
- 1
|
95
|
+
- 3
|
96
|
+
- 0
|
97
|
+
version: 1.3.0
|
98
|
+
name: fakeweb
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
requirement: *id005
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ~>
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
hash: 37
|
109
|
+
segments:
|
110
|
+
- 2
|
111
|
+
- 11
|
112
|
+
- 3
|
113
|
+
version: 2.11.3
|
114
|
+
name: shoulda
|
115
|
+
type: :development
|
116
|
+
prerelease: false
|
117
|
+
requirement: *id006
|
118
|
+
description: A simple library for working with the Proby task monitoring application.
|
119
|
+
email:
|
120
|
+
- john@signalhq.com
|
121
|
+
- doug@signalhq.com
|
122
|
+
executables: []
|
123
|
+
|
124
|
+
extensions: []
|
125
|
+
|
126
|
+
extra_rdoc_files: []
|
127
|
+
|
128
|
+
files:
|
129
|
+
- .gitignore
|
130
|
+
- Gemfile
|
131
|
+
- Gemfile.lock
|
132
|
+
- README.md
|
133
|
+
- Rakefile
|
134
|
+
- lib/proby_notifier.rb
|
135
|
+
- lib/proby_notifier/proby_notifier.rb
|
136
|
+
- lib/proby_notifier/resque_plugin.rb
|
137
|
+
- lib/proby_notifier/version.rb
|
138
|
+
- proby_notifier.gemspec
|
139
|
+
- test/proby_notifier_test.rb
|
140
|
+
- test/test_helper.rb
|
141
|
+
has_rdoc: true
|
142
|
+
homepage: http://github.com/signal/proby_notifier
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
post_install_message:
|
146
|
+
rdoc_options: []
|
147
|
+
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
hash: 3
|
156
|
+
segments:
|
157
|
+
- 0
|
158
|
+
version: "0"
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
hash: 23
|
165
|
+
segments:
|
166
|
+
- 1
|
167
|
+
- 3
|
168
|
+
- 6
|
169
|
+
version: 1.3.6
|
170
|
+
requirements: []
|
171
|
+
|
172
|
+
rubyforge_project: proby_notifier
|
173
|
+
rubygems_version: 1.4.2
|
174
|
+
signing_key:
|
175
|
+
specification_version: 3
|
176
|
+
summary: A simple library for working with the Proby task monitoring application.
|
177
|
+
test_files: []
|
178
|
+
|