def createJob(self, username, jobSpec): jobNo = self._getJobNo() job = JobPerspective(jobNo, jobSpec) self.jobs[jobNo] = job user = yield UserManager.get(username) log.debug("Creating job %d for user %s... connecting slave servers" % (jobNo, user.userSpec.username)) # allocate a bunch of slaves here slaves = yield SlaveAllocator.allocate(jobSpec) log.debug("Using slaves: %s" % slaves) # divide the client function to spread the load over all slaves in the set clientFunctionPerSlave = "(%s)/%s" % (jobSpec.clientFunction, len(slaves)) transferLimitPerSlave = jobSpec.transferLimit / len(slaves) modifiedJobSpec = JobSpec(jobSpec.toJson()) modifiedJobSpec.clientFunction = clientFunctionPerSlave modifiedJobSpec.transferLimit = transferLimitPerSlave deferred = Deferred() slaveRequests = [] for slave in slaves: request = slave.createJob(modifiedJobSpec) request.addCallback(self._createJobSlaveCallback, slave) slaveRequests.append(request) deferredList = DeferredList(slaveRequests) deferredList.addCallback(self._createJobCallback, jobNo, user, deferred) yield deferredList returnValue(jobNo)
def POST(self, request): request.content.seek(0, 0) jobSpecObj = JobSpec(json.loads(request.content.read())) if not jobSpecObj.validate(): raise Http400, "Invalid request" jobId = Controller.createJob(jobSpecObj) self.putChild("%d" % jobId, JobNode()) return jobId
def POST(self, request): request.content.seek(0, 0) jobSpecObj = JobSpec(json.loads(request.content.read())) if not jobSpecObj.validate(): raise Http400, "Invalid request" log.debug("Creating job, user: %s" % request.getUser()) deferred = Orchestrator.createJob(request.getUser(), jobSpecObj) deferred.addCallback(self.postCallback, request) deferred.addErrback(self.postErrback, request) return NOT_DONE_YET
def createJobSpec(self): jobSpec = JobSpec() jobSpec.profile = JobSpec.JobProfile.HAMMER jobSpec.requests = { "http://localhost:80/foo": { "method": "GET", "postdata": None, "cookies": {} } } jobSpec.duration = 60 jobSpec.transferLimit = 1024**3 jobSpec.statsInterval = 1 jobSpec.timeout = 10 jobSpec.clientFunction = "100" return jobSpec
def runClient(options): @inlineCallbacks def results(): r = client.results() yield r print r.result print "Length of result is %.2fKB" % (len(str(r.result)) / 1024) reactor.stop() print "Running client" jobSpec = JobSpec() jobSpec.requests = { options.target: { "method": "GET", "postdata": None, "cookies": {}, }, } jobSpec.duration = options.duration jobSpec.transferLimit = 1024**3 jobSpec.profile = options.profile jobSpec.clientFunction = options.function jobSpec.statsInterval = 1 jobSpec.timeout = 10 print jobSpec client = BasicClient(options.url, jobSpec, username=options.username, password=options.password, callback=results, errback=reactor.stop) try: r = client.create() yield r r = client.start() yield r r = client.poll() yield r except: reactor.stop()