def main():

    key = "sddjou34324523432gh45t452354"
    server = AES_RPC_Server( 
            SERVER_ADDR,
            client_keys={'127.0.0.1': key},
            logger=Log("server", config=conf),
            )
    server.add_view(View())
    server.start(5)
    print "server started"
    def __run_server():
        print "run server"
        server.loop()
        return
    th = threading.Thread(target=__run_server)
    th.setDaemon(1)
    th.start()
    time.sleep(1)
    print "starting client"
    client = AES_RPC_Client(key, Log("client", config=conf))
    client.set_timeout(5)
    client.connect(SERVER_ADDR)
    print "connected"
    ret = client.call("foo", "aaa", arg2="bbb")
    assert ret == ("aaa", "bbb", {'dd': {'ee': 1}})
    val = AttrWrapper.wrap(ret)
    print "ret[2]['dd']['ee']", val[2].dd.ee
    print "foo => ret"
    try:
        client.call("bar")
    except Exception, e:
        print "bar", e
Beispiel #2
0
class SAAS_Client(object):

    def __init__(self, host_id, logger=None):
        self.rpc = AES_RPC_Client(conf.KEY, logger)
        self.host_id = int(host_id)

    def connect(self):
        return self.rpc.connect((conf.SAAS_HOST, conf.SAAS_PORT + 1))

    def close(self):
        self.rpc.close()

    def doing(self, cmd, vm_id):
        return self.rpc.call("doing", self.host_id, cmd, vm_id)

    def todo(self, cmd):
        return self.rpc.call("todo", self.host_id, cmd)

    def alarm(self, msg):
        self.rpc.call('alarm', msg)

    def host_list(self):
        return AttrWrapper.wrap(self.rpc.call("host_list"))

    def done(self, cmd, vm_id, state, message):
        return self.rpc.call("done", self.host_id, cmd, vm_id, int(state), str(message))

    def host_refresh(self, hd_remain, ram_remain, hd_total=0, ram_total=0):
        return self.rpc.call("host_refresh", self.host_id, int(hd_remain), int(ram_remain), int(hd_total), int(ram_total))

    def vps(self, vm_id):
        return AttrWrapper(self.rpc.call("vps", vm_id))

    def migrate_task(self, vm_id):
        return AttrWrapper(self.rpc.call("migrate_task", vm_id))
Beispiel #3
0
class VpsProxy(object):

    NGINX_TEMPLATE = """
server {
    listen      80;
    server_name %(host)s *.%(host)s;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header HOST $host.%(suffix)s;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location / {
        proxy_pass http://%(ip)s;
    }
}
"""

    
    def __init__(self):
        self.logger = Log("proxy", config=config)
        self.logger_rpc = Log("proxy_rpc", config=config)
        self.output_path = config.NGINX_CONF_PATH
        self.nginx_reload_cmd = config.NGINX_RELOAD_CMD
        self.rpc = AES_RPC_Client(_private.KEY, self.logger_rpc)

    def start(self):
        self.is_running = True

    def stop(self):
        self.is_running = False

    def loop(self):
        while self.is_running:
            self.gen_config()
            time.sleep(conf.RUN_INV)

    def reload_nginx(self):
        subprocess.check_output(self.nginx_reload_cmd)
        self.logger.info("nginx reloaded")
        print "nginx reloaded"

    def gen_config(self, force=False):
        domain_list = None
        try:
            self.rpc.connect(_private.SAAS_ADDR)
            try:
                domain_list = self.rpc.call("proxy_domain_list")
            finally:
                self.rpc.close()
        except Exception, e:
            self.logger.exception(e)
            print traceback.print_exc()
            return
        conf = []
        for i in domain_list:
            conf.append(self.NGINX_TEMPLATE % {'host':i["domain"], 'ip':i["ip"], 'suffix': _private.PROXY_DOMAIN_SUFFIX})
        content = "".join(conf)
        try:
            if not force and os.path.exists(self.output_path) and _md5_file(self.output_path) == _md5(content):
                print "skip the same"
                return
            f = open(self.output_path, "w")
            try:
                f.write(content)
            finally:
                f.close()
            self.logger.info("conf generated")
            self.reload_nginx()
        except Exception, e:
            self.logger.exception(e)
            print traceback.print_exc()
Beispiel #4
0
class VpsProxy(object):

    NGINX_TEMPLATE = """
server {
    listen      80;
    server_name %(host)s *.%(host)s;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header HOST $host.%(suffix)s;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location / {
        proxy_pass http://%(ip)s;
    }
}
"""

    def __init__(self):
        self.logger = Log("proxy", config=config)
        self.logger_rpc = Log("proxy_rpc", config=config)
        self.output_path = config.NGINX_CONF_PATH
        self.nginx_reload_cmd = config.NGINX_RELOAD_CMD
        self.rpc = AES_RPC_Client(_private.KEY, self.logger_rpc)

    def start(self):
        self.is_running = True

    def stop(self):
        self.is_running = False

    def loop(self):
        while self.is_running:
            self.gen_config()
            time.sleep(conf.RUN_INV)

    def reload_nginx(self):
        subprocess.check_output(self.nginx_reload_cmd)
        self.logger.info("nginx reloaded")
        print "nginx reloaded"

    def gen_config(self, force=False):
        domain_list = None
        try:
            self.rpc.connect(_private.SAAS_ADDR)
            try:
                domain_list = self.rpc.call("proxy_domain_list")
            finally:
                self.rpc.close()
        except Exception, e:
            self.logger.exception(e)
            print traceback.print_exc()
            return
        conf = []
        for i in domain_list:
            conf.append(
                self.NGINX_TEMPLATE % {
                    'host': i["domain"],
                    'ip': i["ip"],
                    'suffix': _private.PROXY_DOMAIN_SUFFIX
                })
        content = "".join(conf)
        try:
            if not force and os.path.exists(self.output_path) and _md5_file(
                    self.output_path) == _md5(content):
                print "skip the same"
                return
            f = open(self.output_path, "w")
            try:
                f.write(content)
            finally:
                f.close()
            self.logger.info("conf generated")
            self.reload_nginx()
        except Exception, e:
            self.logger.exception(e)
            print traceback.print_exc()