Class: MiddlewareHealthcheck::MainChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/middleware_healthcheck/main_checker.rb

Constant Summary collapse

QUERY_STRING_KEY =
'QUERY_STRING'
UNDEFINED_CHECKER_ERROR =
"Can't find checker: "

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, env) ⇒ MainChecker

Returns a new instance of MainChecker.



10
11
12
13
# File 'lib/middleware_healthcheck/main_checker.rb', line 10

def initialize(app, env)
  self.app = app
  self.env = env
end

Instance Attribute Details

#appObject

Returns the value of attribute app.



8
9
10
# File 'lib/middleware_healthcheck/main_checker.rb', line 8

def app
  @app
end

#envObject

Returns the value of attribute env.



8
9
10
# File 'lib/middleware_healthcheck/main_checker.rb', line 8

def env
  @env
end

Instance Method Details

#build_error_responseObject



40
41
42
43
44
45
# File 'lib/middleware_healthcheck/main_checker.rb', line 40

def build_error_response
  build_text_response(
    configuration.error_response_status,
    errors.join(configuration.errors_delimiter)
  )
end

#build_responseObject



25
26
27
28
29
30
31
# File 'lib/middleware_healthcheck/main_checker.rb', line 25

def build_response
  if errors.present?
    build_error_response
  else
    build_success_response
  end
end

#build_success_responseObject



33
34
35
36
37
38
# File 'lib/middleware_healthcheck/main_checker.rb', line 33

def build_success_response
  build_text_response(
    configuration.success_response_status,
    configuration.success_response_body
  )
end

#build_text_response(status, body) ⇒ Object



47
48
49
# File 'lib/middleware_healthcheck/main_checker.rb', line 47

def build_text_response(status, body)
  [status, { 'Content-Type' => 'text/plain' }, [body]]
end

#check_healthObject



15
16
17
18
19
20
21
22
23
# File 'lib/middleware_healthcheck/main_checker.rb', line 15

def check_health
  if full_check?
    run_all_checkers
  elsif selected_check?
    run_selected_checkers
  end

  build_response
end

#configurationObject



102
103
104
# File 'lib/middleware_healthcheck/main_checker.rb', line 102

def configuration
  @configuration ||= MiddlewareHealthcheck.configuration
end

#errorsObject



90
91
92
# File 'lib/middleware_healthcheck/main_checker.rb', line 90

def errors
  @errors ||= []
end

#find_checker_by_name(name) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/middleware_healthcheck/main_checker.rb', line 72

def find_checker_by_name(name)
  configuration.checkers.each do |checker|
    return checker if checker.to_s.demodulize.underscore.gsub(/_checker$/, '') == name
  end
  errors.push(UNDEFINED_CHECKER_ERROR + name.camelize)
  nil
end

#full_check?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/middleware_healthcheck/main_checker.rb', line 94

def full_check?
  params[configuration.full_check_param_name].present?
end

#paramsObject



86
87
88
# File 'lib/middleware_healthcheck/main_checker.rb', line 86

def params
  @params ||= Rack::Utils.parse_nested_query(@env[QUERY_STRING_KEY])
end

#run_all_checkersObject



51
52
53
# File 'lib/middleware_healthcheck/main_checker.rb', line 51

def run_all_checkers
  run_checkers(configuration.checkers)
end

#run_checkers(checkers) ⇒ Object



59
60
61
62
63
64
# File 'lib/middleware_healthcheck/main_checker.rb', line 59

def run_checkers(checkers)
  checkers.each do |checker|
    checker_instance = checker.new(@app, @env)
    errors.push(checker_instance.error) unless checker_instance.healthy?
  end
end

#run_selected_checkersObject



55
56
57
# File 'lib/middleware_healthcheck/main_checker.rb', line 55

def run_selected_checkers
  run_checkers(selected_checkers)
end

#selected_check?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/middleware_healthcheck/main_checker.rb', line 98

def selected_check?
  params[configuration.selected_check_param_name].present?
end

#selected_checkersObject



66
67
68
69
70
# File 'lib/middleware_healthcheck/main_checker.rb', line 66

def selected_checkers
  selected_checkers_names.map do |checker_name|
    find_checker_by_name(checker_name)
  end.compact
end

#selected_checkers_namesObject



80
81
82
83
84
# File 'lib/middleware_healthcheck/main_checker.rb', line 80

def selected_checkers_names
  @selected_checkers_names ||=
    params[configuration.selected_check_param_name]
    .split(configuration.selected_check_param_split_delimiter)
end