|
@@ -5,6 +5,7 @@ const async = require('async')
|
|
|
const Settings = require('settings-sharelatex')
|
|
const Settings = require('settings-sharelatex')
|
|
|
const logger = require('logger-sharelatex')
|
|
const logger = require('logger-sharelatex')
|
|
|
const redis = require('redis-sharelatex')
|
|
const redis = require('redis-sharelatex')
|
|
|
|
|
+const OError = require('@overleaf/o-error')
|
|
|
const rclient = redis.createClient(Settings.redis.realtime)
|
|
const rclient = redis.createClient(Settings.redis.realtime)
|
|
|
const Keys = Settings.redis.realtime.key_schema
|
|
const Keys = Settings.redis.realtime.key_schema
|
|
|
|
|
|
|
@@ -67,10 +68,7 @@ module.exports = {
|
|
|
|
|
|
|
|
multi.exec(function (err) {
|
|
multi.exec(function (err) {
|
|
|
if (err) {
|
|
if (err) {
|
|
|
- logger.err(
|
|
|
|
|
- { err, project_id, client_id },
|
|
|
|
|
- 'problem marking user as connected'
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ OError.tag(err, 'problem marking user as connected')
|
|
|
}
|
|
}
|
|
|
callback(err)
|
|
callback(err)
|
|
|
})
|
|
})
|
|
@@ -104,7 +102,12 @@ module.exports = {
|
|
|
multi.srem(Keys.clientsInProject({ project_id }), client_id)
|
|
multi.srem(Keys.clientsInProject({ project_id }), client_id)
|
|
|
multi.expire(Keys.clientsInProject({ project_id }), FOUR_DAYS_IN_S)
|
|
multi.expire(Keys.clientsInProject({ project_id }), FOUR_DAYS_IN_S)
|
|
|
multi.del(Keys.connectedUser({ project_id, client_id }))
|
|
multi.del(Keys.connectedUser({ project_id, client_id }))
|
|
|
- multi.exec(callback)
|
|
|
|
|
|
|
+ multi.exec(function (err) {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ OError.tag(err, 'problem marking user as disconnected')
|
|
|
|
|
+ }
|
|
|
|
|
+ callback(err)
|
|
|
|
|
+ })
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
_getConnectedUser(project_id, client_id, callback) {
|
|
_getConnectedUser(project_id, client_id, callback) {
|
|
@@ -112,6 +115,12 @@ module.exports = {
|
|
|
err,
|
|
err,
|
|
|
result
|
|
result
|
|
|
) {
|
|
) {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ OError.tag(err, 'problem fetching connected user details', {
|
|
|
|
|
+ other_client_id: client_id
|
|
|
|
|
+ })
|
|
|
|
|
+ return callback(err)
|
|
|
|
|
+ }
|
|
|
if (!(result && result.user_id)) {
|
|
if (!(result && result.user_id)) {
|
|
|
result = {
|
|
result = {
|
|
|
connected: false,
|
|
connected: false,
|
|
@@ -126,15 +135,10 @@ module.exports = {
|
|
|
try {
|
|
try {
|
|
|
result.cursorData = JSON.parse(result.cursorData)
|
|
result.cursorData = JSON.parse(result.cursorData)
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
- logger.error(
|
|
|
|
|
- {
|
|
|
|
|
- err: e,
|
|
|
|
|
- project_id,
|
|
|
|
|
- client_id,
|
|
|
|
|
- cursorData: result.cursorData
|
|
|
|
|
- },
|
|
|
|
|
- 'error parsing cursorData JSON'
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ OError.tag(e, 'error parsing cursorData JSON', {
|
|
|
|
|
+ other_client_id: client_id,
|
|
|
|
|
+ cursorData: result.cursorData
|
|
|
|
|
+ })
|
|
|
return callback(e)
|
|
return callback(e)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -150,6 +154,7 @@ module.exports = {
|
|
|
results
|
|
results
|
|
|
) {
|
|
) {
|
|
|
if (err) {
|
|
if (err) {
|
|
|
|
|
+ OError.tag(err, 'problem getting clients in project')
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
const jobs = results.map((client_id) => (cb) =>
|
|
const jobs = results.map((client_id) => (cb) =>
|
|
@@ -157,6 +162,7 @@ module.exports = {
|
|
|
)
|
|
)
|
|
|
async.series(jobs, function (err, users) {
|
|
async.series(jobs, function (err, users) {
|
|
|
if (err) {
|
|
if (err) {
|
|
|
|
|
+ OError.tag(err, 'problem getting connected users')
|
|
|
return callback(err)
|
|
return callback(err)
|
|
|
}
|
|
}
|
|
|
users = users.filter(
|
|
users = users.filter(
|