class FnordmetricClient

Constants

DEFAULT_EVENT_TTL
DEFAULT_OVERFLOW_LIMIT
DEFAULT_PREFIX
VERSION

Public Class Methods

new(opts ={}) click to toggle source
# File lib/fnordmetric-client.rb, line 10
def initialize(opts ={})
  @redis = opts[:redis]
  raise ArgumentError, "Bad :redis passed" unless %w{hincrby set lpush expire llen}.all?{|m| @redis.respond_to?(m) }

  @prefix = opts[:prefix] || DEFAULT_PREFIX
  @event_ttl = opts[:event_ttl] || DEFAULT_EVENT_TTL
  @overflow_limit = opts[:overflow_limit] || DEFAULT_OVERFLOW_LIMIT
end

Public Instance Methods

event(type, args = {}) click to toggle source
# File lib/fnordmetric-client.rb, line 19
def event(type, args = {})
  push_event({'_type' => type.to_s}.merge(args))
end

Private Instance Methods

get_next_uuid() click to toggle source
# File lib/fnordmetric-client.rb, line 41
def get_next_uuid
  SecureRandom.hex(16)
end
key(*elements) click to toggle source
# File lib/fnordmetric-client.rb, line 25
def key(*elements)
  elements.map(&:to_s).unshift(@prefix).join('-')
end
push_event(event_data) click to toggle source
# File lib/fnordmetric-client.rb, line 29
def push_event(event_data)    
  return if @redis.llen(key(:queue)) >= @overflow_limit

  event_id = get_next_uuid
  @redis.hincrby(key(:testdata), "events_received", 1)
  @redis.hincrby(key(:stats), "events_received", 1)
  @redis.set(key(:event, event_id), event_data.to_json)
  @redis.expire(key(:event, event_id), @event_ttl)
  @redis.lpush(key(:queue), event_id)
  event_id
end