def results(self, shortResults=False): urlSuffix = "" if shortResults == True: urlSuffix += "?short=true" request = RestApiClient.GET(self.url + "/job/%d/results" % self.jobId + urlSuffix, credentials=self.credentials) yield request returnValue(JobResults(json.loads(request.result)))
def create(self): request = RestApiClient.POST(self.url + "/job", postdata=self.jobSpec.toJson(), credentials=self.credentials) yield request print request.result self.jobId = json.loads(request.result) if self.jobId != False: self.jobId = int(self.jobId) returnValue(self.jobId) else: raise Exception
def startServer(port): logging.basicConfig(level=eval("logging.%s" % config.parameter("log", "level"))) log = logging.getLogger("main") twistedLog.startLogging(sys.stderr) # since master servers will ping back to the slave upon connection, # start listening for HTTP requests before trying to connect up to the master log.debug("Listening on port %s, starting reactor" % config.parameter("network", "port")) reactor.listenTCP(config.parameter("network", "port", type=int), createRestApi()) if config.parameter("misc", "standalone", type=bool) != True: # connect to master server in INI file scheme = config.parameter("master", "scheme") host = config.parameter("master", "host") port = config.parameter("master", "port", type=int) path = config.parameter("master", "path") slaveSpec = SlaveSpec() slaveSpec.host = socket.gethostname() slaveSpec.port = config.parameter("network", "port", type=int) slaveSpec.path = "" slaveSpec.maxRequestsPerSec = config.parameter("network", "clients.max", type=int) masterUrl = "%s://%s:%d/%s/slave" % (scheme, host, port, path) log.info("Connecting to master: %s" % masterUrl) try: request = RestApiClient.POST(str(masterUrl), slaveSpec.toJson(), timeout=10, credentials=("slave", "slave")) yield request except: log.error("Could not connect to master. Exiting") reactor.stop() return slaveId = int(request.result) log.info("Connected to master. This server is slave ID %d" % slaveId)
def poll(self, wait=1): if self.task is None: self.task = LoopingCall(self.poll) self.task.start(wait) else: request = RestApiClient.GET(self.url + "/job/%d/state" % self.jobId, credentials=self.credentials) yield request if int(request.result) == JobState.COMPLETE: if self.callback is not None: self.task.stop() self.callback() elif int(request.result) == JobState.ERROR: if self.errback is not None: self.task.stop() self.errback()
def start(self): request = RestApiClient.POST(self.url + "/job/%d/start" % self.jobId, credentials=self.credentials) yield request returnValue(request.result)
def jobResults(self, jobId, shortResults): if shortResults == True: return RestApiClient.GET( self.url("/job/%d/results?short=true" % jobId)) else: return RestApiClient.GET(self.url("/job/%d/results" % jobId))
def heartbeat(self): return RestApiClient.GET(self.url("/status/heartbeat"))
def jobState(self, jobId): return RestApiClient.GET(self.url("/job/%d/state" % jobId))
def stopJob(self, jobId): return RestApiClient.POST(self.url("/job/%d/stop" % jobId))
def resumeJob(self, jobId): return RestApiClient.POST(self.url("/job/%d/resume" % jobId))
def pauseJob(self, jobId): return RestApiClient.POST(self.url("/job/%d/pause" % jobId))
def createJob(self, jobSpec): log.debug("Creating job with spec %s" % jobSpec) return RestApiClient.POST(self.url("/job"), postdata=jobSpec.toJson())