-
Notifications
You must be signed in to change notification settings - Fork 32
/
config.ru
98 lines (79 loc) · 2.1 KB
/
config.ru
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
require 'oj'
opts = Oj.load( File.read('config.json') )
# prepare the logger
require 'logger'
log = Logger.new(STDERR)
log.progname = 'optica'
log.level = Logger::INFO unless opts['debug']
opts['log'] = log
# Enable GC stats
if opts['gc_stats']
if defined? GC::Profiler && GC::Profiler.respond_to?(:enable)
GC::Profiler.enable
elsif GC.respond_to?(:enable_stats)
GC.enable_stats
end
end
# prepare statsd
require 'statsd-ruby'
STATSD = Statsd.new(opts['statsd_host'], opts['statsd_port'])
begin
require 'newrelic_rpm'
require 'newrelic-zookeeper'
rescue LoadError
log.info "Newrelic not found, skipping..."
end
# prepare to exit cleanly
$EXIT = false
# configure unicorn-worker-killer
if opts['worker_killer']
require 'unicorn/worker_killer'
wk_opts = opts['worker_killer']
if wk_opts['max_requests']
max_requests = wk_opts['max_requests']
# Max requests per worker
use Unicorn::WorkerKiller::MaxRequests, max_requests['min'], max_requests['max']
end
if wk_opts['mem_limit']
mem_limit = wk_opts['mem_limit']
# Max memory size (RSS) per worker
use Unicorn::WorkerKiller::Oom, mem_limit['min'], mem_limit['max']
end
end
# configure the store
require './store.rb'
store = Store.new(opts)
store.start
# configure the event creator
require './events.rb'
events = Events.new(opts)
events.start
# set a signal handler
['INT', 'TERM', 'QUIT'].each do |signal|
trap(signal) do
log.warn "Got signal #{signal} -- exit currently #{$EXIT}"
exit! if $EXIT
$EXIT = true
# stop the server
server = Rack::Handler.get(server) || Rack::Handler.default
server.shutdown if server.respond_to?(:shutdown)
# stop the components
store.stop()
events.stop()
exit!
end
end
# do we check the client IP?
ip_check = case opts['client_check']
when true, 'direct' then :direct
when 'forwarded_for' then :forwarded_for
when false, nil then false
else raise 'unknown value for ip_check option'
end
# start the app
require './optica.rb'
Optica.set :store, store
Optica.set :events, events
Optica.set :ip_check, ip_check
log.info "Starting sinatra server..."
run Optica