def do_GET(self): parsed_path = urlparse.urlparse(self.path) message_parts = [ 'CLIENT VALUES:', 'client_address=%s (%s)' % (self.client_address, self.address_string()), 'command=%s' % self.command, 'path=%s' % self.path, 'real path=%s' % parsed_path.path, 'query=%s' % parsed_path.query, 'request_version=%s' % self.request_version, '', 'SERVER VALUES:', 'server_type=%s' % "host server", 'server_version=%s' % self.server_version, 'sys_version=%s' % self.sys_version, 'protocol_version=%s' % self.protocol_version, '', 'HEADERS RECEIVED:', ] for name, value in sorted(self.headers.items()): message_parts.append('%s=%s' % (name, value.rstrip())) message_parts.append('') message = '\r\n'.join(message_parts) subpath = self.path.split("/") if self.path == "/prepare": prepare_timer = perf.Timer(logging) self.server.superstep_count += 1 prepare_timer.start("prepare-%d" % self.server.superstep_count) # move qin to qact qinname = "snapw.%d/qin" % (self.pid) qactname = "snapw.%d/qact" % (self.pid) # rename an existing qact if os.path.exists(qactname): removed = False if not self.config['debug']: try: shutil.rmtree(qactname) logging.debug("removed dir %s" % qactname) removed = True except: logging.error("error on removing dir %s" % qactname) if not removed: t = time.time() s = time.strftime("%Y%m%d-%H%M%S", time.localtime(t)) mus = "%06d" % (t*1000000 - int(t)*1000000) qactnewname = "%s-%s-%s" % (qactname, s, mus) os.rename(qactname, qactnewname) logging.debug("renamed %s to %s" % (qactname, qactnewname)) # get the number of active tasks, rename existing qin numtasks = 0 if os.path.exists(qinname): os.rename(qinname, qactname) active = os.listdir(qactname) numtasks = len(active) # create new qin config.mkdir_p(qinname) logging.info("preparing next step: %s, %s" % \ (qinname, qactname)) # send ready to master client.ready(self.master, self.id, numtasks) self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() prepare_timer.stop("prepare-%d" % self.server.superstep_count) return elif self.path == "/quit": self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() SYS_STATS = False # set the flag to terminate the server self.server.running = False self.server.self_dummy() return elif self.path == "/getkv": logging.debug("getting kv file") self.send_response(200) if self.server.superstep_count > 1: body = json.dumps(get_kv_file("supervisor")) self.send_header('Content-Length', len(body)) self.end_headers() self.wfile.write(body) else: self.send_header('Content-Length', len("None")) self.end_headers() self.wfile.write("None") return elif self.path == "/dummy": logging.debug("dummy request") self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() return elif self.path == "/step": logging.info("execute next step") self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() # TODO, implement null action, # skip execution if there are no tasks to execute, # qact does not exist # get the tasks to execute qactname = "snapw.%d/qact" % (self.pid) active = [] if os.path.exists(qactname): active = os.listdir(qactname) logging.debug("active tasks %s" % (str(active))) self.qactname = qactname self.active = active # the task list # start a thread to execute the work tasks t = threading.Thread(target=Execute, args=(self, )) t.start() return elif self.path == "/config": logging.debug("get configuration") body = json.dumps(self.config) self.send_response(200) self.send_header('Content-Length', len(body)) self.end_headers() self.wfile.write(body) return elif self.path == "/quit": logging.info("terminate execution") SYS_STATS = False self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() sys.exit(0) self.send_response(200) self.end_headers() self.wfile.write(message) return
def do_GET(self): #print "GET path", self.path parsed_path = urlparse.urlparse(self.path) message_parts = [ 'CLIENT VALUES:', 'client_address=%s (%s)' % (self.client_address, self.address_string()), 'command=%s' % self.command, 'path=%s' % self.path, 'real path=%s' % parsed_path.path, 'query=%s' % parsed_path.query, 'request_version=%s' % self.request_version, '', 'SERVER VALUES:', 'server_type=%s' % "host server", 'server_version=%s' % self.server_version, 'sys_version=%s' % self.sys_version, 'protocol_version=%s' % self.protocol_version, '', 'HEADERS RECEIVED:', ] for name, value in sorted(self.headers.items()): message_parts.append('%s=%s' % (name, value.rstrip())) message_parts.append('') message = '\r\n'.join(message_parts) #print message #self.flog.write(message) #self.flog.flush() subpath = self.path.split("/") #print subpath if self.path == "/prepare": # move qin to qact qinname = "snapw.%d/qin" % (self.pid) qactname = "snapw.%d/qact" % (self.pid) # rename an existing qact qactnewname = "none" if os.path.exists(qactname): t = time.time() s = time.strftime("%Y%m%d-%H%M%S", time.localtime(t)) mus = "%06d" % (t*1000000 - int(t)*1000000) qactnewname = "%s-%s-%s" % (qactname, s, mus) os.rename(qactname, qactnewname) # get the number of active tasks, rename existing qin numtasks = 0 if os.path.exists(qinname): os.rename(qinname, qactname) active = os.listdir(qactname) numtasks = len(active) # create new qin config.mkdir_p(qinname) line = "preparing next step: %s, %s, %s\n" % ( qinname, qactname, qactnewname) self.flog.write(line) self.flog.flush() # send ready to master client.ready(self.master, self.id, numtasks) self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() return elif self.path == "/quit": self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() # set the flag to terminate the server self.server.running = False self.server.self_dummy() return elif self.path == "/dummy": print "dummy request" self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() return elif self.path == "/step": line = "execute next step\n" self.flog.write(line) self.flog.flush() self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() # TODO, implement null action, # skip execution if there are no tasks to execute, # qact does not exist # get the tasks to execute qactname = "snapw.%d/qact" % (self.pid) active = [] if os.path.exists(qactname): active = os.listdir(qactname) line = "active tasks %s\n" % (str(active)) self.flog.write(line) self.flog.flush() self.qactname = qactname self.active = active # start a thread to execute the work tasks t = threading.Thread(target=Execute, args=(self, )) t.start() return elif self.path == "/config": line = "get configuration\n" self.flog.write(line) self.flog.flush() body = simplejson.dumps(self.config) self.send_response(200) self.send_header('Content-Length', len(body)) self.end_headers() self.wfile.write(body) return elif self.path == "/quit": line = "terminate execution\n" self.flog.write(line) self.flog.flush() self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() sys.exit(0) self.send_response(200) #self.send_header('Last-Modified', self.date_time_string(time.time())) self.end_headers() self.wfile.write(message) return
def do_GET(self): #print "GET path", self.path parsed_path = urlparse.urlparse(self.path) message_parts = [ 'CLIENT VALUES:', 'client_address=%s (%s)' % (self.client_address, self.address_string()), 'command=%s' % self.command, 'path=%s' % self.path, 'real path=%s' % parsed_path.path, 'query=%s' % parsed_path.query, 'request_version=%s' % self.request_version, '', 'SERVER VALUES:', 'server_type=%s' % "host server", 'server_version=%s' % self.server_version, 'sys_version=%s' % self.sys_version, 'protocol_version=%s' % self.protocol_version, '', 'HEADERS RECEIVED:', ] for name, value in sorted(self.headers.items()): message_parts.append('%s=%s' % (name, value.rstrip())) message_parts.append('') message = '\r\n'.join(message_parts) #print message #self.flog.write(message) #self.flog.flush() subpath = self.path.split("/") #print subpath if self.path == "/prepare": # move qin to qact qinname = "snapw.%d/qin" % (self.pid) qactname = "snapw.%d/qact" % (self.pid) # rename an existing qact qactnewname = "none" if os.path.exists(qactname): t = time.time() s = time.strftime("%Y%m%d-%H%M%S", time.localtime(t)) mus = "%06d" % (t * 1000000 - int(t) * 1000000) qactnewname = "%s-%s-%s" % (qactname, s, mus) os.rename(qactname, qactnewname) # get the number of active tasks, rename existing qin numtasks = 0 if os.path.exists(qinname): os.rename(qinname, qactname) active = os.listdir(qactname) numtasks = len(active) # create new qin config.mkdir_p(qinname) line = "preparing next step: %s, %s, %s\n" % (qinname, qactname, qactnewname) self.flog.write(line) self.flog.flush() # send ready to master client.ready(self.master, self.id, numtasks) self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() return elif self.path == "/quit": self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() # set the flag to terminate the server self.server.running = False self.server.self_dummy() return elif self.path == "/dummy": print "dummy request" self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() return elif self.path == "/step": line = "execute next step\n" self.flog.write(line) self.flog.flush() self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() # TODO, implement null action, # skip execution if there are no tasks to execute, # qact does not exist # get the tasks to execute qactname = "snapw.%d/qact" % (self.pid) active = [] if os.path.exists(qactname): active = os.listdir(qactname) line = "active tasks %s\n" % (str(active)) self.flog.write(line) self.flog.flush() self.qactname = qactname self.active = active # start a thread to execute the work tasks t = threading.Thread(target=Execute, args=(self, )) t.start() return elif self.path == "/config": line = "get configuration\n" self.flog.write(line) self.flog.flush() body = simplejson.dumps(self.config) self.send_response(200) self.send_header('Content-Length', len(body)) self.end_headers() self.wfile.write(body) return elif self.path == "/quit": line = "terminate execution\n" self.flog.write(line) self.flog.flush() self.send_response(200) self.send_header('Content-Length', 0) self.end_headers() sys.exit(0) self.send_response(200) #self.send_header('Last-Modified', self.date_time_string(time.time())) self.end_headers() self.wfile.write(message) return