AdminController.coffee 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. metrics = require("metrics-sharelatex")
  2. logger = require('logger-sharelatex')
  3. _ = require('underscore')
  4. User = require('../../models/User').User
  5. Project = require('../../models/Project').Project
  6. DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  7. Settings = require('settings-sharelatex')
  8. util = require('util')
  9. redis = require('redis')
  10. rclient = redis.createClient(Settings.redis.web.port, Settings.redis.web.host)
  11. rclient.auth(Settings.redis.web.password)
  12. RecurlyWrapper = require('../Subscription/RecurlyWrapper')
  13. SubscriptionHandler = require('../Subscription/SubscriptionHandler')
  14. projectEntityHandler = require('../Project/ProjectEntityHandler')
  15. TpdsPollingBackgroundTasks = require("../ThirdPartyDataStore/TpdsPollingBackgroundTasks")
  16. EditorRealTimeController = require("../Editor/EditorRealTimeController")
  17. SystemMessageManager = require("../SystemMessages/SystemMessageManager")
  18. oneMinInMs = 60 * 1000
  19. updateOpenConnetionsMetrics = ()->
  20. metrics.gauge "open_connections.socketio", require("../../infrastructure/Server").io?.sockets?.clients()?.length
  21. metrics.gauge "open_connections.http", _.size(require('http').globalAgent?.sockets)
  22. metrics.gauge "open_connections.https", _.size(require('https').globalAgent?.sockets)
  23. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  24. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  25. module.exports = AdminController =
  26. index : (req, res, next)=>
  27. http = require('http')
  28. openSockets = {}
  29. for url, agents of require('http').globalAgent.sockets
  30. openSockets["http://#{url}"] = (agent._httpMessage.path for agent in agents)
  31. for url, agents of require('https').globalAgent.sockets
  32. openSockets["https://#{url}"] = (agent._httpMessage.path for agent in agents)
  33. SystemMessageManager.getMessagesFromDB (error, systemMessages) ->
  34. return next(error) if error?
  35. res.render 'admin',
  36. title: 'System Admin'
  37. openSockets: openSockets
  38. systemMessages: systemMessages
  39. dissconectAllUsers: (req, res)=>
  40. logger.warn "disconecting everyone"
  41. EditorRealTimeController.emitToAll 'forceDisconnect', "Sorry, we are performing a quick update to the editor and need to close it down. Please refresh the page to continue."
  42. res.send(200)
  43. closeEditor : (req, res)->
  44. logger.warn "closing editor"
  45. Settings.editorIsOpen = req.body.isOpen
  46. res.send(200)
  47. writeAllToMongo : (req, res)->
  48. logger.log "writing all docs to mongo"
  49. Settings.mongo.writeAll = true
  50. DocumentUpdaterHandler.flushAllDocsToMongo ()->
  51. logger.log "all docs have been saved to mongo"
  52. res.send()
  53. syncUserToSubscription: (req, res)->
  54. {user_id, subscription_id} = req.body
  55. RecurlyWrapper.getSubscription subscription_id, {}, (err, subscription)->
  56. User.findById user_id, (err, user)->
  57. SubscriptionHandler.syncSubscriptionToUser subscription, user._id, (err)->
  58. logger.log user_id:user_id, subscription_id:subscription_id, "linked account to subscription"
  59. res.send()
  60. flushProjectToTpds: (req, res)->
  61. projectEntityHandler.flushProjectToThirdPartyDataStore req.body.project_id, (err)->
  62. res.send 200
  63. createMessage: (req, res, next) ->
  64. SystemMessageManager.createMessage req.body.content, (error) ->
  65. return next(error) if error?
  66. res.send 200
  67. clearMessages: (req, res, next) ->
  68. SystemMessageManager.clearMessages (error) ->
  69. return next(error) if error?
  70. res.send 200