A ruby gem that uses redis to track web analytics for your rails apps
Why should I use it?
It gives you detailed analytics about visitors, unique visitors, browsers, OS, visitor recency, traffic sources, etc
Does it have a cool dashboard?
Yes, It uses the excellent Morris.js for graphs/charts
Cool! So how do I install it?
In your Gemfile
gem 'redis_analytics'Make sure your redis server is running! Redis configuration is outside the scope of this README, but check out the Redis documentation.
How do I enable tracking in my rails apps?
require 'redis_analytics'
# configure your redis_connection (mandatory) and redis_namespace (optional)
RedisAnalytics.configure do |configuration|
configuration.redis_connection = Redis.new(url: 'redis://localhost:6379')
configuration.redis_namespace = 'ra'
endWhere can I see the dashboard?
The Dashboard is a Rails::Engine. Just mount it into your routes.rb file at your favorite endpoint
Rails.application.routes.draw do
mount RedisAnalytics::Dashboard::Engine => "/dashboard"
endand navigate to /dashboard in your app
What if I have multiple rails apps that I want to track as one single website?
Just make sure you use the same redis_connection and redis_namespace in the configuration for all your rails apps
RedisAnalytics.configure do |configuration|
configuration.redis_connection = Redis.new(url: 'redis://localhost:6379')
configuration.redis_namespace = 'mywebsite.org'
endWhy is the Geolocation tracking giving me wrong results?
IP based Geolocation works using MaxMind's GeoLite database. The free version is not as accurate as their commercial version. Also it is recommended to regularly get an updated binary of 'GeoLite Country' database from here and extract the GeoIP.dat file into a local directory. You will then need to point to the GeoIP.dat file in your configuration.
RedisAnalytics.configure do |configuration|
configuration.redis_connection = Redis.new(url: 'redis://localhost:6379')
configuration.redis_namespace = 'mywebsite.org'
configuration.geo_ip_data_path = '/path/to/GeoIP.dat'
endCustomizing & Extending
Tracking custom metrics
You can define how to track custom metrics by creating an instance method inside the RedisAnalytics::Metrics module
module RedisAnalytics::Metrics
# methods to track custom metrics
endRedisAnalytics only looks for method names which conform to the following format:
[abc]_[x]_per_[y]
where
-
abcis a metric name -
xcan be any one ofratioorcountand defines the type of the metric -
ycan be any one ofhitorvisitand defines how the metric will be tracked (once per hit or once per visit)
The return value of the method is important and should be Fixnum for count and String for ratio failing which, your metric might not work!
If the return value is an error or nil the metric won't be tracked at all
You can access the Rack::Request object via @rack_request and the Rack::Response object via @rack_response in your methods
You are free to define other methods that do not have the above format in the Metrics module as helper methods
module RedisAnalytics::Metrics
# TRACKING RATIOS
# i want to track ratio of product views per product_id & user_id using query params
def user_product_views_ratio_per_hit
if @rack_request.path == '/product/info'
return "#{@rack_request.params['product_id']}_#{@rack_request.params['user_id']}"
end
end
# i want to track ratio of sold products by product_id using the URL `/products/:id/sale`
def product_sales_ratio_per_hit
if @rack_request.path =~ Regexp.new("\/product\/([0-9]+)\/sale")
return $1
end
end
# TRACKING COUNTS
# i want to track how many times a visitor reached the payment step
def payment_step_count_per_hit
return 1 if @rack_request.path == '/payment'
end
endCustomizing the dashboard
Coming soon
Using filters
RedisAnalytics.configure do |configuration|
# simple string path filter
configuration.add_path_filter('/robots.txt')
# regexp path filter
configuration.add_path_filter(/^\/favicon.ico$/)
# generic filters
configuration.add_filter do |request, response|
request.params['layout'] == 'print'
end
# generic filters
configuration.add_filter do |request, response|
request.ip =~ /^172.16/ or request.ip =~ /^192.168/
end
endContributors Wanted
I may not be able to devote much time to this gem, but you are welcome to send me pull requests. See CONTRIBUTING.md to get started
License
Since redis_analytics is licensed under MIT, you can use redis_analytics for free, provided you leave the attribution as is, in code as well as on the dashboard pages
Copyright (c) 2012-2014 Schubert Cardozo. See MIT-LICENSE! for further details.
