class Honeybadger::PumaPlugin

def record

def record
  metric_source "puma"
  stats = begin
    ::Puma.stats
  rescue
    {}
  end
  stats = stats.is_a?(Hash) ? stats : JSON.parse(stats, symbolize_names: true)
  if stats[:worker_status].is_a?(Array)
    stats[:worker_status].each do |worker_data|
      context = {worker: worker_data[:index]}
      record_puma_stats(worker_data[:last_status], context)
    end
  else
    record_puma_stats(stats)
  end
end

def record_puma_stats(stats, context = {})

def record_puma_stats(stats, context = {})
  if Honeybadger.config.load_plugin_insights_events?(:puma)
    Honeybadger.event("stats.puma", context.merge(stats))
  end
  if Honeybadger.config.load_plugin_insights_metrics?(:puma)
    STATS_KEYS.each do |stat|
      gauge stat, context, -> { stats[stat] } if stats[stat]
    end
  end
end

def start(launcher)

def start(launcher)
  puma_plugin = ::Honeybadger::PumaPlugin.new
  in_background do
    loop do
      puma_plugin.record
      sleep [::Honeybadger.config.collection_interval(:puma).to_i, 1].max
    end
  end
end