overleaf/services/web/app/coffee/Features/ThirdPartyDataStore/TpdsPollingBackgroundTasks.coffee

35 lines
1.3 KiB
CoffeeScript

User = require('../../models/User').User
settings = require('settings-sharelatex')
request = require "request"
logger = require('logger-sharelatex')
redis = require('redis')
rclient = redis.createClient(settings.redis.web.port, settings.redis.web.host)
rclient.auth(settings.redis.web.password)
LAST_TIME_POLL_HAPPEND_KEY = "LAST_TIME_POLL_HAPPEND_KEY"
self = module.exports =
pollUsersWithDropbox: (callback)->
self._getUserIdsWithDropbox (err, user_ids)=>
logger.log user_ids:user_ids, userCount:user_ids.length, "telling tpds to poll users with dropbox"
self._markPollHappened()
self._sendToTpds user_ids, callback
_sendToTpds : (user_ids, callback)->
if user_ids.length > 0
request.post {uri:"#{settings.apis.thirdPartyDataStore.url}/user/poll", json:{user_ids:user_ids}}, callback
else if callback?
callback()
_getUserIdsWithDropbox: (callback)->
User.find {"dropbox.access_token.oauth_token_secret":{"$exists":true}, "features.dropbox":true}, "_id", (err, users)->
ids = users.map (user)->
return user._id+""
callback err, ids
_markPollHappened: (callback)->
rclient.set LAST_TIME_POLL_HAPPEND_KEY, new Date().getTime(), callback
getLastTimePollHappned: (callback = (err, lastTimePollHappened)->)->
rclient.get LAST_TIME_POLL_HAPPEND_KEY, callback