Remove remote/

This commit is contained in:
Anders Ingemann 2014-11-25 20:44:00 +01:00
parent f8d79f06e3
commit 9fd30e2cc9
3 changed files with 0 additions and 188 deletions

View file

@ -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()

View file

@ -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 <port> Serve on specified port [default: 46675]
--callback-port <port> Connect callback to specified port [default: 46674]
-h, --help show this help
"""
return docopt(usage)
if __name__ == '__main__':
main()

View file

@ -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()