nightfury 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,8 @@ module Nightfury
10
10
 
11
11
  class << self
12
12
 
13
- attr_reader :metrics
13
+ attr_reader :metrics, :tags
14
+ attr_accessor :store_as
14
15
 
15
16
  def name
16
17
  self.to_s.demodulize.underscore
@@ -26,17 +27,50 @@ module Nightfury
26
27
  end
27
28
  ENDOFMETHOD
28
29
  end
29
-
30
+
31
+ def tag(name, options={})
32
+ @tags ||= {}
33
+ @tags[name] = options[:store_as] ? options[:store_as] : name
34
+ end
30
35
  end
31
36
 
32
- attr_accessor :id
37
+ attr_accessor :id, :tags
33
38
 
34
- def initialize(id)
39
+ def initialize(id, options={})
35
40
  @id = id
41
+ @tags = options[:tags]
36
42
  end
37
43
 
38
44
  def key_prefix
39
- "#{self.class.name}:#{id}"
45
+ store_name = self.class.store_as ? self.class.store_as : self.class.name
46
+ tag_ids = generate_tag_ids
47
+ tag_ids = tag_ids.nil? ? '' : ":#{tag_ids}"
48
+ "#{store_name}.#{id}#{tag_ids}"
49
+ end
50
+
51
+ private
52
+
53
+ def generate_tag_ids
54
+ return nil unless tags
55
+ tag_values = {}
56
+ tags.each do |key, value|
57
+ store_name = self.class.tags[key]
58
+ next if store_name.nil?
59
+ tag_values[store_name] = value
60
+ end
61
+
62
+ tag_ids = nil
63
+ tag_values_sorted = tag_values.keys.sort
64
+ tag_values_sorted.each do |store_name|
65
+ tag = "#{store_name}.#{tag_values[store_name]}"
66
+ if tag_ids.nil?
67
+ tag_ids = tag
68
+ else
69
+ tag_ids = "#{tag_ids}:#{tag}"
70
+ end
71
+ end
72
+
73
+ tag_ids
40
74
  end
41
75
  end
42
76
  end
@@ -1,17 +1,19 @@
1
1
  module Nightfury
2
2
  module Metric
3
3
  class Base
4
- attr_reader :name, :redis, :redis_key_prefix
4
+ attr_reader :name, :redis, :redis_key_prefix, :store_as
5
5
 
6
6
  def initialize(name, options={})
7
7
  @name = name
8
8
  @redis = Nightfury.redis
9
9
  @redis_key_prefix = options[:redis_key_prefix]
10
+ @store_as = options[:store_as]
10
11
  end
11
12
 
12
13
  def redis_key
13
14
  prefix = redis_key_prefix.blank? ? '' : "#{redis_key_prefix}:"
14
- "#{prefix}metric:#{name}"
15
+ store_name = store_as ? store_as : name
16
+ "#{prefix}#{store_name}"
15
17
  end
16
18
 
17
19
  def delete
@@ -1,3 +1,3 @@
1
1
  module Nightfury
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -21,6 +21,18 @@ describe Nightfury::Identity::Base do
21
21
  Dummy.instance_methods.should include(:another_count)
22
22
  end
23
23
  end
24
+
25
+ describe "tags" do
26
+ it "should add to tags" do
27
+ Dummy.tag(:label_id)
28
+ Dummy.tags[:label_id].should == :label_id
29
+ end
30
+
31
+ it "should add name and store_as to tags" do
32
+ Dummy.tag(:label_id, store_as: :l)
33
+ Dummy.tags[:label_id].should == :l
34
+ end
35
+ end
24
36
  end
25
37
 
26
38
  describe "InstanceMethods" do
@@ -31,7 +43,22 @@ describe Nightfury::Identity::Base do
31
43
 
32
44
  it "should generates a key prefix" do
33
45
  d = Dummy.new(1)
34
- d.key_prefix.should == 'dummy:1'
46
+ d.key_prefix.should == 'dummy.1'
47
+ end
48
+
49
+ it "should use store_as to generate key prefix if provided" do
50
+ d = Dummy.new(1)
51
+ flexmock(Dummy).should_receive(:store_as => :d)
52
+ d.key_prefix.should == 'd.1'
53
+ end
54
+
55
+ it "should include tags in the key prefix" do
56
+ DummyTwo = Class.new(Dummy)
57
+ DummyTwo.store_as = :d
58
+ DummyTwo.tag(:label_id, store_as: :l)
59
+ DummyTwo.tag(:agent_id, store_as: :a)
60
+ d = DummyTwo.new(1, tags: {label_id: 2, agent_id: 3})
61
+ d.key_prefix.should == 'd.1:a.3:l.2'
35
62
  end
36
63
 
37
64
  describe "Dynamically generated metric" do
@@ -41,7 +68,7 @@ describe Nightfury::Identity::Base do
41
68
  metric_object = d.third_count
42
69
  metric_object.should be_kind_of(Nightfury::Metric::Value)
43
70
  metric_object.name.should == :third_count
44
- metric_object.redis_key_prefix.should == 'dummy:1'
71
+ metric_object.redis_key_prefix.should == 'dummy.1'
45
72
  end
46
73
  end
47
74
  end
@@ -1,25 +1,25 @@
1
1
  describe Nightfury::Metric::Value do
2
2
  it "should get a value by delegating to redis" do
3
3
  value_metric = Nightfury::Metric::Value.new(:tickets_count)
4
- flexmock(value_metric.redis).should_receive(:get).with('metric:tickets_count').once
4
+ flexmock(value_metric.redis).should_receive(:get).with('tickets_count').once
5
5
  value_metric.get
6
6
  end
7
7
 
8
8
  it "should set a value by delegating to redis" do
9
9
  value_metric = Nightfury::Metric::Value.new(:tickets_count)
10
- flexmock(value_metric.redis).should_receive(:set).with('metric:tickets_count', 1).once
10
+ flexmock(value_metric.redis).should_receive(:set).with('tickets_count', 1).once
11
11
  value_metric.set(1)
12
12
  end
13
13
 
14
14
  it "should increment a value by delegating to redis" do
15
15
  value_metric = Nightfury::Metric::Value.new(:tickets_count)
16
- flexmock(value_metric.redis).should_receive(:incrby).with('metric:tickets_count', 1).once
16
+ flexmock(value_metric.redis).should_receive(:incrby).with('tickets_count', 1).once
17
17
  value_metric.incr
18
18
  end
19
19
 
20
20
  it "should decrement a value by delegating to redis" do
21
21
  value_metric = Nightfury::Metric::Value.new(:tickets_count)
22
- flexmock(value_metric.redis).should_receive(:decrby).with('metric:tickets_count', 2).once
22
+ flexmock(value_metric.redis).should_receive(:decrby).with('tickets_count', 2).once
23
23
  value_metric.decr(2)
24
24
  end
25
25
  end
@@ -8,12 +8,17 @@ describe Nightfury::Metric::Base do
8
8
 
9
9
  it "should have a redis key" do
10
10
  metric = Nightfury::Metric::Base.new(:tickets_count)
11
- metric.redis_key.should == "metric:tickets_count"
11
+ metric.redis_key.should == "tickets_count"
12
+ end
13
+
14
+ it "should use store_as in the redis key instead of name if provided" do
15
+ metric = Nightfury::Metric::Base.new(:tickets_count, store_as: :tc)
16
+ metric.redis_key.should == "tc"
12
17
  end
13
18
 
14
19
  it "should accept a redis key prefix" do
15
20
  metric = Nightfury::Metric::Base.new(:tickets_count, redis_key_prefix: 'prefix')
16
- metric.redis_key.should == "prefix:metric:tickets_count"
21
+ metric.redis_key.should == "prefix:tickets_count"
17
22
  end
18
23
 
19
24
  it "should have nightfury's redis connection" do
@@ -23,7 +28,7 @@ describe Nightfury::Metric::Base do
23
28
 
24
29
  it "should be able to remove itself" do
25
30
  metric = Nightfury::Metric::Base.new(:tickets_count)
26
- flexmock(metric.redis).should_receive(:del).with('metric:tickets_count').once
31
+ flexmock(metric.redis).should_receive(:del).with('tickets_count').once
27
32
  metric.delete
28
33
  end
29
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nightfury
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: