UNPKG

glutenfree

Version:

A profiler/loganalyzer for nginx/Cetrea Aw.

132 lines (115 loc) 3.76 kB
// Generated by CoffeeScript 1.6.1 (function() { var cluster, clusterId, hit, hitcount, hits, http, logger, report, reporter, util, winston, _; cluster = require("cluster"); winston = require("winston"); http = require("http"); util = require("util"); _ = require("underscore"); logger = new winston.Logger({ transports: [ new winston.transports.Console({ 'timestamp': true }) ] }); logger.info("PrWrkr#" + cluster.worker.id + ": online, waiting for input"); reporter = {}; clusterId = ""; cluster.worker.on("message", function(msg) { switch (msg.subject) { case "targeting": logger.info("PrWorker#" + cluster.worker.id + ": targeting received (http://" + msg.server + ":" + msg.port + " w " + msg.user + ":" + msg.password + "), hitting " + msg.targeting.length + " targets, pause set to " + msg.pause); http.globalAgent.maxSockets = 1024; clusterId = msg.clusterId; hit(msg.server, msg.port, msg.user, msg.password, msg.targeting, msg.pause); return reporter = report(msg.reportinterval || 10000); } }); hits = []; hitcount = 0; hit = function(server, port, user, password, targets, pause) { var r, req, t0, target; if (pause == null) { pause = 10; } r = Math.random() * 100; target = _.find(targets, (function(t) { return r < t.acc_percentage; })); if (target == null) { setTimeout(function() { return hit(server, port, user, password, targets, pause); }, pause); return; } t0 = Date.now(); req = http.get({ host: server, port: port, headers: target != null ? target.headers : void 0, auth: "" + user + ":" + password, path: "/" + (target != null ? target.path : void 0) }, function(res) { var _ref, _ref1; logger.debug("PrWrkr#" + cluster.worker.id + ": hit w status " + res.statusCode); if (target != null) { target.headers = { "If-None-Match": res.headers["etag"] || (target != null ? (_ref = target.headers) != null ? _ref["If-None-Match"] : void 0 : void 0), "Connection": "Keep-Alive" }; } hits.push({ type: "response", path: target != null ? target.path : void 0, status: res.statusCode, at: Date.now(), time: Date.now() - t0, worker: cluster != null ? (_ref1 = cluster.worker) != null ? _ref1.id : void 0 : void 0, cluster: clusterId }); return setTimeout(function() { return hit(server, port, user, password, targets, pause); }, pause); }); req.on("error", function(e) { hits.push({ type: "error", msg: e.message, path: target != null ? target.path : void 0, time: Date.now() - t0 }); return setTimeout(function() { return hit(server, port, user, password, targets, pause); }, pause); }); return req.end(); }; report = function(interval) { if (hits.length > 0) { logger.debug("PrWrkr#" + cluster.worker.id + ": sending report to master (" + hits.length + " hits)"); try { cluster.worker.send({ subject: "report", report: { hits: hits || [] } }); hits = []; } catch (err) { logger.error("PrWrkr#" + cluster.worker.id + ": Could not report to master."); } } if (interval > 0) { return reporter = setTimeout((function() { return report(interval); }), interval); } }; cluster.worker.on("disconnect", function() { clearTimeout(reporter); report(0); logger.info("report, disconnect"); return process.exit(0); }); }).call(this);