/* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const request = require("request"); const Settings = require("settings-sharelatex"); const async = require("async"); const fs = require("fs"); const _ = require("underscore"); const concurentCompiles = 5; const totalCompiles = 50; const buildUrl = path => `http://${Settings.internal.clsi.host}:${Settings.internal.clsi.port}/${path}`; const mainTexContent = fs.readFileSync("./bulk.tex", "utf-8"); const compileTimes = []; let failedCount = 0; const getAverageCompileTime = function() { const totalTime = _.reduce(compileTimes, (sum, time)=> sum + time , 0); return totalTime / compileTimes.length; }; const makeRequest = function(compileNumber, callback){ let bulkBodyCount = 7; let bodyContent = ""; while (--bulkBodyCount) { bodyContent = (bodyContent+=mainTexContent); } const startTime = new Date(); return request.post({ url: buildUrl(`project/loadcompile-${compileNumber}/compile`), json: { compile: { resources: [{ path: "main.tex", content: `\ \\documentclass{article} \\begin{document} ${bodyContent} \\end{document}\ ` } ] } } }, function(err, response, body){ if (response.statusCode !== 200) { failedCount++; return callback(`compile ${compileNumber} failed`); } if (err != null) { failedCount++; return callback("failed"); } const totalTime = new Date() - startTime; console.log(totalTime+"ms"); compileTimes.push(totalTime); return callback(err); }); }; const jobs = _.map(__range__(1, totalCompiles, true), i=> cb=> makeRequest(i, cb) ); const startTime = new Date(); async.parallelLimit(jobs, concurentCompiles, function(err){ if (err != null) { 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`); return console.log(`total failures = ${failedCount}`); }); function __range__(left, right, inclusive) { let range = []; let ascending = left < right; let end = !inclusive ? right : ascending ? right + 1 : right - 1; for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) { range.push(i); } return range; }