| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- settings = require "settings-sharelatex"
- logger = require "logger-sharelatex"
- _ = require "underscore"
- request = require "requestretry"
- Errors = require '../Errors/Errors'
- makeFaultTolerantRequest = (userId, options, callback) ->
- if userId+"" == settings.smokeTest?.userId+""
- return callback()
- options = Object.assign(options, {
- delayStrategy: exponentialBackoffStrategy()
- timeout: 30000
- })
- if settings.overleaf?
- options.qs = Object.assign({}, options.qs, { fromV2: 1 })
- makeRequest options, (err) ->
- if err?
- logger.err { err: err }, 'Request to analytics failed'
- callback() # Do not wait for all the attempts
- makeRequest = (opts, callback)->
- if settings.apis?.analytics?.url?
- urlPath = opts.url
- opts.url = "#{settings.apis.analytics.url}#{urlPath}"
- request opts, callback
- else
- callback(new Errors.ServiceNotConfiguredError('Analytics service not configured'))
- # Set an exponential backoff to retry calls to analytics. First retry will
- # happen after 4s, then 8, 16, 32, 64...
- exponentialBackoffStrategy = () ->
- attempts = 1 # This won't be called until there has been 1 failure
- () ->
- attempts += 1
- exponentialBackoffDelay(attempts)
- exponentialBackoffDelay = (attempts) ->
- delay = 2 ** attempts * 1000
- logger.warn "Error comunicating with the analytics service. " +
- "Will try again attempt #{attempts} in #{delay}ms"
- delay
- module.exports =
- identifyUser: (user_id, old_user_id, callback = (error)->)->
- opts =
- body:
- old_user_id:old_user_id
- json:true
- method:"POST"
- timeout:1000
- url: "/user/#{user_id}/identify"
- makeRequest opts, callback
- recordEvent: (user_id, event, segmentation = {}, callback = (error) ->) ->
- opts =
- body:
- event:event
- segmentation:segmentation
- json:true
- method:"POST"
- url: "/user/#{user_id}/event"
- maxAttempts: 7 # Give up after ~ 8min
- makeFaultTolerantRequest user_id, opts, callback
- updateEditingSession: (userId, projectId, countryCode, callback = (error) ->) ->
- query =
- userId: userId
- projectId: projectId
- if countryCode
- query.countryCode = countryCode
- opts =
- method: "PUT"
- url: "/editingSession"
- qs: query
- maxAttempts: 6 # Give up after ~ 4min
- makeFaultTolerantRequest userId, opts, callback
- getLastOccurrence: (user_id, event, callback = (error) ->) ->
- opts =
- body:
- event:event
- json:true
- method:"POST"
- timeout:1000
- url: "/user/#{user_id}/event/last_occurrence"
- makeRequest opts, (err, response, body)->
- if err?
- console.log response, opts
- logger.err {user_id, err}, "error getting last occurance of event"
- return callback err
- else
- return callback null, body
|