microstat 0.0.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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/microstat.rb +67 -0
  3. metadata +59 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d2ab16c20cef8f5d02fc9314b42ce2fedbe58074
4
+ data.tar.gz: ad0b50567cfd624312e8317e8addb85f870a3e2c
5
+ SHA512:
6
+ metadata.gz: 09b750cf90742a1c991d0a476a2a0a1d468f4c789731c23d143c074d186205fafa4711485fb6b9c2139692462d1d4981304143dbc7e520b76dc1fa03f24c9f5b
7
+ data.tar.gz: c65837abdf2ace03099cc229525b3cae62c776f6564871981a877b663457654da265dfb35099b34b14361933083ad4eea0b14fd7fc7df2153d22575efe2d0d33
data/lib/microstat.rb ADDED
@@ -0,0 +1,67 @@
1
+ require "redis"
2
+
3
+ class Microstat
4
+ def initialize(redis: "redis://localhost:6379", namespace: 'mustat')
5
+ @redis = Redis.new(url: redis)
6
+ @key_space = "#{namespace}:events"
7
+ end
8
+
9
+ # Lists the known event types
10
+ def events
11
+ @redis.smembers @key_space
12
+ end
13
+
14
+ # Increments a specific event's count, returns the total
15
+ def track(event_name)
16
+ # Add the event to the known event space
17
+ @redis.sadd @key_space, event_name
18
+
19
+ # Add today as one of the tracked dates for this event
20
+ @redis.sadd "#{@key_space}:#{event_name}:dates", timestamp_today
21
+
22
+ # Increment event count for the current date
23
+ @redis.incr "#{@key_space}:#{event_name}:#{timestamp_today}"
24
+
25
+ # Increvent total event count, return it
26
+ @redis.incr "#{@key_space}:#{event_name}:total"
27
+ end
28
+
29
+ # Given an event type, return an array of dates where we have data
30
+ def dates(event_name)
31
+ @redis.smembers "#{@key_space}:#{event_name}:dates"
32
+ end
33
+
34
+ # Return today's count for an event
35
+ def today(event_name)
36
+ @redis.get "#{@key_space}:#{event_name}:#{timestamp_today}"
37
+ end
38
+
39
+ # Returns a count for an arbitrary date string in the yyyymmdd format
40
+ def date(event_name, date_string)
41
+ @redis.get "#{@key_space}:#{event_name}:#{date_string}"
42
+ end
43
+
44
+ # Returns a hash with date:count tuples for a given event
45
+ def history(event_name)
46
+ historical_counts = {}
47
+
48
+ for date in dates(event_name)
49
+ historical_counts[date] = date(event_name, date)
50
+ end
51
+
52
+ return historical_counts
53
+ end
54
+
55
+ # Return the total count for an event
56
+ def total(event_name)
57
+ @redis.get "#{@key_space}:#{event_name}:total"
58
+ end
59
+
60
+ private
61
+
62
+ # Returns the current date timestamp as a string for key matching
63
+ def timestamp_today
64
+ # Grab current timestamp and format as YYYYMMDD
65
+ Time.new.strftime("%Y%m%d")
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: microstat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Fred Oliveira
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
27
+ description: Microstat is a library to capture events and compile statistics on those
28
+ events in an application. Like a micro Mixpanel.
29
+ email: fred@helloform.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/microstat.rb
35
+ homepage: http://rubygems.org/gems/microstat
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 2.6.7
56
+ signing_key:
57
+ specification_version: 4
58
+ summary: A tiny library for event statistics in apps.
59
+ test_files: []