AnalyticsManager.coffee 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. Settings = require "settings-sharelatex"
  2. logger = require "logger-sharelatex"
  3. _ = require "underscore"
  4. if !Settings.analytics?.postgres?
  5. module.exports =
  6. recordEvent: (user_id, event, segmentation, callback = () ->) ->
  7. logger.log {user_id, event, segmentation}, "no event tracking configured, logging event"
  8. callback()
  9. else
  10. Sequelize = require "sequelize"
  11. options = _.extend {logging:false}, Settings.analytics.postgres
  12. sequelize = new Sequelize(
  13. Settings.analytics.postgres.database,
  14. Settings.analytics.postgres.username,
  15. Settings.analytics.postgres.password,
  16. options
  17. )
  18. Event = sequelize.define("Event", {
  19. user_id: Sequelize.STRING,
  20. event: Sequelize.STRING,
  21. segmentation: Sequelize.JSONB
  22. })
  23. module.exports =
  24. recordEvent: (user_id, event, segmentation = {}, callback = (error) ->) ->
  25. if user_id? and typeof(user_id) != "string"
  26. user_id = user_id.toString()
  27. if user_id == Settings.smokeTest?.userId
  28. # Don't record smoke tests analytics
  29. return callback()
  30. Event
  31. .create({ user_id, event, segmentation })
  32. .then(
  33. (result) -> callback(),
  34. (error) ->
  35. logger.err {err: error, user_id, event, segmentation}, "error recording analytics event"
  36. callback(error)
  37. )
  38. sync: () -> sequelize.sync()