mirror of
https://github.com/jimeh/redistat.git
synced 2026-02-19 13:26:39 +00:00
Redistat::Event stores events
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
require "redis"
|
||||
require "date"
|
||||
require "time"
|
||||
require "json/pure"
|
||||
require "digest/sha1"
|
||||
|
||||
require "redistat/database"
|
||||
|
||||
@@ -1,22 +1,63 @@
|
||||
module Redistat
|
||||
class Event
|
||||
include Database
|
||||
extend Database
|
||||
|
||||
attr_reader :id
|
||||
attr_reader :key
|
||||
|
||||
attr_accessor :stats
|
||||
attr_accessor :meta
|
||||
attr_accessor :options
|
||||
|
||||
def initialize(scope, label = nil, date = nil, stats = {}, meta = {}, options = {})
|
||||
def initialize(scope, label = nil, date = nil, stats = {}, meta = {}, options = {}, is_new = true)
|
||||
@options = default_options.merge(options)
|
||||
@scope = scope
|
||||
@key = Key.new(scope, label, date, @options)
|
||||
@stats = stats ||= {}
|
||||
@meta = meta ||= {}
|
||||
@new = is_new
|
||||
end
|
||||
|
||||
def default_options
|
||||
{ :depth => :hour, :store_event => false }
|
||||
end
|
||||
|
||||
def default_options
|
||||
{ :depth => :hour, }
|
||||
def new?
|
||||
@new
|
||||
end
|
||||
|
||||
def save
|
||||
return false if !self.new?
|
||||
@id = self.class.next_id
|
||||
|
||||
#TODO store sumarized stats
|
||||
|
||||
if @options[:store_event]
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :scope, self.scope
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :label, self.label
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :date, self.date.to_time.to_s
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :stats, self.stats.to_json
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :meta, self.meta.to_json
|
||||
db.hset "#{KEY_EVENT_PREFIX}#{@id}", :options, self.options.to_json
|
||||
db.sadd "#{self.scope}#{KEY_EVENT_IDS_SUFFIX}", @id
|
||||
end
|
||||
@new = false
|
||||
self
|
||||
end
|
||||
|
||||
def self.create(*args)
|
||||
self.new(*args).save
|
||||
end
|
||||
|
||||
def self.next_id
|
||||
db.incr(KEY_NEXT_EVENT_ID)
|
||||
end
|
||||
|
||||
def self.find(id)
|
||||
event = db.hgetall "#{KEY_EVENT_PREFIX}#{id}"
|
||||
return nil if event.size == 0
|
||||
self.new( event["scope"], event["label"], event["date"], JSON.parse(event["stats"]),
|
||||
JSON.parse(event["meta"]), JSON.parse(event["options"]), false )
|
||||
end
|
||||
|
||||
def date
|
||||
@@ -50,10 +91,5 @@ module Redistat
|
||||
@key.label = input
|
||||
end
|
||||
|
||||
|
||||
def save
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@@ -13,7 +13,15 @@ describe Redistat::Event do
|
||||
@event = Redistat::Event.new(@scope, @label, @date, @stats, @meta, @options)
|
||||
end
|
||||
|
||||
# it "should initialize properly"
|
||||
it "should initialize properly" do
|
||||
@event.scope.should == @scope
|
||||
@event.label.should == @label
|
||||
@event.label_hash.should == @label_hash
|
||||
@event.date.to_time.should == @date
|
||||
@event.stats.should == @stats
|
||||
@event.meta.should == @meta
|
||||
@event.options.should == @event.default_options.merge(@options)
|
||||
end
|
||||
|
||||
it "should allow changing attributes" do
|
||||
# date
|
||||
@@ -31,4 +39,32 @@ describe Redistat::Event do
|
||||
@event.label_hash.should == @label_hash
|
||||
end
|
||||
|
||||
it "should increment next_id" do
|
||||
Redistat::Event.next_id.should == 1
|
||||
Redistat::Event.next_id.should == 2
|
||||
Redistat::Event.next_id.should == 3
|
||||
end
|
||||
|
||||
it "should store event properly" do
|
||||
@event = Redistat::Event.new(@scope, @label, @date, @stats, @meta, @options.merge({:store_event => true}))
|
||||
@event.new?.should be_true
|
||||
@event.save
|
||||
@event.new?.should be_false
|
||||
keys = db.keys "*"
|
||||
keys.should include("#{Redistat::KEY_EVENT_PREFIX}#{@event.id}")
|
||||
keys.should include("#{@event.scope}#{Redistat::KEY_EVENT_IDS_SUFFIX}")
|
||||
end
|
||||
|
||||
it "should find event by id" do
|
||||
@event = Redistat::Event.new(@scope, @label, @date, @stats, @meta, @options.merge({:store_event => true})).save
|
||||
fetched = Redistat::Event.find(@event.id)
|
||||
@event.scope.should == fetched.scope
|
||||
@event.label.should == fetched.label
|
||||
@event.date.to_s.should == fetched.date.to_s
|
||||
end
|
||||
|
||||
def db
|
||||
Redistat.redis
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user