blackbeard 0.0.1 → 0.0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/blackbeard.gemspec +4 -4
- data/lib/blackbeard/context.rb +6 -0
- data/lib/blackbeard/feature.rb +13 -0
- data/lib/blackbeard/metric.rb +8 -30
- data/lib/blackbeard/pirate.rb +6 -2
- data/lib/blackbeard/storable.rb +38 -0
- data/lib/blackbeard/version.rb +1 -1
- data/spec/pirate_spec.rb +21 -0
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cab0360eada0f7c58e88eb30642cc1a31f23128a
|
4
|
+
data.tar.gz: 2171034dbbf18c5352c029603b812df6f6280b38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bd829d92bfaeee1a39e1c077d8d020e0b67f5ca3ae442987d28d7978297980bfcca53bea255f9c70da70256bf2a4edb43c906e615b51df6b8e6dc4069b6af64
|
7
|
+
data.tar.gz: 0e352a8c9dc8220c4e75eb860cda59200453b073c88a9869e5fae75add9f44243846c661cec6ecd4d80f984bcef50c1d66f35c50494c49bee4cf5ce0d8849be6
|
data/blackbeard.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Blackbeard::VERSION
|
9
9
|
spec.authors = ["Robert Graff"]
|
10
10
|
spec.email = ["robert_graff@yahoo.com"]
|
11
|
-
spec.description = %q{Blackbeard is a Redis backed metrics collection system with a Rack dashboard. It dreams of being a replacement for rollout and split, but is early in
|
11
|
+
spec.description = %q{Blackbeard is a Redis backed metrics collection system with a Rack dashboard. It dreams of being a replacement for rollout and split, but is early in its development.}
|
12
12
|
spec.summary = %q{Blackbeard is a Redis backed metrics collection system with a Rack dashboard}
|
13
13
|
spec.homepage = "https://github.com/goldstar/blackbeard"
|
14
14
|
spec.license = "MIT"
|
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~>
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "rspec", "~> 2"
|
23
|
+
spec.add_development_dependency "rspec", "~> 2.6"
|
24
24
|
spec.add_development_dependency 'rack-test', '~> 0.6'
|
25
25
|
|
26
26
|
spec.add_runtime_dependency "sinatra-base", "~> 1.4"
|
27
|
-
spec.add_runtime_dependency "tzinfo", "~>
|
27
|
+
spec.add_runtime_dependency "tzinfo", "~> 0.3"
|
28
28
|
spec.add_runtime_dependency 'redis', '~> 3.0', '>= 3.0.4'
|
29
29
|
spec.add_runtime_dependency 'redis-namespace', '~> 1.4', '>= 1.4.1'
|
30
30
|
end
|
data/lib/blackbeard/context.rb
CHANGED
@@ -16,6 +16,12 @@ module Blackbeard
|
|
16
16
|
@pirate.unique_metric(name.to_s).add(unique_identifier) unless bot?
|
17
17
|
end
|
18
18
|
|
19
|
+
def feature(name, options = {})
|
20
|
+
variations = options.keys
|
21
|
+
variation_to_show = @pirate.feature(name.to_s).select_variation(variations, unique_identifier)
|
22
|
+
options[:variation_to_show]
|
23
|
+
end
|
24
|
+
|
19
25
|
private
|
20
26
|
|
21
27
|
def bot?
|
data/lib/blackbeard/metric.rb
CHANGED
@@ -2,17 +2,19 @@ require "blackbeard/storable"
|
|
2
2
|
|
3
3
|
module Blackbeard
|
4
4
|
class Metric < Storable
|
5
|
-
attr_reader :name
|
6
|
-
|
7
|
-
def initialize(name)
|
8
|
-
@name = name.to_s.downcase
|
9
|
-
db.hash_key_set_if_not_exists(metrics_key, key, tz.now.to_date)
|
10
|
-
end
|
11
5
|
|
12
6
|
def self.new_from_type_name(type, name)
|
13
7
|
self.const_get(type.capitalize).new(name)
|
14
8
|
end
|
15
9
|
|
10
|
+
def type
|
11
|
+
self.class.name.split("::").last.downcase
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.master_key
|
15
|
+
"metrics"
|
16
|
+
end
|
17
|
+
|
16
18
|
def self.new_from_key(key)
|
17
19
|
if key =~ /^metrics::(.+)::(.+)$/
|
18
20
|
new_from_type_name($1, $2)
|
@@ -21,26 +23,6 @@ module Blackbeard
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
|
-
def self.all
|
25
|
-
all_keys.map{ |key| new_from_key(key) }
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.all_keys
|
29
|
-
db.hash_keys(metrics_key)
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.count
|
33
|
-
db.hash_length(metrics_key)
|
34
|
-
end
|
35
|
-
|
36
|
-
def type
|
37
|
-
self.class.name.split("::").last.downcase
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.metrics_key
|
41
|
-
"metrics"
|
42
|
-
end
|
43
|
-
|
44
26
|
def key
|
45
27
|
"metrics::#{ type }::#{ name }"
|
46
28
|
end
|
@@ -65,10 +47,6 @@ private
|
|
65
47
|
db.hash_keys(hours_set_key)
|
66
48
|
end
|
67
49
|
|
68
|
-
def metrics_key
|
69
|
-
self.class.metrics_key
|
70
|
-
end
|
71
|
-
|
72
50
|
def hours_set_key
|
73
51
|
"#{key}::hours"
|
74
52
|
end
|
data/lib/blackbeard/pirate.rb
CHANGED
@@ -2,14 +2,14 @@ require "blackbeard/context"
|
|
2
2
|
require "blackbeard/metric"
|
3
3
|
require "blackbeard/metric/unique"
|
4
4
|
require "blackbeard/metric/total"
|
5
|
+
require "blackbeard/feature"
|
5
6
|
|
6
7
|
module Blackbeard
|
7
8
|
class Pirate
|
8
|
-
attr_accessor :total_metrics, :unique_metrics
|
9
|
-
|
10
9
|
def initialize
|
11
10
|
@total_metrics = {}
|
12
11
|
@unique_metrics = {}
|
12
|
+
@features = {}
|
13
13
|
end
|
14
14
|
|
15
15
|
def total_metric(name)
|
@@ -20,6 +20,10 @@ module Blackbeard
|
|
20
20
|
@unique_metrics[name] ||= Metric::Unique.new(name)
|
21
21
|
end
|
22
22
|
|
23
|
+
def feature(name)
|
24
|
+
@features[name] ||= Feature.new(name)
|
25
|
+
end
|
26
|
+
|
23
27
|
def context(options = {})
|
24
28
|
Context.new(self, options)
|
25
29
|
end
|
data/lib/blackbeard/storable.rb
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
module Blackbeard
|
2
2
|
class Storable
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize(name)
|
6
|
+
@name = name.to_s.downcase
|
7
|
+
db.hash_key_set_if_not_exists(master_key, key, tz.now.to_date)
|
8
|
+
end
|
9
|
+
|
10
|
+
def master_key
|
11
|
+
raise "define master key in the class that inherits from storable"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.new_from_key(key)
|
15
|
+
name = key.split('::').last
|
16
|
+
self.new(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.all_keys
|
20
|
+
db.hash_keys(master_key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.count
|
24
|
+
db.hash_length(master_key)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.all
|
28
|
+
all_keys.map{ |key| new_from_key(key) }
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def key
|
34
|
+
"#{master_key}::#{ name }"
|
35
|
+
end
|
36
|
+
|
37
|
+
def master_key
|
38
|
+
self.class.master_key
|
39
|
+
end
|
40
|
+
|
3
41
|
def db
|
4
42
|
self.class.db
|
5
43
|
end
|
data/lib/blackbeard/version.rb
CHANGED
data/spec/pirate_spec.rb
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe Blackbeard::Pirate do
|
4
|
+
let(:pirate) { Blackbeard::Pirate.new }
|
5
|
+
|
6
|
+
describe "memoization" do
|
7
|
+
let(:name){ "bond" }
|
8
|
+
|
9
|
+
it "should get features once" do
|
10
|
+
Blackbeard::Feature.should_receive(:new).with(name).once.and_return(true)
|
11
|
+
4.times{ pirate.feature(name) }
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should get unique metrics once" do
|
15
|
+
Blackbeard::Metric::Unique.should_receive(:new).with(name).once.and_return(true)
|
16
|
+
4.times{ pirate.unique_metric(name) }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should get total metrics once" do
|
20
|
+
Blackbeard::Metric::Total.should_receive(:new).with(name).once.and_return(true)
|
21
|
+
4.times{ pirate.total_metric(name) }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
4
25
|
|
5
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blackbeard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
4
|
+
version: 0.0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Graff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2'
|
47
|
+
version: '2.6'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2'
|
54
|
+
version: '2.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rack-test
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0.3'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0.3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: redis
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,7 +135,7 @@ dependencies:
|
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: 1.4.1
|
137
137
|
description: Blackbeard is a Redis backed metrics collection system with a Rack dashboard.
|
138
|
-
It dreams of being a replacement for rollout and split, but is early in
|
138
|
+
It dreams of being a replacement for rollout and split, but is early in its development.
|
139
139
|
email:
|
140
140
|
- robert_graff@yahoo.com
|
141
141
|
executables: []
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/blackbeard/dashboard/views/layout.erb
|
158
158
|
- lib/blackbeard/dashboard/views/metrics/index.erb
|
159
159
|
- lib/blackbeard/dashboard/views/metrics/show.erb
|
160
|
+
- lib/blackbeard/feature.rb
|
160
161
|
- lib/blackbeard/metric.rb
|
161
162
|
- lib/blackbeard/metric/total.rb
|
162
163
|
- lib/blackbeard/metric/unique.rb
|