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}")