Example #1
0
    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'
Example #2
0
    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"