Class: Heroscale::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/heroscale/middleware.rb

Overview

simple Rack Middleware that adds a hook to return the heroku env info

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



5
6
7
# File 'lib/heroscale/middleware.rb', line 5

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/heroscale/middleware.rb', line 9

def call(env)
  if env["PATH_INFO"] == "/heroscale/status"
    queue_wait_time = env['HTTP_X_HEROKU_QUEUE_WAIT_TIME']
    queue_depth = env['HTTP_X_HEROKU_QUEUE_DEPTH']
    dynos_in_use = env['HTTP_X_HEROKU_DYNOS_IN_USE']
    job_queue = count_jobs || 0

    if queue_wait_time and queue_depth and dynos_in_use
      # format the response on heroku
      res = %|{"heroku": true, "queue_wait_time": #{queue_wait_time.to_i}, "queue_depth": #{queue_depth.to_i}, "dynos_in_use": #{dynos_in_use.to_i}, "job_queue": #{job_queue}}|
    else
      res = %|{"heroku": false}|
    end

    [ 200, {'Content-Type' => 'application/json'}, res]
  else
    @app.call(env)
  end
end