class Mettric::Client

Attributes

app[R]
env[R]
host[R]

Public Class Methods

new(config = ::Mettric.config) { |self| ... } click to toggle source
# File lib/mettric/client.rb, line 9
def initialize(config = ::Mettric.config)
  @config = config || {}
  @riemann = Riemann::Client.new(
    host:    @config[:host]    || 'localhost',
    port:    @config[:port]    || 5555,
    timeout: @config[:timeout] || 5
  )

  self.app  = (@config[:app] || rails_app_name).to_s.underscore
  self.host = (@config[:reporting_host] || host_name).to_s.underscore
  self.env = (@config[:env] || rails_env).to_s.underscore


  if block_given?
    begin
      yield self
    ensure
      close
    end
  end
end

Public Instance Methods

<<(payload) click to toggle source
# File lib/mettric/client.rb, line 45
def <<(payload)
  @riemann.tcp << standardize_payload(payload)
rescue => e
  track_exception(e, payload)
end
[](*args) click to toggle source
# File lib/mettric/client.rb, line 51
def [](*args)
  @riemann[*args]
end
app=(app_name) click to toggle source
# File lib/mettric/client.rb, line 31
def app=(app_name)
  raise Mettric::MissingAppName, app.inspect if app_name.blank?
  @app = app_name
end
close() click to toggle source
# File lib/mettric/client.rb, line 55
def close
  @riemann.close
end
connected?() click to toggle source
# File lib/mettric/client.rb, line 59
def connected?
  @riemann.connected?
end
env=(env) click to toggle source
# File lib/mettric/client.rb, line 41
def env=(env)
  @env = env
end
host=(host_name) click to toggle source
# File lib/mettric/client.rb, line 36
def host=(host_name)
  raise Mettric::MissingHostName if host_name.blank?
  @host = host_name
end

Private Instance Methods

host_name() click to toggle source
# File lib/mettric/client.rb, line 102
def host_name
  (ENV['METTRIC_REPORTING_HOST'] || `hostname`).to_s.chomp.underscore
end
rails_app_name() click to toggle source
# File lib/mettric/client.rb, line 92
def rails_app_name
  return unless Kernel.const_defined?(:Rails)
  Rails.application.class.parent.to_s.underscore
end
rails_env() click to toggle source
# File lib/mettric/client.rb, line 97
def rails_env
  return unless Kernel.const_defined?(:Rails)
  Rails.env
end
standardize_payload(payload) click to toggle source
# File lib/mettric/client.rb, line 71
def standardize_payload(payload)
  out = stringify(payload)
  raise Mettric::MissingService, out if out[:service].blank?

  out[:tags] = [out[:tags], :mettric].flatten.compact.uniq.map(&:to_s)
  out[:tags] << env if env.present?
  out[:metric] ||= 1

  out[:host] = host

  out[:service] = "#{app}.#{out[:service]}"
  out
end
stringify(payload) click to toggle source
# File lib/mettric/client.rb, line 85
def stringify(payload)
  out = payload.symbolize_keys
  out.each do |k,v|
    out[k] = v.to_s if v.is_a?(Symbol)
  end
end
track_exception(e, payload) click to toggle source
# File lib/mettric/client.rb, line 65
def track_exception(e, payload)
  @riemann.tcp << { service: 'Mettric error', description: e.to_s }
  return unless Kernel.const_defined?(:NewRelic)
  NewRelic::Agent.notice_error(e, payload) rescue nil
end