blackbeard 0.0.2.0 → 0.0.3.1

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -0
  3. data/Guardfile +8 -0
  4. data/README.md +162 -20
  5. data/Rakefile +6 -0
  6. data/TODO.md +13 -34
  7. data/blackbeard.gemspec +5 -1
  8. data/console.rb +3 -0
  9. data/dashboard/public/bootstrap3-editable/css/bootstrap-editable.css +663 -0
  10. data/dashboard/public/bootstrap3-editable/img/clear.png +0 -0
  11. data/dashboard/public/bootstrap3-editable/img/loading.gif +0 -0
  12. data/dashboard/public/bootstrap3-editable/js/bootstrap-editable.min.js +7 -0
  13. data/dashboard/public/fonts/glyphicons-halflings-regular.eot +0 -0
  14. data/dashboard/public/fonts/glyphicons-halflings-regular.svg +229 -0
  15. data/dashboard/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  16. data/dashboard/public/fonts/glyphicons-halflings-regular.woff +0 -0
  17. data/dashboard/public/javascripts/bootstrap.min.js +7 -0
  18. data/dashboard/public/javascripts/jquery-1.10.2.min.js +6 -0
  19. data/dashboard/public/stylesheets/application.css +28 -0
  20. data/dashboard/public/stylesheets/bootstrap-theme.css +7 -0
  21. data/dashboard/public/stylesheets/bootstrap.css +7 -0
  22. data/dashboard/routes/base.rb +19 -0
  23. data/dashboard/routes/groups.rb +22 -0
  24. data/dashboard/routes/home.rb +11 -0
  25. data/dashboard/routes/metrics.rb +30 -0
  26. data/dashboard/routes/tests.rb +23 -0
  27. data/dashboard/views/groups/index.erb +22 -0
  28. data/dashboard/views/groups/show.erb +58 -0
  29. data/dashboard/views/index.erb +4 -0
  30. data/dashboard/views/layout.erb +48 -0
  31. data/dashboard/views/metrics/_metric_data.erb +59 -0
  32. data/dashboard/views/metrics/index.erb +23 -0
  33. data/dashboard/views/metrics/show.erb +73 -0
  34. data/dashboard/views/tests/index.erb +21 -0
  35. data/dashboard/views/tests/show.erb +58 -0
  36. data/lib/blackbeard/configuration.rb +8 -1
  37. data/lib/blackbeard/configuration_methods.rb +24 -0
  38. data/lib/blackbeard/context.rb +33 -21
  39. data/lib/blackbeard/dashboard.rb +17 -21
  40. data/lib/blackbeard/dashboard_helpers.rb +29 -0
  41. data/lib/blackbeard/errors.rb +2 -2
  42. data/lib/blackbeard/group.rb +35 -0
  43. data/lib/blackbeard/metric.rb +34 -32
  44. data/lib/blackbeard/metric_data/base.rb +101 -0
  45. data/lib/blackbeard/metric_data/total.rb +39 -0
  46. data/lib/blackbeard/metric_data/unique.rb +58 -0
  47. data/lib/blackbeard/metric_date.rb +11 -0
  48. data/lib/blackbeard/metric_hour.rb +17 -0
  49. data/lib/blackbeard/pirate.rb +33 -22
  50. data/lib/blackbeard/redis_store.rb +46 -2
  51. data/lib/blackbeard/selected_variation.rb +13 -0
  52. data/lib/blackbeard/storable.rb +39 -27
  53. data/lib/blackbeard/storable_attributes.rb +54 -0
  54. data/lib/blackbeard/storable_has_many.rb +60 -0
  55. data/lib/blackbeard/storable_has_set.rb +59 -0
  56. data/lib/blackbeard/test.rb +21 -0
  57. data/lib/blackbeard/version.rb +1 -1
  58. data/lib/blackbeard.rb +0 -8
  59. data/spec/configuration_spec.rb +15 -0
  60. data/spec/context_spec.rb +94 -19
  61. data/spec/dashboard/groups_spec.rb +50 -0
  62. data/spec/dashboard/home_spec.rb +20 -0
  63. data/spec/dashboard/metrics_spec.rb +57 -0
  64. data/spec/dashboard/tests_spec.rb +43 -0
  65. data/spec/group_spec.rb +36 -0
  66. data/spec/metric_data/base_spec.rb +57 -0
  67. data/spec/metric_data/total_spec.rb +116 -0
  68. data/spec/metric_data/unique_spec.rb +91 -0
  69. data/spec/metric_spec.rb +52 -44
  70. data/spec/pirate_spec.rb +32 -15
  71. data/spec/redis_store_spec.rb +121 -0
  72. data/spec/spec_helper.rb +13 -1
  73. data/spec/storable_attributes_spec.rb +47 -0
  74. data/spec/storable_has_many_spec.rb +49 -0
  75. data/spec/storable_has_set_spec.rb +39 -0
  76. data/spec/storable_spec.rb +33 -0
  77. data/spec/test_spec.rb +25 -0
  78. metadata +133 -17
  79. data/lib/blackbeard/dashboard/helpers.rb +0 -8
  80. data/lib/blackbeard/dashboard/views/layout.erb +0 -15
  81. data/lib/blackbeard/dashboard/views/metrics/index.erb +0 -10
  82. data/lib/blackbeard/dashboard/views/metrics/show.erb +0 -16
  83. data/lib/blackbeard/feature.rb +0 -13
  84. data/lib/blackbeard/metric/total.rb +0 -17
  85. data/lib/blackbeard/metric/unique.rb +0 -18
  86. data/spec/dashboard_spec.rb +0 -38
  87. data/spec/total_metric_spec.rb +0 -65
  88. data/spec/unique_metric_spec.rb +0 -60
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.2.0
4
+ version: 0.0.3.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-22 00:00:00.000000000 Z
11
+ date: 2014-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '2.6'
47
+ version: 2.14.1
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.6'
54
+ version: 2.14.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rack-test
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,48 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 4.2.5
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 4.2.5
83
+ - !ruby/object:Gem::Dependency
84
+ name: terminal-notifier-guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: sinatra-base
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +122,20 @@ dependencies:
80
122
  - - ~>
81
123
  - !ruby/object:Gem::Version
82
124
  version: '1.4'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra-partial
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.0
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: tzinfo
85
141
  requirement: !ruby/object:Gem::Requirement
@@ -143,37 +199,85 @@ extensions: []
143
199
  extra_rdoc_files: []
144
200
  files:
145
201
  - .gitignore
202
+ - .travis.yml
146
203
  - Gemfile
204
+ - Guardfile
147
205
  - LICENSE.txt
148
206
  - README.md
149
207
  - Rakefile
150
208
  - TODO.md
151
209
  - blackbeard.gemspec
210
+ - console.rb
211
+ - dashboard/public/bootstrap3-editable/css/bootstrap-editable.css
212
+ - dashboard/public/bootstrap3-editable/img/clear.png
213
+ - dashboard/public/bootstrap3-editable/img/loading.gif
214
+ - dashboard/public/bootstrap3-editable/js/bootstrap-editable.min.js
215
+ - dashboard/public/fonts/glyphicons-halflings-regular.eot
216
+ - dashboard/public/fonts/glyphicons-halflings-regular.svg
217
+ - dashboard/public/fonts/glyphicons-halflings-regular.ttf
218
+ - dashboard/public/fonts/glyphicons-halflings-regular.woff
219
+ - dashboard/public/javascripts/bootstrap.min.js
220
+ - dashboard/public/javascripts/jquery-1.10.2.min.js
221
+ - dashboard/public/stylesheets/application.css
222
+ - dashboard/public/stylesheets/bootstrap-theme.css
223
+ - dashboard/public/stylesheets/bootstrap.css
224
+ - dashboard/routes/base.rb
225
+ - dashboard/routes/groups.rb
226
+ - dashboard/routes/home.rb
227
+ - dashboard/routes/metrics.rb
228
+ - dashboard/routes/tests.rb
229
+ - dashboard/views/groups/index.erb
230
+ - dashboard/views/groups/show.erb
231
+ - dashboard/views/index.erb
232
+ - dashboard/views/layout.erb
233
+ - dashboard/views/metrics/_metric_data.erb
234
+ - dashboard/views/metrics/index.erb
235
+ - dashboard/views/metrics/show.erb
236
+ - dashboard/views/tests/index.erb
237
+ - dashboard/views/tests/show.erb
152
238
  - lib/blackbeard.rb
153
239
  - lib/blackbeard/configuration.rb
240
+ - lib/blackbeard/configuration_methods.rb
154
241
  - lib/blackbeard/context.rb
155
242
  - lib/blackbeard/dashboard.rb
156
- - lib/blackbeard/dashboard/helpers.rb
157
- - lib/blackbeard/dashboard/views/layout.erb
158
- - lib/blackbeard/dashboard/views/metrics/index.erb
159
- - lib/blackbeard/dashboard/views/metrics/show.erb
243
+ - lib/blackbeard/dashboard_helpers.rb
160
244
  - lib/blackbeard/errors.rb
161
- - lib/blackbeard/feature.rb
245
+ - lib/blackbeard/group.rb
162
246
  - lib/blackbeard/metric.rb
163
- - lib/blackbeard/metric/total.rb
164
- - lib/blackbeard/metric/unique.rb
247
+ - lib/blackbeard/metric_data/base.rb
248
+ - lib/blackbeard/metric_data/total.rb
249
+ - lib/blackbeard/metric_data/unique.rb
250
+ - lib/blackbeard/metric_date.rb
251
+ - lib/blackbeard/metric_hour.rb
165
252
  - lib/blackbeard/pirate.rb
166
253
  - lib/blackbeard/redis_store.rb
254
+ - lib/blackbeard/selected_variation.rb
167
255
  - lib/blackbeard/storable.rb
256
+ - lib/blackbeard/storable_attributes.rb
257
+ - lib/blackbeard/storable_has_many.rb
258
+ - lib/blackbeard/storable_has_set.rb
259
+ - lib/blackbeard/test.rb
168
260
  - lib/blackbeard/version.rb
169
261
  - spec/blackbeard_spec.rb
262
+ - spec/configuration_spec.rb
170
263
  - spec/context_spec.rb
171
- - spec/dashboard_spec.rb
264
+ - spec/dashboard/groups_spec.rb
265
+ - spec/dashboard/home_spec.rb
266
+ - spec/dashboard/metrics_spec.rb
267
+ - spec/dashboard/tests_spec.rb
268
+ - spec/group_spec.rb
269
+ - spec/metric_data/base_spec.rb
270
+ - spec/metric_data/total_spec.rb
271
+ - spec/metric_data/unique_spec.rb
172
272
  - spec/metric_spec.rb
173
273
  - spec/pirate_spec.rb
274
+ - spec/redis_store_spec.rb
174
275
  - spec/spec_helper.rb
175
- - spec/total_metric_spec.rb
176
- - spec/unique_metric_spec.rb
276
+ - spec/storable_attributes_spec.rb
277
+ - spec/storable_has_many_spec.rb
278
+ - spec/storable_has_set_spec.rb
279
+ - spec/storable_spec.rb
280
+ - spec/test_spec.rb
177
281
  homepage: https://github.com/goldstar/blackbeard
178
282
  licenses:
179
283
  - MIT
@@ -200,10 +304,22 @@ specification_version: 4
200
304
  summary: Blackbeard is a Redis backed metrics collection system with a Rack dashboard
201
305
  test_files:
202
306
  - spec/blackbeard_spec.rb
307
+ - spec/configuration_spec.rb
203
308
  - spec/context_spec.rb
204
- - spec/dashboard_spec.rb
309
+ - spec/dashboard/groups_spec.rb
310
+ - spec/dashboard/home_spec.rb
311
+ - spec/dashboard/metrics_spec.rb
312
+ - spec/dashboard/tests_spec.rb
313
+ - spec/group_spec.rb
314
+ - spec/metric_data/base_spec.rb
315
+ - spec/metric_data/total_spec.rb
316
+ - spec/metric_data/unique_spec.rb
205
317
  - spec/metric_spec.rb
206
318
  - spec/pirate_spec.rb
319
+ - spec/redis_store_spec.rb
207
320
  - spec/spec_helper.rb
208
- - spec/total_metric_spec.rb
209
- - spec/unique_metric_spec.rb
321
+ - spec/storable_attributes_spec.rb
322
+ - spec/storable_has_many_spec.rb
323
+ - spec/storable_has_set_spec.rb
324
+ - spec/storable_spec.rb
325
+ - spec/test_spec.rb
@@ -1,8 +0,0 @@
1
- module Blackbeard
2
- module DashboardHelpers
3
- def url(path)
4
- env['SCRIPT_NAME'].to_s + path
5
- end
6
- end
7
- end
8
-
@@ -1,15 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Blackbeard</title>
4
- </head>
5
- <body>
6
- <div id="header">
7
- <h1>Blackbeard</h1>
8
- </header>
9
-
10
- <div id="main">
11
- <%= yield %>
12
- </div>
13
-
14
- </body>
15
- </html>
@@ -1,10 +0,0 @@
1
- <h2>Metrics</h2>
2
- <% if @metrics.any? %>
3
- <ul>
4
- <% @metrics.each do |metric| %>
5
- <li><a href="<%= url("metrics/#{metric.type}/#{metric.name}") %>"><%= metric.name.capitalize %> - <%= metric.type.capitalize %></a></li>
6
- <% end %>
7
- </ul>
8
- <% else %>
9
- No metrics recorded.
10
- <% end %>
@@ -1,16 +0,0 @@
1
- <h2><%= @metric.name.capitalize %> - <%= @metric.type.capitalize %></h2>
2
-
3
- <table>
4
- <tr>
5
- <th>Hour</th>
6
- <th>Count</th>
7
- </tr>
8
-
9
- <% @metric.hours.each do |metric_hour| %>
10
- <tr>
11
- <td><%= metric_hour[:hour] %></td>
12
- <td><%= metric_hour[:result] %></td>
13
- </tr>
14
- <% end %>
15
-
16
- </table>
@@ -1,13 +0,0 @@
1
- require 'blackbeard/storable'
2
-
3
- module Blackbeard
4
- class Feature < Storable
5
-
6
- private
7
-
8
- def self.master_key
9
- "features"
10
- end
11
-
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- require "blackbeard/metric"
2
-
3
- module Blackbeard
4
- class Metric::Total < Metric
5
-
6
- def add(uid, amount)
7
- key = key_for_hour(tz.now)
8
- db.set_add_member(hours_set_key, key)
9
- db.increment_by_float(key, amount.to_f)
10
- end
11
-
12
- def result_for_hour_key(key)
13
- db.get(key).to_f
14
- end
15
-
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- require "blackbeard/metric"
2
-
3
- module Blackbeard
4
- class Metric::Unique < Metric
5
-
6
- def add(uid)
7
- key = key_for_hour(tz.now)
8
- db.set_add_member(hours_set_key, key)
9
- db.set_add_member(key, uid)
10
- end
11
-
12
- def result_for_hour_key(key)
13
- db.set_count(key)
14
- end
15
-
16
- end
17
- end
18
-
@@ -1,38 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- require 'rack/test'
4
- require 'blackbeard/dashboard'
5
-
6
- describe Blackbeard::Dashboard do
7
- include Rack::Test::Methods
8
-
9
- let(:app) { Blackbeard::Dashboard }
10
-
11
- describe "/" do
12
- it "should redirect" do
13
- get "/"
14
- last_response.should be_redirect
15
- end
16
- end
17
-
18
- describe "/metrics" do
19
- it "should list all the metrics" do
20
- Blackbeard::Metric::Total.new("Jostling")
21
- get "/metrics"
22
-
23
- last_response.should be_ok
24
- last_response.body.should include('Jostling')
25
- end
26
- end
27
-
28
- describe "/metrics/:type/:name" do
29
- it "should show a metric" do
30
- metric = Blackbeard::Metric::Total.new("Jostling")
31
- get "/metrics/#{metric.type}/#{metric.name}"
32
-
33
- last_response.should be_ok
34
- last_response.body.should include("Jostling")
35
- end
36
- end
37
-
38
- end
@@ -1,65 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Blackbeard::Metric::Total do
4
-
5
- let(:metric) { Blackbeard::Metric::Total.new("page views") }
6
- let(:uid) { "unique identifier" }
7
- let(:ouid) { "other unique identifier" }
8
-
9
- describe "add" do
10
- it "should create a new metric" do
11
- expect{
12
- metric.add(uid, 1)
13
- }.to change{ Blackbeard::Metric.count }.by(1)
14
- end
15
-
16
- it "should not create a new metric if it already exists" do
17
- metric.add(uid, 1)
18
- expect{
19
- metric.add(uid, 1)
20
- }.to_not change{ Blackbeard::Metric.count }
21
- end
22
-
23
- it "should increment the metric by the amount" do
24
- expect{
25
- metric.add(uid, 2)
26
- }.to change{ metric.result_for_hour(Blackbeard.tz.now) }.by(2)
27
- end
28
-
29
- it "should increment an existing amount" do
30
- metric.add(uid, 1)
31
- expect{
32
- metric.add(uid, 2)
33
- }.to change{ metric.result_for_hour(Blackbeard.tz.now) }.from(1).to(3)
34
- end
35
-
36
- it "should handle negatives ok" do
37
- metric.add(uid, 2)
38
- expect{
39
- metric.add(uid, -1)
40
- }.to change{ metric.result_for_hour(Blackbeard.tz.now) }.from(2).to(1)
41
- end
42
-
43
- it "should handle floats" do
44
- metric.add(uid, 2.5)
45
- expect{
46
- metric.add(uid, 1.25)
47
- }.to change{ metric.result_for_hour(Blackbeard.tz.now) }.to(3.75)
48
- end
49
- end
50
-
51
-
52
-
53
- describe "result_for_hour" do
54
- it "should return 0 if no metric has been recorded" do
55
- metric.result_for_hour(Blackbeard.tz.now).should be_zero
56
- end
57
-
58
- it "should return sum if metric called more than once" do
59
- metric.add(uid, 2)
60
- metric.add(uid, 4)
61
- metric.result_for_hour(Blackbeard.tz.now).should == 6
62
- end
63
- end
64
-
65
- end
@@ -1,60 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Blackbeard::Metric::Unique do
4
-
5
- let(:metric) { Blackbeard::Metric::Unique.new("join") }
6
- let(:uid) { "unique identifier" }
7
- let(:ouid) { "other unique identifier" }
8
-
9
- describe "add" do
10
- it "should create a new metric" do
11
- expect{
12
- metric.add(uid)
13
- }.to change{ Blackbeard::Metric.count }.by(1)
14
- end
15
-
16
- it "should not create a new metric if it already exists" do
17
- metric.add(uid)
18
- expect{
19
- metric.add(uid)
20
- }.to_not change{ Blackbeard::Metric.count }
21
- end
22
-
23
- it "should increment the metric for the uid" do
24
- expect{
25
- metric.add(uid)
26
- }.to change{ metric.result_for_hour(Blackbeard.tz.now) }.by(1)
27
- end
28
-
29
- it "should not increment the metric for duplicate uids" do
30
- metric.add(uid)
31
- expect{
32
- metric.add(uid)
33
- }.to_not change{ metric.result_for_hour(Blackbeard.tz.now) }
34
- end
35
- end
36
-
37
- describe "result_for_hour" do
38
- it "should return 0 if no metric has been recorded" do
39
- metric.result_for_hour(Blackbeard.tz.now).should be_zero
40
- end
41
-
42
- it "should return 1 if metric called once" do
43
- metric.add(uid)
44
- metric.result_for_hour(Blackbeard.tz.now).should == 1
45
- end
46
-
47
- it "should return 1 if metric called more than once" do
48
- 3.times{ metric.add(uid) }
49
- metric.result_for_hour(Blackbeard.tz.now).should == 1
50
- end
51
-
52
- it "should return 2 if metric was called with 2 uniques" do
53
- metric.add(uid)
54
- metric.add(ouid)
55
- metric.result_for_hour(Blackbeard.tz.now).should == 2
56
- end
57
-
58
- end
59
-
60
- end