Commit e52c2fc8 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

gague_modifiers: incr_field and incr_field_uniq

parent 0e4cd813
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -26,13 +26,13 @@ module FnordMetric::GaugeModifiers
    end
  end  

  def incr_uniq(gauge, value)
  def incr_uniq(gauge, value, field_name=nil)
    return false if session_key.blank?
    @redis.sadd(gauge.tick_key(time, :sessions), session_key).callback do |_new|
      @redis.expire(gauge.tick_key(time, :sessions), gauge.tick)
      if _new == 1
      if (_new == 1) || (_new == true) #redis vs. em-redis
        @redis.incr(gauge.tick_key(time, :"sessions-count")).callback do |sc|
          incr_tick(gauge, value)
          field_name ? incr_field_by(gauge, field_name, value) : incr_tick(gauge, value)
        end
      end
    end
@@ -47,7 +47,19 @@ module FnordMetric::GaugeModifiers
  def incr_field(gauge_name, field_name, value=1)
    gauge = fetch_gauge(gauge_name)
    assure_three_dimensional!(gauge)
    # here be dragons
    if gauge.unique? 
      incr_uniq(gauge, value, field_name)
    else
      incr_field_by(gauge, field_name, value)
    end
  end

  def incr_field_by(gauge, field_name, value)
    @redis.hsetnx(gauge.tick_key(time), field_name, 0).callback do
      @redis.hincrby(gauge.tick_key(time), field_name, value).callback do 
        @redis.incrby(gauge.tick_key(time, :count), 1)
      end
    end
  end  
  
end
 No newline at end of file
+9 −9
Original line number Diff line number Diff line
@@ -328,34 +328,34 @@ describe "increment three-dimensional gagues" do
        event = { :_time => @now, :myfield => "fnordybar" }
        context.call(event, @redis_wrap)
      end
      @redis.hget(gauge_key, "fnorybar").should == "36"
      @redis.hget(gauge_key, "fnordybar").should == "16"
    end

    it "should increment_unique a three-dim gauge" do  
      gauge_key = "fnordmetrics-myns-gauge-mygauge_1263-10-695280200"    
      @redis.hset(gauge_key, "mykey", "54")
      @redis.set(gauge_key+"-progressive-sessions-count", 5)
      @redis.set(gauge_key+"-sessions-count", 5)
      create_gauge_context({
        :key => "mygauge_1263", 
        :tick => 10,
        :unique => true,
        :three_dimensional => true
      }, proc{ 
        incr_field(:mygauge_1263, "mykes", 30)  
        incr_field(:mygauge_1263, "mykey", 30)  
      }).tap do |context|      
        event = { :_time => @now, :_session_key => "mysesskey" }
        context.call(event, @redis_wrap)
      end
      @redis.hget(gauge_key, "mykey").should == "84"
      @redis.get(gauge_key+"-progressive-sessions-count").should == "6"
      @redis.smembers(gauge_key+"-progressive-sessions").should == ["mysesskey"]
      @redis.get(gauge_key+"-sessions-count").should == "6"
      @redis.smembers(gauge_key+"-sessions").should == ["mysesskey"]
    end

    it "should not increment_unique a non-progressive gauge if session is known" do  
      gauge_key = "fnordmetrics-myns-gauge-mygauge_1266-695280200"    
      @redis.hset(gauge_key, "otherkey", "54")
      @redis.set(gauge_key+"-progressive-sessions-count", 5)
      @redis.sadd(gauge_key+"-progressive-sessions", "mysesskey")
      @redis.set(gauge_key+"-sessions-count", 5)
      @redis.sadd(gauge_key+"-sessions", "mysesskey")
      create_gauge_context({
        :key => "mygauge_1266", 
        :tick => 10,
@@ -368,8 +368,8 @@ describe "increment three-dimensional gagues" do
        context.call(event, @redis_wrap)
      end
      @redis.hget(gauge_key, "otherkey").should == "54"
      @redis.get(gauge_key+"-progressive-sessions-count").should == "5"
      @redis.smembers(gauge_key+"-progressive-sessions").should == ["mysesskey"]
      @redis.get(gauge_key+"-sessions-count").should == "5"
      @redis.smembers(gauge_key+"-sessions").should == ["mysesskey"]
    end

  end