class StatsdTcp::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_tcp.rb, line 144
def initialize(host = '127.0.0.1', port = 8126)
  @host = host || '127.0.0.1'
  @port = port || 8126
  # protects @socket transactions
  @socket = nil
  @s_mu = Mutex.new
  connect
end

Public Instance Methods

connect() click to toggle source

Reconnects the socket, for when the statsd address may have changed. Users do not normally need to call this, but calling it may be appropriate when reconfiguring a process (e.g. from HUP)

# File lib/statsd_tcp.rb, line 203
def connect
  @s_mu.synchronize do
    begin
      @socket.flush rescue nil
      @socket.close if @socket
    rescue
      # Ignore socket errors on close.
    end
    @socket = TCPSocket.new(host, port)
  end
end
counters() click to toggle source

Reads all counters from StatsD.

# File lib/statsd_tcp.rb, line 164
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_tcp.rb, line 182
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_tcp.rb, line 170
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_tcp.rb, line 176
def deltimers item
  delete_metric :timers, item
end
gauges() click to toggle source

Reads all gauges from StatsD.

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

@attribute [w] host.

Users should call connect after changing this.
# File lib/statsd_tcp.rb, line 132
def host=(host)
  @host = host || '127.0.0.1'
end
port=(port) click to toggle source

@attribute [w] port.

Users should call connect after changing this.
# File lib/statsd_tcp.rb, line 138
def port=(port)
  @port = port || 8126
end
stats() click to toggle source
# File lib/statsd_tcp.rb, line 186
def stats
  result = @s_mu.synchronize do
    # the format of "stats" isn't JSON, who knows why
    send_to_socket "stats"
    read_from_socket
  end
  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_tcp.rb, line 159
def timers
  read_metric :timers
end

Private Instance Methods

delete_metric(name, item) click to toggle source
# File lib/statsd_tcp.rb, line 226
def delete_metric name, item
  result = @s_mu.synchronize do
    send_to_socket "del#{name} #{item}"
    read_from_socket
  end
  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_tcp.rb, line 247
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_tcp.rb, line 217
def read_metric name
  result = @s_mu.synchronize do
    send_to_socket name
    read_from_socket
  end
  # 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_tcp.rb, line 238
def send_to_socket(message)
  self.class.logger.debug { "StatsdTcp: #{message}" } if self.class.logger
  @socket.write(message.to_s + "\n")
rescue => boom
  self.class.logger.error { "StatsdTcp: #{boom.class} #{boom}" } if self.class.logger
  nil
end