AnalyticsManager.coffee 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. Settings = require 'settings-sharelatex'
  2. if Settings.analytics?.mixpanel?
  3. Mixpanel = require("mixpanel").init(Settings.analytics.mixpanel.token)
  4. else
  5. Mixpanel = null
  6. logger = require "logger-sharelatex"
  7. async = require 'async'
  8. module.exports = AnalyticsManager =
  9. track: (user, event, properties, callback = (error)->) ->
  10. properties.distinct_id = @getDistinctId user
  11. properties.mp_name_tag = user.email if user.email?
  12. logger.log user_id: properties.distinct_id, event: event, properties: properties, "tracking event"
  13. Mixpanel?.track event, properties
  14. callback()
  15. set: (user, properties, callback = (error)->) ->
  16. properties["$first_name"] = user.first_name if user.first_name?
  17. properties["$last_name"] = user.last_name if user.last_name?
  18. properties["$email"] = user.email if user.email?
  19. Mixpanel?.people.set @getDistinctId(user), properties
  20. callback()
  21. increment: (user, property, amount, callback = (error)->) ->
  22. Mixpanel?.people.increment @getDistinctId(user), property, amount
  23. callback()
  24. # TODO: Remove this one month after the ability to start free trials was removed
  25. trackFreeTrialExpired: (user, callback = (error)->) ->
  26. async.series [
  27. (callback) => @track user, "free trial expired", {}, callback
  28. (callback) => @set user, { free_trial_expired_at: new Date() }, callback
  29. ], callback
  30. trackSubscriptionStarted: (user, plan_code, callback = (error)->) ->
  31. async.series [
  32. (callback) => @track user, "subscribed", plan_code: plan_code, callback
  33. (callback) => @set user, { plan_code: plan_code, subscribed_at: new Date() }, callback
  34. ], callback
  35. trackSubscriptionCancelled: (user, callback = (error)->) ->
  36. async.series [
  37. (callback) => @track user, "cancelled", callback
  38. (callback) => @set user, { cancelled_at: new Date() }, callback
  39. ], callback
  40. trackLogIn: (user, callback = (error)->) ->
  41. async.series [
  42. (callback) => @track user, "logged in", {}, callback
  43. (callback) => @set user, { last_logged_id: new Date() }, callback
  44. ], callback
  45. trackOpenEditor: (user, project, callback = (error)->) ->
  46. async.series [
  47. (callback) => @set user, { last_opened_editor: new Date() }, callback
  48. (callback) => @increment user, "editor_opens", 1, callback
  49. ], callback
  50. trackReferral: (user, referal_source, referal_medium, callback = (error) ->) ->
  51. async.series [
  52. (callback) =>
  53. @track user, "Referred another user", { source: referal_source, medium: referal_medium }, callback
  54. (callback) =>
  55. @track user, "Referred another user via #{referal_source}", { medium: referal_medium }, callback
  56. ], callback
  57. getDistinctId: (user) -> user.id || user._id || user