diff --git a/package.json b/package.json index b3f6a16acd..57b8a4cbc9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./website/src/server.js", "dependencies": { "amazon-payments": "0.0.4", - "amplitude": "^1.0.6", + "amplitude": "^2.0.1", "async": "~0.9.0", "aws-sdk": "^2.0.25", "babel": "^5.5.4", diff --git a/test/server_side/analytics.test.js b/test/server_side/analytics.test.js index 96caeca914..c010442a14 100644 --- a/test/server_side/analytics.test.js +++ b/test/server_side/analytics.test.js @@ -8,7 +8,9 @@ describe('analytics', function() { // Mocks var amplitudeMock = sinon.stub(); var googleAnalyticsMock = sinon.stub(); - var amplitudeTrack = sinon.stub(); + var amplitudeTrack = sinon.stub().returns({ + catch: function () { return true; } + }); var googleEvent = sinon.stub().returns({ send: function() { } }); diff --git a/website/src/analytics.js b/website/src/analytics.js index 82e6e5a956..19a8a9b14c 100644 --- a/website/src/analytics.js +++ b/website/src/analytics.js @@ -24,14 +24,16 @@ function init(options) { } function track(eventType, data) { - //_sendDataToAmplitude(eventType, data); + _sendDataToAmplitude(eventType, data); _sendDataToGoogle(eventType, data); } function _sendDataToAmplitude(eventType, data) { var amplitudeData = _formatDataForAmplitude(data); amplitudeData.event_type = eventType; - amplitude.track(amplitudeData); + amplitude.track(amplitudeData).catch(function(error) { + // @TODO log error with new relic + }); } function _sendDataToGoogle(eventType, data) { @@ -78,7 +80,7 @@ function _generateValueForGoogleAnalytics(data) { } function trackPurchase(data) { - //_sendPurchaseDataToAmplitude(data); + _sendPurchaseDataToAmplitude(data); _sendPurchaseDataToGoogle(data); } @@ -87,7 +89,9 @@ function _sendPurchaseDataToAmplitude(data) { amplitudeData.event_type = 'purchase'; amplitudeData.revenue = data.purchaseValue; - amplitude.track(amplitudeData) + amplitude.track(amplitudeData).catch(function(error) { + // @TODO log error with new relic + }); } function _formatDataForAmplitude(data) { @@ -95,7 +99,7 @@ function _formatDataForAmplitude(data) { var event_properties = _.omit(data, PROPERTIES_TO_SCRUB); var ampData = { - user_id: data.uuid, + user_id: data.uuid || 'no-user-id-was-provided', platform: 'server', event_properties: event_properties } diff --git a/website/src/controllers/auth.js b/website/src/controllers/auth.js index b9bea19b51..a416bebd88 100644 --- a/website/src/controllers/auth.js +++ b/website/src/controllers/auth.js @@ -118,7 +118,8 @@ api.registerUser = function(req, res, next) { var analyticsData = { category: 'acquisition', type: 'local', - gaLabel: 'local' + gaLabel: 'local', + uuid: user._id, }; analytics.track('register', analyticsData) @@ -145,9 +146,9 @@ api.registerUser = function(req, res, next) { api.loginLocal = function(req, res, next) { var username = req.body.username; - var password = req.body.password; + var password = req.body.password; if (!(username && password)) return res.json(401, {err:'Missing :username or :password in request body, please provide both'}); - var login = validator.isEmail(username) ? + var login = validator.isEmail(username) ? {'auth.local.email':username.toLowerCase()} : // Emails are all lowercase {'auth.local.username':username}; // Use the username as the user typed it @@ -212,7 +213,8 @@ api.loginSocial = function(req, res, next) { var analyticsData = { category: 'acquisition', type: network, - gaLabel: network + gaLabel: network, + uuid: user._id, }; analytics.track('register', analyticsData) }] @@ -276,9 +278,9 @@ var invalidPassword = function(user, password){ api.changeUsername = function(req, res, next) { var user = res.locals.user; - var username = req.body.username; + var username = req.body.username; var lowerCaseUsername = username && username.toLowerCase(); // we search for the lowercased version to intercept duplicates - + if(!username) return res.json(400, {err: "Username not provided"}); async.waterfall([ function(cb){ @@ -352,7 +354,7 @@ api.getFirebaseToken = function(req, res, next) { .createToken({ uid: user._id, isHabiticaUser: true - }, { + }, { expires: expires }); diff --git a/website/src/controllers/groups.js b/website/src/controllers/groups.js index 573142887c..c96a6420b1 100644 --- a/website/src/controllers/groups.js +++ b/website/src/controllers/groups.js @@ -912,7 +912,8 @@ api.questAccept = function(req, res, next) { owner: true, response: 'accept', gaLabel: 'accept', - questName: key + questName: key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[m] = true; @@ -958,7 +959,8 @@ api.questAccept = function(req, res, next) { owner: false, response: 'accept', gaLabel: 'accept', - questName: group.quest.key + questName: group.quest.key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[user._id] = true; @@ -977,7 +979,8 @@ api.questReject = function(req, res, next) { owner: false, response: 'reject', gaLabel: 'reject', - questName: group.quest.key + questName: group.quest.key, + uuid: user._id, }; analytics.track('quest',analyticsData); group.quest.members[user._id] = false;