class Object

Public Instance Methods

start(launcher) click to toggle source
# File lib/puma/plugin/stats.rb, line 6
def start(launcher)
  str = launcher.options[:stats_url] || 'tcp://0.0.0.0:51209'

  require 'puma/stats/app'
  require 'puma/minissl/context_builder'
  require 'puma/util'

  app = Puma::Stats::App.new launcher
  uri = URI.parse str

  stats = Puma::Server.new app, launcher.events
  stats.min_threads = 0
  stats.max_threads = 1

  case uri.scheme
  when 'ssl'
    optional_token = launcher.options[:stats_token] ? "with auth token: #{launcher.options[:stats_token]}" : ''
    launcher.events.log "* Starting stats server on URI: #{str} #{optional_token}"
    params = Puma::Util.parse_query uri.query
    ctx = Puma::MiniSSL::ContextBuilder.new(params, launcher.events).context
    stats.add_ssl_listener uri.host, uri.port, ctx
  when 'tcp'
    optional_token = launcher.options[:stats_token] ? "with auth token: #{launcher.options[:stats_token]}" : ''
    launcher.events.log "* Starting stats server on URI: #{str} #{optional_token}"
    stats.add_tcp_listener uri.host, uri.port
  else
    launcher.events.error "Invalid stats server URI: #{str}"
  end

  launcher.events.register(:state) do |state|
    if %i[halt restart stop].include?(state)
      stats.stop(true) unless stats.shutting_down?
    end
  end

  stats.run
end