glutenfree
Version:
A profiler/loganalyzer for nginx/Cetrea Aw.
132 lines (115 loc) • 3.76 kB
JavaScript
// 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);