def POST(self): # disable nginx buffering web.header('X-Accel-Buffering', 'no') i = web.input(fast=False) #get app config if not exist will create it servers = get_servers(i.app_name) if not servers: servers = ['deploy'] save_app_option(i.app_name, 'deploy_servers', 'deploy') yield "%d:%s" % (logging.INFO, render_ok("Application allowed to deploy those servers")) yield "%d:%s" % (logging.INFO, render_ok(','.join(servers))) servers = escape_servers(servers) result = {} data = {'app_name': i.app_name, 'app_url': i.app_url} for server in servers: url = SUFFIX % server try: opener = FancyURLopener() f = opener.open(url, urlencode(data)) line = '' # to avoid NameError for line if f has no output at all. for line in iter(f.readline, ''): logger.info(line) yield line if not any(word in line for word in ['succeeded', 'failed']): result[server] = 'Failed' else: result[server] = 'Succeeded' except Exception, e: yield "%d:%s" % (logging.ERROR, render_err(str(e))) result[server] = 'Failed'
def POST(self): try: data = json.loads(web.data()) appname = data["application"] # get app config if not exist will create it get_app_uid(appname) is_exist = load_app_option(appname, "mysql") if data.get("passwd"): del data["passwd"] if is_exist: data["passwd"] = is_exist data = json.dumps(data) cmd = ["sudo", "-u", "sheep", "LD_LIBRARY_PATH=%s" % DEFALUT_LIB_DIR, "/usr/local/bin/farm-syncdb"] p = Popen(cmd, stdout=PIPE, stderr=STDOUT, stdin=PIPE) p.stdin.write(data) p.stdin.close() pre_log = "" traces = [] for line in p.stdout: try: levelno, line = line.split(":", 1) levelno = int(levelno) except ValueError: levelno = logging.DEBUG traces.append((time.time(), line)) if not pre_log: pre_log = "%d:%s" % (levelno, line) else: yield pre_log pre_log = "%d:%s" % (levelno, line) if p.wait() == 0: passwd = pre_log.split(":", 1)[1] if not is_exist: save_app_option(appname, "mysql", passwd.strip()) yield "%d:Syncdb succeeded.\n" % (logging.INFO) else: yield "%d:Syncdb failed. traces followed.\n\n\n" % (logging.ERROR) for timestamp, line in traces: yield "%d:%s %s" % (logging.ERROR, time.strftime("%H:%M:%S", time.localtime(timestamp)), line) except: logger.exception("error occured.") yield "Syncdb failed"