dynobattery 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'echoe'
4
4
  require 'net/http'
5
5
  require 'heroku'
6
6
 
7
- Echoe.new('dynobattery', '0.1.3') do |p|
7
+ Echoe.new('dynobattery', '0.1.4') do |p|
8
8
  p.description = "Submit request operations for dyno calculations on Heroku"
9
9
  p.url = "http://github.com/fedesoria/dynobattery"
10
10
  p.author = "Federico Soria"
@@ -14,3 +14,5 @@ Echoe.new('dynobattery', '0.1.3') do |p|
14
14
  end
15
15
 
16
16
  Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
17
+
18
+
data/dynobattery.gemspec CHANGED
@@ -2,21 +2,22 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{dynobattery}
5
- s.version = "0.1.3"
5
+ s.version = "0.1.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Federico Soria"]
9
- s.date = %q{2010-07-08}
9
+ s.date = %q{2010-09-09}
10
10
  s.description = %q{Submit request operations for dyno calculations on Heroku}
11
11
  s.email = %q{federico@dospuntocero.com.mx}
12
12
  s.extra_rdoc_files = ["README.rdoc", "lib/dynobattery.rb"]
13
- s.files = ["Manifest", "README.rdoc", "Rakefile", "dynobattery.gemspec", "lib/dynobattery.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "dynobattery.gemspec", "lib/dynobattery.rb", "test/test_dynobattery.rb"]
14
14
  s.homepage = %q{http://github.com/fedesoria/dynobattery}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Dynobattery", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{dynobattery}
18
18
  s.rubygems_version = %q{1.3.6}
19
19
  s.summary = %q{Submit request operations for dyno calculations on Heroku}
20
+ s.test_files = ["test/test_dynobattery.rb"]
20
21
 
21
22
  if s.respond_to? :specification_version then
22
23
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
data/lib/dynobattery.rb CHANGED
@@ -4,28 +4,58 @@ class DynoBattery
4
4
  end
5
5
 
6
6
  def call(env)
7
- if defined?(DYNO_DOMAIN)
8
- uri = URI.parse("http://dyno-battery.heroku.com/")
9
- http = Net::HTTP.new(uri.host, uri.port)
10
- http.open_timeout = 3
11
- http.read_timeout = 3
12
- start = Time.now
13
- status, headers, response = @app.call(env)
14
- stop = Time.now
15
- if defined?(DYNO_USER) && defined?(DYNO_PASSWORD)
16
- get_dynos
17
- http.post("/heroku","name=#{DYNO_DOMAIN}&date=#{start.to_s}&time=#{"%10.6f" % (stop - start)}&dyno=#{@dynos}")
7
+ dup._call(env)
8
+ end
9
+
10
+ def _call(env)
11
+ if defined?(DYNOBATTERY_ID)
12
+ req = Rack::Request.new(env)
13
+ @params = req.params
14
+ if env["PATH_INFO"] =~ /^\/add_dyno/ and @params["id"] == DYNOBATTERY_ID
15
+ add_dyno
16
+ [200, {"Content-Type" => "text/plain"}, ["Dyno +1"]]
17
+ elsif env["PATH_INFO"] =~ /^\/remove_dyno/ and @params["id"] == DYNOBATTERY_ID
18
+ remove_dyno
19
+ [200, {"Content-Type" => "text/plain"}, ["Dyno -1"]]
18
20
  else
19
- http.post("/heroku","name=#{DYNO_DOMAIN}&date=#{start.to_s}&time=#{"%10.6f" % (stop - start)}")
21
+ uri = URI.parse("http://dyno-battery.heroku.com/")
22
+ http = Net::HTTP.new(uri.host, uri.port)
23
+ http.open_timeout = 3
24
+ http.read_timeout = 3
25
+ start = Time.now
26
+ status, headers, response = @app.call(env)
27
+ stop = Time.now
28
+ http.post("/heroku","name=#{DYNOBATTERY_ID}&date=#{start.to_s}&time=#{"%10.6f" % (stop - start)}&dyno=#{env['HTTP_X_HEROKU_DYNOS_IN_USE']}")
29
+ [status, headers, response]
20
30
  end
31
+ else
32
+ [status, headers, response]
21
33
  end
22
- [status, headers, response]
23
34
  end
24
35
 
25
36
 
37
+
38
+ # deprecated for env["HTTP_X_HEROKU_DYNOS_IN_USE"]
26
39
  def get_dynos
27
- heroku = Heroku::Client.new(DYNO_USER, DYNO_PASSWORD)
28
- @dynos = heroku.info(DYNO_DOMAIN)[:dynos]
40
+ setup_heroku_client
41
+ @heroku_app = @heroku.info(DYNO_DOMAIN)
42
+ end
43
+
44
+
45
+ def add_dyno
46
+ setup_heroku_client
47
+ get_dynos
48
+ @heroku.set_dynos(@heroku_app[:name],@heroku_app[:dynos] + 1)
49
+ end
50
+
51
+ def remove_dyno
52
+ setup_heroku_client
53
+ get_dynos
54
+ @heroku.set_dynos(@heroku_app[:name],@heroku_app[:dynos] - 1)
55
+ end
56
+
57
+ def setup_heroku_client
58
+ @heroku = Heroku::Client.new(DYNO_USER, DYNO_PASSWORD)
29
59
  end
30
60
 
31
61
  end
@@ -0,0 +1,32 @@
1
+ # require 'helper'
2
+ require 'rubygems'
3
+ require 'dynobattery'
4
+ require 'heroku'
5
+ require 'test/unit'
6
+ require "contest"
7
+ require "rack/test"
8
+
9
+ class TestDynobattery < Test::Unit::TestCase
10
+
11
+
12
+
13
+
14
+
15
+ test "no constants are setup" do
16
+ battery = DynoBattery.new(nil)
17
+ assert_raise(NameError){ battery.get_dynos }
18
+ end
19
+
20
+ test "get number of dynos" do
21
+ setup_test
22
+ battery = DynoBattery.new(nil)
23
+ assert_instance_of(String, battery.get_dynos)
24
+ end
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 3
9
- version: 0.1.3
8
+ - 4
9
+ version: 0.1.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Federico Soria
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-08 00:00:00 -05:00
17
+ date: 2010-09-09 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -33,6 +33,7 @@ files:
33
33
  - Rakefile
34
34
  - dynobattery.gemspec
35
35
  - lib/dynobattery.rb
36
+ - test/test_dynobattery.rb
36
37
  has_rdoc: true
37
38
  homepage: http://github.com/fedesoria/dynobattery
38
39
  licenses: []
@@ -69,5 +70,5 @@ rubygems_version: 1.3.6
69
70
  signing_key:
70
71
  specification_version: 3
71
72
  summary: Submit request operations for dyno calculations on Heroku
72
- test_files: []
73
-
73
+ test_files:
74
+ - test/test_dynobattery.rb