mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
Remove remote/
This commit is contained in:
parent
f8d79f06e3
commit
9fd30e2cc9
3 changed files with 0 additions and 188 deletions
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
Loading…
Add table
Reference in a new issue