hirefireapp 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -1,5 +1,6 @@
1
- # HireFireApp.com - The Heroku Worker Monitor
1
+ # HireFire - The Heroku Worker Manager
2
2
 
3
- See the official website for more information!
3
+ HireFire is a hosted service that scales your Heroku web and worker dynos when necessary.
4
+ This allows you to save a lot of money by allowing HireFire to shut down idle workers, and add scalability to both your web as well as your worker dynos.
4
5
 
5
- [http://hirefireapp.com/](http://hirefireapp.com/)
6
+ Visit the [official website](http://hirefireapp.com/) for more information!
data/bin/hirefireapp CHANGED
@@ -11,7 +11,7 @@ def usage
11
11
  puts "Or locally:"
12
12
  puts
13
13
  puts " gem install thin"
14
- puts " thin start -p 3000"
14
+ puts " [bundle exec] thin start -p 3000"
15
15
  puts " hirefireapp http://127.0.0.1:3000/"
16
16
  puts
17
17
  puts "SSL Enabled URLs:"
data/hirefireapp.gemspec CHANGED
@@ -4,17 +4,17 @@ Gem::Specification.new do |gem|
4
4
 
5
5
  # General configuration / information
6
6
  gem.name = 'hirefireapp'
7
- gem.version = '0.0.1'
7
+ gem.version = '0.0.2'
8
8
  gem.platform = Gem::Platform::RUBY
9
9
  gem.authors = 'Michael van Rooijen'
10
10
  gem.email = 'meskyanichi@gmail.com'
11
11
  gem.homepage = 'http://hirefireapp.com/'
12
- gem.summary = %|HireFireApp.com - The Heroku Worker Monitor - Save money and scale at the same time!|
13
- gem.description = %|HireFireApp.com - The Heroku Worker Monitor - Save money and scale at the same time! We monitor your applications by the minute!|
12
+ gem.summary = %|HireFireApp.com - The Heroku Worker Manager - Save money and scale at the same time!|
13
+ gem.description = %|HireFireApp.com - The Heroku Worker Manager - Save money and scale at the same time! We monitor your applications by the minute!|
14
14
 
15
15
  # Files and folder that need to be compiled in to the Ruby Gem
16
16
  gem.files = %x[git ls-files].split("\n")
17
17
  gem.executables = ['hirefireapp']
18
18
  gem.require_path = 'lib'
19
19
 
20
- end
20
+ end
@@ -6,19 +6,20 @@ module HireFireApp
6
6
  ##
7
7
  # Initialize the Rack Middleware by setting the app instance
8
8
  # as well as allowing HireFire to request information via the token uri.
9
+ #
9
10
  def initialize(app)
10
11
  @app = app
11
12
  @token = ENV['HIREFIREAPP_TOKEN']
12
13
  end
13
14
 
14
15
  ##
15
- # If we are currently in the Heroku environment, and the path to the HireFire info uri
16
- # has been requested (and the token belongs to the app) then we'll calculate the amount of
17
- # jobs that are currently pending (either Delayed Job with Active Record / Mongoid or Resque with Redis).
16
+ # Simple router. If a request come in at the "test" url (the url to test if HireFire is properly installed)
17
+ # then we return information about the current environment (orm, odm, kvs, worker library, etc). Returns "Not Found"
18
+ # and specified "what wasn't found" in case the environment isn't complete (e.g. the worker library could not be found).
19
+ #
20
+ # HireFireApp.com will always ping to the "info?" url. This will return JSON format containing the current job queue
21
+ # for the given worker library, as well as the queue_wait_time
18
22
  #
19
- # Once the job_count has been determined, we build a simple JSON string object and
20
- # create a rack-based json response with 200 status. This will be returned to the HireFire service
21
- # in order to determine what actions to take in terms of scaling up or down.
22
23
  def call(env)
23
24
  @env = env
24
25
 
@@ -32,22 +33,35 @@ module HireFireApp
32
33
  end
33
34
 
34
35
  ##
35
- # Response body
36
+ # Response body - This is the data that gets returned to the requester
37
+ # depending on which URL was requested.
38
+ #
36
39
  def each(&block)
37
40
  if test?
38
41
  block.call "[HireFireApp: #{ok}] Worker: #{worker} - Mapper: #{mapper}"
39
42
  elsif info?
40
- block.call %|{"job_count":#{job_count || 'null'}}|
43
+ block.call %|{"job_count":#{job_count || 'null'}, "queue_wait_time":#{queue_wait_time}}|
41
44
  end
42
45
  end
43
46
 
44
47
  private
45
48
 
49
+ ##
50
+ # Returns the time it took to allow the request
51
+ # (delayed by the queue) in miliseconds
52
+ #
53
+ # @request [Integer] the queue wait time in miliseconds
54
+ #
55
+ def queue_wait_time
56
+ @env["HTTP_X_HEROKU_QUEUE_WAIT_TIME"].to_i
57
+ end
58
+
46
59
  ##
47
60
  # Counts the amount of jobs that are currently queued
48
61
  # and show be processed as soon as possible (aka the ones that are pending)
49
62
  #
50
63
  # @returns [Fixnum, nil] job_count returns nil if something went wrong
64
+ #
51
65
  def job_count
52
66
  begin
53
67
  if defined?(Delayed::Worker)
@@ -69,6 +83,7 @@ module HireFireApp
69
83
  # exist, and we'll have to use the old :conditions hash notation.
70
84
  #
71
85
  # @returns [Fixnum] delayed_job_count the amount of jobs currently pending
86
+ #
72
87
  def count_delayed_job
73
88
  if defined?(ActiveRecord) and Delayed::Worker.backend.to_s =~ /ActiveRecord/
74
89
  if defined?(ActiveRecord::Relation)
@@ -95,6 +110,7 @@ module HireFireApp
95
110
  #
96
111
  # @returns [Fixnum] resque_job_count
97
112
  # the number of jobs pending + the amount of workers currently working
113
+ #
98
114
  def count_resque
99
115
  Resque.info[:pending].to_i + Resque.info[:working].to_i
100
116
  end
@@ -103,6 +119,7 @@ module HireFireApp
103
119
  # Returns the name of the mapper, or "Not Found" if not found
104
120
  #
105
121
  # @returns [String]
122
+ #
106
123
  def mapper
107
124
  if defined?(Redis) and defined?(Resque)
108
125
  "Redis"
@@ -123,6 +140,7 @@ module HireFireApp
123
140
  # Returns the name of the worker type, or "Not Found" if not found
124
141
  #
125
142
  # @returns [String]
143
+ #
126
144
  def worker
127
145
  if defined?(Delayed::Job)
128
146
  "Delayed Job"
@@ -137,6 +155,7 @@ module HireFireApp
137
155
  # Returns "OK" if both the mapper and worker were found
138
156
  #
139
157
  # @returns [String]
158
+ #
140
159
  def ok
141
160
  if mapper =~ /Not Found/ or worker =~ /Not Found/
142
161
  "Incomplete"
@@ -149,6 +168,7 @@ module HireFireApp
149
168
  # Returns true if the REQUEST_PATH matches the test url
150
169
  #
151
170
  # @returns [String]
171
+ #
152
172
  def test?
153
173
  @env['REQUEST_PATH'] == "/hirefireapp/test"
154
174
  end
@@ -157,6 +177,7 @@ module HireFireApp
157
177
  # Returns true if the REQUEST_PATH matches the info url
158
178
  #
159
179
  # @returns [String]
180
+ #
160
181
  def info?
161
182
  @env['REQUEST_PATH'] == "/hirefireapp/#{@token}/info"
162
183
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: hirefireapp
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michael van Rooijen
@@ -10,11 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-23 00:00:00 +02:00
13
+ date: 2011-07-25 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
17
- description: HireFireApp.com - The Heroku Worker Monitor - Save money and scale at the same time! We monitor your applications by the minute!
17
+ description: HireFireApp.com - The Heroku Worker Manager - Save money and scale at the same time! We monitor your applications by the minute!
18
18
  email: meskyanichi@gmail.com
19
19
  executables:
20
20
  - hirefireapp
@@ -57,6 +57,6 @@ rubyforge_project:
57
57
  rubygems_version: 1.6.2
58
58
  signing_key:
59
59
  specification_version: 3
60
- summary: HireFireApp.com - The Heroku Worker Monitor - Save money and scale at the same time!
60
+ summary: HireFireApp.com - The Heroku Worker Manager - Save money and scale at the same time!
61
61
  test_files: []
62
62