Commit 46c4ca18

mo khan <mo@mokhan.ca>
2013-05-05 05:57:27
add mixpanel infrastructure
1 parent 11e4a5a
Changed files (3)
app/controllers/application_controller.rb
@@ -1,5 +1,16 @@
 class ApplicationController < ActionController::Base
   protect_from_forgery
+  before_filter :initialize_env
+
+  private
+  def initialize_env
+    @request_env = {
+      'REMOTE_ADDR' => request.env['REMOTE_ADDR'],
+      'HTTP_X_FORWARDED_FOR' => request.env['HTTP_X_FORWARDED_FOR'],
+      'rack.session' => request.env['rack.session'].to_hash,
+      'mixpanel_events' => request.env['mixpanel_events']
+    }
+  end
 
   def resolve(target)
     target.new(current_user)
app/models/mix_panel.rb
@@ -0,0 +1,6 @@
+class MixPanel
+  def self.track(name, properties, env)
+    # Notice we are using the 'mixpanel' queue
+    Delayed::Job.enqueue MixpanelWorker.new(name, properties, env), queue: 'mixpanel'
+  end
+end
app/services/commands/mixpanel_worker.rb
@@ -0,0 +1,9 @@
+class MixpanelWorker < Struct.new(:name, :properties, :request_env)
+  MIXPANEL_TOKEN = "7b1aa3b32ab81758228d1c95115cfc7e"
+
+  def perform
+    return unless Rails.env.production?
+    @mixpanel = Mixpanel::Tracker.new(MIXPANEL_TOKEN, { :env => request_env })
+    @mixpanel.track(name, properties)
+  end
+end