UNPKG

glutenfree

Version:

A profiler/loganalyzer for nginx/Cetrea Aw.

86 lines (65 loc) 2.11 kB
cluster = require("cluster") winston = require("winston") util = require("util") _ = require("underscore") nl = require("nodeload") logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)({'timestamp':true}) ] }) logger.info "PrWrkr##{cluster.worker.id}: online, waiting for input" # holds timeout reporter = {} # cluster id - holds id of master clusterId = "" # handle message, specifically "targeting" cluster.worker.on( "message" (msg) -> switch msg.subject when "targeting" logger.info "PrWorker##{cluster.worker.id}: targeting received (http://#{msg.server}:#{msg.port} w #{msg.user}:#{msg.password}), hitting #{msg.targeting.length} targets" clusterId = msg.clusterId # start hitting targets #hit(msg.server, msg.port, msg.user, msg.password, msg.targeting) nl.run( numClients: 10 targetRps: 100 timeLimit: 10 requestGenerator: (client) -> # select a target, targets most used functions r = Math.random()*100 target = _.find(msg.targeting, ((t) -> r < t.acc_percentage)) request = client.request( "GET" "/#{target.path}" { method: "GET" host: msg.server port: msg.port headers: target.headers auth: "#{msg.user}:#{msg.password}" } (res) -> console.log "---> hit" target.headers = "If-None-Match" : res.headers["etag"] || target?.headers?["If-None-Match"] ) request.end() ) # report back to master #reporter = report(msg.reportinterval || 10000) ) # report is an array containing all results which have not yet been shipped to master # handle disconnect cluster.worker.on( "disconnect", -> # cancel existing report clearTimeout(reporter) # report remaining report(0) logger.info "report, disconnect" process.exit(0) )