Class: SemanticLogger::Metrics::Statsd

Inherits:
Object
  • Object
show all
Defined in:
lib/semantic_logger/metrics/statsd.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Statsd

Create Statsd metrics subscriber

Parameters:

url: [String]
  Valid URL to post to.
  Example:
    udp://localhost:8125
  Example, send all metrics to a particular namespace:
    udp://localhost:8125/namespace
  Default: udp://localhost:8125


21
22
23
24
25
26
27
28
29
30
# File 'lib/semantic_logger/metrics/statsd.rb', line 21

def initialize(options = {})
  options = options.dup
  @url    = options.delete(:url) || 'udp://localhost:8125'
  uri     = URI.parse(@url)
  raise('Statsd only supports udp. Example: "udp://localhost:8125"') if uri.scheme != 'udp'

  @statsd           = ::Statsd.new(uri.host, uri.port)
  path              = uri.path.chomp('/')
  @statsd.namespace = path.sub('/', '') if path != ''
end

Instance Method Details

#call(log) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/semantic_logger/metrics/statsd.rb', line 32

def call(log)
  metric = log.metric
  if duration = log.duration
    @statsd.timing(metric, duration)
  else
    amount = (log.metric_amount || 1).round
    if amount < 0
      amount.times { @statsd.decrement(metric) }
    else
      amount.times { @statsd.increment(metric) }
    end
  end
end