From 6a210978fe312ce9720e4c937cf998a01beb87c3 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Thu, 11 Aug 2016 12:29:58 +0100 Subject: [PATCH 1/3] Track registration events. --- .../web/app/coffee/Features/User/UserRegistrationHandler.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee index 75a9debba4..f5db2e54a1 100644 --- a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee +++ b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee @@ -8,6 +8,7 @@ logger = require("logger-sharelatex") crypto = require("crypto") EmailHandler = require("../Email/EmailHandler") OneTimeTokenHandler = require "../Security/OneTimeTokenHandler" +Analytics = require "../Analytics/AnalyticsManager" settings = require "settings-sharelatex" module.exports = UserRegistrationHandler = @@ -62,6 +63,7 @@ module.exports = UserRegistrationHandler = cb() #this can be slow, just fire it off ], (err)-> logger.log user: user, "registered" + Analytics.recordEvent user._id, "user-registered" callback(err, user) registerNewUserAndSendActivationEmail: (email, callback = (error, user, setNewPasswordUrl) ->) -> From 9bf9df9a4a822cdc67cf3f63962adb3f2df74b14 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Thu, 11 Aug 2016 14:09:45 +0100 Subject: [PATCH 2/3] Track login events. --- .../Features/Authentication/AuthenticationController.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee b/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee index d75bef5207..4972144737 100644 --- a/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee +++ b/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee @@ -10,6 +10,7 @@ Settings = require "settings-sharelatex" basicAuth = require('basic-auth-connect') UserHandler = require("../User/UserHandler") UserSessionsManager = require("../User/UserSessionsManager") +Analytics = require "../Analytics/AnalyticsManager" module.exports = AuthenticationController = login: (req, res, next = (error) ->) -> @@ -37,6 +38,7 @@ module.exports = AuthenticationController = return next(error) if error? req.session.justLoggedIn = true logger.log email: email, user_id: user._id.toString(), "successful log in" + Analytics.recordEvent user._id, "user-logged-in" res.json redir: redir else AuthenticationController._recordFailedLogin() From 228de5332e625c42347452cacdede5f2673edad1 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Thu, 11 Aug 2016 14:09:57 +0100 Subject: [PATCH 3/3] Unit test tracking code. --- .../Authentication/AuthenticationControllerTests.coffee | 6 ++++++ .../coffee/User/UserRegistrationHandlerTests.coffee | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/services/web/test/UnitTests/coffee/Authentication/AuthenticationControllerTests.coffee b/services/web/test/UnitTests/coffee/Authentication/AuthenticationControllerTests.coffee index 4e9b248f25..86c5e5840f 100644 --- a/services/web/test/UnitTests/coffee/Authentication/AuthenticationControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Authentication/AuthenticationControllerTests.coffee @@ -19,6 +19,7 @@ describe "AuthenticationController", -> "../../infrastructure/Metrics": @Metrics = { inc: sinon.stub() } "../Security/LoginRateLimiter": @LoginRateLimiter = { processLoginRequest:sinon.stub(), recordSuccessfulLogin:sinon.stub() } "../User/UserHandler": @UserHandler = {setupLoginData:sinon.stub()} + "../Analytics/AnalyticsManager": @AnalyticsManager = { recordEvent: sinon.stub() } "logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() } "settings-sharelatex": {} "../User/UserSessionsManager": @UserSessionsManager = @@ -100,6 +101,11 @@ describe "AuthenticationController", -> .calledWith(email: @email.toLowerCase(), user_id: @user._id.toString(), "successful log in") .should.equal true + it "should track the login event", -> + @AnalyticsManager.recordEvent + .calledWith(@user._id, "user-logged-in") + .should.equal true + describe 'when the user is not authenticated', -> beforeEach -> diff --git a/services/web/test/UnitTests/coffee/User/UserRegistrationHandlerTests.coffee b/services/web/test/UnitTests/coffee/User/UserRegistrationHandlerTests.coffee index ec220e27f8..d0b96da2de 100644 --- a/services/web/test/UnitTests/coffee/User/UserRegistrationHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/User/UserRegistrationHandlerTests.coffee @@ -33,6 +33,7 @@ describe "UserRegistrationHandler", -> "crypto": @crypto = {} "../Email/EmailHandler": @EmailHandler "../Security/OneTimeTokenHandler": @OneTimeTokenHandler + "../Analytics/AnalyticsManager": @AnalyticsManager = { recordEvent: sinon.stub() } "settings-sharelatex": @settings = {siteUrl: "http://sl.example.com"} @passingRequest = {email:"something@email.com", password:"123"} @@ -132,6 +133,13 @@ describe "UserRegistrationHandler", -> @NewsLetterManager.subscribe.calledWith(@user).should.equal true done() + it "should track the registration event", (done)-> + @handler.registerNewUser @passingRequest, (err)=> + @AnalyticsManager.recordEvent + .calledWith(@user._id, "user-registered") + .should.equal true + done() + it "should call the ReferalAllocator", (done)-> done()