overleaf/services/clsi/test/load/coffee/loadTest.coffee
2015-06-12 17:11:03 +01:00

71 lines
1.8 KiB
CoffeeScript

request = require "request"
Settings = require "settings-sharelatex"
async = require("async")
fs = require("fs")
_ = require("underscore")
concurentCompiles = 5
totalCompiles = 50
buildUrl = (path) -> "http://#{Settings.internal.clsi.host}:#{Settings.internal.clsi.port}/#{path}"
mainTexContent = fs.readFileSync("./bulk.tex", "utf-8")
compileTimes = []
failedCount = 0
getAverageCompileTime = ->
totalTime = _.reduce compileTimes, (sum, time)->
sum + time
, 0
return totalTime / compileTimes.length
makeRequest = (compileNumber, callback)->
bulkBodyCount = 7
bodyContent = ""
while --bulkBodyCount
bodyContent = bodyContent+=mainTexContent
startTime = new Date()
request.post {
url: buildUrl("project/loadcompile-#{compileNumber}/compile")
json:
compile:
resources: [
path: "main.tex"
content: """
\\documentclass{article}
\\begin{document}
#{bodyContent}
\\end{document}
"""
]
}, (err, response, body)->
if response.statusCode != 200
failedCount++
return callback("compile #{compileNumber} failed")
if err?
failedCount++
return callback("failed")
totalTime = new Date() - startTime
console.log totalTime+"ms"
compileTimes.push(totalTime)
callback(err)
jobs = _.map [1..totalCompiles], (i)->
return (cb)->
makeRequest(i, cb)
startTime = new Date()
async.parallelLimit jobs, concurentCompiles, (err)->
if err?
console.error err
console.log("total time taken = #{(new Date() - startTime)/1000}s")
console.log("total compiles = #{totalCompiles}")
console.log("concurent compiles = #{concurentCompiles}")
console.log("average time = #{getAverageCompileTime()/1000}s")
console.log("max time = #{_.max(compileTimes)/1000}s")
console.log("min time = #{_.min(compileTimes)/1000}s")
console.log("total failures = #{failedCount}")