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 SyncClientBase(object):

    def __init__(self, logger, server_ip):
        self.server_ip = server_ip
        self.logger = logger
        self.rpc = AES_RPC_Client(conf.KEY, logger)

    def connect(self, timeout=None):
        addr = (self.server_ip, conf.INF_PORT)
        if timeout:
            self.rpc.set_timeout(timeout)
        return self.rpc.connect(addr)

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

    def rsync(self, source, dest=None, speed=None, use_zip=False, log_file=None):
        """ speed is in Mbit/s """
        options = ("-avW", "--inplace", )
        if os.path.isdir(source):
            if source[-1] != "/":
                source += "/"
            if dest and dest[-1] != "/":
                dest += "/"
            if dest:
                options += ("--delete", )
        if log_file:
            options += ('--log-file', log_file)
        if not dest:
            dest = ""
        if speed:
            assert isinstance(speed, (int, float))
            options += ("--bwlimit", str(int(speed * 1000 / 8)), )
            use_zip = True
        if use_zip:
            options += ("-z", )

        cmd = ("rsync", ) + options + \
            (source,
             "rsync://%s:%s/%s/%s" % (self.server_ip,
                                      conf.RSYNC_PORT, RSYNC_SERVER_NAME, dest)
             )
        print cmd
        p = subprocess.Popen(cmd, stderr=subprocess.PIPE, close_fds=True)
        retcode = p.wait()
        if retcode:
            stderr = "\n".join(p.stderr.readlines())
        else:
            stderr = None
        p.stderr.close()
        return retcode, stderr
Beispiel #3
0
class SyncClientBase(object):
    def __init__(self, logger, server_ip):
        self.server_ip = server_ip
        self.logger = logger
        self.rpc = AES_RPC_Client(conf.KEY, logger)

    def connect(self, timeout=None):
        addr = (self.server_ip, conf.INF_PORT)
        if timeout:
            self.rpc.set_timeout(timeout)
        return self.rpc.connect(addr)

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

    def rsync(self,
              source,
              dest=None,
              speed=None,
              use_zip=False,
              log_file=None):
        """ speed is in Mbit/s """
        options = (
            "-avW",
            "--inplace",
        )
        if os.path.isdir(source):
            if source[-1] != "/":
                source += "/"
            if dest and dest[-1] != "/":
                dest += "/"
            if dest:
                options += ("--delete", )
        if log_file:
            options += ('--log-file', log_file)
        if not dest:
            dest = ""
        if speed:
            assert isinstance(speed, (int, float))
            options += (
                "--bwlimit",
                str(int(speed * 1000 / 8)),
            )
            use_zip = True
        if use_zip:
            options += ("-z", )

        cmd = ("rsync", ) + options + \
            (source,
             "rsync://%s:%s/%s/%s" % (self.server_ip,
                                      conf.RSYNC_PORT, RSYNC_SERVER_NAME, dest)
             )
        print cmd
        p = subprocess.Popen(cmd, stderr=subprocess.PIPE, close_fds=True)
        retcode = p.wait()
        if retcode:
            stderr = "\n".join(p.stderr.readlines())
        else:
            stderr = None
        p.stderr.close()
        return retcode, stderr