AnalyticsManager.coffee 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. settings = require "settings-sharelatex"
  2. logger = require "logger-sharelatex"
  3. _ = require "underscore"
  4. request = require "request"
  5. Errors = require '../Errors/Errors'
  6. makeRequest = (opts, callback)->
  7. retryTimings = [1, 2, 4, 8, 16, 32, 32, 32]
  8. if settings.apis?.analytics?.url?
  9. urlPath = opts.url
  10. opts.url = "#{settings.apis.analytics.url}#{urlPath}"
  11. iteration = 0
  12. _go = () ->
  13. request opts, (err, response, data) ->
  14. if err?
  15. if iteration == retryTimings.length
  16. logger.err {err, url: opts.url},
  17. "Error in analytics request, retries failed"
  18. return callback(err)
  19. backoffSeconds = retryTimings[iteration]
  20. iteration += 1
  21. setTimeout(_go, backoffSeconds * 1000)
  22. else
  23. callback(null, response, data)
  24. _go()
  25. else
  26. callback(new Errors.ServiceNotConfiguredError('Analytics service not configured'))
  27. module.exports =
  28. identifyUser: (user_id, old_user_id, callback = (error)->)->
  29. opts =
  30. body:
  31. old_user_id:old_user_id
  32. json:true
  33. method:"POST"
  34. timeout:1000
  35. url: "/user/#{user_id}/identify"
  36. makeRequest opts, callback
  37. recordEvent: (user_id, event, segmentation = {}, callback = (error) ->) ->
  38. if user_id+"" == settings.smokeTest?.userId+""
  39. return callback()
  40. opts =
  41. body:
  42. event:event
  43. segmentation:segmentation
  44. json:true
  45. method:"POST"
  46. timeout:1000
  47. url: "/user/#{user_id}/event"
  48. if settings.overleaf?
  49. opts.qs = {fromV2: 1}
  50. makeRequest opts, callback
  51. updateEditingSession: (userId, projectId, segmentation = {}, callback = (error) ->) ->
  52. if userId+"" == settings.smokeTest?.userId+""
  53. return callback()
  54. opts =
  55. body:
  56. segmentation: segmentation
  57. json: true
  58. method: "PUT"
  59. timeout: 1000
  60. url: "/editingSession"
  61. qs:
  62. userId: userId
  63. projectId: projectId
  64. if settings.overleaf?
  65. opts.qs.fromV2 = 1
  66. makeRequest opts, callback
  67. getLastOccurance: (user_id, event, callback = (error) ->) ->
  68. opts =
  69. body:
  70. event:event
  71. json:true
  72. method:"POST"
  73. timeout:1000
  74. url: "/user/#{user_id}/event/last_occurnace"
  75. makeRequest opts, (err, response, body)->
  76. if err?
  77. console.log response, opts
  78. logger.err {user_id, err}, "error getting last occurance of event"
  79. return callback err
  80. else
  81. return callback null, body