loadTest.coffee 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. request = require "request"
  2. Settings = require "settings-sharelatex"
  3. async = require("async")
  4. fs = require("fs")
  5. _ = require("underscore")
  6. concurentCompiles = 5
  7. totalCompiles = 50
  8. buildUrl = (path) -> "http://#{Settings.internal.clsi.host}:#{Settings.internal.clsi.port}/#{path}"
  9. mainTexContent = fs.readFileSync("./bulk.tex", "utf-8")
  10. compileTimes = []
  11. failedCount = 0
  12. getAverageCompileTime = ->
  13. totalTime = _.reduce compileTimes, (sum, time)->
  14. sum + time
  15. , 0
  16. return totalTime / compileTimes.length
  17. makeRequest = (compileNumber, callback)->
  18. bulkBodyCount = 7
  19. bodyContent = ""
  20. while --bulkBodyCount
  21. bodyContent = bodyContent+=mainTexContent
  22. startTime = new Date()
  23. request.post {
  24. url: buildUrl("project/loadcompile-#{compileNumber}/compile")
  25. json:
  26. compile:
  27. resources: [
  28. path: "main.tex"
  29. content: """
  30. \\documentclass{article}
  31. \\begin{document}
  32. #{bodyContent}
  33. \\end{document}
  34. """
  35. ]
  36. }, (err, response, body)->
  37. if response.statusCode != 200
  38. failedCount++
  39. return callback("compile #{compileNumber} failed")
  40. if err?
  41. failedCount++
  42. return callback("failed")
  43. totalTime = new Date() - startTime
  44. console.log totalTime+"ms"
  45. compileTimes.push(totalTime)
  46. callback(err)
  47. jobs = _.map [1..totalCompiles], (i)->
  48. return (cb)->
  49. makeRequest(i, cb)
  50. startTime = new Date()
  51. async.parallelLimit jobs, concurentCompiles, (err)->
  52. if err?
  53. console.error err
  54. console.log("total time taken = #{(new Date() - startTime)/1000}s")
  55. console.log("total compiles = #{totalCompiles}")
  56. console.log("concurent compiles = #{concurentCompiles}")
  57. console.log("average time = #{getAverageCompileTime()/1000}s")
  58. console.log("max time = #{_.max(compileTimes)/1000}s")
  59. console.log("min time = #{_.min(compileTimes)/1000}s")
  60. console.log("total failures = #{failedCount}")