Class: FnordMetric::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/fnordmetric/event.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(event_id, opts) ⇒ Event

Returns a new instance of Event.



36
37
38
39
# File 'lib/fnordmetric/event.rb', line 36

def initialize(event_id, opts)
  @opts = opts
  @event_id = event_id
end

Instance Attribute Details

#event_idObject

Returns the value of attribute event_id.



3
4
5
# File 'lib/fnordmetric/event.rb', line 3

def event_id
  @event_id
end

#timeObject

Returns the value of attribute time.



3
4
5
# File 'lib/fnordmetric/event.rb', line 3

def time
  @time
end

#typeObject

Returns the value of attribute type.



3
4
5
# File 'lib/fnordmetric/event.rb', line 3

def type
  @type
end

Class Method Details

.all(opts) ⇒ Object

def self.track!(event_type, event_data) end



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/fnordmetric/event.rb', line 8

def self.all(opts)    
  range_opts = { :withscores => true }
  range_opts.merge!(:limit => [0,opts[:limit]]) if opts[:limit]
  opts[:redis].zrevrangebyscore(
    "#{opts[:namespace_prefix]}-timeline", 
    '+inf', opts[:since]||'0',
    range_opts
  ).in_groups_of(2).map do |event_id, ts|
    next if event_id.blank?
    find(event_id, opts).tap{ |e| e.time = ts }
  end
end

.by_type(_type, opts) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/fnordmetric/event.rb', line 21

def self.by_type(_type, opts)
  opts[:redis].lrange(
    "#{opts[:namespace_prefix]}-type-#{_type}", 
    0, 200).map do |event_id|
    next if event_id.blank?
    find(event_id, opts).tap{ |e| }
  end
end

.find(event_id, opts) ⇒ Object



30
31
32
33
34
# File 'lib/fnordmetric/event.rb', line 30

def self.find(event_id, opts)
  self.new(event_id, opts).tap do |event|
    event.fetch!
  end
end

Instance Method Details

#data(key = nil) ⇒ Object Also known as: []



63
64
65
# File 'lib/fnordmetric/event.rb', line 63

def data(key=nil)
  key ? @data[key.to_s] : @data
end

#fetch!Object



41
42
43
44
45
# File 'lib/fnordmetric/event.rb', line 41

def fetch!
  @data = JSON.parse(fetch_json).tap do |event|
    @type = event.delete("_type")
  end
end

#fetch_jsonObject



47
48
49
# File 'lib/fnordmetric/event.rb', line 47

def fetch_json
  @opts[:redis].get(redis_key) || "{}"
end

#idObject



59
60
61
# File 'lib/fnordmetric/event.rb', line 59

def id
  @event_id
end

#redis_keyObject



51
52
53
# File 'lib/fnordmetric/event.rb', line 51

def redis_key
  [@opts[:redis_prefix], :event, @event_id].join("-")
end

#session_keyObject



55
56
57
# File 'lib/fnordmetric/event.rb', line 55

def session_key
  @data["_session"] ? Digest::MD5.hexdigest(@data["_session"]) : nil
end

#to_jsonObject



69
70
71
72
73
74
75
76
# File 'lib/fnordmetric/event.rb', line 69

def to_json
  @data.merge!(
    :_type => @type, 
    :_session_key => session_key,
    :_eid => @event_id,
    :_time => @time
  )
end