diff --git a/remote/client.py b/remote/client.py deleted file mode 100755 index da3cc35..0000000 --- a/remote/client.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -import random -import Pyro4 - -# We need to set either a socket communication timeout, -# or use the select based server. Otherwise the daemon requestLoop -# will block indefinitely and is never able to evaluate the loopCondition. -Pyro4.config.COMMTIMEOUT = 0.5 - -NUM_WORKERS = 5 - -from ssh_wrapper import RemoteServer -srv = RemoteServer() -srv.start() - - -class CallbackHandler(object): - workdone = 0 - - def done(self, number): - print("callback: worker %d reports work is done!" % number) - CallbackHandler.workdone += 1 - - -class LogServer(object): - - def handle(self, record): - print('logging' + record) - # import logging - # log = logging.getLogger() - # (handler.handle(record) for handler in log.handlers) - - -with Pyro4.Daemon('localhost', port=srv.client_port, unixsocket=None) as daemon: - # register our callback handler - callback = CallbackHandler() - daemon.register(callback) - logger = LogServer() - daemon.register(logger) - - # contact the server and put it to work - - def serve(): - daemon.requestLoop(loopCondition=lambda: CallbackHandler.workdone < NUM_WORKERS) - from threading import Thread - thread = Thread(target=serve) - thread.start() - - print("creating a bunch of workers") - with Pyro4.core.Proxy("PYRO:srv@localhost:" + str(srv.server_port)) as server: - server.set_log_server(logger) - for _ in range(NUM_WORKERS): - worker = server.addworker(callback) # provide our callback handler! - # worker._pyroOneway.add("work") # to be able to run in the background - worker.work(0.5) - server.stop() - - print("waiting for all work complete...") - thread.join() - print("done!") - -srv.stop() diff --git a/remote/server.py b/remote/server.py deleted file mode 100755 index 081d66d..0000000 --- a/remote/server.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python - -import time -import Pyro4 -import logging -Pyro4.config.COMMTIMEOUT = 5 - -log = logging.getLogger(__name__) - -class Worker(object): - def __init__(self, number, callback): - self.number = number - self.callback = callback - log.info("Worker %d created" % self.number) - - def work(self, amount): - print("Worker %d busy..." % self.number) - time.sleep(amount) - print("Worker %d done. Informing callback client." % self.number) - self._pyroDaemon.unregister(self) - self.callback.done(self.number) # invoke the callback object - - -class LogForwarder(logging.Handler): - - def __init__(self, level=logging.NOTSET): - self.server = None - super(LogForwarder, self).__init__(level) - - def set_server(self, server): - self.server = server - - def emit(self, record): - if self.server is not None: - self.server.handle('hans') - - -class CallbackServer(object): - - def __init__(self): - self.number = 0 - self.serve = True - - def addworker(self, callback): - self.number += 1 - print("server: adding worker %d" % self.number) - worker = Worker(self.number, callback) - self._pyroDaemon.register(worker) # make it a Pyro object - return worker - - def stop(self): - print('called stop()') - self.serve = False - - def still_serve(self): - print('called still_serve()') - return self.serve - - def set_log_server(self, server): - import logging - log_forwarder = LogForwarder() - root = logging.getLogger() - root.addHandler(log_forwarder) - root.setLevel(logging.NOTSET) - log_forwarder.set_server(server) - - def test(self, msg): - import logging - root = logging.getLogger() - root.info(msg) - - -def main(): - opts = getopts() - with Pyro4.Daemon('localhost', port=int(opts['--listen-port']), unixsocket=None) as daemon: - obj = CallbackServer() - uri = daemon.register(obj, 'srv') - print uri - print("Server ready.") - daemon.requestLoop(loopCondition=lambda: obj.still_serve()) - - -def getopts(): - from docopt import docopt - usage = """bootstrap-vz-server - -Usage: bootstrap-vz-server [options] - -Options: - --listen-port Serve on specified port [default: 46675] - --callback-port Connect callback to specified port [default: 46674] - -h, --help show this help -""" - return docopt(usage) - -if __name__ == '__main__': - main() diff --git a/remote/ssh_wrapper.py b/remote/ssh_wrapper.py deleted file mode 100644 index f1f9d5d..0000000 --- a/remote/ssh_wrapper.py +++ /dev/null @@ -1,28 +0,0 @@ - - -class RemoteServer(object): - - def __init__(self): - import random - self.server_port = random.randrange(1024, 65535) - self.client_port = random.randrange(1024, 65535) - - def start(self): - import subprocess - - command = ['ssh', '-i', '/Users/anders/.vagrant.d/insecure_private_key', - '-t', # Force pseudo-tty allocation so that server.py quits when we close the connection - '-p', '2222', - '-L' + str(self.server_port) + ':localhost:' + str(self.server_port), - '-R' + str(self.client_port) + ':localhost:' + str(self.client_port), - 'vagrant@localhost', - '--', - 'sudo', '/root/bootstrap/remote/server.py', - '--listen-port', str(self.server_port), - '--callback-port', str(self.client_port)] - self.process = subprocess.Popen(args=command) - import time - time.sleep(2) - - def stop(self): - self.process.terminate()