AdminController.coffee 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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-sharelatex")
  10. rclient = redis.createClient(Settings.redis.web)
  11. RecurlyWrapper = require('../Subscription/RecurlyWrapper')
  12. SubscriptionHandler = require('../Subscription/SubscriptionHandler')
  13. projectEntityHandler = require('../Project/ProjectEntityHandler')
  14. TpdsUpdateSender = require("../ThirdPartyDataStore/TpdsUpdateSender")
  15. EditorRealTimeController = require("../Editor/EditorRealTimeController")
  16. SystemMessageManager = require("../SystemMessages/SystemMessageManager")
  17. oneMinInMs = 60 * 1000
  18. updateOpenConnetionsMetrics = ()->
  19. metrics.gauge "open_connections.socketio", require("../../infrastructure/Server").io?.sockets?.clients()?.length
  20. metrics.gauge "open_connections.http", _.size(require('http').globalAgent?.sockets)
  21. metrics.gauge "open_connections.https", _.size(require('https').globalAgent?.sockets)
  22. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  23. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  24. module.exports = AdminController =
  25. index : (req, res, next)=>
  26. http = require('http')
  27. openSockets = {}
  28. for url, agents of require('http').globalAgent.sockets
  29. openSockets["http://#{url}"] = (agent._httpMessage.path for agent in agents)
  30. for url, agents of require('https').globalAgent.sockets
  31. openSockets["https://#{url}"] = (agent._httpMessage.path for agent in agents)
  32. SystemMessageManager.getMessagesFromDB (error, systemMessages) ->
  33. return next(error) if error?
  34. res.render 'admin/index',
  35. title: 'System Admin'
  36. openSockets: openSockets
  37. systemMessages: systemMessages
  38. registerNewUser: (req, res, next) ->
  39. res.render 'admin/register'
  40. dissconectAllUsers: (req, res)=>
  41. logger.warn "disconecting everyone"
  42. 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."
  43. res.send(200)
  44. closeEditor : (req, res)->
  45. logger.warn "closing editor"
  46. Settings.editorIsOpen = req.body.isOpen
  47. res.send(200)
  48. writeAllToMongo : (req, res)->
  49. logger.log "writing all docs to mongo"
  50. Settings.mongo.writeAll = true
  51. DocumentUpdaterHandler.flushAllDocsToMongo ()->
  52. logger.log "all docs have been saved to mongo"
  53. res.send()
  54. syncUserToSubscription: (req, res)->
  55. {user_id, subscription_id} = req.body
  56. RecurlyWrapper.getSubscription subscription_id, {}, (err, subscription)->
  57. User.findById user_id, (err, user)->
  58. SubscriptionHandler.syncSubscriptionToUser subscription, user._id, (err)->
  59. logger.log user_id:user_id, subscription_id:subscription_id, "linked account to subscription"
  60. res.send()
  61. flushProjectToTpds: (req, res)->
  62. projectEntityHandler.flushProjectToThirdPartyDataStore req.body.project_id, (err)->
  63. res.send 200
  64. pollDropboxForUser: (req, res)->
  65. user_id = req.body.user_id
  66. TpdsUpdateSender.pollDropboxForUser user_id, () ->
  67. res.send 200
  68. createMessage: (req, res, next) ->
  69. SystemMessageManager.createMessage req.body.content, (error) ->
  70. return next(error) if error?
  71. res.send 200
  72. clearMessages: (req, res, next) ->
  73. SystemMessageManager.clearMessages (error) ->
  74. return next(error) if error?
  75. res.send 200