-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.rb
76 lines (62 loc) · 1.79 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
require 'sinatra/base'
require 'json'
require 'yaml'
require 'active_support/inflector'
# General checkers
require_relative 'lib/checkers/health_checker'
# General helpers
require_relative 'lib/helpers/statsd_helper'
# config
require_relative 'config'
class Whazzup < Sinatra::Base
before do
env['rack.errors'] = settings.error_logger
end
SERVICE_CHECKERS = {
xdb: 'GaleraHealthChecker',
zk: 'ZookeeperHealthChecker'
}.freeze
# General extention setup
register Sinatra::Config
helpers Helpers::StatsdHelper
# XDB specific extention setup
if settings.services.include?(:xdb)
require_relative 'routes/xdb'
register Sinatra::Routing::Xdb
helpers Sinatra::Routing::Xdb
end
# ZK specific extention setup
if settings.services.include?(:zk)
require_relative 'routes/zk'
register Sinatra::Routing::Zk
helpers Sinatra::Routing::Zk
end
def initialize
super
initialize_statsd
initialize_checkers
end
def initialize_statsd
Statsd.logger = settings.check_logger
Whazzup.set :statsd, statsd
end
def initialize_checkers
settings.services.each do |service|
checker_class_name = SERVICE_CHECKERS[service]
require_relative "lib/checkers/#{checker_class_name.underscore}"
# Initialize and memoize instance of checker class
checker_class = checker_class_name.constantize
service_checker = checker_class.new(settings)
settings.checkers[service] = HealthChecker.new(
service_checker: service_checker,
max_staleness: settings.max_staleness,
check_interval: settings.check_interval,
logger: settings.check_logger,
statsd: statsd,
service: service
)
# Ensure connection by firing an initial check
settings.checkers[service].check
end
end
end