Class: Liveness::Status

Inherits:
Object
  • Object
show all
Defined in:
lib/liveness/status.rb

Overview

The status endpoint to return check status

Since:

  • 0.1.0

Constant Summary collapse

HEADERS =

Since:

  • 0.3.0

{ 'Content-Type' => 'application/json' }.freeze
FORBIDDEN_MESSAGE =

Since:

  • 0.3.0

{ message: 'access denied' }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env, config: Liveness.config) ⇒ Liveness::Status

Since:

  • 0.1.0



24
25
26
27
28
# File 'lib/liveness/status.rb', line 24

def initialize(env, config: Liveness.config)
  @env = env
  @request = Rack::Request.new(env)
  @config = config
end

Class Method Details

.call(env) ⇒ Object

Since:

  • 0.1.0



10
11
12
# File 'lib/liveness/status.rb', line 10

def call(env)
  new(env).response
end

Instance Method Details

#forbiddenRack::Response

Returns:

  • (Rack::Response)

Since:

  • 0.3.0



70
71
72
73
74
# File 'lib/liveness/status.rb', line 70

def forbidden
  [
    403, HEADERS.dup, [FORBIDDEN_MESSAGE.to_json]
  ]
end

#live?Boolean

The Liveness status

Returns:

  • (Boolean)

Since:

  • 0.1.0



46
47
48
49
50
51
# File 'lib/liveness/status.rb', line 46

def live?
  metrics
    .values
    .map { |service| service[:status] == 'ok' }
    .reduce(true, :&)
end

#metricsHash

The depend services status

Returns:

  • (Hash)

Since:

  • 0.1.0



35
36
37
38
39
# File 'lib/liveness/status.rb', line 35

def metrics
  @metrics ||= @config.dependencies.map do |dependency|
    Thread.new { [dependency.name, dependency.status] }
  end.map(&:value).to_h
end

#responseRack::Response

Returns:

  • (Rack::Response)

Since:

  • 0.1.0



56
57
58
59
60
61
62
63
64
65
# File 'lib/liveness/status.rb', line 56

def response
  access = Access.new(@request, config: @config)
  return forbidden unless access.allowed?

  [
    live? ? 200 : 503,
    HEADERS.dup,
    [metrics.to_json]
  ]
end