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