minuteman 0.0.1 → 0.0.2

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- minuteman (0.0.1)
4
+ minuteman (0.0.2)
5
5
  redis (~> 3.0.2)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -17,7 +17,7 @@ Freenode - #cuba.rb - 2012/10/30 15:20 UYT
17
17
 
18
18
  **conanbatt:** i use google analytics for the page itself, and its good, but for the webapp its really not useful
19
19
 
20
- **tizoc: conanbatt:** [http://amix.dk/blog/post/19714]() you can port this (if an equivalent doesn't exist already)
20
+ **tizoc: conanbatt:** http://amix.dk/blog/post/19714 you can port this (if an equivalent doesn't exist already)
21
21
 
22
22
  **conanbatt:** the metrics link is excellent but its python and released 5 days ago lol
23
23
 
@@ -28,9 +28,9 @@ Freenode - #cuba.rb - 2012/10/30 15:20 UYT
28
28
 
29
29
  ## Inspiration
30
30
 
31
- * [http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/]()
32
- * [http://amix.dk/blog/post/19714]()
33
- * [http://en.wikipedia.org/wiki/Bit_array]()
31
+ * http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/
32
+ * http://amix.dk/blog/post/19714
33
+ * http://en.wikipedia.org/wiki/Bit_array
34
34
 
35
35
  ## Installation
36
36
 
@@ -80,7 +80,11 @@ analytics.day("login:successful", Time.now.utc)
80
80
  analytics.hour("login:successful", Time.now.utc)
81
81
  analytics.minute("login:successful", Time.now.utc)
82
82
 
83
- # Check event length
83
+ # Lists all the tracked events
84
+ analytics.events
85
+ #=> ["login:successful", "programming:login:ruby"]
86
+
87
+ # Check event length on a given time
84
88
  today_events.length
85
89
  #=> 2
86
90
 
@@ -94,3 +98,18 @@ today_events.include?(admin.id)
94
98
  today_events.include?(User.all.map(&:id))
95
99
  #=> [true, true, false, false]
96
100
  ```
101
+
102
+ ## Bitwise operations
103
+
104
+ You can intersect sets using AND(`&`), OR(`|`), NOT(`-`) and XOR(`^`).
105
+
106
+ ```ruby
107
+ invited = analytics.month("email:invitation", Time.now.utc)
108
+ successful_buys = analytics.month("buy:complete", Time.now.utc)
109
+
110
+ successful_buys_after_invitation = invited & successful_buys
111
+ successful_buys_after_invitation.include?(user.id)
112
+
113
+ # Clean up all the operations cache
114
+ analytics.reset_operations_cache
115
+ ```
data/lib/minuteman.rb CHANGED
@@ -64,14 +64,23 @@ class Minuteman
64
64
  end
65
65
  end
66
66
 
67
+ # Public: List all the events given the minuteman namespace
68
+ #
69
+ def events
70
+ keys = @redis.keys([PREFIX, "*", "????"].join("_"))
71
+ keys.map { |key| key.split("_")[1] }
72
+ end
73
+
74
+ # Public: List all the operations executed in a given the minuteman namespace
75
+ #
76
+ def operations
77
+ @redis.keys([operations_cache_key_prefix, "*"].join("_"))
78
+ end
79
+
67
80
  # Public: Resets the bit operation cache keys
68
81
  #
69
82
  def reset_operations_cache
70
- prefix = [
71
- PREFIX, Minuteman::BitOperations::BIT_OPERATION_PREFIX
72
- ].join("_")
73
-
74
- keys = @redis.keys([prefix, "*"].join("_"))
83
+ keys = @redis.keys([operations_cache_key_prefix, "*"].join("_"))
75
84
  @redis.del(keys) if keys.any?
76
85
  end
77
86
 
@@ -81,4 +90,14 @@ class Minuteman
81
90
  keys = @redis.keys([PREFIX, "*"].join("_"))
82
91
  @redis.del(keys) if keys.any?
83
92
  end
93
+
94
+ private
95
+
96
+ # Private: The prefix key of all the operations
97
+ #
98
+ def operations_cache_key_prefix
99
+ [
100
+ PREFIX, Minuteman::BitOperations::BIT_OPERATION_PREFIX
101
+ ].join("_")
102
+ end
84
103
  end
@@ -2,7 +2,7 @@ require "minuteman/time_spans"
2
2
 
3
3
  class Minuteman
4
4
  module TimeEvents
5
- # Public: Helper to get all the time trakers ready
5
+ # Public: Helper to get all the time trackers ready
6
6
  #
7
7
  # redis - The Redis connection
8
8
  # event_name - The event to be tracked
data/minuteman.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "minuteman"
3
- s.version = "0.0.1"
3
+ s.version = "0.0.2"
4
4
  s.summary = "Bit Analytics"
5
5
  s.description = "Fast and furious tracking system using Redis bitwise operations"
6
6
  s.authors = ["elcuervo"]
@@ -7,7 +7,7 @@ describe Minuteman do
7
7
  today = Time.now.utc
8
8
  last_month = today - (3600 * 24 * 30)
9
9
  last_week = today - (3600 * 24 * 7)
10
- last_minute = today - 61
10
+ last_minute = today - 120
11
11
 
12
12
  @analytics.mark("login", 12)
13
13
  @analytics.mark("login", [2, 42])
@@ -51,6 +51,27 @@ describe Minuteman do
51
51
  assert @last_month_events.include?(567)
52
52
  end
53
53
 
54
+ it "should list all the events" do
55
+ assert_equal ["login:successful", "login"], @analytics.events
56
+ end
57
+
58
+ it "should reset all the keys" do
59
+ assert_equal 2, @analytics.events.size
60
+
61
+ @analytics.reset_all
62
+
63
+ assert_equal 0, @analytics.events.size
64
+ end
65
+
66
+ it "should reset all bit operation keys" do
67
+ @week_events & @last_week_events
68
+ assert_equal 1, @analytics.operations.size
69
+
70
+ @analytics.reset_operations_cache
71
+
72
+ assert_equal 0, @analytics.operations.size
73
+ end
74
+
54
75
  it "should accept the AND bitwise operations" do
55
76
  and_operation = @week_events & @last_week_events
56
77
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minuteman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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: 2012-10-31 00:00:00.000000000 Z
12
+ date: 2012-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis