tabs 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - jruby-19mode # JRuby in 1.9 mode
5
+ - rbx-19mode
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in tabs.gemspec
4
3
  gemspec
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ ![Travis Status](https://api.travis-ci.org/thegrubbsian/tabs.png)
2
+
1
3
  # Tabs
2
4
 
3
5
  Tabs is a redis-backed metrics tracker that supports counts, sums, averages, and min/max stats sliceable by the minute, hour, day, week, month, and year.
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
@@ -15,6 +15,7 @@ module Tabs
15
15
  Tabs::RESOLUTIONS.each do |resolution|
16
16
  increment_resolution(resolution, timestamp)
17
17
  end
18
+ increment_total
18
19
  true
19
20
  end
20
21
 
@@ -29,6 +30,10 @@ module Tabs
29
30
  filtered_pairs.map { |p| Hash[[p]] }
30
31
  end
31
32
 
33
+ def total
34
+ get("stat:#{key}:total").to_i
35
+ end
36
+
32
37
  private
33
38
 
34
39
  def increment_resolution(resolution, timestamp)
@@ -38,6 +43,10 @@ module Tabs
38
43
  incr(stat_key)
39
44
  end
40
45
 
46
+ def increment_total
47
+ incr("stat:#{key}:total")
48
+ end
49
+
41
50
  end
42
51
  end
43
52
  end
@@ -25,6 +25,12 @@ module Tabs
25
25
  get_metric(key).increment
26
26
  end
27
27
 
28
+ def counter_total(key, period=nil)
29
+ raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
30
+ raise MetricTypeMismatchError.new("Only counter metrics can be incremented") unless metric_type(key) == "counter"
31
+ get_metric(key).total
32
+ end
33
+
28
34
  def record_value(key, value)
29
35
  raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
30
36
  raise MetricTypeMismatchError.new("Only value metrics can record a value") unless metric_type(key) == "value"
@@ -39,21 +45,33 @@ module Tabs
39
45
  end
40
46
 
41
47
  def get_metric(key)
48
+ raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
42
49
  metrics = get("metrics")
43
50
  type = metrics[key]
44
51
  metric_klass(type).new(key)
45
52
  end
46
53
 
47
54
  def get_stats(key, period, resolution)
55
+ raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
48
56
  metric = get_metric(key)
49
57
  metric.stats(period, resolution)
50
58
  end
51
59
 
52
60
  def metric_type(key)
61
+ raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
53
62
  hget "metrics", key
54
63
  end
55
64
 
65
+ def list_metrics
66
+ hkeys "metrics"
67
+ end
68
+
69
+ def metric_exists?(key)
70
+ list_metrics.include? key
71
+ end
72
+
56
73
  def drop_metric(key)
74
+ raise UnknownMetricError.new("Unknown metric: #{key}") unless metric_exists?(key)
57
75
  hdel "metrics", key
58
76
  Tabs::RESOLUTIONS.each do |resolution|
59
77
  stat_key = "stat:keys:#{key}:#{resolution}"
@@ -63,14 +81,6 @@ module Tabs
63
81
  end
64
82
  end
65
83
 
66
- def list_metrics
67
- hkeys "metrics"
68
- end
69
-
70
- def metric_exists?(key)
71
- list_metrics.include? key
72
- end
73
-
74
84
  private
75
85
 
76
86
  def metric_klass(type)
@@ -1,3 +1,3 @@
1
1
  module Tabs
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
  end
@@ -16,6 +16,15 @@ describe Tabs::Metrics::Counter do
16
16
  end
17
17
  end
18
18
 
19
+ describe "total count" do
20
+
21
+ it "is incremented every time regardless of resolution" do
22
+ 30.times { metric.increment }
23
+ expect(metric.total).to eq(30)
24
+ end
25
+
26
+ end
27
+
19
28
  describe "retrieving stats" do
20
29
 
21
30
  before do
@@ -125,4 +125,26 @@ describe Tabs do
125
125
 
126
126
  end
127
127
 
128
+ describe "#list_metrics" do
129
+
130
+ it "lists all metrics that are defined" do
131
+ Tabs.create_metric("foo", "counter")
132
+ Tabs.create_metric("bar", "counter")
133
+ Tabs.create_metric("baz", "counter")
134
+ expect(Tabs.list_metrics).to eq(["foo", "bar", "baz"])
135
+ end
136
+
137
+ end
138
+
139
+ describe "#metric_type" do
140
+
141
+ it "returns the type of a given metric" do
142
+ Tabs.create_metric("foo", "counter")
143
+ Tabs.create_metric("bar", "value")
144
+ expect(Tabs.metric_type("foo")).to eq("counter")
145
+ expect(Tabs.metric_type("bar")).to eq("value")
146
+ end
147
+
148
+ end
149
+
128
150
  end
@@ -26,5 +26,6 @@ Gem::Specification.new do |gem|
26
26
  gem.add_development_dependency "rspec"
27
27
  gem.add_development_dependency "fakeredis"
28
28
  gem.add_development_dependency "timecop"
29
+ gem.add_development_dependency "rake"
29
30
 
30
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-23 00:00:00.000000000 Z
12
+ date: 2013-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
@@ -123,6 +123,22 @@ dependencies:
123
123
  - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rake
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
126
142
  description: A redis-backed metrics tracker for keeping tabs on pretty much anything
127
143
  ;)
128
144
  email:
@@ -133,6 +149,7 @@ extra_rdoc_files: []
133
149
  files:
134
150
  - .gitignore
135
151
  - .ruby-version
152
+ - .travis.yml
136
153
  - Gemfile
137
154
  - LICENSE.txt
138
155
  - README.md