Skip to content

Commit

Permalink
Track some basic analytics with Keen.io
Browse files Browse the repository at this point in the history
  • Loading branch information
c-lliope committed Sep 20, 2016
1 parent e2f4349 commit fd61a10
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 8 deletions.
8 changes: 5 additions & 3 deletions .env
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
# https://github.com/ddollar/forego
ASSET_HOST=localhost:3000
APPLICATION_HOST=localhost:3000
ASSET_HOST=localhost:3000
EXECJS_RUNTIME=Node
KEEN_PROJECT_ID=replace_me
KEEN_WRITE_KEY=replace_me
PASSWORD=password
PORT=3000
RACK_ENV=development
RACK_MINI_PROFILER=0
SECRET_KEY_BASE=development_secret
EXECJS_RUNTIME=Node
SMTP_ADDRESS=smtp.example.com
SMTP_DOMAIN=example.com
SMTP_PASSWORD=password
SMTP_USERNAME=username
PASSWORD=password
USERNAME=username
WEB_CONCURRENCY=1
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ gem "pg"
gem "puma"
gem "rack-canonical-host"
gem "rails", "~> 5.0.0"
gem "rails-assets-bowser", source: "https://rails-assets.org"
gem "recipient_interceptor"
gem "redcarpet"
gem "sass-rails", "~> 5.0"
Expand Down
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
actioncable (5.0.0.1)
actionpack (= 5.0.0.1)
Expand Down Expand Up @@ -169,6 +170,7 @@ GEM
bundler (>= 1.3.0, < 2.0)
railties (= 5.0.0.1)
sprockets-rails (>= 2.0.0)
rails-assets-bowser (1.4.5)
rails-dom-testing (2.0.1)
activesupport (>= 4.2.0, < 6.0)
nokogiri (~> 1.6.0)
Expand Down Expand Up @@ -303,6 +305,7 @@ DEPENDENCIES
rack-mini-profiler
rack-timeout
rails (~> 5.0.0)
rails-assets-bowser!
rails_stdout_logging
recipient_interceptor
redcarpet
Expand Down
4 changes: 3 additions & 1 deletion app/assets/javascripts/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//

//= require jquery
//= require jquery_ujs

//= require bowser

//= require_tree .

function getTimeRemaining(endtime){
Expand Down
32 changes: 28 additions & 4 deletions app/views/application/_analytics.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
<% if ENV["SEGMENT_KEY"] %>
<% unless Rails.env.test? %>
<script src="https://d26b395fwzu5fz.cloudfront.net/3.4.1/keen.min.js" type="text/javascript"></script>
<script type="text/javascript">
window.analytics=window.analytics||[],window.analytics.methods=["identify","group","track","page","pageview","alias","ready","on","once","off","trackLink","trackForm","trackClick","trackSubmit"],window.analytics.factory=function(t){return function(){var a=Array.prototype.slice.call(arguments);return a.unshift(t),window.analytics.push(a),window.analytics}};for(var i=0;i<window.analytics.methods.length;i++){var key=window.analytics.methods[i];window.analytics[key]=window.analytics.factory(key)}window.analytics.load=function(t){if(!document.getElementById("analytics-js")){var a=document.createElement("script");a.type="text/javascript",a.id="analytics-js",a.async=!0,a.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n)}},window.analytics.SNIPPET_VERSION="2.0.9",
window.analytics.load("<%= ENV["SEGMENT_KEY"] %>");
window.analytics.page();

var keenClient = new Keen({
projectId: "<%= ENV.fetch('KEEN_PROJECT_ID') %>",
writeKey: "<%= ENV.fetch('KEEN_WRITE_KEY') %>",
});

var pageLoadDate = new Date();
var pageLoadTime = pageLoadDate.getTime();

var pageData = {
client_ip: <%= request.remote_ip.inspect.html_safe %>,
params: <%= params.to_json.html_safe %>,
page_controller_path: "<%= [params[:controller], params[:action]].join('.') %>",
referrer: document.referrer,
browser: bowser,
keen: {
timestamp: pageLoadDate.toISOString()
}
};

keenClient.addEvent("Page Load", pageData);

window.onbeforeunload = function (event) {
pageData.timeSpentInMilliseconds = new Date().getTime() - pageLoadTime;
keenClient.addEvent("Page Unload", pageData);
}
</script>
<% end %>

0 comments on commit fd61a10

Please sign in to comment.