From f7b4a04a590ade26871abc726ade2c666176488e Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Mon, 10 Feb 2014 11:35:33 -0700 Subject: [PATCH] feat(event-tracking): add server-side GA tracking for ecommerce events --- config.json.example | 3 ++- package.json | 3 ++- public/js/controllers/footerCtrl.js | 2 +- src/controllers/user.js | 5 +++++ src/middleware.js | 1 + src/utils.js | 4 ++++ 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/config.json.example b/config.json.example index f63a71703e..da9b3bb238 100644 --- a/config.json.example +++ b/config.json.example @@ -17,5 +17,6 @@ "STRIPE_API_KEY":"aaaabbbbccccddddeeeeffff00001111", "STRIPE_PUB_KEY":"22223333444455556666777788889999", "PAYPAL_MERCHANT":"paypal-merchant@gmail.com", - "NEW_RELIC_LICENSE_KEY":"NEW_RELIC_LICENSE_KEY" + "NEW_RELIC_LICENSE_KEY":"NEW_RELIC_LICENSE_KEY", + "GA_ID": "GA_ID" } diff --git a/package.json b/package.json index a529116deb..b3a788169d 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ "winston": "~0.7.2", "winston-mail": "~0.2.7", "winston-newrelic": "~0.1.4", - "domain-middleware": "~0.1.0" + "domain-middleware": "~0.1.0", + "universal-analytics": "~0.3.2" }, "private": true, "subdomain": "habitrpg", diff --git a/public/js/controllers/footerCtrl.js b/public/js/controllers/footerCtrl.js index bcdd7ea6a5..5d2fa238e6 100644 --- a/public/js/controllers/footerCtrl.js +++ b/public/js/controllers/footerCtrl.js @@ -20,7 +20,7 @@ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - ga('create', 'UA-33510635-1', 'habitrpg.com'); + ga('create', window.env.GA_ID, 'habitrpg.com'); ga('send', 'pageview'); } diff --git a/src/controllers/user.js b/src/controllers/user.js index f580f0f360..9ca65c1056 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -10,6 +10,7 @@ var validator = require('validator'); var check = validator.check; var sanitize = validator.sanitize; var User = require('./../models/user').model; +var ga = require('./../utils').ga; var Group = require('./../models/group').model; var Challenge = require('./../models/challenge').model; var logging = require('./../logging'); @@ -294,6 +295,7 @@ api.buyGems = function(req, res, next) { function(response, cb) { //user.purchased.ads = true; if (req.query.plan) { + ga.event('subscribe', 'Stripe').send() user.purchased.plan = { planId:'basic_earned', customerId: response.id, @@ -302,6 +304,7 @@ api.buyGems = function(req, res, next) { gemsBought: 0 }; } else { + ga.event('checkout', 'Stripe').send() user.balance += 5; } user.save(cb); @@ -331,6 +334,7 @@ api.cancelSubscription = function(req, res, next) { ], function(err, saved){ if (err) return res.send(500, err.toString()); // don't json this, let toString() handle errors res.send(200, saved); + ga.event('unsubscribe', 'Stripe').send() }); } @@ -351,6 +355,7 @@ api.buyGemsPaypalIPN = function(req, res, next) { //user.purchased.ads = true; user.save(); logging.info('PayPal transaction completed and user updated'); + ga.event('checkout', 'PayPal').send() }); } }); diff --git a/src/middleware.js b/src/middleware.js index e4e871b887..cce035bc14 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -234,6 +234,7 @@ module.exports.locals = function(req, res, next) { NODE_ENV: nconf.get('NODE_ENV'), BASE_URL: nconf.get('BASE_URL'), PAYPAL_MERCHANT: nconf.get('PAYPAL_MERCHANT'), + GA_ID: nconf.get("GA_ID"), IS_MOBILE: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')), STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'), getManifestFiles: getManifestFiles, diff --git a/src/utils.js b/src/utils.js index fd29e8f4e8..b5f51ccb91 100644 --- a/src/utils.js +++ b/src/utils.js @@ -3,6 +3,8 @@ var nconf = require('nconf'); var crypto = require('crypto'); var path = require("path"); +module.exports.ga = undefined; // set Google Analytics on nconf init + module.exports.sendEmail = function(mailData) { var smtpTransport = nodemailer.createTransport("SMTP",{ service: nconf.get('SMTP_SERVICE'), @@ -45,4 +47,6 @@ module.exports.setupConfig = function(){ Error.stackTraceLimit = Infinity; if (nconf.get('NODE_ENV') === 'production') require('newrelic'); + + module.exports.ga = require('universal-analytics')(nconf.get('GA_ID')); }; \ No newline at end of file