Class: SidekiqAlive::Server::Default

Inherits:
HttpServer
  • Object
show all
Extended by:
Base
Defined in:
lib/sidekiq_alive/server/default.rb

Constant Summary

Constants included from Base

Base::QUIET_SIGNAL, Base::SHUTDOWN_SIGNAL

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(port, host, path, logger = SidekiqAlive.logger) ⇒ Default

Returns a new instance of Default.



30
31
32
33
34
# File 'lib/sidekiq_alive/server/default.rb', line 30

def initialize(port, host, path, logger = SidekiqAlive.logger)
  super(self, port, host, logger)

  @path = path
end

Class Method Details

.run!Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/sidekiq_alive/server/default.rb', line 12

def run!
  logger.info("[SidekiqAlive] Starting default healthcheck server on #{host}:#{port}")
  @server_pid = ::Process.fork do
    @server = new(port, host, path)
    # stop is wrapped in a thread because gserver calls synchrnonize which raises an error when in trap context
    configure_shutdown_signal { Thread.new { @server.stop } }
    configure_quiet_signal { @server.quiet! }

    @server.start
    @server.join
  end
  configure_shutdown
  logger.info("[SidekiqAlive] Web server started in subprocess with pid #{@server_pid}")

  self
end

Instance Method Details

#quiet!Object



66
67
68
# File 'lib/sidekiq_alive/server/default.rb', line 66

def quiet!
  @quiet = Time.now
end

#request_handler(req, res) ⇒ Object



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
# File 'lib/sidekiq_alive/server/default.rb', line 36

def request_handler(req, res)
  if req.path != path
    res.status = 404
    res.body = "Not found"
    return logger.warn("[SidekiqAlive] Path '#{req.path}' not found")
  end

  if quiet?
    res.status = 200
    res.body = "Server is shutting down"
    return logger.debug("[SidekiqAlive] Server in quiet mode, skipping alive key lookup!")
  end

  if SidekiqAlive.alive?
    res.status = 200
    res.body = "Alive!"
    return logger.debug("[SidekiqAlive] Found alive key!")
  end

  response = "Can't find the alive key"
  res.status = 404
  res.body = response
  logger.error("[SidekiqAlive] #{response}")
rescue StandardError => e
  response = "Internal Server Error"
  res.status = 500
  res.body = response
  logger.error("[SidekiqAlive] #{response} looking for alive key. Error: #{e.message}")
end