Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Simple Metrics Rails Engine
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
app
config
db/migrate
lib
log
public/javascripts
rails
script
test
.gitignore
LICENSE
README.md
Rakefile
TODO
install.rb

README.md

Simple Metrics Engine

This plugin provides event log based simple metrics.

Installation

  script/plugin install git://github.com/ss/simple_metrics_engine.git

Testing

  rake test 
  rake sme:coverage
  script/server
  point your browser to http://localhost:3000/coverage/

Verification

  rake sme:generate_dummy_data
  script/server
  point your browser to http://localhost:3000/sme

Usage

Configure the plugin.

in config/initializers/simple_metrics_engine.rb

  Sme.configure do |config|
    # only allow admins to access metrics
    config.permission_check { redirect_to login_path and return false unless current_user.admin? }

    # (Optional) Metrics will be rolled up into 15-minute periods starting every hour on the hour.
    config.rollup_window = 15.minutes
  end

  # add user details to event hash
  def add_user_info(event_hash)
    event_hash[:user_id] ||= current_user.id
    event_hash
  end

  Sme.wrap!(method(:add_user_info))

Modify your User controller to log a visits and conversions.

in app/controller/users_controller.rb:

  class UsersController < ApplicationController

    def index
      log_visitation
      ...
    end

    def create
      ...
      log_conversion if @user.valid?
    end

  private

    def log_visitation
      Sme.log('user|visit')
      Sme.log("user|visit|#{country}")
    end

    def log_conversion
      Sme.log('user|conversion', metrics_notes)
      Sme.log("user|conversion|#{country}")
    end

    def metrics_notes
      {
        :ab_test_button_text => ab_test_button_text,
        :foo => 'bar',
      }
    end

  end # class UsersController

Alternatively, you can use an after_create filter to your User model:

in app/models/user.rb:

  class User < ActiveRecord::Base

    after_create :log_conversion

    def log_conversion_event
      Sme.log('user|conversion', :user_id => id)
    end

  end # class User

Create a cron job that runs the sme:rollup_logs rake task:

HOME=<rails root>
0/15 * * * * rake sme:rollup_logs >> $HOME/log/sme_rollup_logs.log 2>&1
Something went wrong with that request. Please try again.