class PrometheusClientAddons::Prometheus::Client::Puma

Constants

HANDLES

Attributes

control_auth_token[RW]
control_url[RW]

Public Instance Methods

extract(input, output, nested, label_set = {}) click to toggle source
# File lib/prometheus_client_addons/prometheus/client/puma.rb, line 44
def extract(input, output, nested, label_set = {})
  key = if input.key?(nested.last.to_s)
    nested.last.to_s
  elsif input.key?(nested.last.to_sym)
    nested.last.to_sym
  end
  return unless key

  output["#{prefix}#{nested.join('_')}".to_sym] ||= {}
  output["#{prefix}#{nested.join('_')}".to_sym][label_set] = input[key]
end
multi_name_docstring() click to toggle source
# File lib/prometheus_client_addons/prometheus/client/puma.rb, line 40
def multi_name_docstring
  Hash[HANDLES.map { |key, value| ["#{prefix}#{key}".to_sym, value] }]
end
multi_name_type() click to toggle source
# File lib/prometheus_client_addons/prometheus/client/puma.rb, line 35
def multi_name_type
  full_handles = HANDLES.keys.map { |key| "#{prefix}#{key}" }.map(&:to_sym)
  Hash[full_handles.zip([:gauge] * HANDLES.size)]
end
multi_values() click to toggle source
# File lib/prometheus_client_addons/prometheus/client/puma.rb, line 56
def multi_values
  body = Socket.unix(self.class.control_url.gsub("unix://", '')) do |socket|
    socket << "GET /stats?token=#{self.class.control_auth_token} HTTP/1.0\r\n\r\n"
    socket.read
  end

  data = JSON.parse(body.split("\n").last, symbolize_names: true)

  result = {}

  extract(data, result, [:backlog])
  extract(data, result, [:running])
  extract(data, result, [:pool_capacity])
  extract(data, result, [:max_threads])

  extract(data, result, [:workers])
  extract(data, result, [:phase])
  extract(data, result, [:booted_workers])
  extract(data, result, [:old_workers])

  if data.key?(:worker_status) && !data[:worker_status].empty?
    data[:worker_status].each do |worker_status|
      worker_index = worker_status[:index]

      extract(worker_status, result, [:worker_status, :phase], { worker_index: worker_index })
      extract(worker_status, result, [:worker_status, :booted], { worker_index: worker_index })
      extract(worker_status, result, [:worker_status, :last_checkin], { worker_index: worker_index })

      last_status = worker_status[:last_status]
      extract(last_status, result, [:worker_status, :last_status, :backlog], { worker_index: worker_index })
      extract(last_status, result, [:worker_status, :last_status, :running], { worker_index: worker_index })
      extract(last_status, result, [:worker_status, :last_status, :pool_capacity], { worker_index: worker_index })
      extract(last_status, result, [:worker_status, :last_status, :max_threads], { worker_index: worker_index })
    end
  end

  result
end