class Statsd::Admin

Attributes

logger[RW]

Set to a standard logger instance to enable debug logging.

host[R]

StatsD host. Defaults to 127.0.0.1.

port[R]

StatsD admin port. Defaults to 8126.

Public Class Methods

new(host = '127.0.0.1', port = 8126) click to toggle source

@param [String] host your statsd host @param [Integer] port your statsd port

# File lib/statsd.rb, line 119
def initialize(host = '127.0.0.1', port = 8126)
  self.host, self.port = host, port
end

Public Instance Methods

counters() click to toggle source

Reads all counters from StatsD.

# File lib/statsd.rb, line 134
def counters
  read_metric :counters
end
delcounters(item) click to toggle source

@param item

Deletes one or more counters. Wildcards are allowed.
# File lib/statsd.rb, line 152
def delcounters item
  delete_metric :counters, item
end
delgauges(item) click to toggle source

@param item

Deletes one or more gauges. Wildcards are allowed.
# File lib/statsd.rb, line 140
def delgauges item
  delete_metric :gauges, item
end
deltimers(item) click to toggle source

@param item

Deletes one or more timers. Wildcards are allowed.
# File lib/statsd.rb, line 146
def deltimers item
  delete_metric :timers, item
end
gauges() click to toggle source

Reads all gauges from StatsD.

# File lib/statsd.rb, line 124
def gauges
  read_metric :gauges
end
host=(host) click to toggle source

@attribute [w] host

Writes are not thread safe.
# File lib/statsd.rb, line 107
def host=(host)
  @host = host || '127.0.0.1'
end
port=(port) click to toggle source

@attribute [w] port

Writes are not thread safe.
# File lib/statsd.rb, line 113
def port=(port)
  @port = port || 8126
end
stats() click to toggle source
# File lib/statsd.rb, line 156
def stats
  # the format of "stats" isn't JSON, who knows why
  send_to_socket "stats"
  result = read_from_socket
  items = {}
  result.split("\n").each do |line|
    key, val = line.chomp.split(": ")
    items[key] = val.to_i
  end
  items
end
timers() click to toggle source

Reads all timers from StatsD.

# File lib/statsd.rb, line 129
def timers
  read_metric :timers
end

Private Instance Methods

delete_metric(name, item) click to toggle source
# File lib/statsd.rb, line 177
def delete_metric name, item
  send_to_socket "del#{name} #{item}"
  result = read_from_socket
  deleted = []
  result.split("\n").each do |line|
    deleted << line.chomp.split(": ")[-1]
  end
  deleted
end
read_from_socket() click to toggle source
# File lib/statsd.rb, line 196
def read_from_socket
  buffer = ""
  loop do
    line = socket.readline
    break if line == "END\n"
    buffer += line
  end
  socket.readline # clear the closing newline out of the socket
  buffer
end
read_metric(name) click to toggle source
# File lib/statsd.rb, line 170
def read_metric name
  send_to_socket name
  result = read_from_socket
  # for some reason, the reply looks like JSON, but isn't, quite
  JSON.parse result.gsub("'", "\"")
end
send_to_socket(message) click to toggle source
# File lib/statsd.rb, line 187
def send_to_socket(message)
  self.class.logger.debug { "Statsd: #{message}" } if self.class.logger
  socket.write(message.to_s + "\n")
rescue => boom
  self.class.logger.error { "Statsd: #{boom.class} #{boom}" } if self.class.logger
  nil
end
socket() click to toggle source
# File lib/statsd.rb, line 207
def socket
  Thread.current[:statsd_admin_socket] ||= TCPSocket.new(host, port)
end