AdminController.coffee 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. logger = require('logger-sharelatex')
  2. _ = require('underscore')
  3. User = require('../models/User').User
  4. Quote = require('../models/Quote').Quote
  5. Project = require('../models/Project').Project
  6. DocumentUpdaterHandler = require('../Features/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('../Features/Subscription/RecurlyWrapper')
  13. SubscriptionHandler = require('../Features/Subscription/SubscriptionHandler')
  14. projectEntityHandler = require('../Features/Project/ProjectEntityHandler')
  15. TpdsPollingBackgroundTasks = require("../Features/ThirdPartyDataStore/TpdsPollingBackgroundTasks")
  16. EditorRealTimeController = require("../Features/Editor/EditorRealTimeController")
  17. module.exports = AdminController =
  18. index : (req, res)=>
  19. http = require('http')
  20. openSockets = {}
  21. for url, agents of require('http').globalAgent.sockets
  22. openSockets["http://#{url}"] = (agent._httpMessage.path for agent in agents)
  23. for url, agents of require('https').globalAgent.sockets
  24. openSockets["https://#{url}"] = (agent._httpMessage.path for agent in agents)
  25. memory = process.memoryUsage()
  26. io = require("../infrastructure/Server").io
  27. allUsers = io.sockets.clients()
  28. users = []
  29. allUsers.forEach (user)->
  30. u = {}
  31. user.get "email", (err, email)->
  32. u.email = email
  33. user.get "first_name", (err, first_name)->
  34. u.first_name = first_name
  35. user.get "last_name", (err, last_name)->
  36. u.last_name = last_name
  37. user.get "project_id", (err, project_id)->
  38. u.project_id = project_id
  39. user.get "user_id", (err, user_id)->
  40. u.user_id = user_id
  41. user.get "signup_date", (err, signup_date)->
  42. u.signup_date = signup_date
  43. user.get "login_count", (err, login_count)->
  44. u.login_count = login_count
  45. user.get "connected_time", (err, connected_time)->
  46. now = new Date()
  47. connected_mins = (((now - new Date(connected_time))/1000)/60).toFixed(2)
  48. u.connected_mins = connected_mins
  49. users.push u
  50. d = new Date()
  51. today = d.getDate()+":"+(d.getMonth()+1)+":"+d.getFullYear()+":"
  52. yesterday = (d.getDate()-1)+":"+(d.getMonth()+1)+":"+d.getFullYear()+":"
  53. multi = rclient.multi()
  54. multi.get today+"docsets"
  55. multi.get yesterday+"docsets"
  56. multi.exec (err, replys)->
  57. redisstats =
  58. today:
  59. docsets: replys[0]
  60. compiles: replys[1]
  61. yesterday:
  62. docsets: replys[2]
  63. compiles: replys[3]
  64. DocumentUpdaterHandler.getNumberOfDocsInMemory (err, numberOfInMemoryDocs)=>
  65. User.count (err, totalUsers)->
  66. Project.count (err, totalProjects)->
  67. res.render 'admin',
  68. title: 'System Admin'
  69. currentConnectedUsers:allUsers.length
  70. users: users
  71. numberOfAceDocs : numberOfInMemoryDocs
  72. totalUsers: totalUsers
  73. totalProjects: totalProjects
  74. openSockets: openSockets
  75. redisstats: redisstats
  76. dissconectAllUsers: (req, res)=>
  77. logger.warn "disconecting everyone"
  78. 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."
  79. res.send(200)
  80. closeEditor : (req, res)->
  81. logger.warn "closing editor"
  82. Settings.editorIsOpen = req.body.isOpen
  83. res.send(200)
  84. writeAllToMongo : (req, res)->
  85. logger.log "writing all docs to mongo"
  86. Settings.mongo.writeAll = true
  87. DocumentUpdaterHandler.flushAllDocsToMongo ()->
  88. logger.log "all docs have been saved to mongo"
  89. res.send()
  90. addQuote : (req, res)->
  91. quote = new Quote
  92. author: req.body.author
  93. quote: req.body.quote
  94. quote.save (err)->
  95. res.send 200
  96. syncUserToSubscription: (req, res)->
  97. {user_id, subscription_id} = req.body
  98. RecurlyWrapper.getSubscription subscription_id, {}, (err, subscription)->
  99. User.findById user_id, (err, user)->
  100. SubscriptionHandler.syncSubscriptionToUser subscription, user._id, (err)->
  101. logger.log user_id:user_id, subscription_id:subscription_id, "linked account to subscription"
  102. res.send()
  103. flushProjectToTpds: (req, res)->
  104. projectEntityHandler.flushProjectToThirdPartyDataStore req.body.project_id, (err)->
  105. res.send 200
  106. pollUsersWithDropbox: (req, res)->
  107. TpdsPollingBackgroundTasks.pollUsersWithDropbox ->
  108. res.send 200
  109. updateProjectCompiler: (req, res, next = (error) ->)->
  110. Project.findOne _id: req.body.project_id, (error, project) ->
  111. return next(error) if error?
  112. project.useClsi2 = (req.body.new == "new")
  113. logger.log project_id: req.body.project_id, useClsi2: project.useClsi2, "updating project compiler"
  114. project.save (error) ->
  115. return next(error) if error?
  116. res.send(200)