lib/fnordmetric/event.rb in fnordmetric-0.3.2 vs lib/fnordmetric/event.rb in fnordmetric-0.5.0

- old
+ new

@@ -1,28 +1,78 @@ class FnordMetric::Event - include Mongoid::Document - self.collection_name = 'fnordmetric_event' + attr_accessor :time, :type, :event_id - field :type, :type => String - field :client, :type => Integer - field :data, :type => Hash + #def self.track!(event_type, event_data) + #end - def self.track!(event_type, event_data) - event_data.to_options! - event_time = (event_data.delete(:time) || Time.now.getutc).to_i - self.create(:type => event_type, :time => event_time, :data => event_data) + 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 - def time - read_attribute(:time).to_i + 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 - def [](key) - send(key) + def self.find(event_id, opts) + self.new(event_id, opts).tap do |event| + event.fetch! + end end - def method_missing(method) - data[method.to_s] + def initialize(event_id, opts) + @opts = opts + @event_id = event_id + end + + def fetch! + @data = JSON.parse(fetch_json).tap do |event| + @type = event.delete("_type") + end + end + + def fetch_json + @opts[:redis].get(redis_key) || "{}" + end + + def redis_key + [@opts[:redis_prefix], :event, @event_id].join("-") + end + + def session_key + @data["_session"] ? Digest::MD5.hexdigest(@data["_session"]) : nil + end + + def id + @event_id + end + + def data(key=nil) + key ? @data[key.to_s] : @data + end + + alias :[] :data + + def to_json + @data.merge!( + :_type => @type, + :_session_key => session_key, + :_eid => @event_id, + :_time => @time + ) end end \ No newline at end of file