diff options
| author | Angus Salkeld <asalkeld@redhat.com> | 2012-09-11 19:43:04 +1000 |
|---|---|---|
| committer | Mark McLoughlin <markmc@redhat.com> | 2012-09-29 09:44:52 +0100 |
| commit | 18d8ca01542ff3fb2c16415f24447662f0cd9f6e (patch) | |
| tree | 41c6d97e8d1880bde88d8fde749d53ba593e5cd1 /openstack/common | |
| parent | 45d2b7c01e220d87860e485a49369cfe37dc1bfc (diff) | |
| download | oslo-18d8ca01542ff3fb2c16415f24447662f0cd9f6e.tar.gz oslo-18d8ca01542ff3fb2c16415f24447662f0cd9f6e.tar.xz oslo-18d8ca01542ff3fb2c16415f24447662f0cd9f6e.zip | |
Change wsgi Server class to Service
Also:
- use WritableLogger from common/log.py
Part of blueprint service-infrastructure
Change-Id: If41e592167bd4c308dd2a5d0226fcf3d8318f90d
Diffstat (limited to 'openstack/common')
| -rw-r--r-- | openstack/common/wsgi.py | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/openstack/common/wsgi.py b/openstack/common/wsgi.py index d1e621a..a8d6322 100644 --- a/openstack/common/wsgi.py +++ b/openstack/common/wsgi.py @@ -23,10 +23,9 @@ import eventlet.wsgi eventlet.patcher.monkey_patch(all=False, socket=True) -import logging -import sys import routes import routes.middleware +import sys import webob.dec import webob.exc from xml.dom import minidom @@ -34,21 +33,12 @@ from xml.parsers import expat from openstack.common import exception from openstack.common.gettextutils import _ +from openstack.common import log as logging from openstack.common import jsonutils +from openstack.common import service -LOG = logging.getLogger('wsgi') - - -class WritableLogger(object): - """A thin wrapper that responds to `write` and logs.""" - - def __init__(self, logger, level=logging.DEBUG): - self.logger = logger - self.level = level - - def write(self, msg): - self.logger.log(self.level, msg.strip("\n")) +LOG = logging.getLogger(__name__) def run_server(application, port): @@ -57,19 +47,39 @@ def run_server(application, port): eventlet.wsgi.server(sock, application) -class Server(object): - """Server class to manage multiple WSGI sockets and applications.""" +class Service(service.Service): + """ + Provides a Service API for wsgi servers. + + This gives us the ability to launch wsgi servers with the + Launcher classes in service.py. + """ def __init__(self, threads=1000): + super(Service, self).start() self.pool = eventlet.GreenPool(threads) def start(self, application, port, host='0.0.0.0', backlog=128): - """Run a WSGI server with the given application.""" + """Start serving this service using the provided server instance. + + :returns: None + + """ + super(Service, self).start() socket = eventlet.listen((host, port), backlog=backlog) self.pool.spawn_n(self._run, application, socket) + def stop(self): + """Stop serving this API. + + :returns: None + + """ + super(Service, self).stop() + def wait(self): """Wait until all servers have completed running.""" + super(Service, self).wait() try: self.pool.waitall() except KeyboardInterrupt: @@ -79,7 +89,7 @@ class Server(object): """Start a WSGI server in a new green thread.""" logger = logging.getLogger('eventlet.wsgi.server') eventlet.wsgi.server(socket, application, custom_pool=self.pool, - log=WritableLogger(logger)) + log=logging.WritableLogger(logger)) class Middleware(object): |
