Class: MicroCommon::MetaMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/micro_common/meta_middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ MetaMiddleware

Returns a new instance of MetaMiddleware.



3
4
5
# File 'lib/micro_common/meta_middleware.rb', line 3

def initialize(app)
  @app = app
end

Instance Method Details

#aboutObject



21
22
23
24
# File 'lib/micro_common/meta_middleware.rb', line 21

def about
  response = JSON.pretty_generate(YAML.safe_load(File.read(Rails.root.join('config', 'about.yaml'))))
  [200, { 'Content-Type' => 'application/json' }, [response]]
end

#call(env) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/micro_common/meta_middleware.rb', line 7

def call(env)
  uri = env['PATH_INFO']

  if uri == '/meta/about'
    about
  elsif uri == '/meta/ping'
    ping
  elsif uri == '/meta/status'
    status
  else
    @app.call(env)
  end
end

#check_databaseObject



42
43
44
45
46
47
# File 'lib/micro_common/meta_middleware.rb', line 42

def check_database
  ActiveRecord::Base.connection.execute('SELECT 1')
  true
rescue PG::Error, PG::ConnectionBad, ActiveRecord::NoDatabaseError
  false
end

#pingObject



26
27
28
# File 'lib/micro_common/meta_middleware.rb', line 26

def ping
  [200, {}, ['PONG']]
end

#run_checksObject



36
37
38
39
40
# File 'lib/micro_common/meta_middleware.rb', line 36

def run_checks
  {
    database: check_database
  }
end

#statusObject



30
31
32
33
34
# File 'lib/micro_common/meta_middleware.rb', line 30

def status
  checks = run_checks
  status = checks.all? { |_, v| v } ? 200 : 503
  [status, { 'Content-Type' => 'application/json' }, [checks.to_json]]
end