summaryrefslogtreecommitdiffstats
path: root/openstack/common
diff options
context:
space:
mode:
authorAngus Salkeld <asalkeld@redhat.com>2012-09-11 19:43:04 +1000
committerMark McLoughlin <markmc@redhat.com>2012-09-29 09:44:52 +0100
commit18d8ca01542ff3fb2c16415f24447662f0cd9f6e (patch)
tree41c6d97e8d1880bde88d8fde749d53ba593e5cd1 /openstack/common
parent45d2b7c01e220d87860e485a49369cfe37dc1bfc (diff)
downloadoslo-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.py46
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):