Clone this wiki locally
Welcome to the Trackoid Wiki. Here you will find information about the project and helpful information for installing and configuring this little beast. :-) Use the following table of contents or navigate using links on the right column.
Handling analytics data is one of the most difficult things on web applications, believe it or not. Sure you can come up with simple statistical analytics like page views and download counts, but when scalability is a consideration you will run into design problems. First of all is the underlying database structure. With SQL, It’s easy to make a simple table-like analytics, and I bet you at least once did one of such table schema.
Then, they come aggregations… Ok, let’s track page views, but I also want to track page views with aggregated browser data, and also referrer data, and also time of day data, and also… It could become a nightmare.
You then have two options: either use Google Analytics or Trackoid… :-)
Ok, let’s assume I’m not pretending this to be better than Google Analytics. Read the Theory of Operation to move on.
Enough blah, blah, let’s get our hands dirty
Let’s pretend you have a blog system with
Page models and a
The Page model
Below is the definition of a fairly standard
Page model. Note the inclusion of
Mongoid::Tracking. You need to include this module to use Trackoid methods.
class Page include Mongoid::Document include Mongoid::Tracking field :name track :visits # Adds a "visits" tracking field end
This is the most basic usage of Trackoid. By using
track :visits we are adding a new special field called
visits which is a Trackoid tracking field.
Now, in your controllers or anywhere in your code you can count visits like this:
@page = Page.where( ... selection ... ) @page.visits.inc
That’s all… You are now tracking statistical information. Note that
visits is a real field on the model, so you can track visits anywhere you have a page instance:
Page.where(:url => "/").first.visits.inc
This is the fun part… Retrieving the information is not only easy, but fun… Consider this examples:
# Retrieve visits for today @page.visits.today # Returns a number. (Fixnum) # Retrieve visits for yesterday @page.visits.yesterday # Returns a number. # Retrieve visits in last 7 days @page.visits.last_days(7) # Returns an Array. Example: => [12, 5, 45, 15, 20, 30, 25] # Retrieve visits in a specific date @page.visits.on("2010-06-06") # Returns a number, like in "today" # The 'on' selector also accepts an object descendant from Date @page.visits.on( Date.today - 1) # Equivalent to "yesterday"