tabs 0.5.2 → 0.5.3

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.
@@ -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